]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/ToolChainConfig.java
1. Fix displaying wrong file type bug.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / ToolChainConfig.java
CommitLineData
79cb6fdb 1/** @file\r
2 \r
3 The file is used to setup tool chain configuration\r
4 \r
5 Copyright (c) 2006, Intel Corporation\r
6 All rights reserved. This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14 **/\r
15package org.tianocore.frameworkwizard;\r
16\r
17import java.awt.event.ActionEvent;\r
8f4f211c 18import java.awt.event.WindowEvent;\r
79cb6fdb 19import java.io.File;\r
20import java.io.IOException;\r
21\r
22import javax.swing.JButton;\r
23import javax.swing.JFileChooser;\r
8f9acbd7 24import javax.swing.JLabel;\r
79cb6fdb 25import javax.swing.JPanel;\r
26import javax.swing.JScrollPane;\r
27import javax.swing.JTable;\r
8f9acbd7 28import javax.swing.JTextField;\r
29import javax.swing.ListSelectionModel;\r
30import javax.swing.event.ListSelectionEvent;\r
31import javax.swing.event.ListSelectionListener;\r
32import javax.swing.event.TableModelEvent;\r
33import javax.swing.event.TableModelListener;\r
79cb6fdb 34import javax.swing.table.DefaultTableModel;\r
8f9acbd7 35import javax.swing.table.TableModel;\r
79cb6fdb 36\r
37import org.tianocore.frameworkwizard.common.DataType;\r
38import org.tianocore.frameworkwizard.common.Log;\r
39import org.tianocore.frameworkwizard.common.Tools;\r
8f9acbd7 40import org.tianocore.frameworkwizard.common.Identifications.ToolChainConfigId;\r
79cb6fdb 41import org.tianocore.frameworkwizard.common.Identifications.ToolChainConfigVector;\r
79cb6fdb 42import org.tianocore.frameworkwizard.common.ui.IFrame;\r
43import org.tianocore.frameworkwizard.workspace.Workspace;\r
44\r
8f4f211c 45public class ToolChainConfig extends IFrame implements ListSelectionListener, TableModelListener{\r
79cb6fdb 46\r
47 ///\r
48 /// Define Class Members\r
49 ///\r
50 private static final long serialVersionUID = 1486930966278269085L;\r
51\r
52 private JPanel jContentPane = null;\r
53\r
54 private JScrollPane jScrollPane = null;\r
55\r
56 private DefaultTableModel model = null;\r
57\r
58 private JTable jTable = null;\r
59\r
60 private JButton jButtonOpen = null;\r
61\r
62 private JButton jButtonSave = null;\r
63\r
64 private JButton jButtonClose = null;\r
65\r
66 private String toolsDir = Tools.addFileSeparator(Workspace.getCurrentWorkspace()) + "Tools"\r
67 + DataType.FILE_SEPARATOR + "Conf";\r
68\r
69 private String currentFile = Tools.addFileSeparator(toolsDir) + "tools_def.template";\r
8f9acbd7 70 \r
79cb6fdb 71 private ToolChainConfigVector vtcc = new ToolChainConfigVector();\r
72\r
8f9acbd7 73 private JLabel jLabelName = null;\r
74\r
75 private JTextField jTextFieldName = null;\r
76\r
77 private JLabel jLabelValue = null;\r
78\r
79 private JTextField jTextFieldValue = null;\r
80\r
81 private JButton jButtonAdd = null;\r
82\r
83 private JButton jButtonRemove = null;\r
84\r
85 private int selectedRow = -1;\r
86\r
87 private JButton jButtonHelp = null;\r
88 \r
8f4f211c 89 private static ToolChainConfig tcc = null;\r
90 \r
91 private ToolChainConfigHelp tcch = null;\r
92 \r
79cb6fdb 93 /**\r
8f9acbd7 94 This method initializes jScrollPane \r
95 \r
96 @return javax.swing.JScrollPane \r
97 \r
98 **/\r
79cb6fdb 99 private JScrollPane getJScrollPane() {\r
100 if (jScrollPane == null) {\r
101 jScrollPane = new JScrollPane();\r
102 jScrollPane.setBounds(new java.awt.Rectangle(15, 15, 555, 345));\r
103 jScrollPane.setViewportView(getJTable());\r
104 }\r
105 return jScrollPane;\r
106 }\r
107\r
108 /**\r
8f9acbd7 109 This method initializes jTable \r
110 \r
111 @return javax.swing.JTable \r
112 \r
113 **/\r
79cb6fdb 114 private JTable getJTable() {\r
115 if (jTable == null) {\r
8f9acbd7 116// Vector<String> vTableHeader = new Vector<String>();\r
117// vTableHeader.addElement("Name");\r
118// vTableHeader.addElement("Value");\r
119// \r
120 model = new DefaultTableModel();\r
121 //model = new DefaultTableModel(vTableHeader);\r
122 jTable = new JTable(model);\r
123 jTable.setRowHeight(20);\r
124\r
125 model.addColumn("Property");\r
126 model.addColumn("Value");\r
127\r
128 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
129 jTable.getSelectionModel().addListSelectionListener(this);\r
130 jTable.getModel().addTableModelListener(this);\r
79cb6fdb 131 }\r
132 return jTable;\r
133 }\r
134\r
135 /**\r
8f9acbd7 136 This method initializes jButtonOpen \r
137 \r
138 @return javax.swing.JButton \r
139 \r
140 **/\r
79cb6fdb 141 private JButton getJButtonOpen() {\r
142 if (jButtonOpen == null) {\r
143 jButtonOpen = new JButton();\r
8f9acbd7 144 jButtonOpen.setBounds(new java.awt.Rectangle(40, 405, 120, 20));\r
79cb6fdb 145 jButtonOpen.setText("Open a file");\r
146 jButtonOpen.addActionListener(this);\r
147 }\r
148 return jButtonOpen;\r
149 }\r
150\r
151 /**\r
8f9acbd7 152 This method initializes jButtonSave \r
153 \r
154 @return javax.swing.JButton \r
155 \r
156 **/\r
79cb6fdb 157 private JButton getJButtonSave() {\r
158 if (jButtonSave == null) {\r
159 jButtonSave = new JButton();\r
8f9acbd7 160 jButtonSave.setBounds(new java.awt.Rectangle(170, 405, 120, 20));\r
79cb6fdb 161 jButtonSave.setText("Save to a file");\r
162 jButtonSave.addActionListener(this);\r
163 }\r
164 return jButtonSave;\r
165 }\r
166\r
167 /**\r
8f9acbd7 168 This method initializes jButtonClose \r
169 \r
170 @return javax.swing.JButton \r
171 \r
172 **/\r
79cb6fdb 173 private JButton getJButtonClose() {\r
174 if (jButtonClose == null) {\r
175 jButtonClose = new JButton();\r
8f9acbd7 176 jButtonClose.setBounds(new java.awt.Rectangle(490, 405, 80, 20));\r
79cb6fdb 177 jButtonClose.setText("Close");\r
178 jButtonClose.addActionListener(this);\r
179 }\r
180 return jButtonClose;\r
181 }\r
182\r
8f9acbd7 183 /**\r
184 This method initializes jTextFieldName \r
185 \r
186 @return javax.swing.JTextField \r
187 \r
188 **/\r
189 private JTextField getJTextFieldName() {\r
190 if (jTextFieldName == null) {\r
191 jTextFieldName = new JTextField();\r
192 jTextFieldName.setBounds(new java.awt.Rectangle(60, 365, 140, 20));\r
193 }\r
194 return jTextFieldName;\r
195 }\r
196\r
197 /**\r
198 This method initializes jTextFieldValue \r
199 \r
200 @return javax.swing.JTextField \r
201 \r
202 **/\r
203 private JTextField getJTextFieldValue() {\r
204 if (jTextFieldValue == null) {\r
205 jTextFieldValue = new JTextField();\r
206 jTextFieldValue.setBounds(new java.awt.Rectangle(250, 365, 140, 20));\r
207 }\r
208 return jTextFieldValue;\r
209 }\r
210\r
211 /**\r
212 This method initializes jButtonAdd \r
213 \r
214 @return javax.swing.JButton \r
215 \r
216 **/\r
217 private JButton getJButtonAdd() {\r
218 if (jButtonAdd == null) {\r
219 jButtonAdd = new JButton();\r
220 jButtonAdd.setBounds(new java.awt.Rectangle(400, 365, 80, 20));\r
221 jButtonAdd.setText("Add");\r
222 jButtonAdd.addActionListener(this);\r
223 }\r
224 return jButtonAdd;\r
225 }\r
226\r
227 /**\r
228 This method initializes jButtonRemove \r
229 \r
230 @return javax.swing.JButton \r
231 \r
232 **/\r
233 private JButton getJButtonRemove() {\r
234 if (jButtonRemove == null) {\r
235 jButtonRemove = new JButton();\r
236 jButtonRemove.setBounds(new java.awt.Rectangle(490, 365, 80, 20));\r
237 jButtonRemove.setText("Remove");\r
238 jButtonRemove.addActionListener(this);\r
239 }\r
240 return jButtonRemove;\r
241 }\r
242\r
243 /**\r
244 * This method initializes jButtonHelp \r
245 * \r
246 * @return javax.swing.JButton \r
247 */\r
248 private JButton getJButtonHelp() {\r
249 if (jButtonHelp == null) {\r
250 jButtonHelp = new JButton();\r
251 jButtonHelp.setBounds(new java.awt.Rectangle(300,405,120,20));\r
252 jButtonHelp.setText("Help");\r
253 jButtonHelp.addActionListener(this);\r
254 }\r
255 return jButtonHelp;\r
256 }\r
257\r
79cb6fdb 258 /**\r
259 \r
260 @param args\r
261 \r
262 **/\r
263 public static void main(String[] args) {\r
264 // TODO Auto-generated method stub\r
265\r
266 }\r
8f4f211c 267 \r
268 public static ToolChainConfig getInstance() {\r
269 if (tcc == null) {\r
270 tcc = new ToolChainConfig();\r
271 }\r
272 return tcc;\r
273 }\r
79cb6fdb 274\r
275 /**\r
276 * This is the default constructor\r
277 */\r
8f4f211c 278 public ToolChainConfig() {\r
279 super();\r
79cb6fdb 280 init();\r
281 }\r
282\r
283 /**\r
8f9acbd7 284 This method initializes this\r
285 \r
286 **/\r
79cb6fdb 287 private void init() {\r
288 this.setSize(600, 480);\r
289 this.setContentPane(getJContentPane());\r
290 this.setTitle("Tool Chain Configuration");\r
291 this.centerWindow();\r
292\r
293 //\r
294 // Read default file\r
295 //\r
296 File f = new File(currentFile);\r
297 if (f.exists()) {\r
298 try {\r
299 vtcc.removeAll();\r
300 vtcc.parseFile(this.currentFile);\r
301 this.setTitle("Tool Chain Configuration" + " [" + currentFile + "]");\r
302 } catch (IOException e) {\r
303 Log.log(this.currentFile + "Read Error", e.getMessage());\r
304 e.printStackTrace();\r
305 }\r
306 } else {\r
307 Log.log("Open file", this.currentFile + " Not Found");\r
308 }\r
309\r
310 showTable();\r
311 }\r
312\r
313 /**\r
8f9acbd7 314 This method initializes jContentPane\r
315 \r
316 @return javax.swing.JPanel\r
317 \r
318 **/\r
79cb6fdb 319 private JPanel getJContentPane() {\r
320 if (jContentPane == null) {\r
8f9acbd7 321 jLabelValue = new JLabel();\r
322 jLabelValue.setBounds(new java.awt.Rectangle(205, 365, 40, 20));\r
323 jLabelValue.setText("Value");\r
324 jLabelName = new JLabel();\r
325 jLabelName.setBounds(new java.awt.Rectangle(15, 365, 40, 20));\r
326 jLabelName.setText("Name");\r
79cb6fdb 327 jContentPane = new JPanel();\r
328 jContentPane.setLayout(null);\r
329 jContentPane.add(getJScrollPane(), null);\r
330 jContentPane.add(getJButtonOpen(), null);\r
331 jContentPane.add(getJButtonSave(), null);\r
332 jContentPane.add(getJButtonClose(), null);\r
8f9acbd7 333 jContentPane.add(jLabelName, null);\r
334 jContentPane.add(getJTextFieldName(), null);\r
335 jContentPane.add(jLabelValue, null);\r
336 jContentPane.add(getJTextFieldValue(), null);\r
337 jContentPane.add(getJButtonAdd(), null);\r
338 jContentPane.add(getJButtonRemove(), null);\r
339 jContentPane.add(getJButtonHelp(), null);\r
79cb6fdb 340 }\r
341 return jContentPane;\r
342 }\r
343\r
344 /* (non-Javadoc)\r
345 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
346 * \r
347 * Override actionPerformed to listen all actions\r
348 */\r
349 public void actionPerformed(ActionEvent arg0) {\r
350 if (arg0.getSource() == jButtonClose) {\r
8f4f211c 351 this.exit();\r
79cb6fdb 352 }\r
353\r
354 if (arg0.getSource() == jButtonOpen) {\r
355 JFileChooser fc = new JFileChooser();\r
8f9acbd7 356 fc.setAcceptAllFileFilterUsed(true);\r
79cb6fdb 357 fc.setCurrentDirectory(new File(toolsDir));\r
358\r
8f9acbd7 359 int result = fc.showOpenDialog(new JPanel());\r
79cb6fdb 360 if (result == JFileChooser.APPROVE_OPTION) {\r
361 try {\r
362 vtcc.removeAll();\r
363 vtcc.parseFile(fc.getSelectedFile().getPath());\r
8f9acbd7 364 currentFile = fc.getSelectedFile().getPath();\r
79cb6fdb 365 this.setTitle("Tool Chain Configuration" + " [" + currentFile + "]");\r
366 } catch (IOException e) {\r
367 Log.err(this.currentFile + "Read Error", e.getMessage());\r
368 e.printStackTrace();\r
369 return;\r
370 }\r
371 this.showTable();\r
372 }\r
373 }\r
374\r
375 if (arg0.getSource() == jButtonSave) {\r
376 JFileChooser fc = new JFileChooser();\r
8f9acbd7 377 fc.setAcceptAllFileFilterUsed(true);\r
378 fc.setSelectedFile(new File(currentFile));\r
79cb6fdb 379\r
8f9acbd7 380 int result = fc.showSaveDialog(new JPanel());\r
79cb6fdb 381 if (result == JFileChooser.APPROVE_OPTION) {\r
8f9acbd7 382 currentFile = fc.getSelectedFile().getPath();\r
383 try {\r
384 vtcc.saveFile(currentFile);\r
385 } catch (IOException e) {\r
386 Log.err(this.currentFile + "Write Error", e.getMessage());\r
387 e.printStackTrace();\r
388 return;\r
389 }\r
390 }\r
391 }\r
392\r
393 if (arg0.getSource() == jButtonAdd) {\r
394 if (check()) {\r
395 String[] row = { jTextFieldName.getText(), jTextFieldValue.getText() };\r
396 this.vtcc.addToolChainConfigs(new ToolChainConfigId(row[0], row[1]));\r
397 this.model.addRow(row);\r
79cb6fdb 398 }\r
399 }\r
8f9acbd7 400\r
401 if (arg0.getSource() == jButtonRemove) {\r
402 if (jTable.isEditing()) {\r
403 jTable.getCellEditor().stopCellEditing();\r
404 }\r
405 if (selectedRow > -1) {\r
406 this.model.removeRow(selectedRow);\r
407 this.vtcc.removeToolChainConfigs(selectedRow);\r
408 selectedRow = -1;\r
409 }\r
410 }\r
411 \r
412 if (arg0.getSource() == jButtonHelp) {\r
8f4f211c 413 tcch = ToolChainConfigHelp.getInstance();\r
8f9acbd7 414 tcch.setVisible(true);\r
415 }\r
79cb6fdb 416 }\r
417\r
418 /**\r
419 Read content of vector and put then into table\r
420 \r
421 **/\r
422 private void showTable() {\r
8f9acbd7 423 clearAll();\r
424 \r
79cb6fdb 425 if (vtcc.size() > 0) {\r
426 for (int index = 0; index < vtcc.size(); index++) {\r
427 model.addRow(vtcc.toStringVector(index));\r
428 }\r
429 }\r
8f9acbd7 430 this.jTable.repaint();\r
431 this.jTable.updateUI();\r
432 //this.jScrollPane.setViewportView(this.jTable);\r
433 }\r
434\r
435 /**\r
436 Clear all table rows\r
437 \r
438 **/\r
439 private void clearAll() {\r
440 if (model != null) {\r
441 for (int index = model.getRowCount() - 1; index >= 0; index--) {\r
442 model.removeRow(index);\r
443 }\r
444 }\r
445 }\r
446\r
447 /**\r
448 Check if name or value is empty\r
449 \r
450 @return\r
451 \r
452 **/\r
453 private boolean check() {\r
454 if (isEmpty(this.jTextFieldName.getText())) {\r
455 Log.err("Add Tool Chain", "Name couldn't be empty!");\r
456 return false;\r
457 }\r
458\r
459 if (isEmpty(this.jTextFieldValue.getText())) {\r
460 Log.err("Add Tool Chain", "Value couldn't be empty");\r
461 return false;\r
462 }\r
463 return true;\r
464 }\r
465\r
466 /* (non-Javadoc)\r
467 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)\r
468 *\r
469 */\r
470 public void valueChanged(ListSelectionEvent arg0) {\r
471 if (arg0.getValueIsAdjusting()) {\r
472 return;\r
473 }\r
474 ListSelectionModel lsm = (ListSelectionModel) arg0.getSource();\r
475 if (lsm.isSelectionEmpty()) {\r
476 return;\r
477 } else {\r
478 selectedRow = lsm.getMinSelectionIndex();\r
479 }\r
480 }\r
481\r
482 public void tableChanged(TableModelEvent arg0) {\r
483 int row = arg0.getFirstRow();\r
484 TableModel m = (TableModel)arg0.getSource();\r
485 if (arg0.getType() == TableModelEvent.UPDATE){\r
486 this.vtcc.getToolChainConfigs(row).setName(m.getValueAt(row, 0).toString());\r
487 this.vtcc.getToolChainConfigs(row).setValue(m.getValueAt(row, 1).toString());\r
488 }\r
79cb6fdb 489 }\r
8f4f211c 490 \r
491 /* (non-Javadoc)\r
492 * @see java.awt.event.WindowListener#windowClosing(java.awt.event.WindowEvent)\r
493 *\r
494 * Override windowClosing to popup warning message to confirm quit\r
495 * \r
496 */\r
497 public void windowClosing(WindowEvent arg0) {\r
498 this.exit();\r
499 }\r
500 \r
501 private void exit() {\r
502 this.setVisible(false);\r
503 if (tcch != null) {\r
504 tcch.dispose();\r
505 }\r
506 }\r
79cb6fdb 507}\r