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