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