tool_docking.rs - icy_draw - icy_draw is the successor to mystic draw. fork / mirror
 (HTM) git clone https://git.drkhsh.at/icy_draw.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tool_docking.rs (1489B)
       ---
            1 use std::sync::Arc;
            2 
            3 use eframe::egui::{self, WidgetText};
            4 use egui::mutex::Mutex;
            5 
            6 use crate::{Document, Message};
            7 
            8 pub struct ToolTab {
            9     pub doc: Box<dyn ToolWindow>,
           10 }
           11 impl ToolTab {
           12     pub(crate) fn new<T: 'static + ToolWindow>(tool_window: T) -> Self {
           13         Self { doc: Box::new(tool_window) }
           14     }
           15 }
           16 
           17 #[derive(Default)]
           18 pub struct ToolBehavior {
           19     pub active_document: Option<Arc<Mutex<Box<dyn Document>>>>,
           20     pub message: Option<Message>,
           21 }
           22 
           23 impl egui_tiles::Behavior<ToolTab> for ToolBehavior {
           24     fn tab_title_for_pane(&mut self, pane: &ToolTab) -> egui::WidgetText {
           25         let title = pane.doc.get_title();
           26 
           27         WidgetText::RichText(egui::RichText::new(title).small())
           28     }
           29 
           30     fn pane_ui(&mut self, ui: &mut egui::Ui, _tile_id: egui_tiles::TileId, pane: &mut ToolTab) -> egui_tiles::UiResponse {
           31         let message = pane.doc.show_ui(ui, self.active_document.clone());
           32         if self.message.is_none() {
           33             self.message = message;
           34         }
           35         egui_tiles::UiResponse::None
           36     }
           37 
           38     fn simplification_options(&self) -> egui_tiles::SimplificationOptions {
           39         egui_tiles::SimplificationOptions {
           40             all_panes_must_have_tabs: true,
           41             ..Default::default()
           42         }
           43     }
           44 
           45     fn has_close_buttons(&self) -> bool {
           46         false
           47     }
           48 }
           49 
           50 pub trait ToolWindow {
           51     fn get_title(&self) -> String;
           52 
           53     fn show_ui(&mut self, ui: &mut egui::Ui, active_document: Option<Arc<Mutex<Box<dyn Document>>>>) -> Option<Message>;
           54 }