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 // Vector<String> vTableHeader = new Vector<String>();
117 // vTableHeader.addElement("Name");
118 // vTableHeader.addElement("Value");
120 model
= new DefaultTableModel();
121 //model = new DefaultTableModel(vTableHeader);
122 jTable
= new JTable(model
);
123 jTable
.setRowHeight(20);
125 model
.addColumn("Property");
126 model
.addColumn("Value");
128 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
129 jTable
.getSelectionModel().addListSelectionListener(this);
130 jTable
.getModel().addTableModelListener(this);
136 This method initializes jButtonOpen
138 @return javax.swing.JButton
141 private JButton
getJButtonOpen() {
142 if (jButtonOpen
== null) {
143 jButtonOpen
= new JButton();
144 jButtonOpen
.setBounds(new java
.awt
.Rectangle(40, 405, 120, 20));
145 jButtonOpen
.setText("Open a file");
146 jButtonOpen
.addActionListener(this);
152 This method initializes jButtonSave
154 @return javax.swing.JButton
157 private JButton
getJButtonSave() {
158 if (jButtonSave
== null) {
159 jButtonSave
= new JButton();
160 jButtonSave
.setBounds(new java
.awt
.Rectangle(170, 405, 120, 20));
161 jButtonSave
.setText("Save to a file");
162 jButtonSave
.addActionListener(this);
168 This method initializes jButtonClose
170 @return javax.swing.JButton
173 private JButton
getJButtonClose() {
174 if (jButtonClose
== null) {
175 jButtonClose
= new JButton();
176 jButtonClose
.setBounds(new java
.awt
.Rectangle(490, 405, 80, 20));
177 jButtonClose
.setText("Close");
178 jButtonClose
.addActionListener(this);
184 This method initializes jTextFieldName
186 @return javax.swing.JTextField
189 private JTextField
getJTextFieldName() {
190 if (jTextFieldName
== null) {
191 jTextFieldName
= new JTextField();
192 jTextFieldName
.setBounds(new java
.awt
.Rectangle(60, 365, 140, 20));
194 return jTextFieldName
;
198 This method initializes jTextFieldValue
200 @return javax.swing.JTextField
203 private JTextField
getJTextFieldValue() {
204 if (jTextFieldValue
== null) {
205 jTextFieldValue
= new JTextField();
206 jTextFieldValue
.setBounds(new java
.awt
.Rectangle(250, 365, 140, 20));
208 return jTextFieldValue
;
212 This method initializes jButtonAdd
214 @return javax.swing.JButton
217 private JButton
getJButtonAdd() {
218 if (jButtonAdd
== null) {
219 jButtonAdd
= new JButton();
220 jButtonAdd
.setBounds(new java
.awt
.Rectangle(400, 365, 80, 20));
221 jButtonAdd
.setText("Add");
222 jButtonAdd
.addActionListener(this);
228 This method initializes jButtonRemove
230 @return javax.swing.JButton
233 private JButton
getJButtonRemove() {
234 if (jButtonRemove
== null) {
235 jButtonRemove
= new JButton();
236 jButtonRemove
.setBounds(new java
.awt
.Rectangle(490, 365, 80, 20));
237 jButtonRemove
.setText("Remove");
238 jButtonRemove
.addActionListener(this);
240 return jButtonRemove
;
244 * This method initializes jButtonHelp
246 * @return javax.swing.JButton
248 private JButton
getJButtonHelp() {
249 if (jButtonHelp
== null) {
250 jButtonHelp
= new JButton();
251 jButtonHelp
.setBounds(new java
.awt
.Rectangle(300,405,120,20));
252 jButtonHelp
.setText("Help");
253 jButtonHelp
.addActionListener(this);
263 public static void main(String
[] args
) {
264 // TODO Auto-generated method stub
268 public static ToolChainConfig
getInstance() {
270 tcc
= new ToolChainConfig();
276 * This is the default constructor
278 public ToolChainConfig() {
284 This method initializes this
287 private void init() {
288 this.setSize(600, 480);
289 this.setContentPane(getJContentPane());
290 this.setTitle("Tool Chain Configuration");
296 File f
= new File(currentFile
);
300 vtcc
.parseFile(this.currentFile
);
301 this.setTitle("Tool Chain Configuration" + " [" + currentFile
+ "]");
302 } catch (IOException e
) {
303 Log
.log(this.currentFile
+ "Read Error", e
.getMessage());
307 Log
.log("Open file", this.currentFile
+ " Not Found");
314 This method initializes jContentPane
316 @return javax.swing.JPanel
319 private JPanel
getJContentPane() {
320 if (jContentPane
== null) {
321 jLabelValue
= new JLabel();
322 jLabelValue
.setBounds(new java
.awt
.Rectangle(205, 365, 40, 20));
323 jLabelValue
.setText("Value");
324 jLabelName
= new JLabel();
325 jLabelName
.setBounds(new java
.awt
.Rectangle(15, 365, 40, 20));
326 jLabelName
.setText("Name");
327 jContentPane
= new JPanel();
328 jContentPane
.setLayout(null);
329 jContentPane
.add(getJScrollPane(), null);
330 jContentPane
.add(getJButtonOpen(), null);
331 jContentPane
.add(getJButtonSave(), null);
332 jContentPane
.add(getJButtonClose(), null);
333 jContentPane
.add(jLabelName
, null);
334 jContentPane
.add(getJTextFieldName(), null);
335 jContentPane
.add(jLabelValue
, null);
336 jContentPane
.add(getJTextFieldValue(), null);
337 jContentPane
.add(getJButtonAdd(), null);
338 jContentPane
.add(getJButtonRemove(), null);
339 jContentPane
.add(getJButtonHelp(), null);
345 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
347 * Override actionPerformed to listen all actions
349 public void actionPerformed(ActionEvent arg0
) {
350 if (arg0
.getSource() == jButtonClose
) {
354 if (arg0
.getSource() == jButtonOpen
) {
355 JFileChooser fc
= new JFileChooser();
356 fc
.setAcceptAllFileFilterUsed(true);
357 fc
.setCurrentDirectory(new File(toolsDir
));
359 int result
= fc
.showOpenDialog(new JPanel());
360 if (result
== JFileChooser
.APPROVE_OPTION
) {
363 vtcc
.parseFile(fc
.getSelectedFile().getPath());
364 currentFile
= fc
.getSelectedFile().getPath();
365 this.setTitle("Tool Chain Configuration" + " [" + currentFile
+ "]");
366 } catch (IOException e
) {
367 Log
.err(this.currentFile
+ "Read Error", e
.getMessage());
375 if (arg0
.getSource() == jButtonSave
) {
376 JFileChooser fc
= new JFileChooser();
377 fc
.setAcceptAllFileFilterUsed(true);
378 fc
.setSelectedFile(new File(currentFile
));
380 int result
= fc
.showSaveDialog(new JPanel());
381 if (result
== JFileChooser
.APPROVE_OPTION
) {
382 currentFile
= fc
.getSelectedFile().getPath();
384 vtcc
.saveFile(currentFile
);
385 } catch (IOException e
) {
386 Log
.err(this.currentFile
+ "Write Error", e
.getMessage());
393 if (arg0
.getSource() == jButtonAdd
) {
395 String
[] row
= { jTextFieldName
.getText(), jTextFieldValue
.getText() };
396 this.vtcc
.addToolChainConfigs(new ToolChainConfigId(row
[0], row
[1]));
397 this.model
.addRow(row
);
401 if (arg0
.getSource() == jButtonRemove
) {
402 if (jTable
.isEditing()) {
403 jTable
.getCellEditor().stopCellEditing();
405 if (selectedRow
> -1) {
406 this.model
.removeRow(selectedRow
);
407 this.vtcc
.removeToolChainConfigs(selectedRow
);
412 if (arg0
.getSource() == jButtonHelp
) {
413 tcch
= ToolChainConfigHelp
.getInstance();
414 tcch
.setVisible(true);
419 Read content of vector and put then into table
422 private void showTable() {
425 if (vtcc
.size() > 0) {
426 for (int index
= 0; index
< vtcc
.size(); index
++) {
427 model
.addRow(vtcc
.toStringVector(index
));
430 this.jTable
.repaint();
431 this.jTable
.updateUI();
432 //this.jScrollPane.setViewportView(this.jTable);
439 private void clearAll() {
441 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
442 model
.removeRow(index
);
448 Check if name or value is empty
453 private boolean check() {
454 if (isEmpty(this.jTextFieldName
.getText())) {
455 Log
.err("Add Tool Chain", "Name couldn't be empty!");
459 if (isEmpty(this.jTextFieldValue
.getText())) {
460 Log
.err("Add Tool Chain", "Value couldn't be empty");
467 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
470 public void valueChanged(ListSelectionEvent arg0
) {
471 if (arg0
.getValueIsAdjusting()) {
474 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
475 if (lsm
.isSelectionEmpty()) {
478 selectedRow
= lsm
.getMinSelectionIndex();
482 public void tableChanged(TableModelEvent arg0
) {
483 int row
= arg0
.getFirstRow();
484 TableModel m
= (TableModel
)arg0
.getSource();
485 if (arg0
.getType() == TableModelEvent
.UPDATE
){
486 this.vtcc
.getToolChainConfigs(row
).setName(m
.getValueAt(row
, 0).toString());
487 this.vtcc
.getToolChainConfigs(row
).setValue(m
.getValueAt(row
, 1).toString());
492 * @see java.awt.event.WindowListener#windowClosing(java.awt.event.WindowEvent)
494 * Override windowClosing to popup warning message to confirm quit
497 public void windowClosing(WindowEvent arg0
) {
501 private void exit() {
502 this.setVisible(false);