]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
fix the problem that if no data updated in wizard editors, the Save indicator will...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPcdDefs.java
index f85e40b988e3e77041e80db936fa94ed9489c4e7..4b9924c32a38aa133b4e40945998ee3135513c47 100644 (file)
@@ -39,6 +39,7 @@ import javax.swing.table.TableModel;
 import org.tianocore.PackageSurfaceAreaDocument;\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
@@ -85,6 +86,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
@@ -153,7 +156,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      \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
@@ -246,6 +249,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
@@ -279,7 +287,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
@@ -435,6 +443,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
 \r
     public void actionPerformed(ActionEvent arg0) {\r
         \r
+        docConsole.setSaved(false);\r
             if (arg0.getSource() == jButtonOk) {\r
                 this.save();\r
                 this.dispose();\r
@@ -467,7 +476,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                     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
@@ -618,7 +627,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
@@ -712,26 +721,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
-            if (usage.length() == 0) {\r
-                JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");\r
-                return;\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
@@ -759,7 +823,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     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
@@ -950,6 +1014,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