-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathAlephTheme.cs
312 lines (268 loc) · 24.8 KB
/
AlephTheme.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace AlephNote.Common.Themes
{
[DebuggerDisplay("{Name} v{Version} ({SourceFilename})")]
public sealed class AlephTheme
{
#region Definition
public enum AlephThemePropType { Color, Brush, Thickness, Integer, Double, Boolean, CornerRadius }
public static readonly Tuple<string, AlephThemePropType>[] THEME_PROPERTIES =
{
Tuple.Create("window.background", AlephThemePropType.Brush ),
Tuple.Create("window.foreground", AlephThemePropType.Brush ),
Tuple.Create("window.splitter", AlephThemePropType.Brush ),
Tuple.Create("window.notetitle:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notetitle:caret", AlephThemePropType.Brush ),
Tuple.Create("window.notetitle.placeholder", AlephThemePropType.Brush ),
Tuple.Create("window.changedate:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.menubar:background", AlephThemePropType.Brush ),
Tuple.Create("window.menubar:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.menubar.submenu:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.popup:background", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.popup:bordercolor", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.popup:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.placeholder", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.foreground", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tag:background", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tag:bordercolor_default", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tag:bordercolor_highlighted", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tag:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tag:borderradius", AlephThemePropType.CornerRadius),
Tuple.Create("window.tageditor.tag:highlight", AlephThemePropType.Color ),
Tuple.Create("window.tageditor.tagbutton:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tagbutton:background", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tagbutton:border", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tagbutton:border_thickness", AlephThemePropType.Thickness ),
Tuple.Create("window.tageditor.tagbutton.popup:background", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tagbutton.popup:bordercolor", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tagbutton.popup:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.tageditor.tagbutton.popup:border_thickness", AlephThemePropType.Thickness ),
Tuple.Create("window.tageditor.tagbutton.popup:padding", AlephThemePropType.Thickness ),
Tuple.Create("window.tageditor.tagbutton.popup:margin", AlephThemePropType.Thickness ),
Tuple.Create("window.pathdisplay:foregroud", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.element:foregroud", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.element:background", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.element:background_hover", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.element:border", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.button:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.button:background", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.button:border", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup:background", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup:border", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup:border_thickness", AlephThemePropType.Thickness ),
Tuple.Create("window.pathdisplay.popup.text:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup.list:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup.list:background", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup.list.selected:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup.list.selected:background", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup.button:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup.button:background", AlephThemePropType.Brush ),
Tuple.Create("window.pathdisplay.popup.button:border", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch:background", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.textbox:background", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.textbox:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.btnSearch:background", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.btnSearch:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.btnCaseIns:background", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.btnCaseIns:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.btnWholeWord:background", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.btnWholeWord:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.btnRegex:background", AlephThemePropType.Brush ),
Tuple.Create("window.inlinesearch.btnRegex:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.input:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.input:background", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.input:border", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.placeholder:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.button:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.button:background", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.button:border", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.button:border_thickness", AlephThemePropType.Thickness ),
Tuple.Create("window.globalsearch.tagbutton:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.tagbutton:background", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.tagbutton:border", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.tagbutton:border_thickness", AlephThemePropType.Thickness ),
Tuple.Create("window.globalsearch.tagbutton.popup:background", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.tagbutton.popup:bordercolor", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.tagbutton.popup:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.globalsearch.tagbutton.popup:border_thickness", AlephThemePropType.Thickness ),
Tuple.Create("window.globalsearch.tagbutton.popup:padding", AlephThemePropType.Thickness ),
Tuple.Create("window.globalsearch.tagbutton.popup:margin", AlephThemePropType.Thickness ),
Tuple.Create("window.notesview.flat:background", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat:bordercolor", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.selected:background", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.selected:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.datetime1:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.datetime2:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.preview:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.separator", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.vborder:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.vborder:background", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.flat.vborder:margin", AlephThemePropType.Thickness ),
Tuple.Create("window.notesview.flat.scrollbar_v:visible", AlephThemePropType.Boolean ),
Tuple.Create("window.notesview.hierarchical.list:background", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list:bordercolor", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.selected:background", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.selected:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.datetime1:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.datetime2:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.preview:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.separator", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.vborder:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.vborder:background", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.list.vborder:margin", AlephThemePropType.Thickness ),
Tuple.Create("window.notesview.hierarchical.list.scrollbar_v:visible", AlephThemePropType.Boolean ),
Tuple.Create("window.notesview.hierarchical.splitter", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.tree:background", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.tree:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.tree:bordercolor", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.tree.selected:background", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.tree.selected:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.notesview.hierarchical.tree.scrollbar_v:visible", AlephThemePropType.Boolean ),
Tuple.Create("window.statusbar:background", AlephThemePropType.Brush ),
Tuple.Create("window.statusbar:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.statusbar.btnReload:foreground", AlephThemePropType.Brush ),
Tuple.Create("window.statusbar.btnReload:background", AlephThemePropType.Brush ),
Tuple.Create("window.statusbar.btnReload:border", AlephThemePropType.Brush ),
//-------------------------------------------------------------------------------------
Tuple.Create("scintilla.background", AlephThemePropType.Color ),
Tuple.Create("scintilla.bordercolor", AlephThemePropType.Brush ),
Tuple.Create("scintilla.whitespace:size", AlephThemePropType.Integer ),
Tuple.Create("scintilla.whitespace:color", AlephThemePropType.Color ),
Tuple.Create("scintilla.whitespace:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.caret:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.caret:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.caret:background_alpha", AlephThemePropType.Integer ),
Tuple.Create("scintilla.caret:visible", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.selection:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.selection:override_foreground", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.selection:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.scrollbar_h:visible", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.scrollbar_v:visible", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.default:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.default:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.default:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.default:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.default:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.link:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.link:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.link:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.link:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.link:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.default:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.default:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.default:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.default:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.default:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.emph:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.emph:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.emph:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.emph:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.emph:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.strong_emph:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.strong_emph:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.strong_emph:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.strong_emph:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.strong_emph:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.header:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.header:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.header:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.header:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.header:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.code:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.code:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.code:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.code:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.code:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.list:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.list:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.list:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.list:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.list:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.url:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.url:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.markdown.url:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.url:underline_link", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.url:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.markdown.url:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.margin.numbers:foreground", AlephThemePropType.Color ),
Tuple.Create("scintilla.margin.numbers:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.margin.numbers:underline", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.margin.numbers:bold", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.margin.numbers:italic", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.margin.symbols:background", AlephThemePropType.Color ),
Tuple.Create("scintilla.search.local:color", AlephThemePropType.Color ),
Tuple.Create("scintilla.search.local:alpha", AlephThemePropType.Integer ),
Tuple.Create("scintilla.search.local:outline_alpha", AlephThemePropType.Integer ),
Tuple.Create("scintilla.search.local:under_text", AlephThemePropType.Boolean ),
Tuple.Create("scintilla.search.global:color", AlephThemePropType.Color ),
Tuple.Create("scintilla.search.global:alpha", AlephThemePropType.Integer ),
Tuple.Create("scintilla.search.global:outline_alpha", AlephThemePropType.Integer ),
Tuple.Create("scintilla.search.global:under_text", AlephThemePropType.Boolean ),
};
public static readonly Tuple<string, Uri>[] RESOURCES =
{
Tuple.Create("folder_all.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/folder_all.png") ),
Tuple.Create("folder_any.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/folder_any.png") ),
Tuple.Create("folder_none.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/folder_none.png") ),
Tuple.Create("folder_root.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/folder_root.png") ),
Tuple.Create("IconGreen.ico", new Uri("pack://application:,,,/AlephNote.App;component/Resources/IconGreen.ico") ),
Tuple.Create("IconRed.ico", new Uri("pack://application:,,,/AlephNote.App;component/Resources/IconRed.ico") ),
Tuple.Create("IconSync.ico", new Uri("pack://application:,,,/AlephNote.App;component/Resources/IconSync.ico") ),
Tuple.Create("IconYellow.ico", new Uri("pack://application:,,,/AlephNote.App;component/Resources/IconYellow.ico") ),
Tuple.Create("lock.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/lock.png") ),
Tuple.Create("lock_open.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/lock_open.png") ),
Tuple.Create("lock_small.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/lock_small.png") ),
Tuple.Create("plus.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/plus.png") ),
Tuple.Create("refresh.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/refresh.png") ),
Tuple.Create("star.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/star.png") ),
Tuple.Create("tag.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/tag.png") ),
Tuple.Create("margin_check_mix.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/margin_check_mix.png") ),
Tuple.Create("margin_check_off.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/margin_check_off.png") ),
Tuple.Create("margin_check_on.png", new Uri("pack://application:,,,/AlephNote.App;component/Resources/margin_check_on.png") ),
};
#endregion
public string Name { get; }
public Version Version { get; }
public string Author { get; }
public CompatibilityVersionRange Compatibility { get; }
public string SourceFilename { get; }
public string Source { get; }
public AlephThemeType ThemeType { get; }
public IReadOnlyDictionary<string, byte[]> Resources { get; }
private readonly Dictionary<string, AlephThemePropertyValue> _allProperties = new Dictionary<string, AlephThemePropertyValue>();
public AlephTheme(string n, Version v, CompatibilityVersionRange c, string fn, string src, string a, AlephThemeType att, IReadOnlyDictionary<string, byte[]> res)
{
Name = n;
Version = v;
Author = a;
Compatibility = c;
SourceFilename = fn;
Source = src;
ThemeType = att;
Resources = res;
}
public void AddProperty(string name, AlephThemePropertyValue value)
{
_allProperties.Add(name.ToLower(), value);
}
public AlephThemePropertyValue TryGet(string name)
{
return _allProperties.TryGetValue(name.ToLower(), out var result) ? result : null;
}
public string GetXmlStr(string name)
{
var obj = TryGet(name);
return obj?.XmlDirectValue ?? "N/A";
}
public static Uri GetDefaultResourceUri(string name)
{
return RESOURCES.First(p => string.Equals(p.Item1, name, StringComparison.CurrentCultureIgnoreCase)).Item2;
}
}
}