2010-10-26 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug309042
[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
d4011df2 57 @Override\r
c3c5c786
FC
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 CustomTxtTraceDefinition(), 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(CustomTxtTraceDefinition 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 CustomTxtTrace(tmpFile.getName(), definition, tmpFile.getAbsolutePath(), MAX_NUM_ENTRIES);\r
206 previewTable.dispose();\r
207 previewTable = new CustomEventsTable(definition, tableContainer, MAX_NUM_ENTRIES);\r
529ee6a9 208 previewTable.setTrace(trace, true);\r
c3c5c786
FC
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
9ccc6d01 254 @Override\r
c3c5c786
FC
255 public void widgetSelected(SelectionEvent e) {\r
256 updatePreviewTable();\r
257 }\r
258 });\r
259 if (messageOutput != null) {\r
260 enabledButton.moveAbove(messageOutput.enabledButton);\r
261 }\r
262 \r
263 nameLabel = new Text(parent, SWT.BORDER | SWT.READ_ONLY | SWT.SINGLE);\r
264 nameLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r
265 nameLabel.setText(name);\r
266 nameLabel.moveBelow(enabledButton);\r
267\r
268 upButton = new Button(parent, SWT.PUSH);\r
269 upButton.setImage(upImage);\r
270 upButton.setToolTipText("Move Before");\r
271 upButton.addSelectionListener(new SelectionAdapter() {\r
9ccc6d01 272 @Override\r
c3c5c786
FC
273 public void widgetSelected(SelectionEvent e) {\r
274 moveBefore(Output.this);\r
275 }\r
276 });\r
277 upButton.moveBelow(nameLabel);\r
278 \r
279 downButton = new Button(parent, SWT.PUSH);\r
280 downButton.setImage(downImage);\r
281 downButton.setToolTipText("Move After");\r
282 downButton.addSelectionListener(new SelectionAdapter() {\r
9ccc6d01 283 @Override\r
c3c5c786
FC
284 public void widgetSelected(SelectionEvent e) {\r
285 moveAfter(Output.this);\r
286 }\r
287 });\r
288 downButton.moveBelow(upButton);\r
289 }\r
290\r
291 private void dispose() {\r
292 enabledButton.dispose();\r
293 nameLabel.dispose();\r
294 upButton.dispose();\r
295 downButton.dispose();\r
296 }\r
297 }\r
298\r
299 public CustomTxtTraceDefinition getDefinition() {\r
300 return definition;\r
301 }\r
302 \r
303}\r
This page took 0.037138 seconds and 5 git commands to generate.