fui_core 0.18.0

Core library of FUI MVVM UI Framework
Documentation
use crate::WindowService;
use std::{rc::Rc, rc::Weak};

use super::{ClipboardService, FileDialogService};

#[derive(Clone)]
pub struct Services {
    window_service: Weak<dyn WindowService>,
    clipboard_service: Rc<dyn ClipboardService>,
    file_dialog_service: Rc<dyn FileDialogService>,
}

impl Services {
    pub fn new(
        window_service: &Rc<dyn WindowService>,
        clipboard_service: Rc<dyn ClipboardService>,
        file_dialog_service: Rc<dyn FileDialogService>,
    ) -> Self {
        Self {
            window_service: Rc::downgrade(window_service),
            clipboard_service,
            file_dialog_service,
        }
    }

    pub fn get_clipboard_service(&self) -> Rc<dyn ClipboardService> {
        self.clipboard_service.clone()
    }

    pub fn get_file_dialog_service(&self) -> Rc<dyn FileDialogService> {
        self.file_dialog_service.clone()
    }

    pub fn get_window_service(&self) -> Option<Rc<dyn WindowService>> {
        self.window_service.upgrade()
    }
}