Skip to main content

egui_charts/ui/widget_bar/
state.rs

1//! State management for right toolbar
2//!
3//! Manages the state of the right sidebar panels and tabs.
4
5use super::tabs::RightPanelTab;
6use crate::tokens::DESIGN_TOKENS;
7
8/// Right toolbar state
9#[derive(Clone, Debug)]
10pub struct RightToolbarState {
11    /// Currently active tab
12    pub active_tab: Option<RightPanelTab>,
13    /// Whether the panel is expanded
14    pub expanded: bool,
15    /// Panel width
16    pub panel_width: f32,
17}
18
19impl Default for RightToolbarState {
20    fn default() -> Self {
21        Self {
22            active_tab: None,
23            expanded: false,
24            panel_width: DESIGN_TOKENS.sizing.toolbar.right_panel_width,
25        }
26    }
27}
28
29impl RightToolbarState {
30    /// Create new right toolbar state
31    pub fn new() -> Self {
32        Self::default()
33    }
34
35    /// Set active tab
36    pub fn set_active_tab(&mut self, tab: Option<RightPanelTab>) {
37        self.active_tab = tab;
38        self.expanded = tab.is_some();
39    }
40
41    /// Toggle tab
42    pub fn toggle_tab(&mut self, tab: RightPanelTab) {
43        if self.active_tab == Some(tab) {
44            self.active_tab = None;
45            self.expanded = false;
46        } else {
47            self.active_tab = Some(tab);
48            self.expanded = true;
49        }
50    }
51
52    /// Check if tab is active
53    pub fn is_tab_active(&self, tab: RightPanelTab) -> bool {
54        self.active_tab == Some(tab)
55    }
56
57    /// Sync from external panel state values.
58    pub fn sync_from(&mut self, panel_width: f32, active_tab: Option<RightPanelTab>) {
59        self.panel_width = panel_width;
60        self.active_tab = active_tab;
61        self.expanded = active_tab.is_some();
62    }
63}