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