3 The file is used to setup tool chain configuration
5 Copyright (c) 2006, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 package org
.tianocore
.frameworkwizard
;
17 import java
.awt
.event
.ActionEvent
;
18 import java
.awt
.event
.WindowEvent
;
20 import java
.io
.IOException
;
22 import javax
.swing
.JButton
;
23 import javax
.swing
.JFileChooser
;
24 import javax
.swing
.JLabel
;
25 import javax
.swing
.JPanel
;
26 import javax
.swing
.JScrollPane
;
27 import javax
.swing
.JTable
;
28 import javax
.swing
.JTextField
;
29 import javax
.swing
.ListSelectionModel
;
30 import javax
.swing
.event
.ListSelectionEvent
;
31 import javax
.swing
.event
.ListSelectionListener
;
32 import javax
.swing
.event
.TableModelEvent
;
33 import javax
.swing
.event
.TableModelListener
;
34 import javax
.swing
.table
.DefaultTableModel
;
35 import javax
.swing
.table
.TableModel
;
37 import org
.tianocore
.frameworkwizard
.common
.DataType
;
38 import org
.tianocore
.frameworkwizard
.common
.Log
;
39 import org
.tianocore
.frameworkwizard
.common
.Tools
;
40 import org
.tianocore
.frameworkwizard
.common
.Identifications
.ToolChainConfigId
;
41 import org
.tianocore
.frameworkwizard
.common
.Identifications
.ToolChainConfigVector
;
42 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
43 import org
.tianocore
.frameworkwizard
.workspace
.Workspace
;
45 public class ToolChainConfig
extends IFrame
implements ListSelectionListener
, TableModelListener
{
48 /// Define Class Members
50 private static final long serialVersionUID
= 1486930966278269085L;
52 private JPanel jContentPane
= null;
54 private JScrollPane jScrollPane
= null;
56 private DefaultTableModel model
= null;
58 private JTable jTable
= null;
60 private JButton jButtonOpen
= null;
62 private JButton jButtonSave
= null;
64 private JButton jButtonClose
= null;
66 private String toolsDir
= Tools
.addFileSeparator(Workspace
.getCurrentWorkspace()) + "Tools"
67 + DataType
.FILE_SEPARATOR
+ "Conf";
69 private String currentFile
= Tools
.addFileSeparator(toolsDir
) + "tools_def.template";
71 private ToolChainConfigVector vtcc
= new ToolChainConfigVector();
73 private JLabel jLabelName
= null;
75 private JTextField jTextFieldName
= null;
77 private JLabel jLabelValue
= null;
79 private JTextField jTextFieldValue
= null;
81 private JButton jButtonAdd
= null;
83 private JButton jButtonRemove
= null;
85 private int selectedRow
= -1;
87 private JButton jButtonHelp
= null;
89 private static ToolChainConfig tcc
= null;
91 private ToolChainConfigHelp tcch
= null;
94 This method initializes jScrollPane
96 @return javax.swing.JScrollPane
99 private JScrollPane
getJScrollPane() {
100 if (jScrollPane
== null) {
101 jScrollPane
= new JScrollPane();
102 jScrollPane
.setBounds(new java
.awt
.Rectangle(15, 15, 555, 345));
103 jScrollPane
.setViewportView(getJTable());
109 This method initializes jTable
111 @return javax.swing.JTable
114 private JTable
getJTable() {
115 if (jTable
== null) {
116 model
= new DefaultTableModel();
117 jTable
= new JTable(model
);
118 jTable
.setRowHeight(20);
120 model
.addColumn("Property");
121 model
.addColumn("Value");
123 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
124 jTable
.getSelectionModel().addListSelectionListener(this);
125 jTable
.getModel().addTableModelListener(this);
131 This method initializes jButtonOpen
133 @return javax.swing.JButton
136 private JButton
getJButtonOpen() {
137 if (jButtonOpen
== null) {
138 jButtonOpen
= new JButton();
139 jButtonOpen
.setBounds(new java
.awt
.Rectangle(40, 405, 120, 20));
140 jButtonOpen
.setText("Open a file");
141 jButtonOpen
.addActionListener(this);
147 This method initializes jButtonSave
149 @return javax.swing.JButton
152 private JButton
getJButtonSave() {
153 if (jButtonSave
== null) {
154 jButtonSave
= new JButton();
155 jButtonSave
.setBounds(new java
.awt
.Rectangle(170, 405, 120, 20));
156 jButtonSave
.setText("Save to a file");
157 jButtonSave
.addActionListener(this);
163 This method initializes jButtonClose
165 @return javax.swing.JButton
168 private JButton
getJButtonClose() {
169 if (jButtonClose
== null) {
170 jButtonClose
= new JButton();
171 jButtonClose
.setBounds(new java
.awt
.Rectangle(490, 405, 80, 20));
172 jButtonClose
.setText("Close");
173 jButtonClose
.addActionListener(this);
179 This method initializes jTextFieldName
181 @return javax.swing.JTextField
184 private JTextField
getJTextFieldName() {
185 if (jTextFieldName
== null) {
186 jTextFieldName
= new JTextField();
187 jTextFieldName
.setBounds(new java
.awt
.Rectangle(60, 365, 140, 20));
189 return jTextFieldName
;
193 This method initializes jTextFieldValue
195 @return javax.swing.JTextField
198 private JTextField
getJTextFieldValue() {
199 if (jTextFieldValue
== null) {
200 jTextFieldValue
= new JTextField();
201 jTextFieldValue
.setBounds(new java
.awt
.Rectangle(250, 365, 140, 20));
203 return jTextFieldValue
;
207 This method initializes jButtonAdd
209 @return javax.swing.JButton
212 private JButton
getJButtonAdd() {
213 if (jButtonAdd
== null) {
214 jButtonAdd
= new JButton();
215 jButtonAdd
.setBounds(new java
.awt
.Rectangle(400, 365, 80, 20));
216 jButtonAdd
.setText("Add");
217 jButtonAdd
.addActionListener(this);
223 This method initializes jButtonRemove
225 @return javax.swing.JButton
228 private JButton
getJButtonRemove() {
229 if (jButtonRemove
== null) {
230 jButtonRemove
= new JButton();
231 jButtonRemove
.setBounds(new java
.awt
.Rectangle(490, 365, 80, 20));
232 jButtonRemove
.setText("Remove");
233 jButtonRemove
.addActionListener(this);
235 return jButtonRemove
;
239 * This method initializes jButtonHelp
241 * @return javax.swing.JButton
243 private JButton
getJButtonHelp() {
244 if (jButtonHelp
== null) {
245 jButtonHelp
= new JButton();
246 jButtonHelp
.setBounds(new java
.awt
.Rectangle(300,405,120,20));
247 jButtonHelp
.setText("Help");
248 jButtonHelp
.addActionListener(this);
258 public static void main(String
[] args
) {
259 // TODO Auto-generated method stub
263 public static ToolChainConfig
getInstance() {
265 tcc
= new ToolChainConfig();
271 * This is the default constructor
273 public ToolChainConfig() {
279 This method initializes this
282 private void init() {
283 this.setSize(600, 480);
284 this.setContentPane(getJContentPane());
285 this.setTitle("Tool Chain Configuration");
291 File f
= new File(currentFile
);
295 vtcc
.parseFile(this.currentFile
);
296 this.setTitle("Tool Chain Configuration" + " [" + currentFile
+ "]");
297 } catch (IOException e
) {
298 Log
.log(this.currentFile
+ "Read Error", e
.getMessage());
302 Log
.log("Open file", this.currentFile
+ " Not Found");
309 This method initializes jContentPane
311 @return javax.swing.JPanel
314 private JPanel
getJContentPane() {
315 if (jContentPane
== null) {
316 jLabelValue
= new JLabel();
317 jLabelValue
.setBounds(new java
.awt
.Rectangle(205, 365, 40, 20));
318 jLabelValue
.setText("Value");
319 jLabelName
= new JLabel();
320 jLabelName
.setBounds(new java
.awt
.Rectangle(15, 365, 40, 20));
321 jLabelName
.setText("Name");
322 jContentPane
= new JPanel();
323 jContentPane
.setLayout(null);
324 jContentPane
.add(getJScrollPane(), null);
325 jContentPane
.add(getJButtonOpen(), null);
326 jContentPane
.add(getJButtonSave(), null);
327 jContentPane
.add(getJButtonClose(), null);
328 jContentPane
.add(jLabelName
, null);
329 jContentPane
.add(getJTextFieldName(), null);
330 jContentPane
.add(jLabelValue
, null);
331 jContentPane
.add(getJTextFieldValue(), null);
332 jContentPane
.add(getJButtonAdd(), null);
333 jContentPane
.add(getJButtonRemove(), null);
334 jContentPane
.add(getJButtonHelp(), null);
340 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
342 * Override actionPerformed to listen all actions
344 public void actionPerformed(ActionEvent arg0
) {
345 if (arg0
.getSource() == jButtonClose
) {
349 if (arg0
.getSource() == jButtonOpen
) {
350 JFileChooser fc
= new JFileChooser();
351 fc
.setAcceptAllFileFilterUsed(true);
352 fc
.setCurrentDirectory(new File(toolsDir
));
354 int result
= fc
.showOpenDialog(new JPanel());
355 if (result
== JFileChooser
.APPROVE_OPTION
) {
358 vtcc
.parseFile(fc
.getSelectedFile().getPath());
359 currentFile
= fc
.getSelectedFile().getPath();
360 this.setTitle("Tool Chain Configuration" + " [" + currentFile
+ "]");
361 } catch (IOException e
) {
362 Log
.err(this.currentFile
+ "Read Error", e
.getMessage());
370 if (arg0
.getSource() == jButtonSave
) {
371 JFileChooser fc
= new JFileChooser();
372 fc
.setAcceptAllFileFilterUsed(true);
373 fc
.setSelectedFile(new File(currentFile
));
375 int result
= fc
.showSaveDialog(new JPanel());
376 if (result
== JFileChooser
.APPROVE_OPTION
) {
377 currentFile
= fc
.getSelectedFile().getPath();
379 vtcc
.saveFile(currentFile
);
380 } catch (IOException e
) {
381 Log
.err(this.currentFile
+ "Write Error", e
.getMessage());
388 if (arg0
.getSource() == jButtonAdd
) {
390 String
[] row
= { jTextFieldName
.getText(), jTextFieldValue
.getText() };
391 this.vtcc
.addToolChainConfigs(new ToolChainConfigId(row
[0], row
[1]));
392 this.model
.addRow(row
);
396 if (arg0
.getSource() == jButtonRemove
) {
397 if (jTable
.isEditing()) {
398 jTable
.getCellEditor().stopCellEditing();
400 if (selectedRow
> -1) {
401 this.model
.removeRow(selectedRow
);
402 this.vtcc
.removeToolChainConfigs(selectedRow
);
407 if (arg0
.getSource() == jButtonHelp
) {
408 tcch
= ToolChainConfigHelp
.getInstance();
409 tcch
.setVisible(true);
414 Read content of vector and put then into table
417 private void showTable() {
420 if (vtcc
.size() > 0) {
421 for (int index
= 0; index
< vtcc
.size(); index
++) {
422 model
.addRow(vtcc
.toStringVector(index
));
425 this.jTable
.repaint();
426 this.jTable
.updateUI();
427 //this.jScrollPane.setViewportView(this.jTable);
434 private void clearAll() {
436 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
437 model
.removeRow(index
);
443 Check if name or value is empty
448 private boolean check() {
449 if (isEmpty(this.jTextFieldName
.getText())) {
450 Log
.err("Add Tool Chain", "Name couldn't be empty!");
454 if (isEmpty(this.jTextFieldValue
.getText())) {
455 Log
.err("Add Tool Chain", "Value couldn't be empty");
462 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
465 public void valueChanged(ListSelectionEvent arg0
) {
466 if (arg0
.getValueIsAdjusting()) {
469 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
470 if (lsm
.isSelectionEmpty()) {
473 selectedRow
= lsm
.getMinSelectionIndex();
477 public void tableChanged(TableModelEvent arg0
) {
478 int row
= arg0
.getFirstRow();
479 TableModel m
= (TableModel
)arg0
.getSource();
480 if (arg0
.getType() == TableModelEvent
.UPDATE
){
481 this.vtcc
.getToolChainConfigs(row
).setName(m
.getValueAt(row
, 0).toString());
482 this.vtcc
.getToolChainConfigs(row
).setValue(m
.getValueAt(row
, 1).toString());
487 * @see java.awt.event.WindowListener#windowClosing(java.awt.event.WindowEvent)
489 * Override windowClosing to popup warning message to confirm quit
492 public void windowClosing(WindowEvent arg0
) {
496 private void exit() {
497 this.setVisible(false);