Skip to main content

egui_charts/ui/drawing_toolbar/utilities/
hide_menu.rs

1//! Hide/Show objects dropdown menu.
2//!
3//! Controls visibility of various chart elements:
4//! - Drawings
5//! - Indicators
6//! - Positions
7//! - Orders
8//! - All of them
9
10use crate::icons::icons;
11use crate::ui::drawing_toolbar::DrawingToolbarAction;
12use crate::ui::drawing_toolbar::components::draw_tool_button;
13use crate::ui::drawing_toolbar::state::ToolbarState;
14use crate::ui::drawing_toolbar::submenu_builder::SubmenuBuilder;
15use egui::{Response, Ui};
16
17/// Hide/Show dropdown menu component.
18pub struct HideMenu;
19
20impl HideMenu {
21    /// Render the visibility menu button. A click opens the dropdown.
22    pub fn show(ui: &mut Ui) -> Response {
23        draw_tool_button(ui, &icons::EYE, "Hide objects", false)
24    }
25
26    /// Render the hide dropdown rows, with the positions and orders rows when `trading`. A check
27    /// marks each group `state` has hidden. "Hide all" hides every group.
28    pub fn show_submenu(
29        ui: &mut Ui,
30        trading: bool,
31        state: &ToolbarState,
32    ) -> Option<DrawingToolbarAction> {
33        let mut builder = SubmenuBuilder::new(ui)
34            .add_text_item_with_action("Hide drawings", "Hide all drawing tools from chart", || {
35                Some(DrawingToolbarAction::HideAllDrawings)
36            })
37            .checked(state.hide_drawings)
38            .add_text_item_with_action("Hide indicators", "Hide all indicators from chart", || {
39                Some(DrawingToolbarAction::HideAllIndicators)
40            })
41            .checked(state.hide_indicators);
42        if trading {
43            builder = builder
44                .add_text_item_with_action(
45                    "Hide positions",
46                    "Hide all positions from chart",
47                    || Some(DrawingToolbarAction::HideAllPoss),
48                )
49                .checked(state.hide_positions)
50                .add_text_item_with_action("Hide orders", "Hide all orders from chart", || {
51                    Some(DrawingToolbarAction::HideAllOrders)
52                })
53                .checked(state.hide_orders);
54        }
55        let tooltip = if trading {
56            "Hide drawings, indicators, positions and orders"
57        } else {
58            "Hide drawings and indicators"
59        };
60        builder
61            .add_text_item_with_action("Hide all", tooltip, || Some(DrawingToolbarAction::HideAll))
62            .show()
63    }
64}