Provide interface for showing state type names per time graph entry
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / widgets / timegraph / dialogs / TimeGraphLegend.java
CommitLineData
fb5cad3d
PT
1/*******************************************************************************\r
2 * Copyright (c) 2009, 2012 Ericsson.\r
013a5f1c 3 *\r
fb5cad3d
PT
4 * All rights reserved. This program and the accompanying materials are\r
5 * made available under the terms of the Eclipse Public License v1.0 which\r
6 * accompanies this distribution, and is available at\r
7 * http://www.eclipse.org/legal/epl-v10.html\r
013a5f1c 8 *\r
fb5cad3d
PT
9 * Contributors:\r
10 * Alvaro Sanchez-Leon - Initial API and implementation\r
11 * Patrick Tasse - Refactoring\r
12 *******************************************************************************/\r
13\r
14package org.eclipse.linuxtools.tmf.ui.widgets.timegraph.dialogs;\r
15\r
16import org.eclipse.jface.dialogs.IDialogConstants;\r
17import org.eclipse.jface.dialogs.TitleAreaDialog;\r
b83af2c3
PT
18import org.eclipse.jface.resource.JFaceResources;\r
19import org.eclipse.jface.resource.LocalResourceManager;\r
fb5cad3d 20import org.eclipse.linuxtools.internal.tmf.ui.Messages;\r
b83af2c3
PT
21import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphPresentationProvider;\r
22import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.StateItem;\r
fb5cad3d
PT
23import org.eclipse.swt.SWT;\r
24import org.eclipse.swt.graphics.Color;\r
25import org.eclipse.swt.graphics.GC;\r
b83af2c3 26import org.eclipse.swt.graphics.RGB;\r
fb5cad3d
PT
27import org.eclipse.swt.graphics.Rectangle;\r
28import org.eclipse.swt.layout.GridData;\r
29import org.eclipse.swt.layout.GridLayout;\r
30import org.eclipse.swt.widgets.Canvas;\r
31import org.eclipse.swt.widgets.Composite;\r
32import org.eclipse.swt.widgets.Control;\r
b83af2c3 33import org.eclipse.swt.widgets.Display;\r
fb5cad3d
PT
34import org.eclipse.swt.widgets.Event;\r
35import org.eclipse.swt.widgets.Group;\r
36import org.eclipse.swt.widgets.Label;\r
37import org.eclipse.swt.widgets.Listener;\r
38import org.eclipse.swt.widgets.Shell;\r
39\r
013a5f1c
AM
40/**\r
41 * Legend for the colors used in the time graph view\r
42 *\r
43 * @version 1.0\r
44 * @author Alvaro Sanchez-Leon\r
45 * @author Patrick Tasse\r
46 */\r
fb5cad3d
PT
47public class TimeGraphLegend extends TitleAreaDialog {\r
48\r
013a5f1c
AM
49 private final ITimeGraphPresentationProvider provider;\r
50 private final LocalResourceManager fResourceManager = new LocalResourceManager(JFaceResources.getResources());\r
fb5cad3d 51\r
3934297e
AM
52 /**\r
53 * Open the time graph legend window\r
54 *\r
55 * @param parent\r
56 * The parent shell\r
57 * @param provider\r
58 * The presentation provider\r
59 */\r
b83af2c3
PT
60 public static void open(Shell parent, ITimeGraphPresentationProvider provider) {\r
61 (new TimeGraphLegend(parent, provider)).open();\r
fb5cad3d
PT
62 }\r
63\r
3934297e
AM
64 /**\r
65 * Standard constructor\r
66 *\r
67 * @param parent\r
68 * The parent shell\r
69 * @param provider\r
70 * The presentation provider\r
71 */\r
b83af2c3 72 public TimeGraphLegend(Shell parent, ITimeGraphPresentationProvider provider) {\r
fb5cad3d 73 super(parent);\r
b83af2c3
PT
74 this.provider = provider;\r
75 this.setShellStyle(getShellStyle());\r
fb5cad3d
PT
76 }\r
77\r
78 @Override\r
79 protected Control createDialogArea(Composite parent) {\r
80 Composite dlgArea = (Composite) super.createDialogArea(parent);\r
81 Composite composite = new Composite(dlgArea, SWT.NONE);\r
82\r
83 GridLayout layout = new GridLayout();\r
84 layout.numColumns = 2;\r
85 composite.setLayout(layout);\r
86 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);\r
87 composite.setLayoutData(gd);\r
88\r
b83af2c3 89 createStatesGroup(composite);\r
fb5cad3d 90\r
b83af2c3 91 setTitle(Messages.TmfTimeLegend_LEGEND);\r
fb5cad3d
PT
92 setDialogHelpAvailable(false);\r
93 setHelpAvailable(false);\r
94\r
95 return composite;\r
96 }\r
97\r
b83af2c3 98 private void createStatesGroup(Composite composite) {\r
fb5cad3d 99 Group gs = new Group(composite, SWT.NONE);\r
9cd23350
BH
100 String stateTypeName = provider.getStateTypeName();\r
101 StringBuffer buffer = new StringBuffer();\r
102 if (!stateTypeName.isEmpty()) {\r
103 buffer.append(stateTypeName);\r
104 buffer.append(" "); //$NON-NLS-1$\r
105 }\r
106 buffer.append(Messages.TmfTimeLegend_StateTypeName);\r
107 gs.setText(buffer.toString());\r
108\r
fb5cad3d
PT
109 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);\r
110 gs.setLayoutData(gd);\r
111\r
112 GridLayout layout = new GridLayout();\r
113 layout.numColumns = 2;\r
114 layout.marginWidth = 20;\r
115 layout.marginBottom = 10;\r
116 gs.setLayout(layout);\r
117\r
013a5f1c 118 // Go through all the defined pairs of state color and state name and display them.\r
b83af2c3
PT
119 StateItem[] stateItems = provider.getStateTable();\r
120 for (int i = 0; i < stateItems.length; i++) {\r
121 //Get the color related to the index\r
122 RGB rgb = stateItems[i].getStateColor();\r
123\r
fb5cad3d 124 //Get the given name, provided by the interface to the application\r
b83af2c3
PT
125 String stateName = stateItems[i].getStateString();\r
126\r
127 // draw color with name\r
128 Bar bar = new Bar(gs, rgb);\r
129 gd = new GridData();\r
130 gd.widthHint = 40;\r
131 gd.heightHint = 20;\r
132 gd.verticalIndent = 8;\r
133 bar.setLayoutData(gd);\r
134 Label name = new Label(gs, SWT.NONE);\r
135 name.setText(stateName);\r
136 gd = new GridData();\r
137 gd.horizontalIndent = 10;\r
138 gd.verticalIndent = 8;\r
139 name.setLayoutData(gd);\r
fb5cad3d
PT
140 }\r
141 }\r
142\r
143 @Override\r
144 protected void configureShell(Shell shell) {\r
145 super.configureShell(shell);\r
b83af2c3 146 shell.setText(Messages.TmfTimeLegend_TRACE_STATES_TITLE);\r
fb5cad3d
PT
147 }\r
148\r
149 @Override\r
150 protected void createButtonsForButtonBar(Composite parent) {\r
151 createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,\r
152 true);\r
153 }\r
154\r
155 class Bar extends Canvas {\r
013a5f1c 156 private final Color color;\r
fb5cad3d 157\r
b83af2c3 158 public Bar(Composite parent, RGB rgb) {\r
fb5cad3d
PT
159 super(parent, SWT.NONE);\r
160\r
b83af2c3 161 color = fResourceManager.createColor(rgb);\r
fb5cad3d
PT
162 addListener(SWT.Paint, new Listener() {\r
163 @Override\r
164 public void handleEvent(Event event) {\r
165 draw(event.gc);\r
166 }\r
167 });\r
168 }\r
169\r
170 private void draw(GC gc) {\r
171 Rectangle r = getClientArea();\r
172 gc.setBackground(color);\r
173 gc.fillRectangle(r);\r
b83af2c3 174 gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));\r
fb5cad3d
PT
175 gc.drawRectangle(0, 0, r.width - 1, r.height - 1);\r
176 }\r
fb5cad3d 177\r
b83af2c3
PT
178 @Override\r
179 public void dispose() {\r
180 super.dispose();\r
181 color.dispose();\r
fb5cad3d
PT
182 }\r
183\r
fb5cad3d
PT
184 }\r
185\r
fb5cad3d 186}\r
This page took 0.038644 seconds and 5 git commands to generate.