]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/MsaHeader.java
1. Fix EDKT433 help context triggered by mouse movement is not displayed properly
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / MsaHeader.java
index 5cdcd13405cc02461b3dddeaf3695d4044f8ac93..a73b6fe2a5113467716c63e60f99bcb89fc5828d 100644 (file)
@@ -18,6 +18,7 @@ package org.tianocore.frameworkwizard.module.ui;
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ComponentEvent;\r
 import java.awt.event.FocusEvent;\r
+import java.awt.event.ItemEvent;\r
 import java.util.Vector;\r
 \r
 import javax.swing.ButtonGroup;\r
@@ -46,6 +47,8 @@ import org.tianocore.frameworkwizard.common.Identifications.OpeningModuleType;
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
 import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
 import javax.swing.JRadioButton;\r
+import javax.swing.event.DocumentEvent;\r
+import javax.swing.event.DocumentListener;\r
 \r
 /**\r
  The class is used to create, update MsaHeader of MSA file\r
@@ -54,7 +57,7 @@ import javax.swing.JRadioButton;
 \r
 \r
  **/\r
-public class MsaHeader extends IInternalFrame {\r
+public class MsaHeader extends IInternalFrame implements DocumentListener {\r
 \r
     ///\r
     /// Define class Serial Version UID\r
@@ -66,12 +69,13 @@ public class MsaHeader extends IInternalFrame {
     private int dialogHeight = 630;\r
 \r
     private final int labelWidth = 155;\r
-    \r
+\r
     private int valueWidth = 320;\r
-    \r
+\r
     private final int labelCol = 12;\r
-    \r
+\r
     private final int valueCol = 168;\r
+\r
     //\r
     //Define class members\r
     //\r
@@ -173,7 +177,7 @@ public class MsaHeader extends IInternalFrame {
 \r
     private JCheckBox jCheckBoxPpc = null;\r
 \r
-    private JComboBox jComboBoxPcdIsDriver = null;\r
+    private JTextField jComboBoxPcdIsDriver = null;\r
 \r
     private JCheckBox jCheckBoxPcd = null;\r
 \r
@@ -209,7 +213,6 @@ public class MsaHeader extends IInternalFrame {
             jCheckBoxIa32.setBounds(new java.awt.Rectangle(valueCol, 505, 55, 20));\r
             jCheckBoxIa32.setText("IA32");\r
             jCheckBoxIa32.setToolTipText(DataType.SUP_ARCH_LIST_HELP_TEXT);\r
-            jCheckBoxIa32.addFocusListener(this);\r
         }\r
         return jCheckBoxIa32;\r
     }\r
@@ -225,7 +228,6 @@ public class MsaHeader extends IInternalFrame {
             jCheckBoxX64.setBounds(new java.awt.Rectangle(valueCol + 55, 505, 53, 20));\r
             jCheckBoxX64.setText("X64");\r
             jCheckBoxX64.setToolTipText(DataType.SUP_ARCH_LIST_HELP_TEXT);\r
-            jCheckBoxX64.addFocusListener(this);\r
         }\r
         return jCheckBoxX64;\r
     }\r
@@ -241,7 +243,6 @@ public class MsaHeader extends IInternalFrame {
             jCheckBoxIpf.setBounds(new java.awt.Rectangle(valueCol + 110, 505, 52, 20));\r
             jCheckBoxIpf.setText("IPF");\r
             jCheckBoxIpf.setToolTipText(DataType.SUP_ARCH_LIST_HELP_TEXT);\r
-            jCheckBoxIpf.addFocusListener(this);\r
         }\r
         return jCheckBoxIpf;\r
     }\r
@@ -257,7 +258,6 @@ public class MsaHeader extends IInternalFrame {
             jCheckBoxEbc.setBounds(new java.awt.Rectangle(valueCol + 165, 505, 53, 20));\r
             jCheckBoxEbc.setText("EBC");\r
             jCheckBoxEbc.setToolTipText(DataType.SUP_ARCH_LIST_HELP_TEXT);\r
-            jCheckBoxEbc.addFocusListener(this);\r
         }\r
         return jCheckBoxEbc;\r
     }\r
@@ -273,7 +273,6 @@ public class MsaHeader extends IInternalFrame {
             jCheckBoxArm.setBounds(new java.awt.Rectangle(valueCol + 220, 505, 54, 20));\r
             jCheckBoxArm.setText("ARM");\r
             jCheckBoxArm.setToolTipText(DataType.SUP_ARCH_LIST_HELP_TEXT);\r
-            jCheckBoxArm.addFocusListener(this);\r
         }\r
         return jCheckBoxArm;\r
     }\r
@@ -289,7 +288,6 @@ public class MsaHeader extends IInternalFrame {
             jCheckBoxPpc.setBounds(new java.awt.Rectangle(valueCol + 285, 505, 53, 20));\r
             jCheckBoxPpc.setText("PPC");\r
             jCheckBoxPpc.setToolTipText(DataType.SUP_ARCH_LIST_HELP_TEXT);\r
-            jCheckBoxPpc.addFocusListener(this);\r
         }\r
         return jCheckBoxPpc;\r
     }\r
@@ -529,7 +527,6 @@ public class MsaHeader extends IInternalFrame {
             jComboBoxModuleType = new JComboBox();\r
             jComboBoxModuleType.setBounds(new java.awt.Rectangle(valueCol, 35, valueWidth, 20));\r
             jComboBoxModuleType.setPreferredSize(new java.awt.Dimension(valueWidth, 20));\r
-            jComboBoxModuleType.addFocusListener(this);\r
         }\r
         return jComboBoxModuleType;\r
     }\r
@@ -624,15 +621,12 @@ public class MsaHeader extends IInternalFrame {
      *  \r
      * @return javax.swing.JComboBox    \r
      */\r
-    private JComboBox getJComboBoxPcdIsDriver() {\r
+    private JTextField getJComboBoxPcdIsDriver() {\r
         if (jComboBoxPcdIsDriver == null) {\r
-            jComboBoxPcdIsDriver = new JComboBox();\r
+            jComboBoxPcdIsDriver = new JTextField();\r
             jComboBoxPcdIsDriver.setPreferredSize(new java.awt.Dimension(valueWidth, 20));\r
             jComboBoxPcdIsDriver.setBounds(new java.awt.Rectangle(valueCol, 530, valueWidth, 20));\r
-            jComboBoxPcdIsDriver.addItemListener(this);\r
-            jComboBoxPcdIsDriver.addFocusListener(this);\r
             jComboBoxPcdIsDriver.setEnabled(false);\r
-            Tools.generateComboBoxByVector(jComboBoxPcdIsDriver, ed.getVPcdDriverTypes());\r
             jComboBoxPcdIsDriver.setVisible(false);\r
         }\r
         return jComboBoxPcdIsDriver;\r
@@ -677,6 +671,7 @@ public class MsaHeader extends IInternalFrame {
         init(msa.getMsaHeader());\r
         init(msa.getModuleDefinitions());\r
         init(msa.getExterns());\r
+        this.addListeners();\r
 \r
         this.setVisible(true);\r
         this.setViewMode(false);\r
@@ -801,11 +796,7 @@ public class MsaHeader extends IInternalFrame {
             this.ex = inEx;\r
             if (ex.getPcdIsDriver() != null) {\r
                 this.jCheckBoxPcd.setSelected(true);\r
-                this.jComboBoxPcdIsDriver.setEnabled(true);\r
-                this.jComboBoxPcdIsDriver.setSelectedItem(ex.getPcdIsDriver());\r
-                // TODO:  If the module type is DXE_DRIVER, set PCD_DXE_DRIVER\r
-                //        If the module type is PEIM, set PCD_PEI_DRIVER\r
-                //        If the module type is anything else, unset this!\r
+                this.jCheckBoxPcd.setEnabled(true);\r
             }\r
             this.jCheckBoxFlashMap.setSelected(ex.getTianoR8FlashMapH());\r
         }\r
@@ -963,29 +954,11 @@ public class MsaHeader extends IInternalFrame {
      *\r
      */\r
     public void actionPerformed(ActionEvent arg0) {\r
-        if (arg0.getSource() == jButtonOk) {\r
-            if (this.check()) {\r
-                this.save();\r
-            } else {\r
-                return;\r
-            }\r
-            this.setEdited(true);\r
-            this.dispose();\r
-        }\r
-\r
-        if (arg0.getSource() == jButtonCancel) {\r
-            this.setEdited(false);\r
-        }\r
-\r
         if (arg0.getSource() == jButtonGenerateGuid) {\r
             jTextFieldGuid.setText(Tools.generateUuidString());\r
             jTextFieldGuid.requestFocus();\r
             jButtonGenerateGuid.requestFocus();\r
         }\r
-\r
-        if (arg0.getSource() == this.jCheckBoxPcd) {\r
-            this.jComboBoxPcdIsDriver.setEnabled(this.jCheckBoxPcd.isSelected());\r
-        }\r
     }\r
 \r
     /**\r
@@ -1163,7 +1136,7 @@ public class MsaHeader extends IInternalFrame {
         int intPreferredWidth = this.getJContentPane().getPreferredSize().width;\r
 \r
         Tools.resizeComponentWidth(this.jTextFieldBaseName, intCurrentWidth, intPreferredWidth);\r
-        Tools.resizeComponentWidth(this.jTextFieldGuid, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldGuid, intCurrentWidth, intPreferredWidth + 7);\r
         Tools.resizeComponentWidth(this.jTextFieldVersion, intCurrentWidth, intPreferredWidth);\r
         Tools.resizeComponentWidth(this.jScrollPaneLicense, intCurrentWidth, intPreferredWidth);\r
         Tools.resizeComponentWidth(this.jTextFieldURL, intCurrentWidth, intPreferredWidth);\r
@@ -1205,17 +1178,6 @@ public class MsaHeader extends IInternalFrame {
             }\r
         }\r
 \r
-        //\r
-        // Check Module Type\r
-        //\r
-        if (arg0.getSource() == this.jComboBoxModuleType) {\r
-            if (!jComboBoxModuleType.getSelectedItem().toString().equals(msaHeader.getModuleType().toString())) {\r
-                msaHeader.setModuleType(ModuleTypeDef.Enum.forString(jComboBoxModuleType.getSelectedItem().toString()));\r
-            } else {\r
-                return;\r
-            }\r
-        }\r
-\r
         //\r
         // Check Guid\r
         //\r
@@ -1363,12 +1325,13 @@ public class MsaHeader extends IInternalFrame {
                 //                jTextFieldOutputFileBasename.addFocusListener(this);\r
                 return;\r
             }\r
-            \r
+\r
             if (!DataValidation.isOutputFileBasename(this.jTextFieldOutputFileBasename.getText())) {\r
-                Log.wrn("Update Msa Header", "Incorrect data type for Output File Basename, it must be a valid file name");\r
+                Log.wrn("Update Msa Header",\r
+                        "Incorrect data type for Output File Basename, it must be a valid file name");\r
                 return;\r
             }\r
-            \r
+\r
             if (!this.jTextFieldOutputFileBasename.getText().equals(md.getOutputFileBasename())) {\r
                 this.md.setOutputFileBasename(this.jTextFieldOutputFileBasename.getText());\r
             } else {\r
@@ -1402,97 +1365,6 @@ public class MsaHeader extends IInternalFrame {
             }\r
         }\r
 \r
-        //\r
-        // Check Supported Arch\r
-        //\r
-        if (arg0.getSource() == this.jCheckBoxArm || arg0.getSource() == this.jCheckBoxEbc\r
-            || arg0.getSource() == this.jCheckBoxIa32 || arg0.getSource() == this.jCheckBoxIpf\r
-            || arg0.getSource() == this.jCheckBoxPpc || arg0.getSource() == this.jCheckBoxX64) {\r
-            if (!this.getSelectedItemsString().equals(md.getSupportedArchitectures().toString())) {\r
-                md.setSupportedArchitectures(this.getSelectedItemsVector());\r
-            } else {\r
-                return;\r
-            }\r
-        }\r
-\r
-        //\r
-        // Check Pcd is Driver\r
-        //\r
-        if (arg0.getSource() == this.jCheckBoxPcd || arg0.getSource() == this.jComboBoxPcdIsDriver) {\r
-            if ((this.ex == null) && this.jCheckBoxPcd.isSelected()) {\r
-                this.ex = ExternsDocument.Externs.Factory.newInstance();\r
-                this.ex.setPcdIsDriver(PcdDriverTypes.Enum.forString(this.jComboBoxPcdIsDriver.getSelectedItem()\r
-                                                                                              .toString()));\r
-                this.msa.setExterns(this.ex);\r
-            } else if ((this.ex != null) && (this.ex.getPcdIsDriver() == null) && this.jCheckBoxPcd.isSelected()) {\r
-                this.ex.setPcdIsDriver(PcdDriverTypes.Enum.forString(this.jComboBoxPcdIsDriver.getSelectedItem()\r
-                                                                                              .toString()));\r
-                this.msa.setExterns(this.ex);\r
-            } else if ((this.ex != null) && (this.ex.getPcdIsDriver() != null)) {\r
-                if (this.jCheckBoxPcd.isSelected()\r
-                    && !this.jComboBoxPcdIsDriver.getSelectedItem().toString().equals(\r
-                                                                                      this.ex.getPcdIsDriver()\r
-                                                                                             .toString())) {\r
-                    this.ex.setPcdIsDriver(PcdDriverTypes.Enum.forString(this.jComboBoxPcdIsDriver.getSelectedItem()\r
-                                                                                                  .toString()));\r
-                    this.msa.setExterns(this.ex);\r
-                }\r
-                if (!this.jCheckBoxPcd.isSelected()) {\r
-                    ExternsDocument.Externs newEx = ExternsDocument.Externs.Factory.newInstance();\r
-                    if (this.ex.getExternList() != null) {\r
-                        for (int index = 0; index < this.ex.getExternList().size(); index++) {\r
-                            newEx.addNewExtern();\r
-                            newEx.setExternArray(index, this.ex.getExternArray(index));\r
-                        }\r
-                    }\r
-                    if (this.ex.getSpecificationList() != null) {\r
-                        for (int index = 0; index < this.ex.getSpecificationList().size(); index++) {\r
-                            newEx.addNewSpecification();\r
-                            newEx.setSpecificationArray(index, this.ex.getSpecificationArray(index));\r
-                        }\r
-                    }\r
-                    if (this.ex.getTianoR8FlashMapH()) {\r
-                        newEx.setTianoR8FlashMapH(this.ex.getTianoR8FlashMapH());\r
-                    }\r
-                    this.ex = newEx;\r
-                    this.msa.setExterns(this.ex);\r
-                }\r
-            }\r
-        }\r
-\r
-        //\r
-        // Check Flash Map\r
-        //\r
-        if (arg0.getSource() == this.jCheckBoxFlashMap) {\r
-            if ((this.ex == null) && this.jCheckBoxFlashMap.isSelected()) {\r
-                this.ex = ExternsDocument.Externs.Factory.newInstance();\r
-                this.ex.setTianoR8FlashMapH(this.jCheckBoxFlashMap.isSelected());\r
-                this.msa.setExterns(this.ex);\r
-            } else if ((this.ex != null) && this.jCheckBoxFlashMap.isSelected()) {\r
-                this.ex.setTianoR8FlashMapH(this.jCheckBoxFlashMap.isSelected());\r
-                this.msa.setExterns(this.ex);\r
-            } else if ((this.ex != null) && !this.jCheckBoxFlashMap.isSelected()) {\r
-                ExternsDocument.Externs newEx = ExternsDocument.Externs.Factory.newInstance();\r
-                if (this.ex.getExternList() != null) {\r
-                    for (int index = 0; index < this.ex.getExternList().size(); index++) {\r
-                        newEx.addNewExtern();\r
-                        newEx.setExternArray(index, this.ex.getExternArray(index));\r
-                    }\r
-                }\r
-                if (this.ex.getSpecificationList() != null) {\r
-                    for (int index = 0; index < this.ex.getSpecificationList().size(); index++) {\r
-                        newEx.addNewSpecification();\r
-                        newEx.setSpecificationArray(index, this.ex.getSpecificationArray(index));\r
-                    }\r
-                }\r
-                if (this.ex.getPcdIsDriver() != null) {\r
-                    newEx.setPcdIsDriver(this.ex.getPcdIsDriver());\r
-                }\r
-                this.ex = newEx;\r
-                this.msa.setExterns(this.ex);\r
-            }\r
-        }\r
-\r
         this.save();\r
     }\r
 \r
@@ -1543,7 +1415,7 @@ public class MsaHeader extends IInternalFrame {
     }\r
 \r
     private void setAllItemsSelected(boolean isSelected) {\r
-        this.jCheckBoxIa32.setSelected(isSelected);\r
+        this.jCheckBoxIa32.setSelected(true);\r
         this.jCheckBoxX64.setSelected(isSelected);\r
         this.jCheckBoxIpf.setSelected(isSelected);\r
         this.jCheckBoxEbc.setSelected(isSelected);\r
@@ -1553,10 +1425,12 @@ public class MsaHeader extends IInternalFrame {
 \r
     private void setSelectedItems(Vector<String> v) {\r
         setAllItemsSelected(false);\r
+        boolean isIA32Selected = false;\r
         if (v != null) {\r
             for (int index = 0; index < v.size(); index++) {\r
                 if (v.get(index).equals(this.jCheckBoxIa32.getText())) {\r
                     this.jCheckBoxIa32.setSelected(true);\r
+                    isIA32Selected = true;\r
                     continue;\r
                 }\r
                 if (v.get(index).equals(this.jCheckBoxIpf.getText())) {\r
@@ -1580,6 +1454,9 @@ public class MsaHeader extends IInternalFrame {
                     continue;\r
                 }\r
             }\r
+            if (!isIA32Selected) {\r
+                this.jCheckBoxIa32.setSelected(false);\r
+            }\r
         }\r
     }\r
 \r
@@ -1595,6 +1472,7 @@ public class MsaHeader extends IInternalFrame {
             jCheckBoxPcd.setText("Is this a PCD Driver?");\r
             jCheckBoxPcd.addFocusListener(this);\r
             jCheckBoxPcd.addActionListener(this);\r
+            jCheckBoxPcd.setEnabled(false);\r
         }\r
         return jCheckBoxPcd;\r
     }\r
@@ -1609,7 +1487,6 @@ public class MsaHeader extends IInternalFrame {
             jCheckBoxFlashMap = new JCheckBox();\r
             jCheckBoxFlashMap.setBounds(new java.awt.Rectangle(labelCol, 555, 480, 20));\r
             jCheckBoxFlashMap.setText("Does this module require a legacy FlashMap header file?");\r
-            jCheckBoxFlashMap.addFocusListener(this);\r
         }\r
         return jCheckBoxFlashMap;\r
     }\r
@@ -1649,15 +1526,173 @@ public class MsaHeader extends IInternalFrame {
             jRadioButtonBinaryModuleFalse.setBounds(new java.awt.Rectangle(valueCol + 140, 480, 140, 20));\r
             jRadioButtonBinaryModuleFalse.setText("False");\r
             jRadioButtonBinaryModuleFalse.addFocusListener(this);\r
-            jRadioButtonBinaryModuleFalse.setToolTipText("<html>Modules are either source modules <br>"\r
-                                                         + "which can be compiled or binary <br>"\r
-                                                         + "modules which are linked.  <br>"\r
-                                                         + "A module cannot contain both. <br>"\r
-                                                         + "The GUID numbers should be identical <br>"\r
-                                                         + "for a binary and source MSA, <br>"\r
-                                                         + "however the BINARY MSA should have <br>"\r
-                                                         + "a higher version number.</html>");\r
+            jRadioButtonBinaryModuleFalse.setToolTipText("<html>Modules are either source modules which can be compiled or binary <br>"\r
+                                                         + "modules which are linked. A module cannot contain both. <br>"\r
+                                                         + "The GUID numbers should be identical for a binary and source MSA, <br>"\r
+                                                         + "however the BINARY MSA should have a higher version number.</html>");\r
         }\r
         return jRadioButtonBinaryModuleFalse;\r
     }\r
+\r
+    public void itemStateChanged(ItemEvent arg0) {\r
+        //\r
+        // Check Supported Arch\r
+        //\r
+        if (arg0.getSource() == this.jCheckBoxIa32 || arg0.getSource() == this.jCheckBoxIpf\r
+            || arg0.getSource() == this.jCheckBoxX64 || arg0.getSource() == this.jCheckBoxEbc\r
+            || arg0.getSource() == this.jCheckBoxArm || arg0.getSource() == this.jCheckBoxPpc) {\r
+            if (!this.jCheckBoxIa32.isSelected() && !this.jCheckBoxX64.isSelected() && !this.jCheckBoxIpf.isSelected()\r
+                && !this.jCheckBoxEbc.isSelected() && !this.jCheckBoxPpc.isSelected()\r
+                && !this.jCheckBoxArm.isSelected()) {\r
+                Log\r
+                   .wrn("At lease one Supportted Architecture should be selected!    IA32 is selected as default value!");\r
+                this.jCheckBoxIa32.setSelected(true);\r
+            }\r
+\r
+            if (!this.getSelectedItemsString().equals(md.getSupportedArchitectures().toString())) {\r
+                md.setSupportedArchitectures(this.getSelectedItemsVector());\r
+                this.save();\r
+            }\r
+        }\r
+\r
+        if (arg0.getSource() == this.jComboBoxModuleType) {\r
+            if (this.jComboBoxModuleType.getSelectedItem().equals("PEIM")\r
+                || this.jComboBoxModuleType.getSelectedItem().equals("DXE_DRIVER")) {\r
+                this.jCheckBoxPcd.setEnabled(true);\r
+                if (this.jCheckBoxPcd.isSelected()) {\r
+                    this.jCheckBoxPcd.setSelected(false);\r
+                    this.jCheckBoxPcd.setSelected(true);\r
+                }\r
+            } else {\r
+                this.jCheckBoxPcd.setEnabled(false);\r
+                this.jCheckBoxPcd.setSelected(false);\r
+            }\r
+            if (!jComboBoxModuleType.getSelectedItem().toString().equals(msaHeader.getModuleType().toString())) {\r
+                msaHeader.setModuleType(ModuleTypeDef.Enum.forString(jComboBoxModuleType.getSelectedItem().toString()));\r
+                this.save();\r
+            }\r
+        }\r
+\r
+        //\r
+        // Check Pcd is Driver\r
+        //\r
+        if (arg0.getSource() == this.jCheckBoxPcd) {\r
+            if (this.jCheckBoxPcd.isSelected()) {\r
+                if (this.jComboBoxModuleType.getSelectedItem().toString().equals("DXE_DRIVER")) {\r
+                    this.jComboBoxPcdIsDriver.setText("DXE_PCD_DRIVER");\r
+                    this.jComboBoxPcdIsDriver.setEnabled(true);\r
+                } else if (this.jComboBoxModuleType.getSelectedItem().toString().equals("PEIM")) {\r
+                    this.jComboBoxPcdIsDriver.setText("PEI_PCD_DRIVER");\r
+                    this.jComboBoxPcdIsDriver.setEnabled(true);\r
+                }\r
+            }\r
+\r
+            if ((this.ex == null) && this.jCheckBoxPcd.isSelected()) {\r
+                this.ex = ExternsDocument.Externs.Factory.newInstance();\r
+                this.ex.setPcdIsDriver(PcdDriverTypes.Enum.forString(this.jComboBoxPcdIsDriver.getText()));\r
+                this.msa.setExterns(this.ex);\r
+            } else if ((this.ex != null) && (this.ex.getPcdIsDriver() == null) && this.jCheckBoxPcd.isSelected()) {\r
+                this.ex.setPcdIsDriver(PcdDriverTypes.Enum.forString(this.jComboBoxPcdIsDriver.getText()));\r
+                this.msa.setExterns(this.ex);\r
+            } else if ((this.ex != null) && (this.ex.getPcdIsDriver() != null)) {\r
+                if (this.jCheckBoxPcd.isSelected()\r
+                    && !this.jComboBoxPcdIsDriver.getText().toString().equals(this.ex.getPcdIsDriver().toString())) {\r
+                    this.ex.setPcdIsDriver(PcdDriverTypes.Enum.forString(this.jComboBoxPcdIsDriver.getText()));\r
+                    this.msa.setExterns(this.ex);\r
+                }\r
+                if (!this.jCheckBoxPcd.isSelected()) {\r
+                    ExternsDocument.Externs newEx = ExternsDocument.Externs.Factory.newInstance();\r
+                    if (this.ex.getExternList() != null) {\r
+                        for (int index = 0; index < this.ex.getExternList().size(); index++) {\r
+                            newEx.addNewExtern();\r
+                            newEx.setExternArray(index, this.ex.getExternArray(index));\r
+                        }\r
+                    }\r
+                    if (this.ex.getSpecificationList() != null) {\r
+                        for (int index = 0; index < this.ex.getSpecificationList().size(); index++) {\r
+                            newEx.addNewSpecification();\r
+                            newEx.setSpecificationArray(index, this.ex.getSpecificationArray(index));\r
+                        }\r
+                    }\r
+                    if (this.ex.getTianoR8FlashMapH()) {\r
+                        newEx.setTianoR8FlashMapH(this.ex.getTianoR8FlashMapH());\r
+                    }\r
+                    this.ex = newEx;\r
+                    this.msa.setExterns(this.ex);\r
+                }\r
+            }\r
+            this.save();\r
+        }\r
+        //\r
+        // Check Flash Map\r
+        //\r
+        if (arg0.getSource() == this.jCheckBoxFlashMap) {\r
+            if ((this.ex == null) && this.jCheckBoxFlashMap.isSelected()) {\r
+                this.ex = ExternsDocument.Externs.Factory.newInstance();\r
+                this.ex.setTianoR8FlashMapH(this.jCheckBoxFlashMap.isSelected());\r
+                this.msa.setExterns(this.ex);\r
+            } else if ((this.ex != null) && this.jCheckBoxFlashMap.isSelected()) {\r
+                this.ex.setTianoR8FlashMapH(this.jCheckBoxFlashMap.isSelected());\r
+                this.msa.setExterns(this.ex);\r
+            } else if ((this.ex != null) && !this.jCheckBoxFlashMap.isSelected()) {\r
+                ExternsDocument.Externs newEx = ExternsDocument.Externs.Factory.newInstance();\r
+                if (this.ex.getExternList() != null) {\r
+                    for (int index = 0; index < this.ex.getExternList().size(); index++) {\r
+                        newEx.addNewExtern();\r
+                        newEx.setExternArray(index, this.ex.getExternArray(index));\r
+                    }\r
+                }\r
+                if (this.ex.getSpecificationList() != null) {\r
+                    for (int index = 0; index < this.ex.getSpecificationList().size(); index++) {\r
+                        newEx.addNewSpecification();\r
+                        newEx.setSpecificationArray(index, this.ex.getSpecificationArray(index));\r
+                    }\r
+                }\r
+                if (this.ex.getPcdIsDriver() != null) {\r
+                    newEx.setPcdIsDriver(this.ex.getPcdIsDriver());\r
+                }\r
+                this.ex = newEx;\r
+                this.msa.setExterns(this.ex);\r
+            }\r
+            this.save();\r
+        }\r
+    }\r
+\r
+    private void addListeners() {\r
+        this.jTextFieldBaseName.getDocument().addDocumentListener(this);\r
+        this.jTextFieldGuid.getDocument().addDocumentListener(this);\r
+        this.jTextFieldAbstract.getDocument().addDocumentListener(this);\r
+        this.jTextAreaCopyright.getDocument().addDocumentListener(this);\r
+        this.jTextAreaDescription.getDocument().addDocumentListener(this);\r
+        this.jTextAreaLicense.getDocument().addDocumentListener(this);\r
+        this.jTextFieldOutputFileBasename.getDocument().addDocumentListener(this);\r
+        this.jTextFieldSpecification.getDocument().addDocumentListener(this);\r
+        this.jTextFieldURL.getDocument().addDocumentListener(this);\r
+        this.jTextFieldVersion.getDocument().addDocumentListener(this);\r
+\r
+        this.jComboBoxModuleType.addItemListener(this);\r
+\r
+        this.jCheckBoxIa32.addItemListener(this);\r
+        this.jCheckBoxX64.addItemListener(this);\r
+        this.jCheckBoxIpf.addItemListener(this);\r
+        this.jCheckBoxEbc.addItemListener(this);\r
+        this.jCheckBoxArm.addItemListener(this);\r
+        this.jCheckBoxPpc.addItemListener(this);\r
+\r
+        this.jCheckBoxPcd.addItemListener(this);\r
+\r
+        this.jCheckBoxFlashMap.addItemListener(this);\r
+    }\r
+\r
+    public void insertUpdate(DocumentEvent e) {\r
+        this.omt.setSaved(false);\r
+    }\r
+\r
+    public void removeUpdate(DocumentEvent e) {\r
+        this.omt.setSaved(false);\r
+    }\r
+\r
+    public void changedUpdate(DocumentEvent e) {\r
+        // Do nothing\r
+    }\r
 }\r