+++ /dev/null
-/** @file\r
- \r
- The file is used to setup tool chain configuration\r
- \r
- Copyright (c) 2006, Intel Corporation\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
- \r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
- \r
- **/\r
-package org.tianocore.frameworkwizard;\r
-\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.WindowEvent;\r
-import java.io.File;\r
-import java.io.IOException;\r
-\r
-import javax.swing.JButton;\r
-import javax.swing.JFileChooser;\r
-import javax.swing.JLabel;\r
-import javax.swing.JPanel;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JTable;\r
-import javax.swing.JTextField;\r
-import javax.swing.ListSelectionModel;\r
-import javax.swing.event.ListSelectionEvent;\r
-import javax.swing.event.ListSelectionListener;\r
-import javax.swing.event.TableModelEvent;\r
-import javax.swing.event.TableModelListener;\r
-import javax.swing.table.DefaultTableModel;\r
-import javax.swing.table.TableModel;\r
-\r
-import org.tianocore.frameworkwizard.common.DataType;\r
-import org.tianocore.frameworkwizard.common.IFileFilter;\r
-import org.tianocore.frameworkwizard.common.Log;\r
-import org.tianocore.frameworkwizard.common.Tools;\r
-import org.tianocore.frameworkwizard.common.Identifications.ToolChainConfigId;\r
-import org.tianocore.frameworkwizard.common.Identifications.ToolChainConfigVector;\r
-import org.tianocore.frameworkwizard.common.ui.IFrame;\r
-import org.tianocore.frameworkwizard.workspace.Workspace;\r
-\r
-public class ToolChainConfig extends IFrame implements ListSelectionListener, TableModelListener{\r
-\r
- ///\r
- /// Define Class Members\r
- ///\r
- private static final long serialVersionUID = 1486930966278269085L;\r
-\r
- private JPanel jContentPane = null;\r
-\r
- private JScrollPane jScrollPane = null;\r
-\r
- private DefaultTableModel model = null;\r
-\r
- private JTable jTable = null;\r
-\r
- private JButton jButtonOpen = null;\r
-\r
- private JButton jButtonSave = null;\r
-\r
- private JButton jButtonClose = null;\r
-\r
- private String toolsDir = Tools.addFileSeparator(Workspace.getCurrentWorkspace()) + "Tools"\r
- + DataType.FILE_SEPARATOR + "Conf";\r
-\r
- private String currentFile = Tools.addFileSeparator(toolsDir) + "tools_def.template";\r
- \r
- private ToolChainConfigVector vtcc = new ToolChainConfigVector();\r
-\r
- private JLabel jLabelName = null;\r
-\r
- private JTextField jTextFieldName = null;\r
-\r
- private JLabel jLabelValue = null;\r
-\r
- private JTextField jTextFieldValue = null;\r
-\r
- private JButton jButtonAdd = null;\r
-\r
- private JButton jButtonRemove = null;\r
-\r
- private int selectedRow = -1;\r
-\r
- private JButton jButtonHelp = null;\r
- \r
- private static ToolChainConfig tcc = null;\r
- \r
- private ToolChainConfigHelp tcch = null;\r
- \r
- /**\r
- This method initializes jScrollPane \r
- \r
- @return javax.swing.JScrollPane \r
- \r
- **/\r
- private JScrollPane getJScrollPane() {\r
- if (jScrollPane == null) {\r
- jScrollPane = new JScrollPane();\r
- jScrollPane.setBounds(new java.awt.Rectangle(15, 15, 555, 345));\r
- jScrollPane.setViewportView(getJTable());\r
- }\r
- return jScrollPane;\r
- }\r
-\r
- /**\r
- This method initializes jTable \r
- \r
- @return javax.swing.JTable \r
- \r
- **/\r
- private JTable getJTable() {\r
- if (jTable == null) {\r
- model = new DefaultTableModel();\r
- jTable = new JTable(model);\r
- jTable.setRowHeight(20);\r
-\r
- model.addColumn("Property");\r
- model.addColumn("Value");\r
-\r
- jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
- jTable.getSelectionModel().addListSelectionListener(this);\r
- jTable.getModel().addTableModelListener(this);\r
- }\r
- return jTable;\r
- }\r
-\r
- /**\r
- This method initializes jButtonOpen \r
- \r
- @return javax.swing.JButton \r
- \r
- **/\r
- private JButton getJButtonOpen() {\r
- if (jButtonOpen == null) {\r
- jButtonOpen = new JButton();\r
- jButtonOpen.setBounds(new java.awt.Rectangle(40, 405, 120, 20));\r
- jButtonOpen.setText("Open File");\r
- jButtonOpen.addActionListener(this);\r
- }\r
- return jButtonOpen;\r
- }\r
-\r
- /**\r
- This method initializes jButtonSave \r
- \r
- @return javax.swing.JButton \r
- \r
- **/\r
- private JButton getJButtonSave() {\r
- if (jButtonSave == null) {\r
- jButtonSave = new JButton();\r
- jButtonSave.setBounds(new java.awt.Rectangle(170, 405, 120, 20));\r
- jButtonSave.setText("Save File");\r
- jButtonSave.addActionListener(this);\r
- }\r
- return jButtonSave;\r
- }\r
-\r
- /**\r
- This method initializes jButtonClose \r
- \r
- @return javax.swing.JButton \r
- \r
- **/\r
- private JButton getJButtonClose() {\r
- if (jButtonClose == null) {\r
- jButtonClose = new JButton();\r
- jButtonClose.setBounds(new java.awt.Rectangle(490, 405, 80, 20));\r
- jButtonClose.setText("Close");\r
- jButtonClose.addActionListener(this);\r
- }\r
- return jButtonClose;\r
- }\r
-\r
- /**\r
- This method initializes jTextFieldName \r
- \r
- @return javax.swing.JTextField \r
- \r
- **/\r
- private JTextField getJTextFieldName() {\r
- if (jTextFieldName == null) {\r
- jTextFieldName = new JTextField();\r
- jTextFieldName.setBounds(new java.awt.Rectangle(60, 365, 140, 20));\r
- }\r
- return jTextFieldName;\r
- }\r
-\r
- /**\r
- This method initializes jTextFieldValue \r
- \r
- @return javax.swing.JTextField \r
- \r
- **/\r
- private JTextField getJTextFieldValue() {\r
- if (jTextFieldValue == null) {\r
- jTextFieldValue = new JTextField();\r
- jTextFieldValue.setBounds(new java.awt.Rectangle(250, 365, 140, 20));\r
- }\r
- return jTextFieldValue;\r
- }\r
-\r
- /**\r
- This method initializes jButtonAdd \r
- \r
- @return javax.swing.JButton \r
- \r
- **/\r
- private JButton getJButtonAdd() {\r
- if (jButtonAdd == null) {\r
- jButtonAdd = new JButton();\r
- jButtonAdd.setBounds(new java.awt.Rectangle(400, 365, 80, 20));\r
- jButtonAdd.setText("Add");\r
- jButtonAdd.addActionListener(this);\r
- }\r
- return jButtonAdd;\r
- }\r
-\r
- /**\r
- This method initializes jButtonRemove \r
- \r
- @return javax.swing.JButton \r
- \r
- **/\r
- private JButton getJButtonRemove() {\r
- if (jButtonRemove == null) {\r
- jButtonRemove = new JButton();\r
- jButtonRemove.setBounds(new java.awt.Rectangle(490, 365, 80, 20));\r
- jButtonRemove.setText("Remove");\r
- jButtonRemove.addActionListener(this);\r
- }\r
- return jButtonRemove;\r
- }\r
-\r
- /**\r
- * This method initializes jButtonHelp \r
- * \r
- * @return javax.swing.JButton \r
- */\r
- private JButton getJButtonHelp() {\r
- if (jButtonHelp == null) {\r
- jButtonHelp = new JButton();\r
- jButtonHelp.setBounds(new java.awt.Rectangle(300,405,120,20));\r
- jButtonHelp.setText("Help");\r
- jButtonHelp.addActionListener(this);\r
- }\r
- return jButtonHelp;\r
- }\r
-\r
- /**\r
- \r
- @param args\r
- \r
- **/\r
- public static void main(String[] args) {\r
- // TODO Auto-generated method stub\r
-\r
- }\r
- \r
- public static ToolChainConfig getInstance() {\r
- if (tcc == null) {\r
- tcc = new ToolChainConfig();\r
- }\r
- return tcc;\r
- }\r
-\r
- /**\r
- * This is the default constructor\r
- */\r
- public ToolChainConfig() {\r
- super();\r
- init();\r
- }\r
-\r
- /**\r
- This method initializes this\r
- \r
- **/\r
- private void init() {\r
- this.setSize(600, 480);\r
- this.setContentPane(getJContentPane());\r
- this.setTitle("Tool Chain Configuration");\r
- this.centerWindow();\r
-\r
- //\r
- // Read default file\r
- //\r
- File f = new File(currentFile);\r
- if (f.exists()) {\r
- try {\r
- vtcc.removeAll();\r
- vtcc.parseFile(this.currentFile);\r
- this.setTitle("Tool Chain Configuration" + " [" + currentFile + "]");\r
- } catch (IOException e) {\r
- Log.log(this.currentFile + "Read Error", e.getMessage());\r
- e.printStackTrace();\r
- }\r
- } else {\r
- Log.log("File Open Error: ", this.currentFile + " File Not Found");\r
- }\r
-\r
- showTable();\r
- }\r
-\r
- /**\r
- This method initializes jContentPane\r
- \r
- @return javax.swing.JPanel\r
- \r
- **/\r
- private JPanel getJContentPane() {\r
- if (jContentPane == null) {\r
- jLabelValue = new JLabel();\r
- jLabelValue.setBounds(new java.awt.Rectangle(205, 365, 40, 20));\r
- jLabelValue.setText("Value");\r
- jLabelName = new JLabel();\r
- jLabelName.setBounds(new java.awt.Rectangle(15, 365, 40, 20));\r
- jLabelName.setText("Name");\r
- jContentPane = new JPanel();\r
- jContentPane.setLayout(null);\r
- jContentPane.add(getJScrollPane(), null);\r
- jContentPane.add(getJButtonOpen(), null);\r
- jContentPane.add(getJButtonSave(), null);\r
- jContentPane.add(getJButtonClose(), null);\r
- jContentPane.add(jLabelName, null);\r
- jContentPane.add(getJTextFieldName(), null);\r
- jContentPane.add(jLabelValue, null);\r
- jContentPane.add(getJTextFieldValue(), null);\r
- jContentPane.add(getJButtonAdd(), null);\r
- jContentPane.add(getJButtonRemove(), null);\r
- jContentPane.add(getJButtonHelp(), null);\r
- }\r
- return jContentPane;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
- * \r
- * Override actionPerformed to listen all actions\r
- */\r
- public void actionPerformed(ActionEvent arg0) {\r
- if (arg0.getSource() == jButtonClose) {\r
- this.exit();\r
- }\r
-\r
- if (arg0.getSource() == jButtonOpen) {\r
- JFileChooser fc = new JFileChooser();\r
- fc.setAcceptAllFileFilterUsed(false);\r
- IFileFilter iff = new IFileFilter(DataType.TEXT_FILE_EXT);\r
- fc.addChoosableFileFilter(iff);\r
- fc.setCurrentDirectory(new File(toolsDir));\r
-\r
- int result = fc.showOpenDialog(new JPanel());\r
- if (result == JFileChooser.APPROVE_OPTION) {\r
- try {\r
- vtcc.removeAll();\r
- vtcc.parseFile(fc.getSelectedFile().getPath());\r
- currentFile = fc.getSelectedFile().getPath();\r
- this.setTitle("Tool Chain Configuration" + " [" + currentFile + "]");\r
- } catch (IOException e) {\r
- Log.wrn(this.currentFile + "Read Error", e.getMessage());\r
- Log.err(this.currentFile + "Read Error", e.getMessage());\r
- return;\r
- }\r
- this.showTable();\r
- }\r
- }\r
-\r
- if (arg0.getSource() == jButtonSave) {\r
- JFileChooser fc = new JFileChooser();\r
- fc.setAcceptAllFileFilterUsed(false);\r
- IFileFilter iff = new IFileFilter(DataType.TEXT_FILE_EXT);\r
- fc.addChoosableFileFilter(iff);\r
- fc.setCurrentDirectory(new File(toolsDir));\r
-\r
- int result = fc.showSaveDialog(new JPanel());\r
- if (result == JFileChooser.APPROVE_OPTION) {\r
- currentFile = fc.getSelectedFile().getPath();\r
- try {\r
- vtcc.saveFile(currentFile);\r
- } catch (IOException e) {\r
- Log.wrn(this.currentFile + "Write Error", e.getMessage());\r
- Log.err(this.currentFile + "Write Error", e.getMessage());\r
- return;\r
- }\r
- }\r
- }\r
-\r
- if (arg0.getSource() == jButtonAdd) {\r
- if (check()) {\r
- String[] row = { jTextFieldName.getText(), jTextFieldValue.getText() };\r
- this.vtcc.addToolChainConfigs(new ToolChainConfigId(row[0], row[1]));\r
- this.model.addRow(row);\r
- }\r
- }\r
-\r
- if (arg0.getSource() == jButtonRemove) {\r
- if (jTable.isEditing()) {\r
- jTable.getCellEditor().stopCellEditing();\r
- }\r
- if (selectedRow > -1) {\r
- this.model.removeRow(selectedRow);\r
- this.vtcc.removeToolChainConfigs(selectedRow);\r
- selectedRow = -1;\r
- }\r
- }\r
- \r
- if (arg0.getSource() == jButtonHelp) {\r
- tcch = ToolChainConfigHelp.getInstance();\r
- tcch.setVisible(true);\r
- }\r
- }\r
-\r
- /**\r
- Read content of vector and put then into table\r
- \r
- **/\r
- private void showTable() {\r
- clearAll();\r
- \r
- if (vtcc.size() > 0) {\r
- for (int index = 0; index < vtcc.size(); index++) {\r
- model.addRow(vtcc.toStringVector(index));\r
- }\r
- }\r
- this.jTable.repaint();\r
- this.jTable.updateUI();\r
- //this.jScrollPane.setViewportView(this.jTable);\r
- }\r
-\r
- /**\r
- Clear all table rows\r
- \r
- **/\r
- private void clearAll() {\r
- if (model != null) {\r
- for (int index = model.getRowCount() - 1; index >= 0; index--) {\r
- model.removeRow(index);\r
- }\r
- }\r
- }\r
-\r
- /**\r
- Check if name or value is empty\r
- \r
- @return\r
- \r
- **/\r
- private boolean check() {\r
- if (isEmpty(this.jTextFieldName.getText())) {\r
- Log.wrn("Add Tool Chain", "The Property Name must be entered!");\r
- return false;\r
- }\r
-\r
- if (isEmpty(this.jTextFieldValue.getText())) {\r
- Log.wrn("Add Tool Chain", "The Property Value must be entered!");\r
- return false;\r
- }\r
- return true;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)\r
- *\r
- */\r
- public void valueChanged(ListSelectionEvent arg0) {\r
- if (arg0.getValueIsAdjusting()) {\r
- return;\r
- }\r
- ListSelectionModel lsm = (ListSelectionModel) arg0.getSource();\r
- if (lsm.isSelectionEmpty()) {\r
- return;\r
- } else {\r
- selectedRow = lsm.getMinSelectionIndex();\r
- }\r
- }\r
-\r
- public void tableChanged(TableModelEvent arg0) {\r
- int row = arg0.getFirstRow();\r
- TableModel m = (TableModel)arg0.getSource();\r
- if (arg0.getType() == TableModelEvent.UPDATE){\r
- this.vtcc.getToolChainConfigs(row).setName(m.getValueAt(row, 0).toString());\r
- this.vtcc.getToolChainConfigs(row).setValue(m.getValueAt(row, 1).toString());\r
- }\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see java.awt.event.WindowListener#windowClosing(java.awt.event.WindowEvent)\r
- *\r
- * Override windowClosing to popup warning message to confirm quit\r
- * \r
- */\r
- public void windowClosing(WindowEvent arg0) {\r
- this.exit();\r
- }\r
- \r
- private void exit() {\r
- this.setVisible(false);\r
- if (tcch != null) {\r
- tcch.dispose();\r
- }\r
- }\r
-}\r