1 /*******************************************************************************
2 * Copyright (c) 2010, 2011 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 * 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
;
16 import java
.util
.Vector
;
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
;
36 * <b><u>ListDialog</u></b>
38 * List dialog, shows the list of start/end event pairs.
40 * @author Philippe Sawicki
42 public class ListDialog
extends AbstractDialog
{
44 // ------------------------------------------------------------------------
46 // ------------------------------------------------------------------------
51 protected Table fTable
;
56 protected Vector
<String
> fEventStartTypes
;
61 protected Vector
<String
> fEventEndTypes
;
66 protected TableColumn
[] fColumns
;
69 * Column names (header titles).
71 static final String
[] COLUMN_NAMES
= { "#", Messages
.LatencyView_Dialogs_ListEvents_Columns_Trigger
, Messages
.LatencyView_Dialogs_ListEvents_Columns_End
}; //$NON-NLS-1$
76 static final int[] COLUMN_WIDTHS
= { 25, 250, 250 };
83 // ------------------------------------------------------------------------
85 // ------------------------------------------------------------------------
92 * The dialog's window title.
94 * The dialog's window message.
96 public ListDialog(Shell parentShell
, String title
, String message
) {
97 super(parentShell
, title
, message
);
99 // Set the table style
100 fStyle
= SWT
.SINGLE
| SWT
.FULL_SELECTION
| SWT
.BORDER
| SWT
.V_SCROLL
;
102 // Get the list of start and end types from the EventMatcher
103 EventsPair pair
= getMatchPairs();
104 fEventStartTypes
= pair
.getFirst();
105 fEventEndTypes
= pair
.getSecond();
108 // ------------------------------------------------------------------------
110 // ------------------------------------------------------------------------
113 * Creates the table's column (i.e. the table header).
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
]);
126 * @see org.eclipse.linuxtools.lttng.ui.views.latency.dialogs.AbstractDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
129 protected Control
createDialogArea(Composite parent
) {
130 GridLayout layout
= new GridLayout(1, true);
131 parent
.setLayout(layout
);
133 GridData layoutData
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true);
134 fTable
= new Table(parent
, fStyle
);
135 fTable
.setLayoutData(layoutData
);
137 // Some cosmetic enhancements
138 fTable
.setHeaderVisible(true);
139 fTable
.setLinesVisible(true);
143 for (int i
= 0; i
< fEventStartTypes
.size(); i
++) {
144 TableItem item
= new TableItem(fTable
, SWT
.RIGHT
);
146 String max
= String
.valueOf(fEventStartTypes
.size());
147 String number
= formatListNumber(i
+ 1, max
.length());
149 String
[] columns
= { number
, fEventStartTypes
.get(i
), fEventEndTypes
.get(i
) };
151 item
.setText(columns
);
159 * @see org.eclipse.linuxtools.lttng.ui.views.latency.dialogs.AbstractDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
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
;
170 parent
.setLayoutData(gridData
);
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() {
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
);
180 if (confirmDeletion
) {
181 EventMatcher
.getInstance().resetMatches();
185 Vector
<String
> defaultStarts
= new Vector
<String
>();
186 Vector
<String
> defaultEnds
= new Vector
<String
>();
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
);
209 saveMatchPairs(defaultStarts
, defaultEnds
);
211 for (int i
= 0; i
< defaultStarts
.size(); i
++) {
212 EventMatcher
.getInstance().addMatch(defaultStarts
.get(i
), defaultEnds
.get(i
));
215 // Get the list of start and end types from the EventMatcher
216 EventsPair pair
= getMatchPairs();
217 fEventStartTypes
= pair
.getFirst();
218 fEventEndTypes
= pair
.getSecond();
220 for (int i
= 0; i
< fEventStartTypes
.size(); i
++) {
221 TableItem item
= new TableItem(fTable
, SWT
.RIGHT
);
223 String max
= String
.valueOf(fEventStartTypes
.size());
224 String number
= formatListNumber(i
+ 1, max
.length());
226 String
[] columns
= { number
, fEventStartTypes
.get(i
), fEventEndTypes
.get(i
) };
228 item
.setText(columns
);
231 fTable
.setItemCount(fEventStartTypes
.size());
233 fRedrawGraphs
= true;
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() {
242 public void handleEvent(Event event
) {
243 setReturnCode(CANCEL
);
245 if (fRedrawGraphs
== true)