ctf: Handle traces with unknown event attributes
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / widgets / timegraph / widgets / TimeGraphColorScheme.java
CommitLineData
fb5cad3d
PT
1/*****************************************************************************\r
2 * Copyright (c) 2008 Intel Corporation, 2009, 2012 Ericsson.\r
3 * All rights reserved. This program and the accompanying materials\r
4 * are made available under the terms of the Eclipse Public License v1.0\r
5 * which accompanies this distribution, and is available at\r
6 * http://www.eclipse.org/legal/epl-v10.html\r
7 *\r
8 * Contributors:\r
9 * Intel Corporation - Initial API and implementation\r
10 * Ruslan A. Scherbakov, Intel - Initial API and implementation\r
11 * Alvaro Sanchez-Leon - Updated for TMF\r
12 * Patrick Tasse - Refactoring\r
13 *\r
14 *****************************************************************************/\r
15\r
16package org.eclipse.linuxtools.tmf.ui.widgets.timegraph.widgets;\r
17\r
fb5cad3d
PT
18import org.eclipse.swt.SWT;\r
19import org.eclipse.swt.graphics.Color;\r
20\r
013a5f1c
AM
21/**\r
22 * Color theme used by the timegraph view\r
23 *\r
24 * @version 1.0\r
25 * @author Patrick Tasse\r
26 */\r
3934297e 27@SuppressWarnings("javadoc")\r
fb5cad3d
PT
28public class TimeGraphColorScheme {\r
29\r
30 // elements color indices\r
31 static public final int BLACK_STATE = 0;\r
32 static public final int GREEN_STATE = 1;\r
33 static public final int DARK_BLUE_STATE = 2;\r
34 static public final int ORANGE_STATE = 3;\r
35 static public final int GOLD_STATE = 4;\r
36 static public final int RED_STATE = 5;\r
37 static public final int GRAY_STATE = 6;\r
38 static public final int DARK_GREEN_STATE = 7;\r
39 static public final int DARK_YELLOW_STATE = 8;\r
40 static public final int MAGENTA3_STATE = 9;\r
41 static public final int PURPLE1_STATE = 10;\r
42 static public final int PINK1_STATE = 11;\r
43 static public final int AQUAMARINE_STATE = 12;\r
44 static public final int LIGHT_BLUE_STATE = 13;\r
45 static public final int CADET_BLUE_STATE = 14;\r
46 static public final int OLIVE_STATE = 15;\r
47\r
48 static public final int STATES0 = 0;\r
49 static public final int STATES1 = 15;\r
50\r
fb5cad3d
PT
51 // selected state elements color indices\r
52 static public final int BLACK_STATE_SEL = 16;\r
53 static public final int GREEN_STATE_SEL = 17;\r
54 static public final int DARK_BLUE_STATE_SEL = 18;\r
55 static public final int ORANGE_STATE_SEL = 19;\r
56 static public final int GOLD_STATE_SEL = 20;\r
57 static public final int RED_STATE_SEL = 21;\r
58 static public final int GRAY_STATE_SEL = 22;\r
59 static public final int DARK_GREEN_STATE_SEL = 23;\r
60 static public final int DARK_YELLOW_STATE_SEL = 24;\r
61 static public final int MAGENTA3_STATE_SEL = 25;\r
62 static public final int PURPLE1_STATE_SEL = 26;\r
63 static public final int PINK1_STATE_SEL = 27;\r
64 static public final int AQUAMARINE_STATE_SEL = 28;\r
65 static public final int LIGHT_BLUE_STATE_SEL = 29;\r
66 static public final int CADET_BLUE_STATE_SEL = 30;\r
67 static public final int OLIVE_STATE_SEL = 31;\r
68\r
69 static public final int STATES_SEL0 = 16;\r
70 static public final int STATES_SEL1 = 31;\r
71\r
72 // colors indices for viewer controls\r
73 static public final int BACKGROUND = 32;\r
74 static public final int FOREGROUND = 33;\r
75 static public final int BACKGROUND_SEL = 34;\r
76 static public final int FOREGROUND_SEL = 35;\r
77 static public final int BACKGROUND_SEL_NOFOCUS = 36;\r
78 static public final int FOREGROUND_SEL_NOFOCUS = 37;\r
79 static public final int TOOL_BACKGROUND = 38;\r
80 static public final int TOOL_FOREGROUND = 39;\r
81\r
82 // misc colors\r
83 static public final int FIX_COLOR = 40;\r
84 static public final int WHITE = 41;\r
85 static public final int GRAY = 42;\r
86 static public final int BLACK = 43;\r
87 static public final int DARK_GRAY = 44;\r
88\r
89 // selected border color indices\r
90 static public final int BLACK_BORDER = 45;\r
91 static public final int GREEN_BORDER = 46;\r
92 static public final int DARK_BLUE_BORDER = 47;\r
93 static public final int ORANGE_BORDER = 48;\r
94 static public final int GOLD_BORDER = 49;\r
95 static public final int RED_BORDER = 50;\r
96 static public final int GRAY_BORDER = 51;\r
97 static public final int DARK_GREEN_BORDER1 = 52;\r
98 static public final int DARK_YELLOW_BORDER1 = 53;\r
99 static public final int MAGENTA3_BORDER1 = 54;\r
100 static public final int PURPLE1_BORDER1 = 55;\r
101 static public final int PINK1_BORDER1 = 56;\r
102 static public final int AQUAMARINE_BORDER1 = 57;\r
103 static public final int LIGHT_BLUE_BORDER1 = 58;\r
104 static public final int CADET_BLUE_STATE_BORDER = 59;\r
105 static public final int OLIVE_BORDER2 = 60;\r
106\r
107 static public final int STATES_BORDER0 = 45;\r
108 static public final int STATES_BORDER1 = 60;\r
109\r
110 static public final int MID_LINE = 61;\r
111 static public final int RED = 62;\r
112 static public final int GREEN = 63;\r
113 static public final int BLUE = 64;\r
114 static public final int YELLOW = 65;\r
115 static public final int CYAN = 66;\r
116 static public final int MAGENTA = 67;\r
117\r
118 static public final int SELECTED_TIME = 68;\r
119 static public final int LEGEND_BACKGROUND = 69;\r
120 static public final int LEGEND_FOREGROUND = 70;\r
121\r
122 // group items' colors\r
123 static public final int GR_BACKGROUND = 71;\r
124 static public final int GR_FOREGROUND = 72;\r
125 static public final int GR_BACKGROUND_SEL = 73;\r
126 static public final int GR_FOREGROUND_SEL = 74;\r
127 static public final int GR_BACKGROUND_SEL_NOFOCUS = 75;\r
128 static public final int GR_FOREGROUND_SEL_NOFOCUS = 76;\r
129\r
130 static public final int LIGHT_LINE = 77;\r
131 static public final int BACKGROUND_NAME = 78;\r
132 static public final int BACKGROUND_NAME_SEL = 79;\r
133 static public final int BACKGROUND_NAME_SEL_NOFOCUS = 80;\r
134\r
135 // Interraction's colors\r
136 static public final int TI_START_THREAD = BLACK;\r
137 static public final int TI_HANDOFF_LOCK = BLUE;\r
138 static public final int TI_NOTIFY_ALL = GREEN;\r
139 static public final int TI_NOTIFY = GREEN;\r
140 static public final int TI_NOTIFY_JOINED = DARK_GRAY;\r
141 static public final int TI_INTERRUPT = RED;\r
142 static public final int TI_WAIT_EXCEEDED = BLUE;\r
143\r
144 static interface IColorProvider {\r
145 public Color get();\r
146 }\r
147\r
148 static class SysCol implements IColorProvider {\r
149 int syscol;\r
150\r
151 SysCol(int syscol) {\r
152 this.syscol = syscol;\r
153 }\r
154\r
155 @Override\r
156 public Color get() {\r
157 return Utils.getSysColor(syscol);\r
158 }\r
159 }\r
160\r
161 static class RGB implements IColorProvider {\r
162 int r;\r
163 int g;\r
164 int b;\r
165\r
166 RGB(int r, int g, int b) {\r
167 this.r = r;\r
168 this.g = g;\r
169 this.b = b;\r
170 }\r
171\r
172 @Override\r
173 public Color get() {\r
174 return new Color(null, r, g, b);\r
175 }\r
176 }\r
177\r
178 static class Mix implements IColorProvider {\r
179 IColorProvider cp1;\r
180 IColorProvider cp2;\r
181 int w1;\r
182 int w2;\r
183\r
184 Mix(IColorProvider cp1, IColorProvider cp2, int w1, int w2) {\r
185 this.cp1 = cp1;\r
186 this.cp2 = cp2;\r
187 this.w1 = w1;\r
188 this.w2 = w2;\r
189 }\r
190\r
191 Mix(IColorProvider cp1, IColorProvider cp2) {\r
192 this.cp1 = cp1;\r
193 this.cp2 = cp2;\r
194 this.w1 = 1;\r
195 this.w2 = 1;\r
196 }\r
197\r
198 @Override\r
199 public Color get() {\r
200 Color col1 = cp1.get();\r
201 Color col2 = cp2.get();\r
202 Color col = Utils.mixColors(col1, col2, w1, w2);\r
203 return col;\r
204 }\r
205 }\r
206\r
207 static private final IColorProvider _providersMap[] = {\r
208 //\r
209 new RGB(100, 100, 100), // UNKNOWN\r
210 new RGB(174, 200, 124), // RUNNING\r
211 new Mix(new SysCol(SWT.COLOR_BLUE), new SysCol(SWT.COLOR_GRAY), 1, 3), // SLEEPING\r
212 new RGB(210, 150, 60), // WAITING\r
213 new RGB(242, 225, 168), // BLOCKED\r
214 new Mix(new SysCol(SWT.COLOR_RED), new SysCol(SWT.COLOR_GRAY), 1, 3), // DEADLOCK\r
215 new RGB(200, 200, 200), // STOPPED\r
216 new RGB(35, 107, 42), // STEEL BLUE\r
217 new RGB(205,205,0), // DARK YELLOW\r
218 new RGB(205, 0, 205), // MAGENTA\r
219 new RGB(171, 130, 255), // PURPLE\r
220 new RGB(255, 181, 197), // PINK\r
221 new RGB(112, 219, 147), // AQUAMARINE\r
222 new RGB(198, 226, 255), // SLATEGRAY\r
223 new RGB(95, 158, 160), // CADET BLUE\r
224 new RGB(107, 142, 35), // OLIVE\r
225\r
226\r
227 //TODO: Does not seem to be used, check during clean-up\r
228 new SysCol(SWT.COLOR_WHITE), // UNKNOWN_SEL\r
229 new SysCol(SWT.COLOR_GREEN), // RUNNING_SEL\r
230 new SysCol(SWT.COLOR_BLUE), // SLEEPING_SEL\r
231 new SysCol(SWT.COLOR_CYAN), // WAITING_SEL\r
232 new SysCol(SWT.COLOR_YELLOW), // BLOCKED_SEL\r
233 new SysCol(SWT.COLOR_RED), // DEADLOCK_SEL\r
234 new SysCol(SWT.COLOR_DARK_GRAY), // STOPPED_SEL\r
013a5f1c
AM
235 new SysCol(SWT.COLOR_WHITE),\r
236 new SysCol(SWT.COLOR_GREEN),\r
237 new SysCol(SWT.COLOR_BLUE),\r
238 new SysCol(SWT.COLOR_CYAN),\r
239 new SysCol(SWT.COLOR_YELLOW),\r
240 new SysCol(SWT.COLOR_RED),\r
241 new SysCol(SWT.COLOR_DARK_GRAY),\r
242 new SysCol(SWT.COLOR_WHITE),\r
243 new SysCol(SWT.COLOR_GREEN),\r
fb5cad3d
PT
244\r
245\r
246 new SysCol(SWT.COLOR_LIST_BACKGROUND), // BACKGROUND\r
247 new SysCol(SWT.COLOR_LIST_FOREGROUND), // FOREGROUND\r
248 new RGB(232, 242, 254), // BACKGROUND_SEL\r
249 new SysCol(SWT.COLOR_LIST_FOREGROUND), // FOREGROUND_SEL\r
250 new SysCol(SWT.COLOR_WIDGET_BACKGROUND), // BACKGROUND_SEL_NOFOCUS\r
251 new SysCol(SWT.COLOR_WIDGET_FOREGROUND), // FOREGROUND_SEL_NOFOCUS\r
252 new SysCol(SWT.COLOR_WIDGET_BACKGROUND), // TOOL_BACKGROUND\r
253 new SysCol(SWT.COLOR_WIDGET_DARK_SHADOW), // TOOL_FOREGROUND\r
254\r
255 new SysCol(SWT.COLOR_GRAY), // FIX_COLOR\r
256 new SysCol(SWT.COLOR_WHITE), // WHITE\r
257 new SysCol(SWT.COLOR_GRAY), // GRAY\r
258 new SysCol(SWT.COLOR_BLACK), // BLACK\r
259 new SysCol(SWT.COLOR_DARK_GRAY), // DARK_GRAY\r
260\r
261 new SysCol(SWT.COLOR_DARK_GRAY), // BLACK_BORDER\r
262 new RGB(75, 115, 120), // GREEN_BORDER\r
263 new SysCol(SWT.COLOR_DARK_BLUE), // DARK_BLUE_BORDER\r
264 new RGB(242, 225, 168), // ORANGE_BORDER\r
265 new RGB(210, 150, 60), // GOLD_BORDER\r
266 new SysCol(SWT.COLOR_DARK_RED), // RED_BORDER\r
267 new SysCol(SWT.COLOR_BLACK), // GRAY_BORDER\r
268 new SysCol(SWT.COLOR_DARK_GRAY), // DARK_GREEN_BORDER\r
269 new RGB(75, 115, 120), // DARK_YELLOW_BORDER\r
270 new SysCol(SWT.COLOR_DARK_BLUE), // MAGENTA3_BORDER\r
271 new RGB(242, 225, 168), // PURPLE1_BORDER\r
272 new RGB(210, 150, 60), // PINK1_BORDER\r
273 new SysCol(SWT.COLOR_DARK_RED), // AQUAMARINE_BORDER\r
274 new SysCol(SWT.COLOR_BLACK), // LIGHT_BLUE_BORDER\r
275 new SysCol(SWT.COLOR_DARK_GRAY), // BLUE_BORDER\r
276 new RGB(75, 115, 120), // OLIVE_BORDER\r
277\r
278\r
279 new SysCol(SWT.COLOR_GRAY), // MID_LINE\r
280 new SysCol(SWT.COLOR_RED), // RED\r
281 new SysCol(SWT.COLOR_GREEN), // GREEN\r
282 new SysCol(SWT.COLOR_BLUE), // BLUE\r
283 new SysCol(SWT.COLOR_YELLOW), // YELLOW\r
284 new SysCol(SWT.COLOR_CYAN), // CYAN\r
285 new SysCol(SWT.COLOR_MAGENTA), // MAGENTA\r
286\r
287 new SysCol(SWT.COLOR_BLUE), // SELECTED_TIME\r
288 new SysCol(SWT.COLOR_WIDGET_BACKGROUND), // LEGEND_BACKGROUND\r
289 new SysCol(SWT.COLOR_WIDGET_DARK_SHADOW), // LEGEND_FOREGROUND\r
290\r
291 new Mix(new RGB(150, 200, 240), new SysCol(SWT.COLOR_LIST_BACKGROUND)), // GR_BACKGROUND\r
292 new RGB(0, 0, 50), // GR_FOREGROUND\r
293 new Mix(new RGB(150, 200, 240), new SysCol(SWT.COLOR_WHITE), 6, 1), // GR_BACKGROUND_SEL\r
294 new RGB(0, 0, 50), // GR_FOREGROUND_SEL\r
295 new Mix(new RGB(150, 200, 240), new SysCol(SWT.COLOR_WHITE), 6, 1), // GR_BACKGROUND_SEL_NOFOCUS\r
296 new RGB(0, 0, 50), // GR_FOREGROUND_SEL_NOFOCUS\r
297\r
298 new Mix(new SysCol(SWT.COLOR_GRAY), new SysCol(SWT.COLOR_LIST_BACKGROUND), 1, 3), // LIGHT_LINE\r
299\r
300 new Mix(new SysCol(SWT.COLOR_GRAY), new SysCol(SWT.COLOR_LIST_BACKGROUND), 1, 6), // BACKGROUND_NAME\r
301 new Mix(new SysCol(SWT.COLOR_GRAY), new RGB(232, 242, 254), 1, 6), // BACKGROUND_NAME_SEL\r
302 new Mix(new SysCol(SWT.COLOR_GRAY), new SysCol(SWT.COLOR_WIDGET_BACKGROUND), 1, 6), // BACKGROUND_NAME_SEL_NOFOCUS\r
303 };\r
304\r
013a5f1c 305 private final Color _colors[];\r
fb5cad3d 306\r
3934297e
AM
307 /**\r
308 * Default constructor\r
309 */\r
fb5cad3d
PT
310 public TimeGraphColorScheme() {\r
311 _colors = new Color[_providersMap.length];\r
312 }\r
313\r
3934297e
AM
314 /**\r
315 * Dispose this color scheme\r
316 */\r
fb5cad3d
PT
317 public void dispose() {\r
318 for (int i = 0; i < _colors.length; i++) {\r
319 Utils.dispose(_colors[i]);\r
320 _colors[i] = null;\r
321 }\r
322 }\r
323\r
3934297e
AM
324 /**\r
325 * Get the color matching the given index\r
326 *\r
327 * @param idx\r
328 * The index\r
329 * @return The matching color\r
330 */\r
fb5cad3d
PT
331 public Color getColor(int idx) {\r
332 if (null == _colors[idx]) {\r
333 if (idx >= STATES_SEL0 && idx <= STATES_SEL1) {\r
334 Color col1 = getColor(idx - STATES_SEL0);\r
335 Color col2 = getColor(BACKGROUND_SEL);\r
336 _colors[idx] = Utils.mixColors(col1, col2, 3, 1);\r
337 } else {\r
338 _colors[idx] = _providersMap[idx].get();\r
339 }\r
340 }\r
341 return _colors[idx];\r
342 }\r
343\r
3934297e
AM
344 /**\r
345 * Get an entry's background color based on its status.\r
346 *\r
347 * @param selected\r
348 * If the entry is selected\r
349 * @param focused\r
350 * If the entry is focused\r
351 * @param name\r
352 * Get the color of the name column (false for other columns)\r
353 * @return The matching color\r
354 */\r
fb5cad3d
PT
355 public Color getBkColor(boolean selected, boolean focused, boolean name) {\r
356 if (name) {\r
013a5f1c 357 if (selected && focused) {\r
fb5cad3d 358 return getColor(BACKGROUND_NAME_SEL);\r
013a5f1c
AM
359 }\r
360 if (selected) {\r
fb5cad3d 361 return getColor(BACKGROUND_NAME_SEL_NOFOCUS);\r
013a5f1c 362 }\r
fb5cad3d 363 return getColor(BACKGROUND_NAME);\r
fb5cad3d 364 }\r
abbdd66a
AM
365 if (selected && focused) {\r
366 return getColor(BACKGROUND_SEL);\r
367 }\r
368 if (selected) {\r
369 return getColor(BACKGROUND_SEL_NOFOCUS);\r
370 }\r
371 return getColor(BACKGROUND);\r
fb5cad3d
PT
372 }\r
373\r
3934297e
AM
374 /**\r
375 * Get the correct foreground color\r
376 *\r
377 * @param selected\r
378 * Is the entry selected\r
379 * @param focused\r
380 * Is the entry focused\r
381 * @return The matching color\r
382 */\r
fb5cad3d 383 public Color getFgColor(boolean selected, boolean focused) {\r
013a5f1c 384 if (selected && focused) {\r
fb5cad3d 385 return getColor(FOREGROUND_SEL);\r
013a5f1c
AM
386 }\r
387 if (selected) {\r
fb5cad3d 388 return getColor(FOREGROUND_SEL_NOFOCUS);\r
013a5f1c 389 }\r
fb5cad3d
PT
390 return getColor(FOREGROUND);\r
391 }\r
392\r
3934297e
AM
393 /**\r
394 * Get the correct background color group\r
395 *\r
396 * @param selected\r
397 * Is the entry selected\r
398 * @param focused\r
399 * Is the entry focused\r
400 * @return The matching color\r
401 */\r
fb5cad3d 402 public Color getBkColorGroup(boolean selected, boolean focused) {\r
013a5f1c 403 if (selected && focused) {\r
fb5cad3d 404 return getColor(GR_BACKGROUND_SEL);\r
013a5f1c
AM
405 }\r
406 if (selected) {\r
fb5cad3d 407 return getColor(GR_BACKGROUND_SEL_NOFOCUS);\r
013a5f1c 408 }\r
fb5cad3d
PT
409 return getColor(GR_BACKGROUND);\r
410 }\r
411\r
3934297e
AM
412 /**\r
413 * Get the correct foreground color group\r
414 *\r
415 * @param selected\r
416 * Is the entry selected\r
417 * @param focused\r
418 * Is the entry focused\r
419 * @return The matching color\r
420 */\r
fb5cad3d 421 public Color getFgColorGroup(boolean selected, boolean focused) {\r
013a5f1c 422 if (selected && focused) {\r
fb5cad3d 423 return getColor(GR_FOREGROUND_SEL);\r
013a5f1c
AM
424 }\r
425 if (selected) {\r
fb5cad3d 426 return getColor(GR_FOREGROUND_SEL_NOFOCUS);\r
013a5f1c 427 }\r
fb5cad3d
PT
428 return getColor(GR_FOREGROUND);\r
429 }\r
fb5cad3d 430}\r
This page took 0.046572 seconds and 5 git commands to generate.