low-level text cell bits
[nikiroo-utils.git] / src / jexer / bits / ColorTheme.java
1 /**
2 * Jexer - Java Text User Interface
3 *
4 * Version: $Id$
5 *
6 * Author: Kevin Lamonte, <a href="mailto:kevin.lamonte@gmail.com">kevin.lamonte@gmail.com</a>
7 *
8 * License: LGPLv3 or later
9 *
10 * Copyright: This module is licensed under the GNU Lesser General
11 * Public License Version 3. Please see the file "COPYING" in this
12 * directory for more information about the GNU Lesser General Public
13 * License Version 3.
14 *
15 * Copyright (C) 2015 Kevin Lamonte
16 *
17 * This program is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Lesser General Public License
19 * as published by the Free Software Foundation; either version 3 of
20 * the License, or (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful, but
23 * WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 * General Public License for more details.
26 *
27 * You should have received a copy of the GNU Lesser General Public
28 * License along with this program; if not, see
29 * http://www.gnu.org/licenses/, or write to the Free Software
30 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
31 * 02110-1301 USA
32 */
33 package jexer.bits;
34
35 import java.util.HashMap;
36 import java.util.Map;
37
38
39 /**
40 * ColorTheme is a collection of colors keyed by string.
41 */
42 public class ColorTheme {
43
44 /**
45 * The current theme colors
46 */
47 private Map<String, CellAttributes> colors;
48
49 /**
50 * Retrieve the CellAttributes by name.
51 *
52 * @param name hash key
53 * @return color associated with hash key
54 */
55 public CellAttributes getColor(String name) {
56 CellAttributes attr = (CellAttributes)colors.get(name);
57 return attr;
58 }
59
60 /**
61 * Save the colors to an ASCII file
62 *
63 * @param filename file to write to
64 */
65 public void save(String filename) {
66 /*
67 auto file = File(filename, "wt");
68 foreach (string key; colors.keys.sort) {
69 CellAttributes color = colors[key];
70 file.writefln("%s = %s", key, color);
71 }
72 */
73 }
74
75 /**
76 * Read colors from an ASCII file
77 *
78 * @param filename file to read from
79 */
80 public void load(String filename) {
81 /*
82 string text = std.file.readText!(string)(filename);
83 foreach (line; std.string.splitLines!(string)(text)) {
84 string key;
85 string bold;
86 string foreColor;
87 string on;
88 string backColor;
89 auto tokenCount = formattedRead(line, "%s = %s %s %s %s",
90 &key, &bold, &foreColor, &on, &backColor);
91 if (tokenCount == 4) {
92 std.stdio.stderr.writefln("1 %s = %s %s %s %s",
93 key, bold, foreColor, on, backColor);
94
95 // "key = blah on blah"
96 foreColor = bold;
97 backColor = on;
98 bold = "";
99 } else if (tokenCount == 5) {
100 // "key = bold blah on blah"
101 std.stdio.stderr.writefln("2 %s = %s %s %s %s",
102 key, bold, foreColor, on, backColor);
103 } else {
104 // Unknown line, skip this one
105 continue;
106 }
107 CellAttributes color = new CellAttributes();
108 if (bold == "bold") {
109 color.bold = true;
110 }
111 color.foreColor = CellAttributes.colorFromString(foreColor);
112 color.backColor = CellAttributes.colorFromString(backColor);
113 colors[key] = color;
114 }
115 */
116 }
117
118 /// Sets to defaults that resemble the Borland IDE colors.
119 public void setDefaultTheme() {
120 CellAttributes color;
121
122 // TWindow border
123 color = new CellAttributes();
124 color.foreColor = Color.WHITE;
125 color.backColor = Color.BLUE;
126 color.bold = true;
127 colors.put("twindow.border", color);
128
129 // TWindow background
130 color = new CellAttributes();
131 color.foreColor = Color.YELLOW;
132 color.backColor = Color.BLUE;
133 color.bold = true;
134 colors.put("twindow.background", color);
135
136 // TWindow border - inactive
137 color = new CellAttributes();
138 color.foreColor = Color.BLACK;
139 color.backColor = Color.BLUE;
140 color.bold = true;
141 colors.put("twindow.border.inactive", color);
142
143 // TWindow background - inactive
144 color = new CellAttributes();
145 color.foreColor = Color.YELLOW;
146 color.backColor = Color.BLUE;
147 color.bold = true;
148 colors.put("twindow.background.inactive", color);
149
150 // TWindow border - modal
151 color = new CellAttributes();
152 color.foreColor = Color.WHITE;
153 color.backColor = Color.WHITE;
154 color.bold = true;
155 colors.put("twindow.border.modal", color);
156
157 // TWindow background - modal
158 color = new CellAttributes();
159 color.foreColor = Color.BLACK;
160 color.backColor = Color.WHITE;
161 color.bold = false;
162 colors.put("twindow.background.modal", color);
163
164 // TWindow border - modal + inactive
165 color = new CellAttributes();
166 color.foreColor = Color.BLACK;
167 color.backColor = Color.WHITE;
168 color.bold = true;
169 colors.put("twindow.border.modal.inactive", color);
170
171 // TWindow background - modal + inactive
172 color = new CellAttributes();
173 color.foreColor = Color.BLACK;
174 color.backColor = Color.WHITE;
175 color.bold = false;
176 colors.put("twindow.background.modal.inactive", color);
177
178 // TWindow border - during window movement - modal
179 color = new CellAttributes();
180 color.foreColor = Color.GREEN;
181 color.backColor = Color.WHITE;
182 color.bold = true;
183 colors.put("twindow.border.modal.windowmove", color);
184
185 // TWindow border - during window movement
186 color = new CellAttributes();
187 color.foreColor = Color.GREEN;
188 color.backColor = Color.BLUE;
189 color.bold = true;
190 colors.put("twindow.border.windowmove", color);
191
192 // TWindow background - during window movement
193 color = new CellAttributes();
194 color.foreColor = Color.YELLOW;
195 color.backColor = Color.BLUE;
196 color.bold = false;
197 colors.put("twindow.background.windowmove", color);
198
199 // TApplication background
200 color = new CellAttributes();
201 color.foreColor = Color.BLUE;
202 color.backColor = Color.WHITE;
203 color.bold = false;
204 colors.put("tapplication.background", color);
205
206 // TButton text
207 color = new CellAttributes();
208 color.foreColor = Color.BLACK;
209 color.backColor = Color.GREEN;
210 color.bold = false;
211 colors.put("tbutton.inactive", color);
212 color = new CellAttributes();
213 color.foreColor = Color.WHITE;
214 color.backColor = Color.GREEN;
215 color.bold = true;
216 colors.put("tbutton.active", color);
217 color = new CellAttributes();
218 color.foreColor = Color.BLACK;
219 color.backColor = Color.WHITE;
220 color.bold = true;
221 colors.put("tbutton.disabled", color);
222 color = new CellAttributes();
223 color.foreColor = Color.YELLOW;
224 color.backColor = Color.GREEN;
225 color.bold = true;
226 colors.put("tbutton.mnemonic", color);
227 color = new CellAttributes();
228 color.foreColor = Color.YELLOW;
229 color.backColor = Color.GREEN;
230 color.bold = true;
231 colors.put("tbutton.mnemonic.highlighted", color);
232
233 // TLabel text
234 color = new CellAttributes();
235 color.foreColor = Color.WHITE;
236 color.backColor = Color.BLUE;
237 color.bold = true;
238 colors.put("tlabel", color);
239
240 // TText text
241 color = new CellAttributes();
242 color.foreColor = Color.WHITE;
243 color.backColor = Color.BLACK;
244 color.bold = false;
245 colors.put("ttext", color);
246
247 // TField text
248 color = new CellAttributes();
249 color.foreColor = Color.WHITE;
250 color.backColor = Color.BLUE;
251 color.bold = false;
252 colors.put("tfield.inactive", color);
253 color = new CellAttributes();
254 color.foreColor = Color.YELLOW;
255 color.backColor = Color.BLACK;
256 color.bold = true;
257 colors.put("tfield.active", color);
258
259 // TCheckbox
260 color = new CellAttributes();
261 color.foreColor = Color.WHITE;
262 color.backColor = Color.BLUE;
263 color.bold = false;
264 colors.put("tcheckbox.inactive", color);
265 color = new CellAttributes();
266 color.foreColor = Color.YELLOW;
267 color.backColor = Color.BLACK;
268 color.bold = true;
269 colors.put("tcheckbox.active", color);
270
271
272 // TRadioButton
273 color = new CellAttributes();
274 color.foreColor = Color.WHITE;
275 color.backColor = Color.BLUE;
276 color.bold = false;
277 colors.put("tradiobutton.inactive", color);
278 color = new CellAttributes();
279 color.foreColor = Color.YELLOW;
280 color.backColor = Color.BLACK;
281 color.bold = true;
282 colors.put("tradiobutton.active", color);
283
284 // TRadioGroup
285 color = new CellAttributes();
286 color.foreColor = Color.WHITE;
287 color.backColor = Color.BLUE;
288 color.bold = false;
289 colors.put("tradiogroup.inactive", color);
290 color = new CellAttributes();
291 color.foreColor = Color.YELLOW;
292 color.backColor = Color.BLUE;
293 color.bold = true;
294 colors.put("tradiogroup.active", color);
295
296 // TMenu
297 color = new CellAttributes();
298 color.foreColor = Color.BLACK;
299 color.backColor = Color.WHITE;
300 color.bold = false;
301 colors.put("tmenu", color);
302 color = new CellAttributes();
303 color.foreColor = Color.BLACK;
304 color.backColor = Color.GREEN;
305 color.bold = false;
306 colors.put("tmenu.highlighted", color);
307 color = new CellAttributes();
308 color.foreColor = Color.RED;
309 color.backColor = Color.WHITE;
310 color.bold = false;
311 colors.put("tmenu.mnemonic", color);
312 color = new CellAttributes();
313 color.foreColor = Color.RED;
314 color.backColor = Color.GREEN;
315 color.bold = false;
316 colors.put("tmenu.mnemonic.highlighted", color);
317 color = new CellAttributes();
318 color.foreColor = Color.BLACK;
319 color.backColor = Color.WHITE;
320 color.bold = true;
321 colors.put("tmenu.disabled", color);
322
323 // TProgressBar
324 color = new CellAttributes();
325 color.foreColor = Color.BLUE;
326 color.backColor = Color.BLUE;
327 color.bold = true;
328 colors.put("tprogressbar.complete", color);
329 color = new CellAttributes();
330 color.foreColor = Color.WHITE;
331 color.backColor = Color.BLUE;
332 color.bold = false;
333 colors.put("tprogressbar.incomplete", color);
334
335 // THScroller / TVScroller
336 color = new CellAttributes();
337 color.foreColor = Color.CYAN;
338 color.backColor = Color.BLUE;
339 color.bold = false;
340 colors.put("tscroller.bar", color);
341 color = new CellAttributes();
342 color.foreColor = Color.BLUE;
343 color.backColor = Color.CYAN;
344 color.bold = false;
345 colors.put("tscroller.arrows", color);
346
347 // TTreeView
348 color = new CellAttributes();
349 color.foreColor = Color.WHITE;
350 color.backColor = Color.BLUE;
351 color.bold = false;
352 colors.put("ttreeview", color);
353 color = new CellAttributes();
354 color.foreColor = Color.GREEN;
355 color.backColor = Color.BLUE;
356 color.bold = true;
357 colors.put("ttreeview.expandbutton", color);
358 color = new CellAttributes();
359 color.foreColor = Color.BLACK;
360 color.backColor = Color.CYAN;
361 color.bold = false;
362 colors.put("ttreeview.selected", color);
363 color = new CellAttributes();
364 color.foreColor = Color.RED;
365 color.backColor = Color.BLUE;
366 color.bold = false;
367 colors.put("ttreeview.unreadable", color);
368 color = new CellAttributes();
369 color.foreColor = Color.BLACK;
370 color.backColor = Color.BLUE;
371 color.bold = true;
372 colors.put("ttreeview.inactive", color);
373
374 // TText text
375 color = new CellAttributes();
376 color.foreColor = Color.WHITE;
377 color.backColor = Color.BLUE;
378 color.bold = false;
379 colors.put("tdirectorylist", color);
380 color = new CellAttributes();
381 color.foreColor = Color.BLACK;
382 color.backColor = Color.CYAN;
383 color.bold = false;
384 colors.put("tdirectorylist.selected", color);
385 color = new CellAttributes();
386 color.foreColor = Color.BLACK;
387 color.backColor = Color.CYAN;
388 color.bold = false;
389 colors.put("tdirectorylist.unreadable", color);
390 color = new CellAttributes();
391 color.foreColor = Color.BLACK;
392 color.backColor = Color.BLUE;
393 color.bold = true;
394 colors.put("tdirectorylist.inactive", color);
395
396 // TEditor
397 color = new CellAttributes();
398 color.foreColor = Color.WHITE;
399 color.backColor = Color.BLACK;
400 color.bold = false;
401 colors.put("teditor", color);
402
403
404 }
405
406 /**
407 * Public constructor.
408 */
409 public ColorTheme() {
410 setDefaultTheme();
411 }
412 }
413