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 }