2 * Jexer - Java Text User Interface
6 * Author: Kevin Lamonte, <a href="mailto:kevin.lamonte@gmail.com">kevin.lamonte@gmail.com</a>
8 * License: LGPLv3 or later
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
15 * Copyright (C) 2015 Kevin Lamonte
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.
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.
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
35 import java
.io
.BufferedReader
;
36 import java
.io
.FileReader
;
37 import java
.io
.FileWriter
;
38 import java
.io
.IOException
;
39 import java
.util
.SortedMap
;
40 import java
.util
.StringTokenizer
;
41 import java
.util
.TreeMap
;
44 * ColorTheme is a collection of colors keyed by string.
46 public class ColorTheme
{
49 * The current theme colors
51 private SortedMap
<String
, CellAttributes
> colors
;
57 colors
= new TreeMap
<String
, CellAttributes
>();
62 * Retrieve the CellAttributes by name.
64 * @param name hash key
65 * @return color associated with hash key
67 public CellAttributes
getColor(String name
) {
68 CellAttributes attr
= (CellAttributes
)colors
.get(name
);
73 * Save the colors to an ASCII file
75 * @param filename file to write to
77 public void save(String filename
) throws IOException
{
78 FileWriter file
= new FileWriter(filename
);
79 for (String key
: colors
.keySet()) {
80 CellAttributes color
= getColor(key
);
81 file
.write(String
.format("%s = %s\n", key
, color
));
87 * Read colors from an ASCII file
89 * @param filename file to read from
91 public void load(String filename
) throws IOException
{
92 BufferedReader reader
= new BufferedReader(new FileReader(filename
));
93 String line
= reader
.readLine();
94 for (; line
!= null; line
= reader
.readLine()) {
100 // Look for lines that resemble:
101 // "key = blah on blah"
102 // "key = bold blah on blah"
103 StringTokenizer tokenizer
= new StringTokenizer(line
);
104 key
= tokenizer
.nextToken();
105 if (!tokenizer
.nextToken().equals("=")) {
109 bold
= tokenizer
.nextToken();
110 if (!bold
.toLowerCase().equals("bold")) {
111 // "key = blah on blah"
114 // "key = bold blah on blah"
115 foreColor
= tokenizer
.nextToken().toLowerCase();
117 if (!tokenizer
.nextToken().toLowerCase().equals("on")) {
121 backColor
= tokenizer
.nextToken().toLowerCase();
123 CellAttributes color
= new CellAttributes();
124 if (bold
.equals("bold")) {
127 color
.foreColor
= CellAttributes
.colorFromString(foreColor
);
128 color
.backColor
= CellAttributes
.colorFromString(backColor
);
129 colors
.put(key
, color
);
134 * Sets to defaults that resemble the Borland IDE colors.
136 public void setDefaultTheme() {
137 CellAttributes color
;
140 color
= new CellAttributes();
141 color
.foreColor
= Color
.WHITE
;
142 color
.backColor
= Color
.BLUE
;
144 colors
.put("twindow.border", color
);
146 // TWindow background
147 color
= new CellAttributes();
148 color
.foreColor
= Color
.YELLOW
;
149 color
.backColor
= Color
.BLUE
;
151 colors
.put("twindow.background", color
);
153 // TWindow border - inactive
154 color
= new CellAttributes();
155 color
.foreColor
= Color
.BLACK
;
156 color
.backColor
= Color
.BLUE
;
158 colors
.put("twindow.border.inactive", color
);
160 // TWindow background - inactive
161 color
= new CellAttributes();
162 color
.foreColor
= Color
.YELLOW
;
163 color
.backColor
= Color
.BLUE
;
165 colors
.put("twindow.background.inactive", color
);
167 // TWindow border - modal
168 color
= new CellAttributes();
169 color
.foreColor
= Color
.WHITE
;
170 color
.backColor
= Color
.WHITE
;
172 colors
.put("twindow.border.modal", color
);
174 // TWindow background - modal
175 color
= new CellAttributes();
176 color
.foreColor
= Color
.BLACK
;
177 color
.backColor
= Color
.WHITE
;
179 colors
.put("twindow.background.modal", color
);
181 // TWindow border - modal + inactive
182 color
= new CellAttributes();
183 color
.foreColor
= Color
.BLACK
;
184 color
.backColor
= Color
.WHITE
;
186 colors
.put("twindow.border.modal.inactive", color
);
188 // TWindow background - modal + inactive
189 color
= new CellAttributes();
190 color
.foreColor
= Color
.BLACK
;
191 color
.backColor
= Color
.WHITE
;
193 colors
.put("twindow.background.modal.inactive", color
);
195 // TWindow border - during window movement - modal
196 color
= new CellAttributes();
197 color
.foreColor
= Color
.GREEN
;
198 color
.backColor
= Color
.WHITE
;
200 colors
.put("twindow.border.modal.windowmove", color
);
202 // TWindow border - during window movement
203 color
= new CellAttributes();
204 color
.foreColor
= Color
.GREEN
;
205 color
.backColor
= Color
.BLUE
;
207 colors
.put("twindow.border.windowmove", color
);
209 // TWindow background - during window movement
210 color
= new CellAttributes();
211 color
.foreColor
= Color
.YELLOW
;
212 color
.backColor
= Color
.BLUE
;
214 colors
.put("twindow.background.windowmove", color
);
216 // TApplication background
217 color
= new CellAttributes();
218 color
.foreColor
= Color
.BLUE
;
219 color
.backColor
= Color
.WHITE
;
221 colors
.put("tapplication.background", color
);
224 color
= new CellAttributes();
225 color
.foreColor
= Color
.BLACK
;
226 color
.backColor
= Color
.GREEN
;
228 colors
.put("tbutton.inactive", color
);
229 color
= new CellAttributes();
230 color
.foreColor
= Color
.WHITE
;
231 color
.backColor
= Color
.GREEN
;
233 colors
.put("tbutton.active", color
);
234 color
= new CellAttributes();
235 color
.foreColor
= Color
.BLACK
;
236 color
.backColor
= Color
.WHITE
;
238 colors
.put("tbutton.disabled", color
);
239 color
= new CellAttributes();
240 color
.foreColor
= Color
.YELLOW
;
241 color
.backColor
= Color
.GREEN
;
243 colors
.put("tbutton.mnemonic", color
);
244 color
= new CellAttributes();
245 color
.foreColor
= Color
.YELLOW
;
246 color
.backColor
= Color
.GREEN
;
248 colors
.put("tbutton.mnemonic.highlighted", color
);
251 color
= new CellAttributes();
252 color
.foreColor
= Color
.WHITE
;
253 color
.backColor
= Color
.BLUE
;
255 colors
.put("tlabel", color
);
258 color
= new CellAttributes();
259 color
.foreColor
= Color
.WHITE
;
260 color
.backColor
= Color
.BLACK
;
262 colors
.put("ttext", color
);
265 color
= new CellAttributes();
266 color
.foreColor
= Color
.WHITE
;
267 color
.backColor
= Color
.BLUE
;
269 colors
.put("tfield.inactive", color
);
270 color
= new CellAttributes();
271 color
.foreColor
= Color
.YELLOW
;
272 color
.backColor
= Color
.BLACK
;
274 colors
.put("tfield.active", color
);
277 color
= new CellAttributes();
278 color
.foreColor
= Color
.WHITE
;
279 color
.backColor
= Color
.BLUE
;
281 colors
.put("tcheckbox.inactive", color
);
282 color
= new CellAttributes();
283 color
.foreColor
= Color
.YELLOW
;
284 color
.backColor
= Color
.BLACK
;
286 colors
.put("tcheckbox.active", color
);
290 color
= new CellAttributes();
291 color
.foreColor
= Color
.WHITE
;
292 color
.backColor
= Color
.BLUE
;
294 colors
.put("tradiobutton.inactive", color
);
295 color
= new CellAttributes();
296 color
.foreColor
= Color
.YELLOW
;
297 color
.backColor
= Color
.BLACK
;
299 colors
.put("tradiobutton.active", color
);
302 color
= new CellAttributes();
303 color
.foreColor
= Color
.WHITE
;
304 color
.backColor
= Color
.BLUE
;
306 colors
.put("tradiogroup.inactive", color
);
307 color
= new CellAttributes();
308 color
.foreColor
= Color
.YELLOW
;
309 color
.backColor
= Color
.BLUE
;
311 colors
.put("tradiogroup.active", color
);
314 color
= new CellAttributes();
315 color
.foreColor
= Color
.BLACK
;
316 color
.backColor
= Color
.WHITE
;
318 colors
.put("tmenu", color
);
319 color
= new CellAttributes();
320 color
.foreColor
= Color
.BLACK
;
321 color
.backColor
= Color
.GREEN
;
323 colors
.put("tmenu.highlighted", color
);
324 color
= new CellAttributes();
325 color
.foreColor
= Color
.RED
;
326 color
.backColor
= Color
.WHITE
;
328 colors
.put("tmenu.mnemonic", color
);
329 color
= new CellAttributes();
330 color
.foreColor
= Color
.RED
;
331 color
.backColor
= Color
.GREEN
;
333 colors
.put("tmenu.mnemonic.highlighted", color
);
334 color
= new CellAttributes();
335 color
.foreColor
= Color
.BLACK
;
336 color
.backColor
= Color
.WHITE
;
338 colors
.put("tmenu.disabled", color
);
341 color
= new CellAttributes();
342 color
.foreColor
= Color
.BLUE
;
343 color
.backColor
= Color
.BLUE
;
345 colors
.put("tprogressbar.complete", color
);
346 color
= new CellAttributes();
347 color
.foreColor
= Color
.WHITE
;
348 color
.backColor
= Color
.BLUE
;
350 colors
.put("tprogressbar.incomplete", color
);
352 // THScroller / TVScroller
353 color
= new CellAttributes();
354 color
.foreColor
= Color
.CYAN
;
355 color
.backColor
= Color
.BLUE
;
357 colors
.put("tscroller.bar", color
);
358 color
= new CellAttributes();
359 color
.foreColor
= Color
.BLUE
;
360 color
.backColor
= Color
.CYAN
;
362 colors
.put("tscroller.arrows", color
);
365 color
= new CellAttributes();
366 color
.foreColor
= Color
.WHITE
;
367 color
.backColor
= Color
.BLUE
;
369 colors
.put("ttreeview", color
);
370 color
= new CellAttributes();
371 color
.foreColor
= Color
.GREEN
;
372 color
.backColor
= Color
.BLUE
;
374 colors
.put("ttreeview.expandbutton", color
);
375 color
= new CellAttributes();
376 color
.foreColor
= Color
.BLACK
;
377 color
.backColor
= Color
.CYAN
;
379 colors
.put("ttreeview.selected", color
);
380 color
= new CellAttributes();
381 color
.foreColor
= Color
.RED
;
382 color
.backColor
= Color
.BLUE
;
384 colors
.put("ttreeview.unreadable", color
);
385 color
= new CellAttributes();
386 color
.foreColor
= Color
.BLACK
;
387 color
.backColor
= Color
.BLUE
;
389 colors
.put("ttreeview.inactive", color
);
392 color
= new CellAttributes();
393 color
.foreColor
= Color
.WHITE
;
394 color
.backColor
= Color
.BLUE
;
396 colors
.put("tdirectorylist", color
);
397 color
= new CellAttributes();
398 color
.foreColor
= Color
.BLACK
;
399 color
.backColor
= Color
.CYAN
;
401 colors
.put("tdirectorylist.selected", color
);
402 color
= new CellAttributes();
403 color
.foreColor
= Color
.BLACK
;
404 color
.backColor
= Color
.CYAN
;
406 colors
.put("tdirectorylist.unreadable", color
);
407 color
= new CellAttributes();
408 color
.foreColor
= Color
.BLACK
;
409 color
.backColor
= Color
.BLUE
;
411 colors
.put("tdirectorylist.inactive", color
);
414 color
= new CellAttributes();
415 color
.foreColor
= Color
.WHITE
;
416 color
.backColor
= Color
.BLACK
;
418 colors
.put("teditor", color
);