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