1 /*******************************************************************************
2 * Copyright (c) 2010 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.ui
.views
.timechart
;
15 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.colors
.ColorSetting
;
16 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.colors
.ColorSettingsManager
;
17 import org
.eclipse
.linuxtools
.tmf
.ui
.widgets
.timegraph
.StateItem
;
18 import org
.eclipse
.linuxtools
.tmf
.ui
.widgets
.timegraph
.TimeGraphPresentationProvider
;
19 import org
.eclipse
.linuxtools
.tmf
.ui
.widgets
.timegraph
.model
.ITimeEvent
;
20 import org
.eclipse
.swt
.SWT
;
21 import org
.eclipse
.swt
.graphics
.Color
;
22 import org
.eclipse
.swt
.graphics
.GC
;
23 import org
.eclipse
.swt
.graphics
.Rectangle
;
24 import org
.eclipse
.swt
.widgets
.Display
;
26 public class TimeChartAnalysisProvider
extends TimeGraphPresentationProvider
{
28 private static final Color BOOKMARK_INNER_COLOR
= new Color(Display
.getDefault(), 115, 165, 224);
29 private static final Color BOOKMARK_OUTER_COLOR
= new Color(Display
.getDefault(), 2, 70, 140);
30 private static final Color SEARCH_MATCH_COLOR
= new Color(Display
.getDefault(), 177, 118, 14);
32 private int lastX
= Integer
.MIN_VALUE
;
33 private int currX
= Integer
.MIN_VALUE
;
34 private int lastPriority
;
35 private int lastBookmarkX
= Integer
.MIN_VALUE
;
38 public StateItem
[] getStateTable() {
40 ColorSetting
[] settings
= ColorSettingsManager
.getColorSettings();
41 StateItem
[] stateItems
= new StateItem
[settings
.length
];
42 for (int i
= 0; i
< settings
.length
; i
++) {
43 stateItems
[i
] = new StateItem(settings
[i
].getTickColorRGB());
49 public int getStateTableIndex(ITimeEvent event
) {
50 int priority
= ((TimeChartEvent
) event
).getColorSettingPriority();
52 priority
= Math
.min(priority
, lastPriority
);
54 lastPriority
= priority
;
59 public void postDrawEvent(ITimeEvent event
, Rectangle rect
, GC gc
) {
60 if (! ((TimeChartEvent
) event
).isVisible()) {
65 if (lastBookmarkX
== rect
.x
|| ((TimeChartEvent
) event
).isBookmarked()) {
66 drawBookmark(rect
, gc
);
67 lastBookmarkX
= rect
.x
;
68 } else if (lastBookmarkX
== rect
.x
- 1) {
69 Rectangle r
= new Rectangle(lastBookmarkX
, rect
.y
, rect
.width
, rect
.height
);
72 lastBookmarkX
= Integer
.MIN_VALUE
;
74 if (((TimeChartEvent
) event
).isSearchMatch()) {
75 drawSearchMatch(rect
, gc
);
79 private void drawBookmark(Rectangle r
, GC gc
) {
80 gc
.setForeground(BOOKMARK_OUTER_COLOR
);
81 gc
.drawLine(r
.x
- 1, r
.y
- 2, r
.x
- 1, r
.y
+ 2);
82 gc
.drawLine(r
.x
+ 1, r
.y
- 2, r
.x
+ 1, r
.y
+ 2);
83 gc
.drawPoint(r
.x
, r
.y
- 2);
84 gc
.setForeground(BOOKMARK_INNER_COLOR
);
85 gc
.drawLine(r
.x
, r
.y
- 1, r
.x
, r
.y
+ 1);
86 gc
.setForeground(Display
.getDefault().getSystemColor(SWT
.COLOR_WHITE
));
87 gc
.drawPoint(r
.x
- 1, r
.y
+ 3);
88 gc
.drawPoint(r
.x
, r
.y
+ 2);
89 gc
.drawPoint(r
.x
+ 1, r
.y
+ 3);
92 private void drawSearchMatch(Rectangle r
, GC gc
) {
93 gc
.setForeground(SEARCH_MATCH_COLOR
);
94 gc
.drawPoint(r
.x
, r
.y
+ r
.height
);
95 gc
.drawLine(r
.x
- 1, r
.y
+ r
.height
+ 1, r
.x
+ 1, r
.y
+ r
.height
+ 1);
96 gc
.drawLine(r
.x
- 2, r
.y
+ r
.height
+ 2, r
.x
+ 2, r
.y
+ r
.height
+ 2);