Skip to main content

egui_charts/ui/drawing_toolbar/
icons.rs

1//! Icon lookup for drawing tools and toolbar categories.
2//!
3//! Use these mappings when composing a host tool picker from the crate's drawing
4//! tool definitions.
5
6use crate::drawings::DrawingToolType;
7use crate::icons::{Icon, icons};
8
9/// Get icon for a category
10pub fn category_icon(category: &str) -> &'static Icon {
11    match category {
12        "Cursors" => &icons::CROSSHAIR,
13        "Lines" => &icons::TREND_LINE,
14        "Fibonacci" => &icons::FIB_RETRACEMENT,
15        "Patterns" => &icons::XABCD_PATTERN,
16        "Projection" => &icons::LONG_POSITION,
17        "Brushes/Shapes" => &icons::BRUSH,
18        "Text/Annotations" => &icons::TEXT,
19        "Icons/Emojis" => &icons::EMOJI_ICON,
20        // Legacy support
21        "Channels" => &icons::PARALLEL_CHANNEL,
22        "Gann" => &icons::GANN_FAN,
23        "Shapes" => &icons::RECT,
24        "Brushes" => &icons::BRUSH,
25        "Arrows" => &icons::ARROW_MARKER,
26        "Pitchforks" => &icons::PITCHFORK,
27        "Elliott" => &icons::ELLIOTT_IMPULSE,
28        "Elliott Wave" => &icons::ELLIOTT_IMPULSE,
29        "Cycles" => &icons::TIME_CYCLES,
30        "Volume" => &icons::ANCHORED_VOLUME_PROFILE,
31        "Measurers" => &icons::MEASURE,
32        "Annotations" => &icons::TEXT,
33        "Content" => &icons::TEXT,
34        _ => &icons::TREND_LINE,
35    }
36}
37
38/// Get icon for a specific tool
39///
40/// Maps every tool to an icon.
41pub fn get_icon(tool: DrawingToolType) -> &'static Icon {
42    match tool {
43        // ============ CURSORS (4 tools) ============
44        DrawingToolType::CrossCursor => &icons::CROSSHAIR,
45        DrawingToolType::DotCursor => &icons::DOT,
46        DrawingToolType::ArrowCursor => &icons::ARROW,
47        DrawingToolType::Eraser => &icons::ERASER,
48
49        // ============ LINES (9 tools) ============
50        DrawingToolType::TrendLine => &icons::TREND_LINE,
51        DrawingToolType::Ray => &icons::RAY,
52        DrawingToolType::InfoLine => &icons::INFO_LINE,
53        DrawingToolType::ExtendedLine => &icons::EXTENDED,
54        DrawingToolType::TrendAngle => &icons::TREND_ANGLE,
55        DrawingToolType::HorizontalLine => &icons::HORIZONTAL_LINE,
56        DrawingToolType::HorizontalRay => &icons::HORIZONTAL_RAY,
57        DrawingToolType::VerticalLine => &icons::VERTICAL_LINE,
58        DrawingToolType::CrossLine => &icons::CROSS_LINE,
59
60        // ============ CHANNELS (4 tools) ============
61        DrawingToolType::ParallelChannel => &icons::PARALLEL_CHANNEL,
62        DrawingToolType::RegressionTrend => &icons::REGRESSION_TREND,
63        DrawingToolType::FlatTopBottom => &icons::FLAT_BOTTOM,
64        DrawingToolType::DisjointChannel => &icons::DISJOINT_ANGLE,
65
66        // ============ PITCHFORKS (4 tools) ============
67        DrawingToolType::Pitchfork => &icons::PITCHFORK,
68        DrawingToolType::SchiffPitchfork => &icons::SCHIFF_PITCHFORK,
69        DrawingToolType::ModifiedSchiffPitchfork => &icons::SCHIFF_PITCHFORK2,
70        DrawingToolType::InsidePitchfork => &icons::INSIDE_PITCHFORK,
71
72        // ============ FIBONACCI (11 tools) ============
73        DrawingToolType::FibonacciRetracement => &icons::FIB_RETRACEMENT,
74        DrawingToolType::FibonacciExtension => &icons::FIB_EXTENSION,
75        DrawingToolType::FibonacciChannel => &icons::FIB_CHANNEL,
76        DrawingToolType::FibonacciTimeZones => &icons::FIB_TIME_ZONE,
77        DrawingToolType::FibonacciSpeedFan => &icons::FIB_SPEED_RESISTANCE_FAN,
78        DrawingToolType::TrendBasedFibTime => &icons::TREND_BASED_FIB_TIME,
79        DrawingToolType::FibonacciCircles => &icons::FIB_CIRCLES,
80        DrawingToolType::FibonacciSpiral => &icons::FIB_SPIRAL,
81        DrawingToolType::FibonacciSpeedResistanceArcs => &icons::FIB_SPEED_RESISTANCE_ARCS,
82        DrawingToolType::FibonacciWedge => &icons::FIB_WEDGE,
83        DrawingToolType::Pitchfan => &icons::PITCHFAN,
84
85        // ============ GANN (4 tools) ============
86        DrawingToolType::GannBox => &icons::GANN_SQUARE,
87        DrawingToolType::GannSquare => &icons::GANN_COMPLEX,
88        DrawingToolType::GannFixed => &icons::GANN_FIXED,
89        DrawingToolType::GannFan => &icons::GANN_FAN,
90
91        // ============ PATTERNS (6 tools) ============
92        DrawingToolType::XABCDPattern => &icons::XABCD_PATTERN,
93        DrawingToolType::CypherPattern => &icons::CYPHER_PATTERN,
94        DrawingToolType::HeadAndShoulders => &icons::HEAD_AND_SHOULDERS,
95        DrawingToolType::ABCDPattern => &icons::ABCD,
96        DrawingToolType::TrianglePattern => &icons::TRIANGLE_PATTERN,
97        DrawingToolType::ThreeDrivesPattern => &icons::THREE_DRIVERS,
98
99        // ============ ELLIOTT WAVES (5 tools) ============
100        DrawingToolType::ElliottImpulse => &icons::ELLIOTT_IMPULSE,
101        DrawingToolType::ElliottCorrection => &icons::ELLIOTT_CORRECTION,
102        DrawingToolType::ElliottTriangle => &icons::ELLIOTT_TRIANGLE,
103        DrawingToolType::ElliottDoubleCombo => &icons::ELLIOTT_DOUBLE_COMBO,
104        DrawingToolType::ElliottTripleCombo => &icons::ELLIOTT_TRIPLE_COMBO,
105
106        // ============ CYCLES (3 tools) ============
107        DrawingToolType::CyclicLines => &icons::CIRCLE_LINES,
108        DrawingToolType::TimeCycles => &icons::TIME_CYCLES,
109        DrawingToolType::SineLine => &icons::SINE_LINE,
110
111        // ============ PROJECTION (6 tools) ============
112        DrawingToolType::LongPos => &icons::LONG_POSITION,
113        DrawingToolType::ShortPos => &icons::SHORT_POSITION,
114        DrawingToolType::Forecast => &icons::PREDICTION,
115        DrawingToolType::BarsPattern => &icons::BARS_PATTERN,
116        DrawingToolType::GhostFeed => &icons::GHOST_FEED,
117        DrawingToolType::ProjectionTool => &icons::PROJECTION,
118
119        // ============ VOLUME (3 tools) ============
120        DrawingToolType::AnchoredVWAP => &icons::ANCHORED_VWAP,
121        DrawingToolType::FixedRangeVolumeProfile => &icons::FIXED_RANGE_VOLUME_PROFILE,
122        DrawingToolType::AnchoredVolumeProfile => &icons::ANCHORED_VOLUME_PROFILE,
123
124        // ============ MEASURERS (4 tools) ============
125        DrawingToolType::Measure => &icons::MEASURE,
126        DrawingToolType::PriceRange => &icons::PRICE_RANGE,
127        DrawingToolType::DateRange => &icons::DATE_RANGE,
128        DrawingToolType::DateAndPriceRange => &icons::DATE_AND_PRICE_RANGE,
129
130        // ============ BRUSHES (2 tools) ============
131        DrawingToolType::Brush => &icons::BRUSH,
132        DrawingToolType::Highlighter => &icons::HIGHLIGHTER,
133
134        // ============ ARROWS (6 tools) ============
135        DrawingToolType::ArrowMarker => &icons::ARROW_MARKER,
136        DrawingToolType::Arrow => &icons::ARROW_LINE,
137        DrawingToolType::ArrowMarkUp => &icons::ARROW_MARK_UP,
138        DrawingToolType::ArrowMarkLeft => &icons::ARROW_MARK_LEFT,
139        DrawingToolType::ArrowMarkRight => &icons::ARROW_MARK_RIGHT,
140        DrawingToolType::ArrowMarkDown => &icons::ARROW_MARK_DOWN,
141
142        // ============ SHAPES (11 tools) ============
143        DrawingToolType::Rect => &icons::RECT,
144        DrawingToolType::RotatedRect => &icons::ROTATED_RECT,
145        DrawingToolType::Path => &icons::PATH,
146        DrawingToolType::Circle => &icons::CIRCLE,
147        DrawingToolType::Ellipse => &icons::ELLIPSE,
148        DrawingToolType::Polyline => &icons::POLYLINE,
149        DrawingToolType::Triangle => &icons::TRIANGLE,
150        DrawingToolType::Sector => &icons::SECTOR,
151        DrawingToolType::Arc => &icons::ARC,
152        DrawingToolType::Curve => &icons::BEZIER_QUADRO,
153        DrawingToolType::DoubleCurve => &icons::BEZIER_CUBIC,
154
155        // ============ ANNOTATIONS (11 tools) ============
156        DrawingToolType::TextLabel => &icons::TEXT,
157        DrawingToolType::AnchoredText => &icons::ANCHORED_TEXT,
158        DrawingToolType::Note => &icons::NOTE,
159        DrawingToolType::PriceNote => &icons::PRICE_NOTE,
160        DrawingToolType::AnchoredNote => &icons::ANCHORED_NOTE,
161        DrawingToolType::Table => &icons::TABLE,
162        DrawingToolType::Callout => &icons::CALLOUT,
163        DrawingToolType::Comment => &icons::COMMENT,
164        DrawingToolType::PriceLabel => &icons::PRICE_LABEL,
165        DrawingToolType::Signpost => &icons::SIGNPOST,
166        DrawingToolType::FlagNote => &icons::FLAG_MARK,
167
168        // ============ CONTENT (3 tools) ============
169        DrawingToolType::Image => &icons::IMAGE,
170        DrawingToolType::Tweet => &icons::POST,
171        DrawingToolType::Idea => &icons::IDEAS,
172
173        // ============ ICONS (2 tools) ============
174        DrawingToolType::Sticker => &icons::STICKER,
175        DrawingToolType::FontIcon => &icons::EMOJI_ICON,
176    }
177}
178
179/// Get the currently selected tool's icon for a category button
180///
181/// If no tool is selected, returns the default icon for that category.
182pub fn get_sel_tool_icon_for_category(
183    category: &str,
184    sel_tool: Option<DrawingToolType>,
185) -> &'static Icon {
186    if let Some(tool) = sel_tool {
187        // Check if the selected tool belongs to this category
188        if tool_belongs_to_category(tool, category) {
189            return get_icon(tool);
190        }
191    }
192    // Return default category icon
193    category_icon(category)
194}
195
196/// Check if a tool belongs to a given category
197fn tool_belongs_to_category(tool: DrawingToolType, category: &str) -> bool {
198    use crate::ui::drawing_toolbar::data::get_category_sections;
199
200    let sections = get_category_sections(category);
201    for (_, tools) in sections {
202        if tools.contains(&tool) {
203            return true;
204        }
205    }
206    false
207}