windowing_qt 0.17.5

Implementation of windowing_api using QT Framework
use crate::FUISystemError;

use super::qt_wrapper::{QClipboard, QString};

pub enum ClipboardMode {
    Clipboard,
    Selection,
    FindBuffer,
}

pub struct Clipboard {
    pub(crate) qclipboard: QClipboard,
}

impl Clipboard {
    pub fn set_text(&self, text: &str, mode: ClipboardMode) -> Result<(), FUISystemError> {
        let qtext = QString::from_str(&text)?;
        let mode = convert_mode(mode);
        self.qclipboard.set_text(&qtext, mode);
        Ok(())
    }

    pub fn get_text(&self, mode: ClipboardMode) -> Option<String> {
        let mode = convert_mode(mode);
        let qstring = self.qclipboard.text(mode);
        let result = qstring.as_string().unwrap_or_default();
        if result.is_empty() {
            None
        } else {
            Some(result)
        }
    }
}

fn convert_mode(mode: ClipboardMode) -> i32 {
    let mode = match mode {
        ClipboardMode::Clipboard => 0,
        ClipboardMode::Selection => 1,
        ClipboardMode::FindBuffer => 2,
    };
    mode
}