Internalize lttng.ui APIs
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / internal / lttng / ui / views / latency / dialogs / ListDialog.java
1 /*******************************************************************************
2 * Copyright (c) 2010, 2011 Ericsson
3 *
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
8 *
9 * Contributors:
10 * Philippe Sawicki (INF4990.A2010@gmail.com) - Initial API and implementation
11 * Mathieu Denis (mathieu.denis55@gmail.com) - Refactored code
12 * Bernd Hufmann - Adapted to new messages file, fixed warnings
13 *******************************************************************************/
14 package org.eclipse.linuxtools.internal.lttng.ui.views.latency.dialogs;
15
16 import java.util.Vector;
17
18 import org.eclipse.jface.dialogs.MessageDialog;
19 import org.eclipse.linuxtools.internal.lttng.core.latency.analyzer.EventMatcher;
20 import org.eclipse.linuxtools.internal.lttng.core.util.EventsPair;
21 import org.eclipse.linuxtools.internal.lttng.ui.views.latency.Messages;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.layout.GridData;
24 import org.eclipse.swt.layout.GridLayout;
25 import org.eclipse.swt.widgets.Button;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Control;
28 import org.eclipse.swt.widgets.Event;
29 import org.eclipse.swt.widgets.Listener;
30 import org.eclipse.swt.widgets.Shell;
31 import org.eclipse.swt.widgets.Table;
32 import org.eclipse.swt.widgets.TableColumn;
33 import org.eclipse.swt.widgets.TableItem;
34
35 /**
36 * <b><u>ListDialog</u></b>
37 * <p>
38 * List dialog, shows the list of start/end event pairs.
39 *
40 * @author Philippe Sawicki
41 */
42 public class ListDialog extends AbstractDialog {
43
44 // ------------------------------------------------------------------------
45 // Attributes
46 // ------------------------------------------------------------------------
47
48 /**
49 * The dialog's table.
50 */
51 protected Table fTable;
52
53 /**
54 * Start event types.
55 */
56 protected Vector<String> fEventStartTypes;
57
58 /**
59 * End event types.
60 */
61 protected Vector<String> fEventEndTypes;
62
63 /**
64 * Table columns
65 */
66 protected TableColumn[] fColumns;
67
68 /**
69 * Column names (header titles).
70 */
71 static final String[] COLUMN_NAMES = { "#", Messages.LatencyView_Dialogs_ListEvents_Columns_Trigger, Messages.LatencyView_Dialogs_ListEvents_Columns_End }; //$NON-NLS-1$
72
73 /**
74 * Column widths.
75 */
76 static final int[] COLUMN_WIDTHS = { 25, 250, 250 };
77
78 /**
79 * The table style.
80 */
81 protected int fStyle;
82
83 // ------------------------------------------------------------------------
84 // Constructor
85 // ------------------------------------------------------------------------
86
87 /**
88 * Constructor.
89 * @param parentShell
90 * The parent shell.
91 * @param title
92 * The dialog's window title.
93 * @param message
94 * The dialog's window message.
95 */
96 public ListDialog(Shell parentShell, String title, String message) {
97 super(parentShell, title, message);
98
99 // Set the table style
100 fStyle = SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL;
101
102 // Get the list of start and end types from the EventMatcher
103 EventsPair pair = getMatchPairs();
104 fEventStartTypes = pair.getFirst();
105 fEventEndTypes = pair.getSecond();
106 }
107
108 // ------------------------------------------------------------------------
109 // Operations
110 // ------------------------------------------------------------------------
111
112 /**
113 * Creates the table's column (i.e. the table header).
114 */
115 protected void createColumns() {
116 fColumns = new TableColumn[COLUMN_NAMES.length];
117 for (int i = 0; i < COLUMN_NAMES.length; i++) {
118 fColumns[i] = new TableColumn(fTable, SWT.LEFT);
119 fColumns[i].setText(COLUMN_NAMES[i]);
120 fColumns[i].setWidth(COLUMN_WIDTHS[i]);
121 }
122 }
123
124 /*
125 * (non-Javadoc)
126 * @see org.eclipse.linuxtools.lttng.ui.views.latency.dialogs.AbstractDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
127 */
128 @Override
129 protected Control createDialogArea(Composite parent) {
130 GridLayout layout = new GridLayout(1, true);
131 parent.setLayout(layout);
132
133 GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
134 fTable = new Table(parent, fStyle);
135 fTable.setLayoutData(layoutData);
136
137 // Some cosmetic enhancements
138 fTable.setHeaderVisible(true);
139 fTable.setLinesVisible(true);
140
141 createColumns();
142
143 for (int i = 0; i < fEventStartTypes.size(); i++) {
144 TableItem item = new TableItem(fTable, SWT.RIGHT);
145
146 String max = String.valueOf(fEventStartTypes.size());
147 String number = formatListNumber(i + 1, max.length());
148
149 String[] columns = { number, fEventStartTypes.get(i), fEventEndTypes.get(i) };
150
151 item.setText(columns);
152 }
153
154 return parent;
155 }
156
157 /*
158 * (non-Javadoc)
159 * @see org.eclipse.linuxtools.lttng.ui.views.latency.dialogs.AbstractDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
160 */
161 @Override
162 protected void createButtonsForButtonBar(Composite parent) {
163 GridData gridData = new GridData();
164 gridData.verticalAlignment = GridData.FILL;
165 gridData.horizontalSpan = 1;
166 gridData.grabExcessHorizontalSpace = true;
167 gridData.grabExcessVerticalSpace = true;
168 gridData.horizontalAlignment = SWT.RIGHT;
169
170 parent.setLayoutData(gridData);
171
172 // Create the "Reset" button
173 Button resetButton = createButton(parent, RESET, Messages.LatencyView_Dialogs_ListEvents_Buttons_Reset, false);
174 resetButton.addListener(SWT.Selection, new Listener() {
175 @Override
176 public void handleEvent(Event event) {
177 boolean confirmDeletion = MessageDialog.openQuestion(getShell(), Messages.LatencyView_Dialogs_ListEvents_Confirm_Title,
178 Messages.LatencyView_Dialogs_ListEvents_Confirm_Message);
179
180 if (confirmDeletion) {
181 EventMatcher.getInstance().resetMatches();
182
183 fTable.removeAll();
184
185 Vector<String> defaultStarts = new Vector<String>();
186 Vector<String> defaultEnds = new Vector<String>();
187
188 defaultStarts.add(EventMatcher.PAGE_FAULT_GET_USER_ENTRY);
189 defaultEnds.add(EventMatcher.PAGE_FAULT_GET_USER_EXIT);
190 defaultStarts.add(EventMatcher.TASKLET_LOW_ENTRY);
191 defaultEnds.add(EventMatcher.TASKLET_LOW_EXIT);
192 defaultStarts.add(EventMatcher.PAGE_FAULT_ENTRY);
193 defaultEnds.add(EventMatcher.PAGE_FAULT_EXIT);
194 defaultStarts.add(EventMatcher.SYSCALL_ENTRY);
195 defaultEnds.add(EventMatcher.SYSCALL_EXIT);
196 defaultStarts.add(EventMatcher.IRQ_ENTRY);
197 defaultEnds.add(EventMatcher.IRQ_EXIT);
198 defaultStarts.add(EventMatcher.READ);
199 defaultEnds.add(EventMatcher.WRITE);
200 defaultStarts.add(EventMatcher.OPEN);
201 defaultEnds.add(EventMatcher.CLOSE);
202 defaultStarts.add(EventMatcher.BUFFER_WAIT_START);
203 defaultEnds.add(EventMatcher.BUFFER_WAIT_END);
204 defaultStarts.add(EventMatcher.START_COMMIT);
205 defaultEnds.add(EventMatcher.END_COMMIT);
206 defaultStarts.add(EventMatcher.WAIT_ON_PAGE_START);
207 defaultEnds.add(EventMatcher.WAIT_ON_PAGE_END);
208
209 saveMatchPairs(defaultStarts, defaultEnds);
210
211 for (int i = 0; i < defaultStarts.size(); i++) {
212 EventMatcher.getInstance().addMatch(defaultStarts.get(i), defaultEnds.get(i));
213 }
214
215 // Get the list of start and end types from the EventMatcher
216 EventsPair pair = getMatchPairs();
217 fEventStartTypes = pair.getFirst();
218 fEventEndTypes = pair.getSecond();
219
220 for (int i = 0; i < fEventStartTypes.size(); i++) {
221 TableItem item = new TableItem(fTable, SWT.RIGHT);
222
223 String max = String.valueOf(fEventStartTypes.size());
224 String number = formatListNumber(i + 1, max.length());
225
226 String[] columns = { number, fEventStartTypes.get(i), fEventEndTypes.get(i) };
227
228 item.setText(columns);
229 }
230
231 fTable.setItemCount(fEventStartTypes.size());
232
233 fRedrawGraphs = true;
234 }
235 }
236 });
237
238 // Create the "Close" button
239 Button closeButton = createButton(parent, CANCEL, Messages.LatencyView_Dialogs_ListEvents_Buttons_Close, false);
240 closeButton.addListener(SWT.Selection, new Listener() {
241 @Override
242 public void handleEvent(Event event) {
243 setReturnCode(CANCEL);
244
245 if (fRedrawGraphs == true)
246 redrawGraphs();
247
248 close();
249 }
250 });
251 }
252 }
This page took 0.03536 seconds and 5 git commands to generate.