diff --git a/src/ui/app.rs b/src/ui/app.rs index 902e5860bc472feb991261d1eb49c62519a111fd..199d195db146ae8c6c97c1b5b555385e69407996 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -66,18 +66,18 @@ impl eframe::App for App { ((Modifiers::NONE, Key::V), PaneAction::SplitV), ((Modifiers::NONE, Key::H), PaneAction::SplitH), ((Modifiers::NONE, Key::C), PaneAction::Close), - ( - (Modifiers::NONE, Key::R), - PaneAction::ReplaceThroughGallery(Some(hovered_tile)), - ), + ((Modifiers::NONE, Key::R), PaneAction::ReplaceThroughGallery), ((Modifiers::SHIFT, Key::Escape), PaneAction::Maximize), ((Modifiers::NONE, Key::Escape), PaneAction::Exit), ]; - pane_action = pane_action.or(shortcuts::map_to_action(ctx, &key_action_pairs[..])); + pane_action = + pane_action + .or(shortcuts::map_to_action(ctx, &key_action_pairs[..]) + .map(|a| (hovered_tile, a))); } // If an action was triggered, we consume it - if let Some(action) = pane_action.take() { + if let Some((tile_id, action)) = pane_action.take() { match action { PaneAction::SplitH => { if let Some(hovered_tile) = hovered_pane { @@ -132,15 +132,15 @@ impl eframe::App for App { } } } - PaneAction::Replace(tile_id, new_pane) => { + PaneAction::Replace(new_pane) => { debug!( "Called Replace on tile {:?} with pane {:?}", tile_id, new_pane ); panes_tree.tiles.insert(tile_id, Tile::Pane(*new_pane)); } - PaneAction::ReplaceThroughGallery(Some(source_tile)) => { - self.widget_gallery.replace_tile(source_tile); + PaneAction::ReplaceThroughGallery => { + self.widget_gallery.replace_tile(tile_id); } PaneAction::Maximize => { // This is a toggle: if there is not currently a maximized pane, @@ -170,7 +170,6 @@ impl eframe::App for App { self.maximized_pane = None; } } - _ => panic!("Unable to handle action"), } } @@ -225,7 +224,7 @@ impl eframe::App for App { egui::CentralPanel::default().show(ctx, |ui| { if let Some(maximized_pane) = self.maximized_pane { if let Some(Tile::Pane(pane)) = panes_tree.tiles.get_mut(maximized_pane) { - maximized_pane_ui(ui, maximized_pane, pane); + maximized_pane_ui(ui, pane); } else { panic!("Maximized pane not found in tree!"); } @@ -400,7 +399,7 @@ impl AppState { /// Behavior for the tree of panes in the app #[derive(Default)] pub struct AppBehavior { - pub action: Option<PaneAction>, + pub action: Option<(TileId, PaneAction)>, } impl Behavior<Pane> for AppBehavior { @@ -413,10 +412,10 @@ impl Behavior<Pane> for AppBehavior { let PaneResponse { action_called, drag_response, - } = pane.ui(ui, tile_id); + } = pane.ui(ui); // Capture the action and store it to be consumed in the update function if let Some(action_called) = action_called { - self.action = Some(action_called); + self.action = Some((tile_id, action_called)); } drag_response } @@ -456,8 +455,8 @@ pub enum PaneAction { SplitH, SplitV, Close, - Replace(TileId, Box<Pane>), - ReplaceThroughGallery(Option<TileId>), + Replace(Box<Pane>), + ReplaceThroughGallery, Maximize, Exit, } diff --git a/src/ui/panes.rs b/src/ui/panes.rs index 5d031f3abf6888b69894e3d6899ea776eb9a8696..1bec4dfe618a45380e44fa8e140420804929ccb0 100644 --- a/src/ui/panes.rs +++ b/src/ui/panes.rs @@ -4,7 +4,7 @@ mod pid_drawing_tool; mod plot; mod valve_control; -use egui_tiles::TileId; +use egui::Ui; use enum_dispatch::enum_dispatch; use serde::{Deserialize, Serialize}; use strum_macros::{self, EnumIter, EnumMessage}; @@ -27,7 +27,7 @@ impl Pane { #[enum_dispatch(PaneKind)] pub trait PaneBehavior { /// Renders the UI of the pane. - fn ui(&mut self, ui: &mut egui::Ui, tile_id: TileId) -> PaneResponse; + fn ui(&mut self, ui: &mut Ui) -> PaneResponse; /// Whether the pane contains the pointer. fn contains_pointer(&self) -> bool; @@ -53,8 +53,8 @@ pub trait PaneBehavior { } impl PaneBehavior for Pane { - fn ui(&mut self, ui: &mut egui::Ui, tile_id: TileId) -> PaneResponse { - self.pane.ui(ui, tile_id) + fn ui(&mut self, ui: &mut Ui) -> PaneResponse { + self.pane.ui(ui) } fn contains_pointer(&self) -> bool { diff --git a/src/ui/panes/default.rs b/src/ui/panes/default.rs index e4d1befeda37b7cca5ed8d10cd23c3a18d81527e..63eb9d753929847dd2d65ba44e987efce058e618 100644 --- a/src/ui/panes/default.rs +++ b/src/ui/panes/default.rs @@ -1,4 +1,5 @@ use super::PaneBehavior; +use egui::Ui; use serde::{Deserialize, Serialize}; use tracing::debug; @@ -26,7 +27,7 @@ impl PartialEq for DefaultPane { impl PaneBehavior for DefaultPane { #[profiling::function] - fn ui(&mut self, ui: &mut egui::Ui, tile_id: egui_tiles::TileId) -> PaneResponse { + fn ui(&mut self, ui: &mut Ui) -> PaneResponse { let mut response = PaneResponse::default(); let parent = vertically_centered(ui, &mut self.centering_memo, |ui| { @@ -40,7 +41,7 @@ impl PaneBehavior for DefaultPane { debug!("Horizontal Split button clicked"); } if ui.button("Widget Gallery").clicked() { - response.set_action(PaneAction::ReplaceThroughGallery(Some(tile_id))); + response.set_action(PaneAction::ReplaceThroughGallery); } }) .response diff --git a/src/ui/panes/messages_viewer.rs b/src/ui/panes/messages_viewer.rs index 2c8a54f5e0c796dba09e932fee105fc99ee07ed1..628f2d12ec63ae8d73188d74df9a58b00606cd8f 100644 --- a/src/ui/panes/messages_viewer.rs +++ b/src/ui/panes/messages_viewer.rs @@ -19,7 +19,7 @@ impl PartialEq for MessagesViewerPane { impl PaneBehavior for MessagesViewerPane { #[profiling::function] - fn ui(&mut self, ui: &mut egui::Ui, _tile_id: egui_tiles::TileId) -> PaneResponse { + fn ui(&mut self, ui: &mut egui::Ui) -> PaneResponse { let mut response = PaneResponse::default(); let label = ui.add_sized(ui.available_size(), Label::new("This is a label")); self.contains_pointer = label.contains_pointer(); diff --git a/src/ui/panes/pid_drawing_tool.rs b/src/ui/panes/pid_drawing_tool.rs index 6f7695ebc98510a0f467e500dcae13020590faa3..1a7ec73dc7a56f3c0e9da23be78a635afe921bf5 100644 --- a/src/ui/panes/pid_drawing_tool.rs +++ b/src/ui/panes/pid_drawing_tool.rs @@ -8,7 +8,6 @@ use core::f32; use egui::{ Button, Color32, Context, CursorIcon, PointerButton, Response, Sense, Theme, Ui, Widget, }; -use egui_tiles::TileId; use elements::Element; use glam::Vec2; use grid::GridInfo; @@ -83,7 +82,7 @@ impl PartialEq for PidPane { } impl PaneBehavior for PidPane { - fn ui(&mut self, ui: &mut egui::Ui, _: TileId) -> PaneResponse { + fn ui(&mut self, ui: &mut Ui) -> PaneResponse { let mut pane_response = PaneResponse::default(); let theme = PidPane::find_theme(ui.ctx()); diff --git a/src/ui/panes/plot.rs b/src/ui/panes/plot.rs index 42444abb31fb64a6bf431b8b79d806ad7d489ad2..0d67e3df3a0e3ec22dcd68e0e0d8f537441a4d7f 100644 --- a/src/ui/panes/plot.rs +++ b/src/ui/panes/plot.rs @@ -11,9 +11,8 @@ use crate::{ ui::app::PaneResponse, utils::units::UnitOfMeasure, }; -use egui::{Color32, Vec2, Vec2b}; +use egui::{Color32, Ui, Vec2, Vec2b}; use egui_plot::{AxisHints, HPlacement, Legend, Line, PlotPoint, log_grid_spacer}; -use egui_tiles::TileId; use serde::{self, Deserialize, Serialize}; use source_window::sources_window; use std::{ @@ -44,7 +43,7 @@ impl PartialEq for Plot2DPane { impl PaneBehavior for Plot2DPane { #[profiling::function] - fn ui(&mut self, ui: &mut egui::Ui, _: TileId) -> PaneResponse { + fn ui(&mut self, ui: &mut Ui) -> PaneResponse { let mut response = PaneResponse::default(); let data_settings_digest = self.settings.data_digest(); @@ -235,7 +234,7 @@ impl PaneBehavior for Plot2DPane { } } -fn show_menu(ui: &mut egui::Ui, settings_visible: &mut bool, settings: &mut PlotSettings) { +fn show_menu(ui: &mut Ui, settings_visible: &mut bool, settings: &mut PlotSettings) { ui.set_max_width(200.0); // To make sure we wrap long text if ui.button("Source Data Settingsā¦").clicked() { diff --git a/src/ui/panes/valve_control.rs b/src/ui/panes/valve_control.rs index a46ff41cd1dbc3a276ff8b2fd44bf12c34749564..f2e83cc5b08c989aecaa3ddf76e29ecbf851a094 100644 --- a/src/ui/panes/valve_control.rs +++ b/src/ui/panes/valve_control.rs @@ -1,4 +1,3 @@ -use egui_tiles::TileId; use serde::{Deserialize, Serialize}; use crate::ui::app::PaneResponse; @@ -15,7 +14,7 @@ pub struct ValveControlPane { } impl PaneBehavior for ValveControlPane { - fn ui(&mut self, ui: &mut egui::Ui, tile_id: TileId) -> PaneResponse { + fn ui(&mut self, ui: &mut egui::Ui) -> PaneResponse { todo!() } diff --git a/src/ui/utils.rs b/src/ui/utils.rs index 0c2ae3f7257254b414d9974507003ee1443a30bf..2469c54aa8b79743d4bc3f9f081593ffe26d71be 100644 --- a/src/ui/utils.rs +++ b/src/ui/utils.rs @@ -1,17 +1,16 @@ use egui::containers::Frame; use egui::{Response, Shadow, Stroke, Style, Ui}; -use egui_tiles::TileId; use super::panes::{Pane, PaneBehavior}; /// This function wraps a ui into a popup frame intended for the pane that needs /// to be maximized on screen. -pub fn maximized_pane_ui(ui: &mut Ui, tile_id: TileId, pane: &mut Pane) { +pub fn maximized_pane_ui(ui: &mut Ui, pane: &mut Pane) { Frame::popup(&Style::default()) .fill(egui::Color32::TRANSPARENT) .shadow(Shadow::NONE) .stroke(Stroke::NONE) - .show(ui, |ui| pane.ui(ui, tile_id)); + .show(ui, |ui| pane.ui(ui)); } #[derive(Debug, Default, Clone)] diff --git a/src/ui/widget_gallery.rs b/src/ui/widget_gallery.rs index ad8796d55159d2cf83b10f73a0db4692bedf6506..80ef01ebcb7e0c8e45b14e0c9dae23e1875743ab 100644 --- a/src/ui/widget_gallery.rs +++ b/src/ui/widget_gallery.rs @@ -19,7 +19,7 @@ impl WidgetGallery { self.open = true; } - pub fn show(&mut self, ctx: &Context) -> Option<PaneAction> { + pub fn show(&mut self, ctx: &Context) -> Option<(TileId, PaneAction)> { let mut window_visible = self.open; let resp = egui::Window::new("Widget Gallery") .collapsible(false) @@ -31,7 +31,7 @@ impl WidgetGallery { } else if let Some(message) = pane.get_message() { if ui.button(message).clicked() { if let Some(tile_id) = self.tile_id { - return Some(PaneAction::Replace(tile_id, Pane::boxed(pane))); + return Some((tile_id, PaneAction::Replace(Pane::boxed(pane)))); } } }