]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/ToolChainConfig.java
1. Restructure module description on main UI
[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 model = new DefaultTableModel();\r
8f9acbd7 117 jTable = new JTable(model);\r
118 jTable.setRowHeight(20);\r
119\r
120 model.addColumn("Property");\r
121 model.addColumn("Value");\r
122\r
123 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
124 jTable.getSelectionModel().addListSelectionListener(this);\r
125 jTable.getModel().addTableModelListener(this);\r
79cb6fdb 126 }\r
127 return jTable;\r
128 }\r
129\r
130 /**\r
8f9acbd7 131 This method initializes jButtonOpen \r
132 \r
133 @return javax.swing.JButton \r
134 \r
135 **/\r
79cb6fdb 136 private JButton getJButtonOpen() {\r
137 if (jButtonOpen == null) {\r
138 jButtonOpen = new JButton();\r
8f9acbd7 139 jButtonOpen.setBounds(new java.awt.Rectangle(40, 405, 120, 20));\r
79cb6fdb 140 jButtonOpen.setText("Open a file");\r
141 jButtonOpen.addActionListener(this);\r
142 }\r
143 return jButtonOpen;\r
144 }\r
145\r
146 /**\r
8f9acbd7 147 This method initializes jButtonSave \r
148 \r
149 @return javax.swing.JButton \r
150 \r
151 **/\r
79cb6fdb 152 private JButton getJButtonSave() {\r
153 if (jButtonSave == null) {\r
154 jButtonSave = new JButton();\r
8f9acbd7 155 jButtonSave.setBounds(new java.awt.Rectangle(170, 405, 120, 20));\r
79cb6fdb 156 jButtonSave.setText("Save to a file");\r
157 jButtonSave.addActionListener(this);\r
158 }\r
159 return jButtonSave;\r
160 }\r
161\r
162 /**\r
8f9acbd7 163 This method initializes jButtonClose \r
164 \r
165 @return javax.swing.JButton \r
166 \r
167 **/\r
79cb6fdb 168 private JButton getJButtonClose() {\r
169 if (jButtonClose == null) {\r
170 jButtonClose = new JButton();\r
8f9acbd7 171 jButtonClose.setBounds(new java.awt.Rectangle(490, 405, 80, 20));\r
79cb6fdb 172 jButtonClose.setText("Close");\r
173 jButtonClose.addActionListener(this);\r
174 }\r
175 return jButtonClose;\r
176 }\r
177\r
8f9acbd7 178 /**\r
179 This method initializes jTextFieldName \r
180 \r
181 @return javax.swing.JTextField \r
182 \r
183 **/\r
184 private JTextField getJTextFieldName() {\r
185 if (jTextFieldName == null) {\r
186 jTextFieldName = new JTextField();\r
187 jTextFieldName.setBounds(new java.awt.Rectangle(60, 365, 140, 20));\r
188 }\r
189 return jTextFieldName;\r
190 }\r
191\r
192 /**\r
193 This method initializes jTextFieldValue \r
194 \r
195 @return javax.swing.JTextField \r
196 \r
197 **/\r
198 private JTextField getJTextFieldValue() {\r
199 if (jTextFieldValue == null) {\r
200 jTextFieldValue = new JTextField();\r
201 jTextFieldValue.setBounds(new java.awt.Rectangle(250, 365, 140, 20));\r
202 }\r
203 return jTextFieldValue;\r
204 }\r
205\r
206 /**\r
207 This method initializes jButtonAdd \r
208 \r
209 @return javax.swing.JButton \r
210 \r
211 **/\r
212 private JButton getJButtonAdd() {\r
213 if (jButtonAdd == null) {\r
214 jButtonAdd = new JButton();\r
215 jButtonAdd.setBounds(new java.awt.Rectangle(400, 365, 80, 20));\r
216 jButtonAdd.setText("Add");\r
217 jButtonAdd.addActionListener(this);\r
218 }\r
219 return jButtonAdd;\r
220 }\r
221\r
222 /**\r
223 This method initializes jButtonRemove \r
224 \r
225 @return javax.swing.JButton \r
226 \r
227 **/\r
228 private JButton getJButtonRemove() {\r
229 if (jButtonRemove == null) {\r
230 jButtonRemove = new JButton();\r
231 jButtonRemove.setBounds(new java.awt.Rectangle(490, 365, 80, 20));\r
232 jButtonRemove.setText("Remove");\r
233 jButtonRemove.addActionListener(this);\r
234 }\r
235 return jButtonRemove;\r
236 }\r
237\r
238 /**\r
239 * This method initializes jButtonHelp \r
240 * \r
241 * @return javax.swing.JButton \r
242 */\r
243 private JButton getJButtonHelp() {\r
244 if (jButtonHelp == null) {\r
245 jButtonHelp = new JButton();\r
246 jButtonHelp.setBounds(new java.awt.Rectangle(300,405,120,20));\r
247 jButtonHelp.setText("Help");\r
248 jButtonHelp.addActionListener(this);\r
249 }\r
250 return jButtonHelp;\r
251 }\r
252\r
79cb6fdb 253 /**\r
254 \r
255 @param args\r
256 \r
257 **/\r
258 public static void main(String[] args) {\r
259 // TODO Auto-generated method stub\r
260\r
261 }\r
8f4f211c 262 \r
263 public static ToolChainConfig getInstance() {\r
264 if (tcc == null) {\r
265 tcc = new ToolChainConfig();\r
266 }\r
267 return tcc;\r
268 }\r
79cb6fdb 269\r
270 /**\r
271 * This is the default constructor\r
272 */\r
8f4f211c 273 public ToolChainConfig() {\r
274 super();\r
79cb6fdb 275 init();\r
276 }\r
277\r
278 /**\r
8f9acbd7 279 This method initializes this\r
280 \r
281 **/\r
79cb6fdb 282 private void init() {\r
283 this.setSize(600, 480);\r
284 this.setContentPane(getJContentPane());\r
285 this.setTitle("Tool Chain Configuration");\r
286 this.centerWindow();\r
287\r
288 //\r
289 // Read default file\r
290 //\r
291 File f = new File(currentFile);\r
292 if (f.exists()) {\r
293 try {\r
294 vtcc.removeAll();\r
295 vtcc.parseFile(this.currentFile);\r
296 this.setTitle("Tool Chain Configuration" + " [" + currentFile + "]");\r
297 } catch (IOException e) {\r
298 Log.log(this.currentFile + "Read Error", e.getMessage());\r
299 e.printStackTrace();\r
300 }\r
301 } else {\r
302 Log.log("Open file", this.currentFile + " Not Found");\r
303 }\r
304\r
305 showTable();\r
306 }\r
307\r
308 /**\r
8f9acbd7 309 This method initializes jContentPane\r
310 \r
311 @return javax.swing.JPanel\r
312 \r
313 **/\r
79cb6fdb 314 private JPanel getJContentPane() {\r
315 if (jContentPane == null) {\r
8f9acbd7 316 jLabelValue = new JLabel();\r
317 jLabelValue.setBounds(new java.awt.Rectangle(205, 365, 40, 20));\r
318 jLabelValue.setText("Value");\r
319 jLabelName = new JLabel();\r
320 jLabelName.setBounds(new java.awt.Rectangle(15, 365, 40, 20));\r
321 jLabelName.setText("Name");\r
79cb6fdb 322 jContentPane = new JPanel();\r
323 jContentPane.setLayout(null);\r
324 jContentPane.add(getJScrollPane(), null);\r
325 jContentPane.add(getJButtonOpen(), null);\r
326 jContentPane.add(getJButtonSave(), null);\r
327 jContentPane.add(getJButtonClose(), null);\r
8f9acbd7 328 jContentPane.add(jLabelName, null);\r
329 jContentPane.add(getJTextFieldName(), null);\r
330 jContentPane.add(jLabelValue, null);\r
331 jContentPane.add(getJTextFieldValue(), null);\r
332 jContentPane.add(getJButtonAdd(), null);\r
333 jContentPane.add(getJButtonRemove(), null);\r
334 jContentPane.add(getJButtonHelp(), null);\r
79cb6fdb 335 }\r
336 return jContentPane;\r
337 }\r
338\r
339 /* (non-Javadoc)\r
340 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
341 * \r
342 * Override actionPerformed to listen all actions\r
343 */\r
344 public void actionPerformed(ActionEvent arg0) {\r
345 if (arg0.getSource() == jButtonClose) {\r
8f4f211c 346 this.exit();\r
79cb6fdb 347 }\r
348\r
349 if (arg0.getSource() == jButtonOpen) {\r
350 JFileChooser fc = new JFileChooser();\r
8f9acbd7 351 fc.setAcceptAllFileFilterUsed(true);\r
79cb6fdb 352 fc.setCurrentDirectory(new File(toolsDir));\r
353\r
8f9acbd7 354 int result = fc.showOpenDialog(new JPanel());\r
79cb6fdb 355 if (result == JFileChooser.APPROVE_OPTION) {\r
356 try {\r
357 vtcc.removeAll();\r
358 vtcc.parseFile(fc.getSelectedFile().getPath());\r
8f9acbd7 359 currentFile = fc.getSelectedFile().getPath();\r
79cb6fdb 360 this.setTitle("Tool Chain Configuration" + " [" + currentFile + "]");\r
361 } catch (IOException e) {\r
362 Log.err(this.currentFile + "Read Error", e.getMessage());\r
363 e.printStackTrace();\r
364 return;\r
365 }\r
366 this.showTable();\r
367 }\r
368 }\r
369\r
370 if (arg0.getSource() == jButtonSave) {\r
371 JFileChooser fc = new JFileChooser();\r
8f9acbd7 372 fc.setAcceptAllFileFilterUsed(true);\r
373 fc.setSelectedFile(new File(currentFile));\r
79cb6fdb 374\r
8f9acbd7 375 int result = fc.showSaveDialog(new JPanel());\r
79cb6fdb 376 if (result == JFileChooser.APPROVE_OPTION) {\r
8f9acbd7 377 currentFile = fc.getSelectedFile().getPath();\r
378 try {\r
379 vtcc.saveFile(currentFile);\r
380 } catch (IOException e) {\r
381 Log.err(this.currentFile + "Write Error", e.getMessage());\r
382 e.printStackTrace();\r
383 return;\r
384 }\r
385 }\r
386 }\r
387\r
388 if (arg0.getSource() == jButtonAdd) {\r
389 if (check()) {\r
390 String[] row = { jTextFieldName.getText(), jTextFieldValue.getText() };\r
391 this.vtcc.addToolChainConfigs(new ToolChainConfigId(row[0], row[1]));\r
392 this.model.addRow(row);\r
79cb6fdb 393 }\r
394 }\r
8f9acbd7 395\r
396 if (arg0.getSource() == jButtonRemove) {\r
397 if (jTable.isEditing()) {\r
398 jTable.getCellEditor().stopCellEditing();\r
399 }\r
400 if (selectedRow > -1) {\r
401 this.model.removeRow(selectedRow);\r
402 this.vtcc.removeToolChainConfigs(selectedRow);\r
403 selectedRow = -1;\r
404 }\r
405 }\r
406 \r
407 if (arg0.getSource() == jButtonHelp) {\r
8f4f211c 408 tcch = ToolChainConfigHelp.getInstance();\r
8f9acbd7 409 tcch.setVisible(true);\r
410 }\r
79cb6fdb 411 }\r
412\r
413 /**\r
414 Read content of vector and put then into table\r
415 \r
416 **/\r
417 private void showTable() {\r
8f9acbd7 418 clearAll();\r
419 \r
79cb6fdb 420 if (vtcc.size() > 0) {\r
421 for (int index = 0; index < vtcc.size(); index++) {\r
422 model.addRow(vtcc.toStringVector(index));\r
423 }\r
424 }\r
8f9acbd7 425 this.jTable.repaint();\r
426 this.jTable.updateUI();\r
427 //this.jScrollPane.setViewportView(this.jTable);\r
428 }\r
429\r
430 /**\r
431 Clear all table rows\r
432 \r
433 **/\r
434 private void clearAll() {\r
435 if (model != null) {\r
436 for (int index = model.getRowCount() - 1; index >= 0; index--) {\r
437 model.removeRow(index);\r
438 }\r
439 }\r
440 }\r
441\r
442 /**\r
443 Check if name or value is empty\r
444 \r
445 @return\r
446 \r
447 **/\r
448 private boolean check() {\r
449 if (isEmpty(this.jTextFieldName.getText())) {\r
450 Log.err("Add Tool Chain", "Name couldn't be empty!");\r
451 return false;\r
452 }\r
453\r
454 if (isEmpty(this.jTextFieldValue.getText())) {\r
455 Log.err("Add Tool Chain", "Value couldn't be empty");\r
456 return false;\r
457 }\r
458 return true;\r
459 }\r
460\r
461 /* (non-Javadoc)\r
462 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)\r
463 *\r
464 */\r
465 public void valueChanged(ListSelectionEvent arg0) {\r
466 if (arg0.getValueIsAdjusting()) {\r
467 return;\r
468 }\r
469 ListSelectionModel lsm = (ListSelectionModel) arg0.getSource();\r
470 if (lsm.isSelectionEmpty()) {\r
471 return;\r
472 } else {\r
473 selectedRow = lsm.getMinSelectionIndex();\r
474 }\r
475 }\r
476\r
477 public void tableChanged(TableModelEvent arg0) {\r
478 int row = arg0.getFirstRow();\r
479 TableModel m = (TableModel)arg0.getSource();\r
480 if (arg0.getType() == TableModelEvent.UPDATE){\r
481 this.vtcc.getToolChainConfigs(row).setName(m.getValueAt(row, 0).toString());\r
482 this.vtcc.getToolChainConfigs(row).setValue(m.getValueAt(row, 1).toString());\r
483 }\r
79cb6fdb 484 }\r
8f4f211c 485 \r
486 /* (non-Javadoc)\r
487 * @see java.awt.event.WindowListener#windowClosing(java.awt.event.WindowEvent)\r
488 *\r
489 * Override windowClosing to popup warning message to confirm quit\r
490 * \r
491 */\r
492 public void windowClosing(WindowEvent arg0) {\r
493 this.exit();\r
494 }\r
495 \r
496 private void exit() {\r
497 this.setVisible(false);\r
498 if (tcch != null) {\r
499 tcch.dispose();\r
500 }\r
501 }\r
79cb6fdb 502}\r