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
;
19 import java
.io
.IOException
;
21 import javax
.swing
.JButton
;
22 import javax
.swing
.JFileChooser
;
23 import javax
.swing
.JLabel
;
24 import javax
.swing
.JPanel
;
25 import javax
.swing
.JScrollPane
;
26 import javax
.swing
.JTable
;
27 import javax
.swing
.JTextField
;
28 import javax
.swing
.ListSelectionModel
;
29 import javax
.swing
.event
.ListSelectionEvent
;
30 import javax
.swing
.event
.ListSelectionListener
;
31 import javax
.swing
.event
.TableModelEvent
;
32 import javax
.swing
.event
.TableModelListener
;
33 import javax
.swing
.table
.DefaultTableModel
;
34 import javax
.swing
.table
.TableModel
;
36 import org
.tianocore
.frameworkwizard
.common
.DataType
;
37 import org
.tianocore
.frameworkwizard
.common
.Log
;
38 import org
.tianocore
.frameworkwizard
.common
.Tools
;
39 import org
.tianocore
.frameworkwizard
.common
.Identifications
.ToolChainConfigId
;
40 import org
.tianocore
.frameworkwizard
.common
.Identifications
.ToolChainConfigVector
;
41 import org
.tianocore
.frameworkwizard
.common
.ui
.IDialog
;
42 import org
.tianocore
.frameworkwizard
.common
.ui
.IFrame
;
43 import org
.tianocore
.frameworkwizard
.workspace
.Workspace
;
45 public class ToolChainConfig
extends IDialog
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;
90 This method initializes jScrollPane
92 @return javax.swing.JScrollPane
95 private JScrollPane
getJScrollPane() {
96 if (jScrollPane
== null) {
97 jScrollPane
= new JScrollPane();
98 jScrollPane
.setBounds(new java
.awt
.Rectangle(15, 15, 555, 345));
99 jScrollPane
.setViewportView(getJTable());
105 This method initializes jTable
107 @return javax.swing.JTable
110 private JTable
getJTable() {
111 if (jTable
== null) {
112 // Vector<String> vTableHeader = new Vector<String>();
113 // vTableHeader.addElement("Name");
114 // vTableHeader.addElement("Value");
116 model
= new DefaultTableModel();
117 //model = new DefaultTableModel(vTableHeader);
118 jTable
= new JTable(model
);
119 jTable
.setRowHeight(20);
121 model
.addColumn("Property");
122 model
.addColumn("Value");
124 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
125 jTable
.getSelectionModel().addListSelectionListener(this);
126 jTable
.getModel().addTableModelListener(this);
132 This method initializes jButtonOpen
134 @return javax.swing.JButton
137 private JButton
getJButtonOpen() {
138 if (jButtonOpen
== null) {
139 jButtonOpen
= new JButton();
140 jButtonOpen
.setBounds(new java
.awt
.Rectangle(40, 405, 120, 20));
141 jButtonOpen
.setText("Open a file");
142 jButtonOpen
.addActionListener(this);
148 This method initializes jButtonSave
150 @return javax.swing.JButton
153 private JButton
getJButtonSave() {
154 if (jButtonSave
== null) {
155 jButtonSave
= new JButton();
156 jButtonSave
.setBounds(new java
.awt
.Rectangle(170, 405, 120, 20));
157 jButtonSave
.setText("Save to a file");
158 jButtonSave
.addActionListener(this);
164 This method initializes jButtonClose
166 @return javax.swing.JButton
169 private JButton
getJButtonClose() {
170 if (jButtonClose
== null) {
171 jButtonClose
= new JButton();
172 jButtonClose
.setBounds(new java
.awt
.Rectangle(490, 405, 80, 20));
173 jButtonClose
.setText("Close");
174 jButtonClose
.addActionListener(this);
180 This method initializes jTextFieldName
182 @return javax.swing.JTextField
185 private JTextField
getJTextFieldName() {
186 if (jTextFieldName
== null) {
187 jTextFieldName
= new JTextField();
188 jTextFieldName
.setBounds(new java
.awt
.Rectangle(60, 365, 140, 20));
190 return jTextFieldName
;
194 This method initializes jTextFieldValue
196 @return javax.swing.JTextField
199 private JTextField
getJTextFieldValue() {
200 if (jTextFieldValue
== null) {
201 jTextFieldValue
= new JTextField();
202 jTextFieldValue
.setBounds(new java
.awt
.Rectangle(250, 365, 140, 20));
204 return jTextFieldValue
;
208 This method initializes jButtonAdd
210 @return javax.swing.JButton
213 private JButton
getJButtonAdd() {
214 if (jButtonAdd
== null) {
215 jButtonAdd
= new JButton();
216 jButtonAdd
.setBounds(new java
.awt
.Rectangle(400, 365, 80, 20));
217 jButtonAdd
.setText("Add");
218 jButtonAdd
.addActionListener(this);
224 This method initializes jButtonRemove
226 @return javax.swing.JButton
229 private JButton
getJButtonRemove() {
230 if (jButtonRemove
== null) {
231 jButtonRemove
= new JButton();
232 jButtonRemove
.setBounds(new java
.awt
.Rectangle(490, 365, 80, 20));
233 jButtonRemove
.setText("Remove");
234 jButtonRemove
.addActionListener(this);
236 return jButtonRemove
;
240 * This method initializes jButtonHelp
242 * @return javax.swing.JButton
244 private JButton
getJButtonHelp() {
245 if (jButtonHelp
== null) {
246 jButtonHelp
= new JButton();
247 jButtonHelp
.setBounds(new java
.awt
.Rectangle(300,405,120,20));
248 jButtonHelp
.setText("Help");
249 jButtonHelp
.addActionListener(this);
259 public static void main(String
[] args
) {
260 // TODO Auto-generated method stub
265 * This is the default constructor
267 public ToolChainConfig(IFrame parentFrame
, boolean modal
) {
268 super(parentFrame
, modal
);
273 This method initializes this
276 private void init() {
277 this.setSize(600, 480);
278 this.setContentPane(getJContentPane());
279 this.setTitle("Tool Chain Configuration");
285 File f
= new File(currentFile
);
289 vtcc
.parseFile(this.currentFile
);
290 this.setTitle("Tool Chain Configuration" + " [" + currentFile
+ "]");
291 } catch (IOException e
) {
292 Log
.log(this.currentFile
+ "Read Error", e
.getMessage());
296 Log
.log("Open file", this.currentFile
+ " Not Found");
303 This method initializes jContentPane
305 @return javax.swing.JPanel
308 private JPanel
getJContentPane() {
309 if (jContentPane
== null) {
310 jLabelValue
= new JLabel();
311 jLabelValue
.setBounds(new java
.awt
.Rectangle(205, 365, 40, 20));
312 jLabelValue
.setText("Value");
313 jLabelName
= new JLabel();
314 jLabelName
.setBounds(new java
.awt
.Rectangle(15, 365, 40, 20));
315 jLabelName
.setText("Name");
316 jContentPane
= new JPanel();
317 jContentPane
.setLayout(null);
318 jContentPane
.add(getJScrollPane(), null);
319 jContentPane
.add(getJButtonOpen(), null);
320 jContentPane
.add(getJButtonSave(), null);
321 jContentPane
.add(getJButtonClose(), null);
322 jContentPane
.add(jLabelName
, null);
323 jContentPane
.add(getJTextFieldName(), null);
324 jContentPane
.add(jLabelValue
, null);
325 jContentPane
.add(getJTextFieldValue(), null);
326 jContentPane
.add(getJButtonAdd(), null);
327 jContentPane
.add(getJButtonRemove(), null);
328 jContentPane
.add(getJButtonHelp(), null);
334 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
336 * Override actionPerformed to listen all actions
338 public void actionPerformed(ActionEvent arg0
) {
339 if (arg0
.getSource() == jButtonClose
) {
340 this.setVisible(false);
341 this.returnType
= DataType
.RETURN_TYPE_CANCEL
;
344 if (arg0
.getSource() == jButtonOpen
) {
345 JFileChooser fc
= new JFileChooser();
346 fc
.setAcceptAllFileFilterUsed(true);
347 fc
.setCurrentDirectory(new File(toolsDir
));
349 int result
= fc
.showOpenDialog(new JPanel());
350 if (result
== JFileChooser
.APPROVE_OPTION
) {
353 vtcc
.parseFile(fc
.getSelectedFile().getPath());
354 currentFile
= fc
.getSelectedFile().getPath();
355 this.setTitle("Tool Chain Configuration" + " [" + currentFile
+ "]");
356 } catch (IOException e
) {
357 Log
.err(this.currentFile
+ "Read Error", e
.getMessage());
365 if (arg0
.getSource() == jButtonSave
) {
366 JFileChooser fc
= new JFileChooser();
367 fc
.setAcceptAllFileFilterUsed(true);
368 fc
.setSelectedFile(new File(currentFile
));
370 int result
= fc
.showSaveDialog(new JPanel());
371 if (result
== JFileChooser
.APPROVE_OPTION
) {
372 currentFile
= fc
.getSelectedFile().getPath();
374 vtcc
.saveFile(currentFile
);
375 } catch (IOException e
) {
376 Log
.err(this.currentFile
+ "Write Error", e
.getMessage());
383 if (arg0
.getSource() == jButtonAdd
) {
385 String
[] row
= { jTextFieldName
.getText(), jTextFieldValue
.getText() };
386 this.vtcc
.addToolChainConfigs(new ToolChainConfigId(row
[0], row
[1]));
387 this.model
.addRow(row
);
391 if (arg0
.getSource() == jButtonRemove
) {
392 if (jTable
.isEditing()) {
393 jTable
.getCellEditor().stopCellEditing();
395 if (selectedRow
> -1) {
396 this.model
.removeRow(selectedRow
);
397 this.vtcc
.removeToolChainConfigs(selectedRow
);
402 if (arg0
.getSource() == jButtonHelp
) {
403 ToolChainConfigHelp tcch
= new ToolChainConfigHelp();
404 tcch
.setVisible(true);
409 Read content of vector and put then into table
412 private void showTable() {
415 if (vtcc
.size() > 0) {
416 for (int index
= 0; index
< vtcc
.size(); index
++) {
417 model
.addRow(vtcc
.toStringVector(index
));
420 this.jTable
.repaint();
421 this.jTable
.updateUI();
422 //this.jScrollPane.setViewportView(this.jTable);
429 private void clearAll() {
431 for (int index
= model
.getRowCount() - 1; index
>= 0; index
--) {
432 model
.removeRow(index
);
438 Check if name or value is empty
443 private boolean check() {
444 if (isEmpty(this.jTextFieldName
.getText())) {
445 Log
.err("Add Tool Chain", "Name couldn't be empty!");
449 if (isEmpty(this.jTextFieldValue
.getText())) {
450 Log
.err("Add Tool Chain", "Value couldn't be empty");
457 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
460 public void valueChanged(ListSelectionEvent arg0
) {
461 if (arg0
.getValueIsAdjusting()) {
464 ListSelectionModel lsm
= (ListSelectionModel
) arg0
.getSource();
465 if (lsm
.isSelectionEmpty()) {
468 selectedRow
= lsm
.getMinSelectionIndex();
472 public void tableChanged(TableModelEvent arg0
) {
473 int row
= arg0
.getFirstRow();
474 TableModel m
= (TableModel
)arg0
.getSource();
475 if (arg0
.getType() == TableModelEvent
.UPDATE
){
476 this.vtcc
.getToolChainConfigs(row
).setName(m
.getValueAt(row
, 0).toString());
477 this.vtcc
.getToolChainConfigs(row
).setValue(m
.getValueAt(row
, 1).toString());