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
;
27 * Provider for a time chart analysis view
30 * @author Patrick Tasse
32 public class TimeChartAnalysisProvider
extends TimeGraphPresentationProvider
{
34 private static final Color BOOKMARK_INNER_COLOR
= new Color(Display
.getDefault(), 115, 165, 224);
35 private static final Color BOOKMARK_OUTER_COLOR
= new Color(Display
.getDefault(), 2, 70, 140);
36 private static final Color SEARCH_MATCH_COLOR
= new Color(Display
.getDefault(), 177, 118, 14);
38 private int lastX
= Integer
.MIN_VALUE
;
39 private int currX
= Integer
.MIN_VALUE
;
40 private int lastPriority
;
41 private int lastBookmarkX
= Integer
.MIN_VALUE
;
44 public StateItem
[] getStateTable() {
46 ColorSetting
[] settings
= ColorSettingsManager
.getColorSettings();
47 StateItem
[] stateItems
= new StateItem
[settings
.length
];
48 for (int i
= 0; i
< settings
.length
; i
++) {
49 stateItems
[i
] = new StateItem(settings
[i
].getTickColorRGB());
55 public int getStateTableIndex(ITimeEvent event
) {
56 int priority
= ((TimeChartEvent
) event
).getColorSettingPriority();
58 priority
= Math
.min(priority
, lastPriority
);
60 lastPriority
= priority
;
65 public void postDrawEvent(ITimeEvent event
, Rectangle rect
, GC gc
) {
66 if (! ((TimeChartEvent
) event
).isVisible()) {
71 if (lastBookmarkX
== rect
.x
|| ((TimeChartEvent
) event
).isBookmarked()) {
72 drawBookmark(rect
, gc
);
73 lastBookmarkX
= rect
.x
;
74 } else if (lastBookmarkX
== rect
.x
- 1) {
75 Rectangle r
= new Rectangle(lastBookmarkX
, rect
.y
, rect
.width
, rect
.height
);
78 lastBookmarkX
= Integer
.MIN_VALUE
;
80 if (((TimeChartEvent
) event
).isSearchMatch()) {
81 drawSearchMatch(rect
, gc
);
85 private static void drawBookmark(Rectangle r
, GC gc
) {
86 gc
.setForeground(BOOKMARK_OUTER_COLOR
);
87 gc
.drawLine(r
.x
- 1, r
.y
- 2, r
.x
- 1, r
.y
+ 2);
88 gc
.drawLine(r
.x
+ 1, r
.y
- 2, r
.x
+ 1, r
.y
+ 2);
89 gc
.drawPoint(r
.x
, r
.y
- 2);
90 gc
.setForeground(BOOKMARK_INNER_COLOR
);
91 gc
.drawLine(r
.x
, r
.y
- 1, r
.x
, r
.y
+ 1);
92 gc
.setForeground(Display
.getDefault().getSystemColor(SWT
.COLOR_WHITE
));
93 gc
.drawPoint(r
.x
- 1, r
.y
+ 3);
94 gc
.drawPoint(r
.x
, r
.y
+ 2);
95 gc
.drawPoint(r
.x
+ 1, r
.y
+ 3);
98 private static void drawSearchMatch(Rectangle r
, GC gc
) {
99 gc
.setForeground(SEARCH_MATCH_COLOR
);
100 gc
.drawPoint(r
.x
, r
.y
+ r
.height
);
101 gc
.drawLine(r
.x
- 1, r
.y
+ r
.height
+ 1, r
.x
+ 1, r
.y
+ r
.height
+ 1);
102 gc
.drawLine(r
.x
- 2, r
.y
+ r
.height
+ 2, r
.x
+ 2, r
.y
+ r
.height
+ 2);