1use super::{UnicodeProvider, UnicodeTheme};
5
6#[derive(Debug, Clone, Copy)]
8pub enum Arrow {
9 Up,
11 Down,
13 Left,
15 Right,
17 UpLeft,
19 UpRight,
21 DownLeft,
23 DownRight,
25 DoubleUp,
27 DoubleDown,
29 DoubleLeft,
31 DoubleRight,
33 CurvedLeft,
35 CurvedRight,
37 Return,
39 Refresh,
41}
42
43impl UnicodeProvider for Arrow {
44 fn get_char(&self, theme: UnicodeTheme) -> char {
45 match (self, theme) {
46 (Arrow::Up, UnicodeTheme::Minimal) => '^',
47 (Arrow::Up, UnicodeTheme::Basic) => '↑',
48 (Arrow::Up, UnicodeTheme::Rich) => '↑',
49 (Arrow::Up, UnicodeTheme::Fancy) => '⬆',
50
51 (Arrow::Down, UnicodeTheme::Minimal) => 'v',
52 (Arrow::Down, UnicodeTheme::Basic) => '↓',
53 (Arrow::Down, UnicodeTheme::Rich) => '↓',
54 (Arrow::Down, UnicodeTheme::Fancy) => '⬇',
55
56 (Arrow::Left, UnicodeTheme::Minimal) => '<',
57 (Arrow::Left, UnicodeTheme::Basic) => '←',
58 (Arrow::Left, UnicodeTheme::Rich) => '←',
59 (Arrow::Left, UnicodeTheme::Fancy) => '⬅',
60
61 (Arrow::Right, UnicodeTheme::Minimal) => '>',
62 (Arrow::Right, UnicodeTheme::Basic) => '→',
63 (Arrow::Right, UnicodeTheme::Rich) => '→',
64 (Arrow::Right, UnicodeTheme::Fancy) => '➡',
65
66 (Arrow::UpLeft, UnicodeTheme::Minimal) => '\\',
67 (Arrow::UpLeft, UnicodeTheme::Basic) => '↖',
68 (Arrow::UpLeft, UnicodeTheme::Rich) => '↖',
69 (Arrow::UpLeft, UnicodeTheme::Fancy) => '↖',
70
71 (Arrow::UpRight, UnicodeTheme::Minimal) => '/',
72 (Arrow::UpRight, UnicodeTheme::Basic) => '↗',
73 (Arrow::UpRight, UnicodeTheme::Rich) => '↗',
74 (Arrow::UpRight, UnicodeTheme::Fancy) => '↗',
75
76 (Arrow::DownLeft, UnicodeTheme::Minimal) => '/',
77 (Arrow::DownLeft, UnicodeTheme::Basic) => '↙',
78 (Arrow::DownLeft, UnicodeTheme::Rich) => '↙',
79 (Arrow::DownLeft, UnicodeTheme::Fancy) => '↙',
80
81 (Arrow::DownRight, UnicodeTheme::Minimal) => '\\',
82 (Arrow::DownRight, UnicodeTheme::Basic) => '↘',
83 (Arrow::DownRight, UnicodeTheme::Rich) => '↘',
84 (Arrow::DownRight, UnicodeTheme::Fancy) => '↘',
85
86 (Arrow::DoubleUp, UnicodeTheme::Minimal) => '^',
87 (Arrow::DoubleUp, UnicodeTheme::Basic) => '⇑',
88 (Arrow::DoubleUp, UnicodeTheme::Rich) => '⇑',
89 (Arrow::DoubleUp, UnicodeTheme::Fancy) => '⏫',
90
91 (Arrow::DoubleDown, UnicodeTheme::Minimal) => 'v',
92 (Arrow::DoubleDown, UnicodeTheme::Basic) => '⇓',
93 (Arrow::DoubleDown, UnicodeTheme::Rich) => '⇓',
94 (Arrow::DoubleDown, UnicodeTheme::Fancy) => '⏬',
95
96 (Arrow::DoubleLeft, UnicodeTheme::Minimal) => '<',
97 (Arrow::DoubleLeft, UnicodeTheme::Basic) => '⇐',
98 (Arrow::DoubleLeft, UnicodeTheme::Rich) => '⇐',
99 (Arrow::DoubleLeft, UnicodeTheme::Fancy) => '⏪',
100
101 (Arrow::DoubleRight, UnicodeTheme::Minimal) => '>',
102 (Arrow::DoubleRight, UnicodeTheme::Basic) => '⇒',
103 (Arrow::DoubleRight, UnicodeTheme::Rich) => '⇒',
104 (Arrow::DoubleRight, UnicodeTheme::Fancy) => '⏩',
105
106 (Arrow::CurvedLeft, UnicodeTheme::Minimal) => '<',
107 (Arrow::CurvedLeft, UnicodeTheme::Basic) => '↰',
108 (Arrow::CurvedLeft, UnicodeTheme::Rich) => '↰',
109 (Arrow::CurvedLeft, UnicodeTheme::Fancy) => '↰',
110
111 (Arrow::CurvedRight, UnicodeTheme::Minimal) => '>',
112 (Arrow::CurvedRight, UnicodeTheme::Basic) => '↱',
113 (Arrow::CurvedRight, UnicodeTheme::Rich) => '↱',
114 (Arrow::CurvedRight, UnicodeTheme::Fancy) => '↱',
115
116 (Arrow::Return, UnicodeTheme::Minimal) => '\\',
117 (Arrow::Return, UnicodeTheme::Basic) => '↵',
118 (Arrow::Return, UnicodeTheme::Rich) => '↵',
119 (Arrow::Return, UnicodeTheme::Fancy) => '⏎',
120
121 (Arrow::Refresh, UnicodeTheme::Minimal) => 'R',
122 (Arrow::Refresh, UnicodeTheme::Basic) => '↻',
123 (Arrow::Refresh, UnicodeTheme::Rich) => '↻',
124 (Arrow::Refresh, UnicodeTheme::Fancy) => '🔄',
125 }
126 }
127}
128
129#[derive(Debug, Clone, Copy)]
131pub enum Navigation {
132 First,
134 Previous,
136 Next,
138 Last,
140 Home,
142 End,
144 PageUp,
146 PageDown,
148 Back,
150 Forward,
152}
153
154impl UnicodeProvider for Navigation {
155 fn get_char(&self, theme: UnicodeTheme) -> char {
156 match (self, theme) {
157 (Navigation::First, UnicodeTheme::Minimal) => '<',
158 (Navigation::First, UnicodeTheme::Basic) => '⇤',
159 (Navigation::First, UnicodeTheme::Rich) => '⇤',
160 (Navigation::First, UnicodeTheme::Fancy) => '⏮',
161
162 (Navigation::Previous, UnicodeTheme::Minimal) => '<',
163 (Navigation::Previous, UnicodeTheme::Basic) => '◀',
164 (Navigation::Previous, UnicodeTheme::Rich) => '◀',
165 (Navigation::Previous, UnicodeTheme::Fancy) => '⏪',
166
167 (Navigation::Next, UnicodeTheme::Minimal) => '>',
168 (Navigation::Next, UnicodeTheme::Basic) => '▶',
169 (Navigation::Next, UnicodeTheme::Rich) => '▶',
170 (Navigation::Next, UnicodeTheme::Fancy) => '⏩',
171
172 (Navigation::Last, UnicodeTheme::Minimal) => '>',
173 (Navigation::Last, UnicodeTheme::Basic) => '⇥',
174 (Navigation::Last, UnicodeTheme::Rich) => '⇥',
175 (Navigation::Last, UnicodeTheme::Fancy) => '⏭',
176
177 (Navigation::Home, UnicodeTheme::Minimal) => 'H',
178 (Navigation::Home, UnicodeTheme::Basic) => '⌂',
179 (Navigation::Home, UnicodeTheme::Rich) => '⌂',
180 (Navigation::Home, UnicodeTheme::Fancy) => '🏠',
181
182 (Navigation::End, UnicodeTheme::Minimal) => 'E',
183 (Navigation::End, UnicodeTheme::Basic) => '⌐',
184 (Navigation::End, UnicodeTheme::Rich) => '⌐',
185 (Navigation::End, UnicodeTheme::Fancy) => '🔚',
186
187 (Navigation::PageUp, UnicodeTheme::Minimal) => '^',
188 (Navigation::PageUp, UnicodeTheme::Basic) => '⇞',
189 (Navigation::PageUp, UnicodeTheme::Rich) => '⇞',
190 (Navigation::PageUp, UnicodeTheme::Fancy) => '📄',
191
192 (Navigation::PageDown, UnicodeTheme::Minimal) => 'v',
193 (Navigation::PageDown, UnicodeTheme::Basic) => '⇟',
194 (Navigation::PageDown, UnicodeTheme::Rich) => '⇟',
195 (Navigation::PageDown, UnicodeTheme::Fancy) => '📄',
196
197 (Navigation::Back, UnicodeTheme::Minimal) => '<',
198 (Navigation::Back, UnicodeTheme::Basic) => '⬅',
199 (Navigation::Back, UnicodeTheme::Rich) => '⬅',
200 (Navigation::Back, UnicodeTheme::Fancy) => '🔙',
201
202 (Navigation::Forward, UnicodeTheme::Minimal) => '>',
203 (Navigation::Forward, UnicodeTheme::Basic) => '➡',
204 (Navigation::Forward, UnicodeTheme::Rich) => '➡',
205 (Navigation::Forward, UnicodeTheme::Fancy) => '🔜',
206 }
207 }
208}
209
210pub mod chars {
212 use super::*;
213
214 pub const UP: Arrow = Arrow::Up;
216 pub const DOWN: Arrow = Arrow::Down;
217 pub const LEFT: Arrow = Arrow::Left;
218 pub const RIGHT: Arrow = Arrow::Right;
219 pub const UP_LEFT: Arrow = Arrow::UpLeft;
220 pub const UP_RIGHT: Arrow = Arrow::UpRight;
221 pub const DOWN_LEFT: Arrow = Arrow::DownLeft;
222 pub const DOWN_RIGHT: Arrow = Arrow::DownRight;
223
224 pub const DOUBLE_UP: Arrow = Arrow::DoubleUp;
226 pub const DOUBLE_DOWN: Arrow = Arrow::DoubleDown;
227 pub const DOUBLE_LEFT: Arrow = Arrow::DoubleLeft;
228 pub const DOUBLE_RIGHT: Arrow = Arrow::DoubleRight;
229
230 pub const CURVED_LEFT: Arrow = Arrow::CurvedLeft;
232 pub const CURVED_RIGHT: Arrow = Arrow::CurvedRight;
233 pub const RETURN: Arrow = Arrow::Return;
234 pub const REFRESH: Arrow = Arrow::Refresh;
235
236 pub const FIRST: Navigation = Navigation::First;
238 pub const PREVIOUS: Navigation = Navigation::Previous;
239 pub const NEXT: Navigation = Navigation::Next;
240 pub const LAST: Navigation = Navigation::Last;
241 pub const HOME: Navigation = Navigation::Home;
242 pub const END: Navigation = Navigation::End;
243 pub const PAGE_UP: Navigation = Navigation::PageUp;
244 pub const PAGE_DOWN: Navigation = Navigation::PageDown;
245 pub const BACK: Navigation = Navigation::Back;
246 pub const FORWARD: Navigation = Navigation::Forward;
247}