]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPcdDefs.java
Make opening dialogs re-gain focus when user switch back to main UI from other window...
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPcdDefs.java
index 7abf5c0f2e65721c2a296ec1d198d1f55b9d828e..38868430725f707837de8c56ad32ef820dfc5d57 100644 (file)
@@ -66,7 +66,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
      */\r
     private static final long serialVersionUID = 1L;\r
 \r
-    static JFrame frame;\r
+    private JFrame topFrame;\r
     \r
     private JPanel jContentPane = null;  \r
 \r
@@ -163,6 +163,9 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     private final int usageMinWidth = 60;\r
     private final int supArchMinWidth = 200;\r
     private final int supModMinWidth = 200;\r
+    \r
+//    private Object boolModifyLock = new Object();\r
+//    private boolean exclusiveUsage = false;\r
 \r
     /**\r
      This method initializes this\r
@@ -259,21 +262,21 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     /**\r
      This is the default constructor\r
      **/\r
-    public SpdPcdDefs() {\r
+    public SpdPcdDefs(JFrame frame) {\r
         super();\r
         init();\r
         initialize();\r
-        \r
+        topFrame = frame;\r
     }\r
 \r
-    public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa) {\r
-        this();\r
+    public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa, JFrame frame) {\r
+        this(frame);\r
         sfc = new SpdFileContents(inPsa);\r
         init(sfc);\r
     }\r
     \r
-    public SpdPcdDefs(OpeningPackageType opt) {\r
-        this(opt.getXmlSpd());\r
+    public SpdPcdDefs(OpeningPackageType opt, JFrame frame) {\r
+        this(opt.getXmlSpd(), frame);\r
         docConsole = opt;\r
     }\r
     /**\r
@@ -296,7 +299,12 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     }\r
 \r
     private void init(SpdFileContents sfc){\r
-        initFrame(sfc);\r
+        \r
+        if (sfc.getSpdPkgDefsRdOnly().equals("true")) {\r
+            JOptionPane.showMessageDialog(topFrame, "This is a read-only package. You will not be able to edit contents in table.");\r
+        }\r
+        initFrame();\r
+        \r
         if (sfc.getSpdPcdDefinitionCount() == 0) {\r
             return ;\r
         }\r
@@ -346,8 +354,6 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             i++;\r
         }\r
         \r
-        \r
-        \r
     }\r
     \r
     private JScrollPane getJContentPane(){\r
@@ -459,7 +465,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                        jContentPane.add(jLabelTokenSpace, null);\r
     \r
      **/\r
-    private void initFrame(SpdFileContents sfc) {\r
+    private void initFrame() {\r
 \r
         jComboBoxDataType.addItem("UINT8");\r
         jComboBoxDataType.addItem("UINT16");\r
@@ -474,6 +480,16 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
         for (int i = 0; i < vGuidCName.size(); ++i) {\r
             jComboBoxTsGuid.addItem(vGuidCName.get(i));\r
         }\r
+        \r
+        boolean editable = true;\r
+        if (sfc.getSpdPkgDefsRdOnly().equals("true")) {\r
+            editable = false;\r
+        }\r
+        \r
+        jButtonAdd.setEnabled(editable);\r
+        jButtonRemove.setEnabled(editable);\r
+        jButtonClearAll.setEnabled(editable);\r
+        jTable.setEnabled(editable);\r
     }\r
 \r
     public void actionPerformed(ActionEvent arg0) {\r
@@ -508,6 +524,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                                 jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(),\r
                                 jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected(),\r
                                 archList, modTypeList};\r
+                try {\r
                 if (!dataValidation(row)) {\r
                     return;\r
                 }\r
@@ -515,6 +532,10 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                 if (tokenCNameExisted(jTextFieldToken.getText(), jTextFieldC_Name.getText())) {\r
                     return;\r
                 }\r
+                           } catch (Exception e) {\r
+                                   JOptionPane.showMessageDialog(this, "Illegal Token:"+ e.getCause());\r
+                                   return;\r
+                           }\r
                 \r
                 model.addRow(row);\r
                 jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
@@ -744,7 +765,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             TableColumn dataTypeColumn = jTable.getColumnModel().getColumn(3);\r
             dataTypeColumn.setCellEditor(new DefaultCellEditor(jComboBoxDataType));\r
             \r
-            jTable.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor());\r
+            jTable.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor(topFrame));\r
 \r
             Vector<String> vArch = new Vector<String>();\r
             vArch.add("IA32");\r
@@ -753,7 +774,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             vArch.add("EBC");\r
             vArch.add("ARM");\r
             vArch.add("PPC");\r
-            jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch));\r
+            jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch, topFrame));\r
             \r
             Vector<String> vModule = new Vector<String>();\r
             vModule.add("BASE");\r
@@ -768,7 +789,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             vModule.add("UEFI_DRIVER");\r
             vModule.add("UEFI_APPLICATION");\r
             vModule.add("USER_DEFINED");\r
-            jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule));\r
+            jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule, topFrame));\r
             \r
             jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
             jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
@@ -815,17 +836,31 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             \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
+                JOptionPane.showMessageDialog(this, "You must choose at least one usage for PCD entry.");\r
                 return;\r
             }\r
+\r
             if (column <= 10 && column >= 6) {\r
                 Vector<String> v = stringToVector(usage);\r
                 if (compareTwoVectors(v, stringToVector(sa[6]))) {\r
                     return;\r
                 }\r
-                if (v.contains("FEATURE_FLAG") && v.size() > 1) {\r
-                    JOptionPane.showMessageDialog(frame, "Usage Feature Flag can NOT co-exist with others.");\r
-                    return;\r
+                if (v.contains("FEATURE_FLAG")/* && v.size() > 1 && !exclusiveUsage*/) {\r
+                    if (v.size() > 1) {\r
+                        JOptionPane.showMessageDialog(this, "Usage Feature Flag can NOT co-exist with others.");\r
+                        return;\r
+                    }\r
+//                    synchronized (boolModifyLock){\r
+//                        exclusiveUsage = true;\r
+//                    }\r
+//                    m.setValueAt(false, row, 7);\r
+//                    m.setValueAt(false, row, 8);\r
+//                    m.setValueAt(false, row, 9);\r
+//                    m.setValueAt(false, row, 10);\r
+                    else {\r
+                        m.setValueAt("BOOLEAN", row, 3);\r
+                    }\r
+                    \r
                 }\r
             }\r
             \r
@@ -870,9 +905,15 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
             }\r
             \r
             Object[] o = {cName, token, ts, dataType, defaultVal, help};\r
+            try {\r
             if (!dataValidation(o)){\r
                 return;\r
             }\r
+            }\r
+            catch (Exception e) {\r
+               JOptionPane.showMessageDialog(this, "Illegal Token:" + e.getCause());\r
+               return;\r
+            }\r
             docConsole.setSaved(false);\r
             sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);\r
         }\r
@@ -897,6 +938,7 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
                         jCheckBoxFixedAtBuild.setSelected(false);\r
                         jCheckBoxDyn.setSelected(false);\r
                         jCheckBoxDynEx.setSelected(false);\r
+                        jComboBoxDataType.setSelectedItem("BOOLEAN");\r
                     }\r
                 }\r
             });\r
@@ -1018,21 +1060,21 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
         return usage.trim();\r
     }\r
     \r
-    private boolean tokenCNameExisted(String token, String cName) {\r
-        Integer inputToken = Integer.decode(token);\r
+    private boolean tokenCNameExisted(String token, String cName) throws Exception{\r
+        Long inputToken = Long.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
+        for (int i = 0; i < model.getRowCount(); ++i) {\r
+            if (model.getValueAt(i, 0).equals(cName)) {\r
+                JOptionPane.showMessageDialog(this, "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
+            if (model.getValueAt(i, 1).equals(token)) {\r
+                JOptionPane.showMessageDialog(this, "Token already existed in table.");\r
                 return true;\r
             }\r
-            Integer tokenValue = Integer.decode(jTable.getValueAt(i, 1)+"");\r
+            Long tokenValue = Long.decode(model.getValueAt(i, 1)+"");\r
             if (tokenValue.equals(inputToken)) {\r
-                JOptionPane.showMessageDialog(frame, "Same token value already existed in table.");\r
+                JOptionPane.showMessageDialog(this, "Same token value already existed in table.");\r
                 return true;\r
             }\r
             \r
@@ -1042,28 +1084,28 @@ public class SpdPcdDefs extends IInternalFrame implements TableModelListener{
     \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
+            JOptionPane.showMessageDialog(this, "You must specify at least one usage.");\r
             return false;\r
         }\r
         return true;\r
     }\r
-    private boolean dataValidation(Object[] row) {\r
+    private boolean dataValidation(Object[] row) throws Exception{\r
         \r
         if (!DataValidation.isC_NameType(row[0].toString())) {\r
-            JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");\r
+            JOptionPane.showMessageDialog(this, "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
+                        !DataValidation.isLongInt(row[1].toString(), 1, Long.MAX_VALUE)) {\r
+            JOptionPane.showMessageDialog(this, "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
+            JOptionPane.showMessageDialog(this, "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
+            JOptionPane.showMessageDialog(this, "HelpText could NOT be empty.");\r
             return false;\r
         }\r
         return true;\r