package org.tianocore.frameworkwizard.packaging.ui;\r
\r
import java.awt.Dimension;\r
-import java.awt.Toolkit;\r
import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
import java.awt.event.ComponentEvent;\r
\r
-import javax.swing.ButtonGroup;\r
import javax.swing.DefaultCellEditor;\r
import javax.swing.JFrame;\r
import javax.swing.JOptionPane;\r
import javax.swing.JPanel;\r
-import javax.swing.JRadioButton;\r
import javax.swing.JLabel;\r
import javax.swing.JTextField;\r
import javax.swing.JComboBox;\r
import javax.swing.table.TableModel;\r
\r
import org.tianocore.PackageSurfaceAreaDocument;\r
-import org.tianocore.frameworkwizard.common.DataType;\r
\r
+import org.tianocore.frameworkwizard.common.DataValidation;\r
+import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;\r
import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
import javax.swing.JScrollPane;\r
import javax.swing.JTable;\r
import javax.swing.JCheckBox;\r
import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList;\r
+import org.tianocore.frameworkwizard.platform.ui.ListEditor;\r
+\r
import java.awt.Rectangle;\r
import java.util.Vector;\r
\r
**/\r
public class SpdPcdDefs extends IInternalFrame implements TableModelListener{\r
\r
+ /**\r
+ * \r
+ */\r
+ private static final long serialVersionUID = 1L;\r
+\r
static JFrame frame;\r
\r
private JPanel jContentPane = null; \r
private JComboBox jComboBoxDataType = null;\r
\r
private SpdFileContents sfc = null;\r
+ \r
+ private OpeningPackageType docConsole = null;\r
\r
private StarLabel jStarLabel2 = null;\r
\r
\r
private JButton jButtonClearAll = null;\r
\r
- private JButton jButtonGen = null;\r
- \r
- private GenGuidDialog guidDialog = null;\r
-\r
private JScrollPane jScrollPane = null;\r
\r
private JTable jTable = null;\r
\r
**/\r
private void initialize() {\r
- this.setTitle("PCD Definition");\r
+ this.setTitle("PCD Declarations");\r
this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
\r
}\r
sfc = new SpdFileContents(inPsa);\r
init(sfc);\r
}\r
+ \r
+ public SpdPcdDefs(OpeningPackageType opt) {\r
+ this(opt.getXmlSpd());\r
+ docConsole = opt;\r
+ }\r
/**\r
This method initializes this\r
\r
for (int k = 0; k < 6; ++k) {\r
rowData[k] = saa[i][k];\r
}\r
- for (int m = 7; m < 11; ++m) {\r
+ for (int m = 6; m < 11; ++m) {\r
rowData[m] = new Boolean("false");\r
}\r
int j = 0;\r
jContentPane.add(getJButtonAdd(), null);\r
jContentPane.add(getJButtonRemove(), null);\r
jContentPane.add(getJButtonClearAll(), null);\r
- jContentPane.add(getJButtonGen(), null);\r
jContentPane.add(getJScrollPane(), null);\r
jContentPane.add(starLabel, null);\r
jContentPane.add(getJCheckBox(), null);\r
\r
public void actionPerformed(ActionEvent arg0) {\r
\r
+ docConsole.setSaved(false);\r
if (arg0.getSource() == jButtonOk) {\r
this.save();\r
this.dispose();\r
-\r
}\r
if (arg0.getSource() == jButtonCancel) {\r
this.dispose();\r
\r
if (arg0.getSource() == jButtonAdd) {\r
//ToDo: check before add\r
- if (!checkValid()) {\r
+ boolean[] b = {jCheckBox.isSelected(), jCheckBox1.isSelected(), jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected()};\r
+ if (!checkValidUsage(b)) {\r
return;\r
}\r
- \r
String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());\r
if (archList.length() == 0) {\r
archList = null;\r
jCheckBox.isSelected(), jCheckBox1.isSelected(),\r
jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected(),\r
archList, modTypeList};\r
- \r
+ if (!dataValidation(row)) {\r
+ return;\r
+ }\r
model.addRow(row);\r
- \r
+ jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
String usage = getValidUsage(jCheckBox.isSelected(), jCheckBox1.isSelected(), jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected());\r
if (usage.length() == 0) {\r
usage = null;\r
sfc.removeSpdPcdDefinition();\r
}\r
\r
- if (arg0.getSource() == jButtonGen) {\r
- guidDialog = new GenGuidDialog(this);\r
- guidDialog.setGuid(jTextFieldTsGuid.getText());\r
- guidDialog.setVisible(true);\r
- }\r
- \r
- if (arg0.getActionCommand().equals("GenGuidValue")) {\r
- jTextFieldTsGuid.setText(guidDialog.getGuid());\r
- }\r
-\r
}\r
\r
protected void save() {\r
private JTextField getJTextFieldTsGuid() {\r
if (jTextFieldTsGuid == null) {\r
jTextFieldTsGuid = new JTextField();\r
- jTextFieldTsGuid.setBounds(new java.awt.Rectangle(156,58,249,20));\r
- jTextFieldTsGuid.setPreferredSize(new java.awt.Dimension(250,20));\r
+ jTextFieldTsGuid.setPreferredSize(new java.awt.Dimension(315,20));\r
+ jTextFieldTsGuid.setSize(new java.awt.Dimension(317,20));\r
+ jTextFieldTsGuid.setLocation(new java.awt.Point(156,58));\r
}\r
return jTextFieldTsGuid;\r
}\r
return jButtonClearAll;\r
}\r
\r
- /**\r
- * This method initializes jButtonGen \r
- * \r
- * @return javax.swing.JButton \r
- */\r
- private JButton getJButtonGen() {\r
- if (jButtonGen == null) {\r
- jButtonGen = new JButton();\r
- jButtonGen.setBounds(new java.awt.Rectangle(414,57,58,20));\r
- jButtonGen.setPreferredSize(new java.awt.Dimension(56,20));\r
- jButtonGen.setText("Gen");\r
- jButtonGen.addActionListener(this);\r
- }\r
- return jButtonGen;\r
- }\r
- \r
public void componentResized(ComponentEvent arg0) {\r
int intPreferredWidth = 500;\r
\r
resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);\r
\r
- resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
// relocateComponentX(this.jButtonClearAll, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
// relocateComponentX(this.jButtonRemove, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
// relocateComponentX(this.jButtonAdd, this.getWidth(), DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
- relocateComponentX(this.jButtonGen, this.getWidth(), this.getPreferredSize().width, 30);\r
}\r
\r
/**\r
private JScrollPane getJScrollPane() {\r
if (jScrollPane == null) {\r
jScrollPane = new JScrollPane();\r
- jScrollPane.setBounds(new java.awt.Rectangle(5,301,1473,137));\r
+ jScrollPane.setBounds(new java.awt.Rectangle(5,301,1473,259));\r
jScrollPane.setViewportView(getJTable());\r
}\r
return jScrollPane;\r
if (jTable == null) {\r
model = new CheckboxTableModel();\r
jTable = new JTable(model);\r
+ jTable.setRowHeight(20);\r
jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);\r
jTable.setSize(new Dimension(1000, 300));\r
\r
model.addColumn("DynamicEx");\r
model.addColumn("SupportedArch");\r
model.addColumn("SupportedModule");\r
- jTable.getColumnModel().getColumn(2).setCellEditor(new GuidEditor());\r
\r
//ToDo: add a valid usage editor\r
\r
TableColumn dataTypeColumn = jTable.getColumnModel().getColumn(3);\r
dataTypeColumn.setCellEditor(new DefaultCellEditor(jComboBoxDataType));\r
\r
+ Vector<String> vArch = new Vector<String>();\r
+ vArch.add("IA32");\r
+ vArch.add("X64");\r
+ vArch.add("IPF");\r
+ vArch.add("EBC");\r
+ vArch.add("ARM");\r
+ vArch.add("PPC");\r
+ jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch));\r
+ \r
+ Vector<String> vModule = new Vector<String>();\r
+ vModule.add("BASE");\r
+ vModule.add("SEC");\r
+ vModule.add("PEI_CORE");\r
+ vModule.add("PEIM");\r
+ vModule.add("DXE_CORE");\r
+ vModule.add("DXE_DRIVER");\r
+ vModule.add("DXE_RUNTIME_DRIVER");\r
+ vModule.add("DXE_SAL_DRIVER");\r
+ vModule.add("DXE_SMM_DRIVER");\r
+ vModule.add("UEFI_DRIVER");\r
+ vModule.add("UEFI_APPLICATION");\r
+ vModule.add("USER_DEFINED");\r
+ jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule));\r
+ \r
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
public void valueChanged(ListSelectionEvent e) {\r
public void tableChanged(TableModelEvent arg0) {\r
// TODO Auto-generated method stub\r
int row = arg0.getFirstRow();\r
+ int column = arg0.getColumn();\r
TableModel m = (TableModel)arg0.getSource();\r
if (arg0.getType() == TableModelEvent.UPDATE){\r
+ String[] sa = new String[9];\r
+ sfc.getSpdPcdDeclaration(sa, row);\r
+ Object cellData = m.getValueAt(row, column);\r
+ if (column < 6) {\r
+ \r
+ if (cellData == null) {\r
+ cellData = "";\r
+ }\r
+ if (cellData.equals(sa[column])) {\r
+ return;\r
+ }\r
+ if (cellData.toString().length() == 0 && sa[column] == null) {\r
+ return;\r
+ }\r
+ }\r
\r
+ String usage = getValidUsage(new Boolean(m.getValueAt(row, 6)+""), new Boolean(m.getValueAt(row, 7)+""), new Boolean(m.getValueAt(row, 8)+""), new Boolean(m.getValueAt(row, 9)+""), new Boolean(m.getValueAt(row, 10)+""));\r
+ if (usage.length() == 0) {\r
+ JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");\r
+ return;\r
+ }\r
+ if (column <= 10 && column >= 6) {\r
+ if (compareTwoVectors(stringToVector(usage), stringToVector(sa[6]))) {\r
+ return;\r
+ }\r
+ }\r
+ \r
+ if (column == 11) {\r
+ if (cellData == null) {\r
+ cellData = "";\r
+ }\r
+ if (cellData.equals(sa[7])) {\r
+ return;\r
+ }\r
+ if (cellData.toString().length() == 0 && sa[7] == null) {\r
+ return;\r
+ }\r
+ }\r
+ \r
+ if (column == 12) {\r
+ if (cellData == null) {\r
+ cellData = "";\r
+ }\r
+ if (cellData.equals(sa[8])) {\r
+ return;\r
+ }\r
+ if (cellData.toString().length() == 0 && sa[8] == null) {\r
+ return;\r
+ }\r
+ }\r
String cName = m.getValueAt(row, 0) + "";\r
String token = m.getValueAt(row, 1) + "";\r
String ts = m.getValueAt(row, 2) + "";\r
String dataType = m.getValueAt(row, 3) + "";\r
String defaultVal = m.getValueAt(row, 4) + "";\r
String help = m.getValueAt(row, 5) + "";\r
- String usage = getValidUsage(new Boolean(m.getValueAt(row, 6)+""), new Boolean(m.getValueAt(row, 7)+""), new Boolean(m.getValueAt(row, 8)+""), new Boolean(m.getValueAt(row, 9)+""), new Boolean(m.getValueAt(row, 10)+""));\r
- String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());\r
- String modTypeList = vectorToString(iCheckBoxList1.getAllCheckedItemsString());\r
+ \r
+ \r
+ String archList = null;\r
+ if (m.getValueAt(row, 11) != null){\r
+ archList = m.getValueAt(row, 11).toString();\r
+ }\r
+ String modTypeList = null;\r
+ if (m.getValueAt(row, 12) != null) {\r
+ modTypeList = m.getValueAt(row, 12).toString(); \r
+ }\r
+ \r
+ Object[] o = {cName, token, ts, dataType, defaultVal, help};\r
+ if (!dataValidation(o)){\r
+ return;\r
+ }\r
+ docConsole.setSaved(false);\r
sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);\r
}\r
}\r
private JCheckBox getJCheckBox1() {\r
if (jCheckBox1 == null) {\r
jCheckBox1 = new JCheckBox();\r
- jCheckBox1.setBounds(new java.awt.Rectangle(302,133,108,20));\r
+ jCheckBox1.setBounds(new java.awt.Rectangle(312,133,108,20));\r
jCheckBox1.setText("Fixed at Build");\r
jCheckBox1.setPreferredSize(new java.awt.Dimension(21,20));\r
}\r
return usage.trim();\r
}\r
\r
- private boolean checkValid() {\r
- if (!(jCheckBox.isSelected() || jCheckBox1.isSelected() || jCheckBox2.isSelected() || jCheckBox3.isSelected() || jCheckBox4.isSelected())){\r
+ private boolean checkValidUsage(boolean[] b) {\r
+ if (!(b[0] || b[1] || b[2] || b[3] || b[4])){\r
JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");\r
return false;\r
}\r
return true;\r
}\r
+ private boolean dataValidation(Object[] row) {\r
+ \r
+ if (!DataValidation.isC_NameType(row[0].toString())) {\r
+ JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");\r
+ return false;\r
+ }\r
+ if (!(DataValidation.isHexDoubleWordDataType(row[1].toString()) || \r
+ DataValidation.isInt(row[1].toString(), 0, 0xffffffff))) {\r
+ JOptionPane.showMessageDialog(frame, "Token is NOT correct.");\r
+ return false;\r
+ }\r
+ if (!DataValidation.isC_NameType(row[2].toString())) {\r
+ JOptionPane.showMessageDialog(frame, "Token Space is NOT C_NameType");\r
+ return false;\r
+ }\r
+ if (row[5].toString().length() == 0) {\r
+ JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
\r
/**\r
* This method initializes jScrollPane1 \r
v.add("X64");\r
v.add("IPF");\r
v.add("EBC");\r
+ v.add("ARM");\r
+ v.add("PPC");\r
iCheckBoxList.setAllItems(v);\r
}\r
return iCheckBoxList;\r
}\r
return s.trim();\r
}\r
+ \r
+ protected Vector<String> stringToVector(String s){\r
+ if (s == null) {\r
+ return null;\r
+ }\r
+ String[] sArray = s.split(" ");\r
+ Vector<String> v = new Vector<String>();\r
+ for (int i = 0; i < sArray.length; ++i) {\r
+ v.add(sArray[i]);\r
+ }\r
+ return v;\r
+ }\r
+ \r
+ private boolean compareTwoVectors(Vector v1, Vector v2) {\r
+ if (v1.size() != v2.size()) {\r
+ return false;\r
+ }\r
+ for (int i = 0; i < v1.size(); ++i) {\r
+ if (!v2.contains(v1.get(i))) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
} // @jve:decl-index=0:visual-constraint="22,11"\r
\r
class CheckboxTableModel extends DefaultTableModel {\r
- public Class getColumnClass (int c) {\r
+ /**\r
+ * \r
+ */\r
+ private static final long serialVersionUID = 1L;\r
+\r
+ public Class<?> getColumnClass (int c) {\r
if (getValueAt(0, c) != null){\r
return getValueAt(0, c).getClass();\r
}\r