]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
UI rearrangement for build options and moduleSa settings.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPcdDefs.java
index 019ced387937954a62ac22ac4978a2e2374f3229..289dd148a5389136fb154315a6d219626625b140 100644 (file)
@@ -38,12 +38,17 @@ import javax.swing.table.TableModel;
 \r
 import org.tianocore.PackageSurfaceAreaDocument;\r
 \r
+import org.tianocore.frameworkwizard.common.DataValidation;\r
+import org.tianocore.frameworkwizard.common.Tools;\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
@@ -82,6 +87,8 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     private JComboBox jComboBoxDataType = null;\r
 \r
     private SpdFileContents sfc = null;\r
+    \r
+    private OpeningPackageType docConsole = null;\r
 \r
     private StarLabel jStarLabel2 = null;\r
 \r
@@ -95,11 +102,11 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
 \r
     private JLabel jLabelTokenSpace = null;\r
 \r
-    private JTextField jTextFieldTsGuid = null;\r
+    private JComboBox jComboBoxTsGuid = null;\r
 \r
     private JLabel jLabelVarVal = null;\r
 \r
-    private JTextField jTextField = null;\r
+    private JTextField jTextFieldHelp = null;\r
 \r
     private JLabel jLabelDefVal = null;\r
 \r
@@ -113,10 +120,6 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
 \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
@@ -127,34 +130,34 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
 \r
     private StarLabel starLabel = null;\r
 \r
-    private JCheckBox jCheckBox = null;\r
+    private JCheckBox jCheckBoxFeatureFlag = null;\r
 \r
-    private JCheckBox jCheckBox1 = null;\r
+    private JCheckBox jCheckBoxFixedAtBuild = null;\r
 \r
-    private JCheckBox jCheckBox2 = null;\r
+    private JCheckBox jCheckBoxPatchInMod = null;\r
 \r
-    private JCheckBox jCheckBox3 = null;\r
+    private JCheckBox jCheckBoxDyn = null;\r
 \r
-    private JCheckBox jCheckBox4 = null;\r
+    private JCheckBox jCheckBoxDynEx = null;\r
 \r
-    private JScrollPane jScrollPane1 = null;\r
+    private JScrollPane jScrollPaneArch = null;\r
 \r
-    private ICheckBoxList iCheckBoxList = null;\r
+    private ICheckBoxList iCheckBoxListArch = null;\r
 \r
-    private JScrollPane jScrollPane2 = null;\r
+    private JScrollPane jScrollPaneMod = null;\r
 \r
-    private ICheckBoxList iCheckBoxList1 = null;\r
+    private ICheckBoxList iCheckBoxListMod = null;\r
 \r
-    private JLabel jLabel = null;\r
+    private JLabel jLabelSupMod = null;\r
 \r
-    private JLabel jLabel1 = null;\r
+    private JLabel jLabelSupArch = null;\r
 \r
     /**\r
      This method initializes this\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
@@ -247,6 +250,11 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
         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
@@ -262,11 +270,12 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                 }\r
             }\r
         });\r
-        initFrame();\r
+        \r
         this.setVisible(true);\r
     }\r
 \r
     private void init(SpdFileContents sfc){\r
+        initFrame(sfc);\r
         if (sfc.getSpdPcdDefinitionCount() == 0) {\r
             return ;\r
         }\r
@@ -280,7 +289,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             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
@@ -331,14 +340,14 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     private JPanel getJContentPane1() {\r
                if (jContentPane == null) {     \r
            \r
-            jLabel1 = new JLabel();\r
-            jLabel1.setBounds(new java.awt.Rectangle(241,192,89,16));\r
-            jLabel1.setText("Supported Arch");\r
-            jLabel1.setEnabled(true);\r
-            jLabel = new JLabel();\r
-            jLabel.setBounds(new java.awt.Rectangle(15,193,103,16));\r
-            jLabel.setText("Supported Module");\r
-            jLabel.setEnabled(true);\r
+            jLabelSupArch = new JLabel();\r
+            jLabelSupArch.setBounds(new java.awt.Rectangle(241,192,89,16));\r
+            jLabelSupArch.setText("Supported Architectures");\r
+            jLabelSupArch.setEnabled(true);\r
+            jLabelSupMod = new JLabel();\r
+            jLabelSupMod.setBounds(new java.awt.Rectangle(15,193,103,16));\r
+            jLabelSupMod.setText("Supported Module type");\r
+            jLabelSupMod.setEnabled(true);\r
             starLabel = new StarLabel();\r
             starLabel.setBounds(new java.awt.Rectangle(2,134,10,20));\r
             jLabelDefVal = new JLabel();\r
@@ -348,7 +357,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             jLabelVarVal.setBounds(new java.awt.Rectangle(11,133,84,20));\r
             jLabelVarVal.setText("Valid Usage");\r
             jLabelC_Name = new JLabel();\r
-            jLabelC_Name.setText("C_Name");\r
+            jLabelC_Name.setText("C Name");\r
             jLabelC_Name.setBounds(new java.awt.Rectangle(11,9,140,20));\r
             jLabelTokenSpace = new JLabel();\r
             jLabelTokenSpace.setBounds(new java.awt.Rectangle(11,58,140,20));\r
@@ -357,7 +366,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             jLabelDataType.setText("Data Type");\r
             jLabelDataType.setBounds(new java.awt.Rectangle(11,83,140,20));\r
             jLabelToken = new JLabel();\r
-            jLabelToken.setText("Token");\r
+            jLabelToken.setText("Token Number");\r
             jLabelToken.setBounds(new java.awt.Rectangle(11,33,140,20));\r
             jLabelItemType = new JLabel();\r
             jLabelItemType.setText("Help Text");\r
@@ -371,7 +380,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             jContentPane.add(jLabelItemType, null);\r
             jContentPane.add(jLabelC_Name, null);\r
             jContentPane.add(jLabelTokenSpace, null);\r
-            jContentPane.add(getJTextFieldTsGuid(), null);\r
+            jContentPane.add(getJComboBoxTsGuid(), null);\r
             jContentPane.add(jLabelVarVal, null);\r
             jContentPane.add(getJTextFieldC_Name(), null);\r
             jContentPane.add(jLabelToken, null);\r
@@ -397,24 +406,23 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             jContentPane.add(jStarLabel, null);\r
             jContentPane.add(jStarLabel1, null);\r
             jContentPane.add(jStarLabel4, null);\r
-            jContentPane.add(getJTextField(), null);\r
+            jContentPane.add(getJTextFieldHelp(), null);\r
             jContentPane.add(jLabelDefVal, null);\r
             jContentPane.add(getJTextFieldDefaultValue(), null);\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
-            jContentPane.add(getJCheckBox1(), null);\r
-            jContentPane.add(getJCheckBox2(), null);\r
-            jContentPane.add(getJCheckBox3(), null);\r
-            jContentPane.add(getJCheckBox4(), null);\r
-            jContentPane.add(getJScrollPane1(), null);\r
-            jContentPane.add(getJScrollPane2(), null);\r
-            jContentPane.add(jLabel, null);\r
-            jContentPane.add(jLabel1, null);\r
+            jContentPane.add(getJCheckBoxFeatureFlag(), null);\r
+            jContentPane.add(getJCheckBoxFixedAtBuild(), null);\r
+            jContentPane.add(getJCheckBoxPatchInMod(), null);\r
+            jContentPane.add(getJCheckBoxDyn(), null);\r
+            jContentPane.add(getJCheckBoxDynEx(), null);\r
+            jContentPane.add(getJScrollPaneArch(), null);\r
+            jContentPane.add(getJScrollPaneMod(), null);\r
+            jContentPane.add(jLabelSupMod, null);\r
+            jContentPane.add(jLabelSupArch, null);\r
         }\r
         return jContentPane;\r
     }\r
@@ -424,7 +432,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                        jContentPane.add(jLabelTokenSpace, null);\r
     \r
      **/\r
-    private void initFrame() {\r
+    private void initFrame(SpdFileContents sfc) {\r
 \r
         jComboBoxDataType.addItem("UINT8");\r
         jComboBoxDataType.addItem("UINT16");\r
@@ -433,14 +441,20 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
         jComboBoxDataType.addItem("VOID*");\r
         jComboBoxDataType.addItem("BOOLEAN");\r
         jComboBoxDataType.setSelectedIndex(0);\r
+        \r
+        Vector<String> vGuidCName = new Vector<String>();\r
+        sfc.getSpdGuidDeclWithType(vGuidCName, "TOKEN_SPACE_GUID");\r
+        for (int i = 0; i < vGuidCName.size(); ++i) {\r
+            jComboBoxTsGuid.addItem(vGuidCName.get(i));\r
+        }\r
     }\r
 \r
     public void actionPerformed(ActionEvent arg0) {\r
         \r
+        \r
             if (arg0.getSource() == jButtonOk) {\r
                 this.save();\r
                 this.dispose();\r
-\r
             }\r
             if (arg0.getSource() == jButtonCancel) {\r
                 this.dispose();\r
@@ -448,32 +462,41 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
 \r
             if (arg0.getSource() == jButtonAdd) {\r
                 //ToDo: check before add\r
-                if (!checkValid()) {\r
+          \r
+                boolean[] b = {jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(), jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected()};\r
+                if (!checkValidUsage(b)) {\r
                     return;\r
                 }\r
-                \r
-                String archList = vectorToString(iCheckBoxList.getAllCheckedItemsString());\r
+                String archList = vectorToString(iCheckBoxListArch.getAllCheckedItemsString());\r
                 if (archList.length() == 0) {\r
                     archList = null;\r
                 }\r
-                String modTypeList = vectorToString(iCheckBoxList1.getAllCheckedItemsString());\r
+                String modTypeList = vectorToString(iCheckBoxListMod.getAllCheckedItemsString());\r
                 if (modTypeList.length() == 0) {\r
                     modTypeList = null;\r
                 }\r
                 Object[] row = {jTextFieldC_Name.getText(), jTextFieldToken.getText(),\r
-                                jTextFieldTsGuid.getText(), jComboBoxDataType.getSelectedItem(), \r
-                                jTextFieldDefaultValue.getText(), jTextField.getText(),\r
-                                jCheckBox.isSelected(), jCheckBox1.isSelected(),\r
-                                jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected(),\r
+                                jComboBoxTsGuid.getSelectedItem(), jComboBoxDataType.getSelectedItem(), \r
+                                jTextFieldDefaultValue.getText(), jTextFieldHelp.getText(),\r
+                                jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(),\r
+                                jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected(),\r
                                 archList, modTypeList};\r
-               \r
-                model.addRow(row);\r
+                if (!dataValidation(row)) {\r
+                    return;\r
+                }\r
                 \r
-                String usage = getValidUsage(jCheckBox.isSelected(), jCheckBox1.isSelected(), jCheckBox2.isSelected(), jCheckBox3.isSelected(), jCheckBox4.isSelected());\r
+                if (tokenCNameExisted(jTextFieldToken.getText(), jTextFieldC_Name.getText())) {\r
+                    return;\r
+                }\r
+                \r
+                model.addRow(row);\r
+                jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
+                String usage = getValidUsage(jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(), jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected());\r
                 if (usage.length() == 0) {\r
                     usage = null;\r
                 }\r
                 sfc.genSpdPcdDefinitions(row[0]+"", row[1]+"", row[3]+"", usage, row[2]+"", row[4]+"", row[5]+"", archList, modTypeList);\r
+                docConsole.setSaved(false);\r
             }\r
             //\r
             // remove selected line\r
@@ -486,6 +509,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                 if (rowSelected >= 0) {\r
                     model.removeRow(rowSelected);\r
                     sfc.removeSpdPcdDefinition(rowSelected);\r
+                    docConsole.setSaved(false);\r
                 }\r
             }\r
 \r
@@ -495,18 +519,9 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                 }\r
                 model.setRowCount(0);\r
                 sfc.removeSpdPcdDefinition();\r
+                docConsole.setSaved(false);\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
@@ -514,17 +529,17 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     }\r
 \r
     /**\r
-     * This method initializes jTextFieldTsGuid        \r
+     * This method initializes jComboBoxTsGuid \r
      *         \r
-     * @return javax.swing.JTextField  \r
+     * @return javax.swing.JComboBox   \r
      */\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
+    private JComboBox getJComboBoxTsGuid() {\r
+        if (jComboBoxTsGuid == null) {\r
+            jComboBoxTsGuid = new JComboBox();\r
+            jComboBoxTsGuid.setBounds(new java.awt.Rectangle(156,58,315,20));\r
+    \r
         }\r
-        return jTextFieldTsGuid;\r
+        return jComboBoxTsGuid;\r
     }\r
 \r
     /**\r
@@ -532,13 +547,13 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField() {\r
-        if (jTextField == null) {\r
-            jTextField = new JTextField();\r
-            jTextField.setBounds(new java.awt.Rectangle(156,108,317,20));\r
-            jTextField.setPreferredSize(new java.awt.Dimension(315,20));\r
+    private JTextField getJTextFieldHelp() {\r
+        if (jTextFieldHelp == null) {\r
+            jTextFieldHelp = new JTextField();\r
+            jTextFieldHelp.setBounds(new java.awt.Rectangle(156,108,317,20));\r
+            jTextFieldHelp.setPreferredSize(new java.awt.Dimension(315,20));\r
         }\r
-        return jTextField;\r
+        return jTextFieldHelp;\r
     }\r
 \r
     /**\r
@@ -604,38 +619,20 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
         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.jTextFieldC_Name, this.getWidth(), intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldToken, this.getWidth(), intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldTsGuid, this.getWidth(), intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
-        resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
-        resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldC_Name, this.getWidth(), intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldToken, this.getWidth(), intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jComboBoxTsGuid, this.getWidth(), intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldHelp, this.getWidth(), intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jScrollPane, this.getWidth(), intPreferredWidth);\r
         \r
-        resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldDefaultValue, this.getWidth(), intPreferredWidth);\r
+        Tools.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
@@ -646,7 +643,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     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
@@ -661,6 +658,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
         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
@@ -678,7 +676,6 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             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
@@ -692,6 +689,30 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             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
@@ -716,18 +737,81 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     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
@@ -737,14 +821,24 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox() {\r
-        if (jCheckBox == null) {\r
-            jCheckBox = new JCheckBox();\r
-            jCheckBox.setBounds(new java.awt.Rectangle(156,161,100,21));\r
-            jCheckBox.setText("Feature Flag");\r
-            jCheckBox.setPreferredSize(new java.awt.Dimension(21,20));\r
+    private JCheckBox getJCheckBoxFeatureFlag() {\r
+        if (jCheckBoxFeatureFlag == null) {\r
+            jCheckBoxFeatureFlag = new JCheckBox();\r
+            jCheckBoxFeatureFlag.setBounds(new java.awt.Rectangle(156,161,100,21));\r
+            jCheckBoxFeatureFlag.setText("Feature Flag");\r
+            jCheckBoxFeatureFlag.setPreferredSize(new java.awt.Dimension(21,20));\r
+            jCheckBoxFeatureFlag.addItemListener(new java.awt.event.ItemListener() {\r
+                public void itemStateChanged(java.awt.event.ItemEvent e) {\r
+                    if (jCheckBoxFeatureFlag.isSelected()) {\r
+                        jCheckBoxPatchInMod.setSelected(false);\r
+                        jCheckBoxFixedAtBuild.setSelected(false);\r
+                        jCheckBoxDyn.setSelected(false);\r
+                        jCheckBoxDynEx.setSelected(false);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jCheckBox;\r
+        return jCheckBoxFeatureFlag;\r
     }\r
 \r
     /**\r
@@ -752,14 +846,21 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return javax.swing.JCheckBox   \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.setText("Fixed at Build");\r
-            jCheckBox1.setPreferredSize(new java.awt.Dimension(21,20));\r
+    private JCheckBox getJCheckBoxFixedAtBuild() {\r
+        if (jCheckBoxFixedAtBuild == null) {\r
+            jCheckBoxFixedAtBuild = new JCheckBox();\r
+            jCheckBoxFixedAtBuild.setBounds(new java.awt.Rectangle(312,133,108,20));\r
+            jCheckBoxFixedAtBuild.setText("Fixed at Build");\r
+            jCheckBoxFixedAtBuild.setPreferredSize(new java.awt.Dimension(21,20));\r
+            jCheckBoxFixedAtBuild.addItemListener(new java.awt.event.ItemListener() {\r
+                public void itemStateChanged(java.awt.event.ItemEvent e) {\r
+                    if (jCheckBoxFixedAtBuild.isSelected()) {\r
+                        jCheckBoxFeatureFlag.setSelected(false);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jCheckBox1;\r
+        return jCheckBoxFixedAtBuild;\r
     }\r
 \r
     /**\r
@@ -767,14 +868,21 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox2() {\r
-        if (jCheckBox2 == null) {\r
-            jCheckBox2 = new JCheckBox();\r
-            jCheckBox2.setBounds(new java.awt.Rectangle(156,133,154,20));\r
-            jCheckBox2.setText("Patchable in Module");\r
-            jCheckBox2.setPreferredSize(new java.awt.Dimension(21,20));\r
+    private JCheckBox getJCheckBoxPatchInMod() {\r
+        if (jCheckBoxPatchInMod == null) {\r
+            jCheckBoxPatchInMod = new JCheckBox();\r
+            jCheckBoxPatchInMod.setBounds(new java.awt.Rectangle(156,133,154,20));\r
+            jCheckBoxPatchInMod.setText("Patchable in Module");\r
+            jCheckBoxPatchInMod.setPreferredSize(new java.awt.Dimension(21,20));\r
+            jCheckBoxPatchInMod.addItemListener(new java.awt.event.ItemListener() {\r
+                public void itemStateChanged(java.awt.event.ItemEvent e) {\r
+                    if (jCheckBoxPatchInMod.isSelected()) {\r
+                        jCheckBoxFeatureFlag.setSelected(false);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jCheckBox2;\r
+        return jCheckBoxPatchInMod;\r
     }\r
 \r
     /**\r
@@ -782,14 +890,21 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox3() {\r
-        if (jCheckBox3 == null) {\r
-            jCheckBox3 = new JCheckBox();\r
-            jCheckBox3.setBounds(new java.awt.Rectangle(278,161,80,20));\r
-            jCheckBox3.setText("Dynamic");\r
-            jCheckBox3.setPreferredSize(new java.awt.Dimension(21,20));\r
+    private JCheckBox getJCheckBoxDyn() {\r
+        if (jCheckBoxDyn == null) {\r
+            jCheckBoxDyn = new JCheckBox();\r
+            jCheckBoxDyn.setBounds(new java.awt.Rectangle(278,161,80,20));\r
+            jCheckBoxDyn.setText("Dynamic");\r
+            jCheckBoxDyn.setPreferredSize(new java.awt.Dimension(21,20));\r
+            jCheckBoxDyn.addItemListener(new java.awt.event.ItemListener() {\r
+                public void itemStateChanged(java.awt.event.ItemEvent e) {\r
+                    if (jCheckBoxDyn.isSelected()) {\r
+                        jCheckBoxFeatureFlag.setSelected(false);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jCheckBox3;\r
+        return jCheckBoxDyn;\r
     }\r
 \r
     /**\r
@@ -797,14 +912,21 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox4() {\r
-        if (jCheckBox4 == null) {\r
-            jCheckBox4 = new JCheckBox();\r
-            jCheckBox4.setBounds(new java.awt.Rectangle(371,161,99,20));\r
-            jCheckBox4.setText("DynamicEx");\r
-            jCheckBox4.setPreferredSize(new java.awt.Dimension(21,20));\r
+    private JCheckBox getJCheckBoxDynEx() {\r
+        if (jCheckBoxDynEx == null) {\r
+            jCheckBoxDynEx = new JCheckBox();\r
+            jCheckBoxDynEx.setBounds(new java.awt.Rectangle(371,161,99,20));\r
+            jCheckBoxDynEx.setText("DynamicEx");\r
+            jCheckBoxDynEx.setPreferredSize(new java.awt.Dimension(21,20));\r
+            jCheckBoxDynEx.addItemListener(new java.awt.event.ItemListener() {\r
+                public void itemStateChanged(java.awt.event.ItemEvent e) {\r
+                    if (jCheckBoxDynEx.isSelected()) {\r
+                        jCheckBoxFeatureFlag.setSelected(false);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jCheckBox4;\r
+        return jCheckBoxDynEx;\r
     }\r
     \r
     private String getValidUsage(boolean ff, boolean fab, boolean pim, boolean d, boolean de) {\r
@@ -828,27 +950,70 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
         return usage.trim();\r
     }\r
     \r
-    private boolean checkValid() {\r
-        if (!(jCheckBox.isSelected() || jCheckBox1.isSelected() || jCheckBox2.isSelected() || jCheckBox3.isSelected() || jCheckBox4.isSelected())){\r
+    private boolean tokenCNameExisted(String token, String cName) {\r
+        Integer inputToken = Integer.decode(token);\r
+        \r
+        for (int i = 0; i < jTable.getRowCount(); ++i) {\r
+            if (jTable.getValueAt(i, 0).equals(cName)) {\r
+                JOptionPane.showMessageDialog(frame, "C_Name already existed in table.");\r
+                return true;\r
+            }\r
+            if (jTable.getValueAt(i, 1).equals(token)) {\r
+                JOptionPane.showMessageDialog(frame, "Token already existed in table.");\r
+                return true;\r
+            }\r
+            Integer tokenValue = Integer.decode(jTable.getValueAt(i, 1)+"");\r
+            if (tokenValue.equals(inputToken)) {\r
+                JOptionPane.showMessageDialog(frame, "Same token value already existed in table.");\r
+                return true;\r
+            }\r
+            \r
+        }\r
+        return false;\r
+    }\r
+    \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(), Integer.MIN_VALUE, Integer.MAX_VALUE)) {\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
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane1() {\r
-        if (jScrollPane1 == null) {\r
-            jScrollPane1 = new JScrollPane();\r
-            jScrollPane1.setBounds(new java.awt.Rectangle(242,213,188,54));\r
-            jScrollPane1.setViewportView(getICheckBoxList());\r
-            jScrollPane1.setPreferredSize(new Dimension(188, 74));\r
+    private JScrollPane getJScrollPaneArch() {\r
+        if (jScrollPaneArch == null) {\r
+            jScrollPaneArch = new JScrollPane();\r
+            jScrollPaneArch.setBounds(new java.awt.Rectangle(242,213,188,54));\r
+            jScrollPaneArch.setViewportView(getICheckBoxListArch());\r
+            jScrollPaneArch.setPreferredSize(new Dimension(188, 74));\r
         }\r
-        return jScrollPane1;\r
+        return jScrollPaneArch;\r
     }\r
 \r
     /**\r
@@ -856,18 +1021,20 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList     \r
      */\r
-    private ICheckBoxList getICheckBoxList() {\r
-        if (iCheckBoxList == null) {\r
-            iCheckBoxList = new ICheckBoxList();\r
-            iCheckBoxList.setBounds(new Rectangle(197, 142, 188, 74));\r
+    private ICheckBoxList getICheckBoxListArch() {\r
+        if (iCheckBoxListArch == null) {\r
+            iCheckBoxListArch = new ICheckBoxList();\r
+            iCheckBoxListArch.setBounds(new Rectangle(197, 142, 188, 74));\r
             Vector<String> v = new Vector<String>();\r
             v.add("IA32");\r
             v.add("X64");\r
             v.add("IPF");\r
             v.add("EBC");\r
-            iCheckBoxList.setAllItems(v);\r
+            v.add("ARM");\r
+            v.add("PPC");\r
+            iCheckBoxListArch.setAllItems(v);\r
         }\r
-        return iCheckBoxList;\r
+        return iCheckBoxListArch;\r
     }\r
 \r
     /**\r
@@ -875,14 +1042,14 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane2() {\r
-        if (jScrollPane2 == null) {\r
-            jScrollPane2 = new JScrollPane();\r
-            jScrollPane2.setBounds(new java.awt.Rectangle(15,213,199,55));\r
-            jScrollPane2.setViewportView(getICheckBoxList1());\r
-            jScrollPane2.setPreferredSize(new Dimension(170, 74));\r
+    private JScrollPane getJScrollPaneMod() {\r
+        if (jScrollPaneMod == null) {\r
+            jScrollPaneMod = new JScrollPane();\r
+            jScrollPaneMod.setBounds(new java.awt.Rectangle(15,213,199,55));\r
+            jScrollPaneMod.setViewportView(getICheckBoxListMod());\r
+            jScrollPaneMod.setPreferredSize(new Dimension(170, 74));\r
         }\r
-        return jScrollPane2;\r
+        return jScrollPaneMod;\r
     }\r
 \r
     /**\r
@@ -890,10 +1057,10 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      *         \r
      * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList     \r
      */\r
-    private ICheckBoxList getICheckBoxList1() {\r
-        if (iCheckBoxList1 == null) {\r
-            iCheckBoxList1 = new ICheckBoxList();\r
-            iCheckBoxList1.setBounds(new Rectangle(14, 142, 170, 74));\r
+    private ICheckBoxList getICheckBoxListMod() {\r
+        if (iCheckBoxListMod == null) {\r
+            iCheckBoxListMod = new ICheckBoxList();\r
+            iCheckBoxListMod.setBounds(new Rectangle(14, 142, 170, 74));\r
             Vector<String> v = new Vector<String>();\r
             v.add("BASE");\r
             v.add("SEC");\r
@@ -907,9 +1074,9 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             v.add("UEFI_DRIVER");\r
             v.add("UEFI_APPLICATION");\r
             v.add("USER_DEFINED");\r
-            iCheckBoxList1.setAllItems(v);\r
+            iCheckBoxListMod.setAllItems(v);\r
         }\r
-        return iCheckBoxList1;\r
+        return iCheckBoxListMod;\r
     }\r
     \r
     protected String vectorToString(Vector<String> v) {\r
@@ -923,6 +1090,30 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
         }\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