2010-07-28 Francois Chouinard <fchouinard@gmail.com> Fix for Bug316349 + a bunch...
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / wizards / CustomTxtParserOutputWizardPage.java
CommitLineData
c3c5c786
FC
1package org.eclipse.linuxtools.tmf.ui.wizards;\r
2\r
3import java.io.File;\r
4import java.io.FileNotFoundException;\r
5import java.io.FileWriter;\r
6import java.io.IOException;\r
7import java.util.ArrayList;\r
8import java.util.Iterator;\r
9import java.util.List;\r
10\r
11import org.eclipse.jface.wizard.WizardPage;\r
12import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
13import org.eclipse.linuxtools.tmf.ui.TmfUiPlugin;\r
14import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomEventsTable;\r
9ccc6d01 15import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTraceDefinition.OutputColumn;\r
c3c5c786
FC
16import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTxtTrace;\r
17import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTxtTraceDefinition;\r
c3c5c786
FC
18import org.eclipse.swt.SWT;\r
19import org.eclipse.swt.custom.SashForm;\r
20import org.eclipse.swt.custom.ScrolledComposite;\r
21import org.eclipse.swt.events.SelectionAdapter;\r
22import org.eclipse.swt.events.SelectionEvent;\r
23import org.eclipse.swt.graphics.Image;\r
24import org.eclipse.swt.layout.GridData;\r
25import org.eclipse.swt.layout.GridLayout;\r
26import org.eclipse.swt.widgets.Button;\r
27import org.eclipse.swt.widgets.Composite;\r
28import org.eclipse.swt.widgets.Text;\r
29\r
30public class CustomTxtParserOutputWizardPage extends WizardPage {\r
31\r
32 private static final Image upImage = TmfUiPlugin.getDefault().getImageFromPath("/icons/up_button.gif");\r
33 private static final Image downImage = TmfUiPlugin.getDefault().getImageFromPath("/icons/down_button.gif");\r
34 private CustomTxtParserWizard wizard;\r
35 private CustomTxtTraceDefinition definition;\r
36 ArrayList<Output> outputs = new ArrayList<Output>();\r
37 Output messageOutput;\r
38 Composite container;\r
39 SashForm sash;\r
40 Text timestampFormatText;\r
41 Text timestampPreviewText;\r
42 ScrolledComposite outputsScrolledComposite;\r
43 Composite outputsContainer;\r
44 ScrolledComposite inputScrolledComposite;\r
45 Composite tableContainer;\r
46 CustomEventsTable previewTable;\r
47 File tmpFile;\r
48 \r
49 protected CustomTxtParserOutputWizardPage(CustomTxtParserWizard wizard) {\r
50 super("CustomParserOutputWizardPage");\r
51 setTitle(wizard.inputPage.getTitle());\r
52 setDescription("Customize the output of the parser");\r
53 this.wizard = wizard;\r
54 setPageComplete(false);\r
55 }\r
56\r
57 public void createControl(Composite parent) {\r
58 container = new Composite(parent, SWT.NULL);\r
59 container.setLayout(new GridLayout());\r
60\r
61 sash = new SashForm(container, SWT.VERTICAL);\r
62 sash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
63 sash.setBackground(sash.getDisplay().getSystemColor(SWT.COLOR_GRAY));\r
64 \r
65 outputsScrolledComposite = new ScrolledComposite(sash, SWT.V_SCROLL);\r
66 outputsScrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
67 outputsContainer = new Composite(outputsScrolledComposite, SWT.NONE);\r
68 GridLayout outputsLayout = new GridLayout(4, false);\r
69 outputsLayout.marginHeight = 10;\r
70 outputsLayout.marginWidth = 0;\r
71 outputsContainer.setLayout(outputsLayout);\r
72 outputsScrolledComposite.setContent(outputsContainer);\r
73 outputsScrolledComposite.setExpandHorizontal(true);\r
74 outputsScrolledComposite.setExpandVertical(true);\r
75\r
76 outputsContainer.layout();\r
77 \r
78 outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r
79\r
80 tableContainer = new Composite(sash, SWT.NONE);\r
81 GridLayout tableLayout = new GridLayout();\r
82 tableLayout.marginHeight = 0;\r
83 tableLayout.marginWidth = 0;\r
84 tableContainer.setLayout(tableLayout);\r
85 previewTable = new CustomEventsTable(new CustomTxtTraceDefinition(), tableContainer, 0);\r
86 \r
87 if (wizard.definition != null) {\r
88 loadDefinition(wizard.definition);\r
89 }\r
90 setControl(container);\r
91 \r
92 }\r
93\r
94 @Override\r
95 public void dispose() {\r
96 previewTable.dispose();\r
97 super.dispose();\r
98 }\r
99\r
100 private void loadDefinition(CustomTxtTraceDefinition definition) {\r
101 for (OutputColumn outputColumn : definition.outputs) {\r
102 Output output = new Output(outputsContainer, outputColumn.name);\r
103 outputs.add(output);\r
104 }\r
105 }\r
106\r
107 /* (non-Javadoc)\r
108 * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)\r
109 */\r
110 @Override\r
111 public void setVisible(boolean visible) {\r
112 if (visible) {\r
113 this.definition = wizard.inputPage.getDefinition();\r
114 List<String> outputNames = wizard.inputPage.getInputNames();\r
115 \r
116 // dispose outputs that have been removed in the input page\r
117 Iterator<Output> iter = outputs.iterator();\r
118 while (iter.hasNext()) {\r
119 Output output = iter.next();\r
120 boolean found = false;\r
121 for (String name : outputNames) {\r
122 if (output.name.equals(name)) {\r
123 found = true;\r
124 break;\r
125 }\r
126 }\r
127 if (!found) {\r
128 output.dispose();\r
129 iter.remove();\r
130 }\r
131 }\r
132 \r
133 // create outputs that have been added in the input page\r
134 for (String name : outputNames) {\r
135 boolean found = false;\r
136 for (Output output : outputs) {\r
137 if (output.name.equals(name)) {\r
138 found = true;\r
139 break;\r
140 }\r
141 }\r
142 if (!found) {\r
143 outputs.add(new Output(outputsContainer, name));\r
144 }\r
145 }\r
146 \r
147 outputsContainer.layout();\r
148 outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r
149 updatePreviewTable();\r
150 if (sash.getSize().y > outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y + previewTable.getTable().getItemHeight()) {\r
151 sash.setWeights(new int[] {outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y, sash.getSize().y - outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y});\r
152 } else {\r
153 sash.setWeights(new int[] {outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y, previewTable.getTable().getItemHeight()});\r
154 }\r
155 setPageComplete(true);\r
156 } else {\r
157 setPageComplete(false);\r
158 }\r
159 super.setVisible(visible);\r
160 }\r
161\r
162 private void moveBefore(Output moved) {\r
163 int i = outputs.indexOf(moved);\r
164 if (i > 0) {\r
165 Output previous = outputs.get(i-1);\r
166 moved.enabledButton.moveAbove(previous.enabledButton);\r
167 moved.nameLabel.moveBelow(moved.enabledButton);\r
168 moved.upButton.moveBelow(moved.nameLabel);\r
169 moved.downButton.moveBelow(moved.upButton);\r
170 outputs.add(i-1, outputs.remove(i));\r
171 outputsContainer.layout();\r
172 outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r
173 container.layout();\r
174 updatePreviewTable();\r
175 }\r
176 }\r
177 \r
178 private void moveAfter(Output moved) {\r
179 int i = outputs.indexOf(moved);\r
180 if (i+1 < outputs.size()) {\r
181 Output next = outputs.get(i+1);\r
182 moved.enabledButton.moveBelow(next.downButton);\r
183 moved.nameLabel.moveBelow(moved.enabledButton);\r
184 moved.upButton.moveBelow(moved.nameLabel);\r
185 moved.downButton.moveBelow(moved.upButton);\r
186 outputs.add(i+1, outputs.remove(i));\r
187 outputsContainer.layout();\r
188 outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r
189 container.layout();\r
190 updatePreviewTable();\r
191 }\r
192 }\r
193 \r
194 private void updatePreviewTable() {\r
195 final int MAX_NUM_ENTRIES = 50;\r
196 definition.outputs = extractOutputs();\r
197\r
198 try {\r
199 tmpFile = TmfUiPlugin.getDefault().getStateLocation().addTrailingSeparator().append("customwizard.tmp").toFile();\r
200 FileWriter writer = new FileWriter(tmpFile);\r
201 writer.write(wizard.inputPage.getInputText());\r
202 writer.close();\r
203 \r
204 ITmfTrace trace = new CustomTxtTrace(tmpFile.getName(), definition, tmpFile.getAbsolutePath(), MAX_NUM_ENTRIES);\r
205 previewTable.dispose();\r
206 previewTable = new CustomEventsTable(definition, tableContainer, MAX_NUM_ENTRIES);\r
529ee6a9 207 previewTable.setTrace(trace, true);\r
c3c5c786
FC
208 previewTable.getTable().setItemCount(MAX_NUM_ENTRIES); // Trigger parsing\r
209 } catch (FileNotFoundException e) {\r
210 e.printStackTrace();\r
211 } catch (IOException e) {\r
212 e.printStackTrace();\r
213 }\r
214 \r
215 tableContainer.layout();\r
216 container.layout();\r
217 }\r
218\r
219 public List<OutputColumn> extractOutputs() {\r
220 int numColumns = 0;\r
221 for (int i = 0; i < outputs.size(); i++) {\r
222 if (outputs.get(i).enabledButton.getSelection()) {\r
223 numColumns++;\r
224 }\r
225 }\r
226 List<OutputColumn> outputColumns = new ArrayList<OutputColumn>(numColumns);\r
227 numColumns = 0;\r
228 for (int i = 0; i < outputs.size(); i++) {\r
229 Output output = outputs.get(i);\r
230 if (output.enabledButton.getSelection()) {\r
231 OutputColumn column = new OutputColumn();\r
232 column.name = output.nameLabel.getText();\r
233 outputColumns.add(column); \r
234 }\r
235 }\r
236 return outputColumns;\r
237 }\r
238\r
239 private class Output {\r
240 String name;\r
241 Button enabledButton;\r
242 Text nameLabel;\r
243 Button upButton;\r
244 Button downButton;\r
245 \r
246 public Output(Composite parent, String name) {\r
247 this.name = name;\r
248 \r
249 enabledButton = new Button(parent, SWT.CHECK);\r
250 enabledButton.setToolTipText("Visible");\r
251 enabledButton.setSelection(true);\r
252 enabledButton.addSelectionListener(new SelectionAdapter() {\r
9ccc6d01 253 @Override\r
c3c5c786
FC
254 public void widgetSelected(SelectionEvent e) {\r
255 updatePreviewTable();\r
256 }\r
257 });\r
258 if (messageOutput != null) {\r
259 enabledButton.moveAbove(messageOutput.enabledButton);\r
260 }\r
261 \r
262 nameLabel = new Text(parent, SWT.BORDER | SWT.READ_ONLY | SWT.SINGLE);\r
263 nameLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r
264 nameLabel.setText(name);\r
265 nameLabel.moveBelow(enabledButton);\r
266\r
267 upButton = new Button(parent, SWT.PUSH);\r
268 upButton.setImage(upImage);\r
269 upButton.setToolTipText("Move Before");\r
270 upButton.addSelectionListener(new SelectionAdapter() {\r
9ccc6d01 271 @Override\r
c3c5c786
FC
272 public void widgetSelected(SelectionEvent e) {\r
273 moveBefore(Output.this);\r
274 }\r
275 });\r
276 upButton.moveBelow(nameLabel);\r
277 \r
278 downButton = new Button(parent, SWT.PUSH);\r
279 downButton.setImage(downImage);\r
280 downButton.setToolTipText("Move After");\r
281 downButton.addSelectionListener(new SelectionAdapter() {\r
9ccc6d01 282 @Override\r
c3c5c786
FC
283 public void widgetSelected(SelectionEvent e) {\r
284 moveAfter(Output.this);\r
285 }\r
286 });\r
287 downButton.moveBelow(upButton);\r
288 }\r
289\r
290 private void dispose() {\r
291 enabledButton.dispose();\r
292 nameLabel.dispose();\r
293 upButton.dispose();\r
294 downButton.dispose();\r
295 }\r
296 }\r
297\r
298 public CustomTxtTraceDefinition getDefinition() {\r
299 return definition;\r
300 }\r
301 \r
302}\r
This page took 0.03675 seconds and 5 git commands to generate.