1use crate::drawings::DrawingToolType;
10
11pub const CATEGORY_ORDER: &[&str] = &[
13 "Cursors",
14 "Lines",
15 "Fibonacci",
16 "Patterns",
17 "Projection",
18 "Brushes/Shapes",
19 "Text/Annotations",
20 "Icons/Emojis",
21];
22
23pub fn get_tool_category(tool: DrawingToolType) -> Option<&'static str> {
28 for &category in CATEGORY_ORDER {
29 let sections = get_category_sections(category);
30 for (_, tools) in sections {
31 if tools.contains(&tool) {
32 return Some(category);
33 }
34 }
35 }
36 None
37}
38
39pub fn get_category_sections(category: &str) -> Vec<(&'static str, Vec<DrawingToolType>)> {
44 match category {
45 "Cursors" => vec![(
46 "CURSORS",
47 vec![
48 DrawingToolType::CrossCursor,
49 DrawingToolType::DotCursor,
50 DrawingToolType::ArrowCursor,
51 DrawingToolType::Eraser,
52 ],
53 )],
54 "Lines" => vec![
55 (
56 "LINES",
57 vec![
58 DrawingToolType::TrendLine,
59 DrawingToolType::Ray,
60 DrawingToolType::InfoLine,
61 DrawingToolType::ExtendedLine,
62 DrawingToolType::TrendAngle,
63 DrawingToolType::HorizontalLine,
64 DrawingToolType::HorizontalRay,
65 DrawingToolType::VerticalLine,
66 DrawingToolType::CrossLine,
67 ],
68 ),
69 (
70 "CHANNELS",
71 vec![
72 DrawingToolType::ParallelChannel,
73 DrawingToolType::RegressionTrend,
74 DrawingToolType::FlatTopBottom,
75 DrawingToolType::DisjointChannel,
76 ],
77 ),
78 (
79 "PITCHFORKS",
80 vec![
81 DrawingToolType::Pitchfork,
82 DrawingToolType::SchiffPitchfork,
83 DrawingToolType::ModifiedSchiffPitchfork,
84 DrawingToolType::InsidePitchfork,
85 ],
86 ),
87 ],
88 "Fibonacci" => vec![
89 (
90 "FIBONACCI",
91 vec![
92 DrawingToolType::FibonacciRetracement,
93 DrawingToolType::FibonacciExtension,
94 DrawingToolType::FibonacciChannel,
95 DrawingToolType::FibonacciTimeZones,
96 DrawingToolType::FibonacciSpeedFan,
97 DrawingToolType::TrendBasedFibTime,
98 DrawingToolType::FibonacciCircles,
99 DrawingToolType::FibonacciSpiral,
100 DrawingToolType::FibonacciSpeedResistanceArcs,
101 DrawingToolType::FibonacciWedge,
102 DrawingToolType::Pitchfan,
103 ],
104 ),
105 (
106 "GANN",
107 vec![
108 DrawingToolType::GannBox,
109 DrawingToolType::GannFixed,
110 DrawingToolType::GannSquare,
111 DrawingToolType::GannFan,
112 ],
113 ),
114 ],
115 "Patterns" => vec![
116 (
117 "PATTERNS",
118 vec![
119 DrawingToolType::XABCDPattern,
120 DrawingToolType::CypherPattern,
121 DrawingToolType::HeadAndShoulders,
122 DrawingToolType::ABCDPattern,
123 DrawingToolType::TrianglePattern,
124 DrawingToolType::ThreeDrivesPattern,
125 ],
126 ),
127 (
128 "ELLIOTT WAVES",
129 vec![
130 DrawingToolType::ElliottImpulse,
131 DrawingToolType::ElliottCorrection,
132 DrawingToolType::ElliottTriangle,
133 DrawingToolType::ElliottDoubleCombo,
134 DrawingToolType::ElliottTripleCombo,
135 ],
136 ),
137 (
138 "CYCLES",
139 vec![
140 DrawingToolType::CyclicLines,
141 DrawingToolType::TimeCycles,
142 DrawingToolType::SineLine,
143 ],
144 ),
145 ],
146 "Projection" => vec![
147 (
148 "PROJECTION",
149 vec![
150 DrawingToolType::LongPos,
151 DrawingToolType::ShortPos,
152 DrawingToolType::Forecast,
153 DrawingToolType::BarsPattern,
154 DrawingToolType::GhostFeed,
155 DrawingToolType::ProjectionTool,
156 ],
157 ),
158 (
159 "VOLUME-BASED",
160 vec![
161 DrawingToolType::AnchoredVWAP,
162 DrawingToolType::FixedRangeVolumeProfile,
163 DrawingToolType::AnchoredVolumeProfile,
164 ],
165 ),
166 (
167 "MEASURER",
168 vec![
169 DrawingToolType::PriceRange,
170 DrawingToolType::DateRange,
171 DrawingToolType::DateAndPriceRange,
172 ],
173 ),
174 ],
175 "Brushes/Shapes" => vec![
176 (
177 "BRUSHES",
178 vec![DrawingToolType::Brush, DrawingToolType::Highlighter],
179 ),
180 (
181 "ARROWS",
182 vec![
183 DrawingToolType::ArrowMarker,
184 DrawingToolType::Arrow,
185 DrawingToolType::ArrowMarkUp,
186 DrawingToolType::ArrowMarkDown,
187 DrawingToolType::ArrowMarkLeft,
188 DrawingToolType::ArrowMarkRight,
189 ],
190 ),
191 (
192 "SHAPES",
193 vec![
194 DrawingToolType::Rect,
195 DrawingToolType::RotatedRect,
196 DrawingToolType::Path,
197 DrawingToolType::Circle,
198 DrawingToolType::Ellipse,
199 DrawingToolType::Polyline,
200 DrawingToolType::Triangle,
201 DrawingToolType::Arc,
202 DrawingToolType::Sector,
203 DrawingToolType::Curve,
204 DrawingToolType::DoubleCurve,
205 ],
206 ),
207 ],
208 "Text/Annotations" => vec![
209 (
210 "TEXT & NOTES",
211 vec![
212 DrawingToolType::TextLabel,
213 DrawingToolType::AnchoredText,
214 DrawingToolType::Note,
215 DrawingToolType::PriceNote,
216 DrawingToolType::AnchoredNote,
217 DrawingToolType::Table,
218 DrawingToolType::Callout,
219 DrawingToolType::Comment,
220 DrawingToolType::PriceLabel,
221 DrawingToolType::Signpost,
222 DrawingToolType::FlagNote,
223 ],
224 ),
225 (
226 "CONTENT",
227 vec![
228 DrawingToolType::Image,
229 DrawingToolType::Tweet,
230 DrawingToolType::Idea,
231 ],
232 ),
233 ],
234 "Icons/Emojis" => vec![(
235 "ICONS",
236 vec![DrawingToolType::FontIcon, DrawingToolType::Sticker],
237 )],
238 _ => vec![],
239 }
240}
241
242pub fn get_category_default_tool(category: &str) -> Option<DrawingToolType> {
246 Some(match category {
247 "Cursors" => DrawingToolType::CrossCursor,
248 "Lines" => DrawingToolType::TrendLine,
249 "Fibonacci" => DrawingToolType::FibonacciRetracement,
250 "Patterns" => DrawingToolType::XABCDPattern,
251 "Projection" => DrawingToolType::LongPos,
252 "Brushes/Shapes" => DrawingToolType::Brush,
253 "Text/Annotations" => DrawingToolType::TextLabel,
254 "Icons/Emojis" => DrawingToolType::FontIcon,
255 _ => return None,
256 })
257}
258
259pub fn get_all_tools() -> Vec<DrawingToolType> {
261 DrawingToolType::all().to_vec()
262}
263
264pub fn tool_cnt() -> usize {
266 DrawingToolType::all().len()
267}