]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/MsaHeader.java
Fixed wording for Legacy FlashMap.h Header question
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / MsaHeader.java
index b20ac3d5f1ba82602d926509e1c5785de1db517a..bf7afce417a1b7a7eaceff60240e8fbb0140aca7 100644 (file)
@@ -20,6 +20,7 @@ import java.awt.event.ComponentEvent;
 import java.awt.event.FocusEvent;\r
 import java.util.Vector;\r
 \r
+import javax.swing.ButtonGroup;\r
 import javax.swing.JButton;\r
 import javax.swing.JCheckBox;\r
 import javax.swing.JComboBox;\r
@@ -29,10 +30,12 @@ import javax.swing.JScrollPane;
 import javax.swing.JTextArea;\r
 import javax.swing.JTextField;\r
 \r
+import org.tianocore.ExternsDocument;\r
 import org.tianocore.ModuleDefinitionsDocument;\r
 import org.tianocore.ModuleSurfaceAreaDocument;\r
 import org.tianocore.ModuleTypeDef;\r
 import org.tianocore.MsaHeaderDocument;\r
+import org.tianocore.PcdDriverTypes;\r
 import org.tianocore.LicenseDocument.License;\r
 import org.tianocore.frameworkwizard.common.DataType;\r
 import org.tianocore.frameworkwizard.common.DataValidation;\r
@@ -42,6 +45,7 @@ import org.tianocore.frameworkwizard.common.Tools;
 import org.tianocore.frameworkwizard.common.Identifications.OpeningModuleType;\r
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
 import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
+import javax.swing.JRadioButton;\r
 \r
 /**\r
  The class is used to create, update MsaHeader of MSA file\r
@@ -57,6 +61,17 @@ public class MsaHeader extends IInternalFrame {
     ///\r
     private static final long serialVersionUID = -8152099582923006900L;\r
 \r
+    private int dialogWidth = 500;\r
+\r
+    private int dialogHeight = 630;\r
+\r
+    private final int labelWidth = 155;\r
+    \r
+    private int valueWidth = 320;\r
+    \r
+    private final int labelCol = 12;\r
+    \r
+    private final int valueCol = 168;\r
     //\r
     //Define class members\r
     //\r
@@ -110,8 +125,6 @@ public class MsaHeader extends IInternalFrame {
 \r
     private JLabel jLabelBinaryModule = null;\r
 \r
-    private JComboBox jComboBoxBinaryModule = null;\r
-\r
     private JLabel jLabelOutputFileBasename = null;\r
 \r
     private JTextField jTextFieldOutputFileBasename = null;\r
@@ -148,8 +161,6 @@ public class MsaHeader extends IInternalFrame {
 \r
     private StarLabel jStarLabel14 = null;\r
 \r
-    private StarLabel jStarLabel15 = null;\r
-\r
     private JCheckBox jCheckBoxIa32 = null;\r
 \r
     private JCheckBox jCheckBoxX64 = null;\r
@@ -162,6 +173,12 @@ public class MsaHeader extends IInternalFrame {
 \r
     private JCheckBox jCheckBoxPpc = null;\r
 \r
+    private JComboBox jComboBoxPcdIsDriver = null;\r
+\r
+    private JCheckBox jCheckBoxPcd = null;\r
+\r
+    private JCheckBox jCheckBoxFlashMap = null;\r
+\r
     //\r
     // Not used for UI\r
     //\r
@@ -171,10 +188,16 @@ public class MsaHeader extends IInternalFrame {
 \r
     private ModuleSurfaceAreaDocument.ModuleSurfaceArea msa = null;\r
 \r
+    private ExternsDocument.Externs ex = null;\r
+\r
     private OpeningModuleType omt = null;\r
 \r
     private EnumerationData ed = new EnumerationData();\r
 \r
+    private JRadioButton jRadioButtonBinaryModuleTrue = null;\r
+\r
+    private JRadioButton jRadioButtonBinaryModuleFalse = null;\r
+\r
     /**\r
      * This method initializes jCheckBoxIa32    \r
      *  \r
@@ -183,7 +206,7 @@ public class MsaHeader extends IInternalFrame {
     private JCheckBox getJCheckBoxIa32() {\r
         if (jCheckBoxIa32 == null) {\r
             jCheckBoxIa32 = new JCheckBox();\r
-            jCheckBoxIa32.setBounds(new java.awt.Rectangle(160, 505, 55, 20));\r
+            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
@@ -199,7 +222,7 @@ public class MsaHeader extends IInternalFrame {
     private JCheckBox getJCheckBoxX64() {\r
         if (jCheckBoxX64 == null) {\r
             jCheckBoxX64 = new JCheckBox();\r
-            jCheckBoxX64.setBounds(new java.awt.Rectangle(215, 505, 53, 20));\r
+            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
@@ -215,7 +238,7 @@ public class MsaHeader extends IInternalFrame {
     private JCheckBox getJCheckBoxIpf() {\r
         if (jCheckBoxIpf == null) {\r
             jCheckBoxIpf = new JCheckBox();\r
-            jCheckBoxIpf.setBounds(new java.awt.Rectangle(270, 505, 52, 20));\r
+            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
@@ -231,7 +254,7 @@ public class MsaHeader extends IInternalFrame {
     private JCheckBox getJCheckBoxEbc() {\r
         if (jCheckBoxEbc == null) {\r
             jCheckBoxEbc = new JCheckBox();\r
-            jCheckBoxEbc.setBounds(new java.awt.Rectangle(325, 505, 53, 20));\r
+            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
@@ -247,7 +270,7 @@ public class MsaHeader extends IInternalFrame {
     private JCheckBox getJCheckBoxArm() {\r
         if (jCheckBoxArm == null) {\r
             jCheckBoxArm = new JCheckBox();\r
-            jCheckBoxArm.setBounds(new java.awt.Rectangle(380, 505, 54, 20));\r
+            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
@@ -263,7 +286,7 @@ public class MsaHeader extends IInternalFrame {
     private JCheckBox getJCheckBoxPpc() {\r
         if (jCheckBoxPpc == null) {\r
             jCheckBoxPpc = new JCheckBox();\r
-            jCheckBoxPpc.setBounds(new java.awt.Rectangle(435, 505, 53, 20));\r
+            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
@@ -280,7 +303,7 @@ public class MsaHeader extends IInternalFrame {
     private JTextField getJTextFieldBaseName() {\r
         if (jTextFieldBaseName == null) {\r
             jTextFieldBaseName = new JTextField();\r
-            jTextFieldBaseName.setBounds(new java.awt.Rectangle(160, 10, 320, 20));\r
+            jTextFieldBaseName.setBounds(new java.awt.Rectangle(valueCol, 10, valueWidth, 20));\r
             jTextFieldBaseName.setPreferredSize(new java.awt.Dimension(320, 20));\r
             jTextFieldBaseName.addFocusListener(this);\r
             jTextFieldBaseName.setToolTipText("A brief Identifier, such as USB I/O Library, of the module");\r
@@ -298,7 +321,7 @@ public class MsaHeader extends IInternalFrame {
         if (jTextFieldGuid == null) {\r
             jTextFieldGuid = new JTextField();\r
             jTextFieldGuid.setPreferredSize(new java.awt.Dimension(250, 20));\r
-            jTextFieldGuid.setLocation(new java.awt.Point(160, 60));\r
+            jTextFieldGuid.setLocation(new java.awt.Point(valueCol, 60));\r
             jTextFieldGuid.setSize(new java.awt.Dimension(250, 20));\r
             jTextFieldGuid.addFocusListener(this);\r
             jTextFieldGuid.setToolTipText("Guaranteed Unique Identification Number, Registry Format (8-4-4-4-12)");\r
@@ -315,9 +338,9 @@ public class MsaHeader extends IInternalFrame {
     private JTextField getJTextFieldVersion() {\r
         if (jTextFieldVersion == null) {\r
             jTextFieldVersion = new JTextField();\r
-            jTextFieldVersion.setPreferredSize(new java.awt.Dimension(320, 20));\r
-            jTextFieldVersion.setLocation(new java.awt.Point(160, 85));\r
-            jTextFieldVersion.setSize(new java.awt.Dimension(320, 20));\r
+            jTextFieldVersion.setPreferredSize(new java.awt.Dimension(valueWidth, 20));\r
+            jTextFieldVersion.setLocation(new java.awt.Point(valueCol, 85));\r
+            jTextFieldVersion.setSize(new java.awt.Dimension(valueWidth, 20));\r
             jTextFieldVersion.addFocusListener(this);\r
             jTextFieldVersion.setToolTipText("A Version Number, 1.0, 1, 1.01, 1.0.1");\r
         }\r
@@ -332,10 +355,11 @@ public class MsaHeader extends IInternalFrame {
      **/\r
     private JButton getJButtonGenerateGuid() {\r
         if (jButtonGenerateGuid == null) {\r
+            int genGuidCol = valueCol + 285;\r
             jButtonGenerateGuid = new JButton();\r
             jButtonGenerateGuid.setPreferredSize(new java.awt.Dimension(65, 20));\r
             jButtonGenerateGuid.setSize(new java.awt.Dimension(65, 20));\r
-            jButtonGenerateGuid.setLocation(new java.awt.Point(415, 60));\r
+            jButtonGenerateGuid.setLocation(new java.awt.Point(genGuidCol, 60));\r
             jButtonGenerateGuid.setText("GEN");\r
             jButtonGenerateGuid.addActionListener(this);\r
         }\r
@@ -373,7 +397,7 @@ public class MsaHeader extends IInternalFrame {
             jTextAreaDescription = new JTextArea();\r
             jTextAreaDescription.setLineWrap(true);\r
             jTextAreaDescription.addFocusListener(this);\r
-            jTextAreaDescription.setToolTipText("A verbose description of the module");\r
+            jTextAreaDescription.setToolTipText("A verbose description of the module.");\r
             jTextAreaDescription.setWrapStyleWord(true);\r
             jTextAreaDescription.setSelectionStart(0);\r
             jTextAreaDescription.setSelectionEnd(0);\r
@@ -389,11 +413,15 @@ public class MsaHeader extends IInternalFrame {
      **/\r
     private JTextField getJTextFieldSpecification() {\r
         if (jTextFieldSpecification == null) {\r
+            int specWidth = valueWidth + 50;\r
             jTextFieldSpecification = new JTextField();\r
-            jTextFieldSpecification.setPreferredSize(new java.awt.Dimension(320, 20));\r
+\r
+            jTextFieldSpecification.setPreferredSize(new java.awt.Dimension(specWidth, 20));\r
             jTextFieldSpecification.setText("FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052");\r
-            jTextFieldSpecification.setSize(new java.awt.Dimension(320, 20));\r
-            jTextFieldSpecification.setLocation(new java.awt.Point(160, 530));\r
+            jTextFieldSpecification.setBorder(null);\r
+\r
+            jTextFieldSpecification.setSize(new java.awt.Dimension(specWidth, 20));\r
+            jTextFieldSpecification.setLocation(new java.awt.Point(labelCol, dialogHeight - 30));\r
             jTextFieldSpecification.setEditable(false);\r
             jTextFieldSpecification.addFocusListener(this);\r
         }\r
@@ -446,10 +474,10 @@ public class MsaHeader extends IInternalFrame {
         if (jScrollPaneLicense == null) {\r
             jScrollPaneLicense = new JScrollPane();\r
             jScrollPaneLicense.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);\r
-            jScrollPaneLicense.setSize(new java.awt.Dimension(320, 120));\r
-            jScrollPaneLicense.setLocation(new java.awt.Point(160, 305));\r
+            jScrollPaneLicense.setSize(new java.awt.Dimension(valueWidth, 120));\r
+            jScrollPaneLicense.setLocation(new java.awt.Point(valueCol, 305));\r
             jScrollPaneLicense.setViewportView(getJTextAreaLicense());\r
-            jScrollPaneLicense.setPreferredSize(new java.awt.Dimension(320, 120));\r
+            jScrollPaneLicense.setPreferredSize(new java.awt.Dimension(valueWidth, 120));\r
         }\r
         return jScrollPaneLicense;\r
     }\r
@@ -464,10 +492,10 @@ public class MsaHeader extends IInternalFrame {
         if (jScrollPaneDescription == null) {\r
             jScrollPaneDescription = new JScrollPane();\r
             jScrollPaneDescription.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);\r
-            jScrollPaneDescription.setSize(new java.awt.Dimension(320, 120));\r
-            jScrollPaneDescription.setLocation(new java.awt.Point(160, 135));\r
+            jScrollPaneDescription.setSize(new java.awt.Dimension(valueWidth, 120));\r
+            jScrollPaneDescription.setLocation(new java.awt.Point(valueCol, 135));\r
             jScrollPaneDescription.setViewportView(getJTextAreaDescription());\r
-            jScrollPaneDescription.setPreferredSize(new java.awt.Dimension(320, 120));\r
+            jScrollPaneDescription.setPreferredSize(new java.awt.Dimension(valueWidth, 120));\r
         }\r
         return jScrollPaneDescription;\r
     }\r
@@ -481,11 +509,11 @@ public class MsaHeader extends IInternalFrame {
     private JTextField getJTextFieldAbstract() {\r
         if (jTextFieldAbstract == null) {\r
             jTextFieldAbstract = new JTextField();\r
-            jTextFieldAbstract.setPreferredSize(new java.awt.Dimension(320, 20));\r
-            jTextFieldAbstract.setLocation(new java.awt.Point(160, 110));\r
-            jTextFieldAbstract.setSize(new java.awt.Dimension(320, 20));\r
+            jTextFieldAbstract.setPreferredSize(new java.awt.Dimension(valueWidth, 20));\r
+            jTextFieldAbstract.setLocation(new java.awt.Point(valueCol, 110));\r
+            jTextFieldAbstract.setSize(new java.awt.Dimension(valueWidth, 20));\r
             jTextFieldAbstract.addFocusListener(this);\r
-            jTextFieldAbstract.setToolTipText("A one sentence description of this module");\r
+            jTextFieldAbstract.setToolTipText("A one sentence description of this module.");\r
         }\r
         return jTextFieldAbstract;\r
     }\r
@@ -499,8 +527,8 @@ public class MsaHeader extends IInternalFrame {
     private JComboBox getJComboBoxModuleType() {\r
         if (jComboBoxModuleType == null) {\r
             jComboBoxModuleType = new JComboBox();\r
-            jComboBoxModuleType.setBounds(new java.awt.Rectangle(160, 35, 320, 20));\r
-            jComboBoxModuleType.setPreferredSize(new java.awt.Dimension(320, 20));\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
@@ -515,11 +543,11 @@ public class MsaHeader extends IInternalFrame {
     private JTextField getJTextFieldURL() {\r
         if (jTextFieldURL == null) {\r
             jTextFieldURL = new JTextField();\r
-            jTextFieldURL.setPreferredSize(new java.awt.Dimension(320, 20));\r
-            jTextFieldURL.setLocation(new java.awt.Point(160, 430));\r
-            jTextFieldURL.setSize(new java.awt.Dimension(320, 20));\r
+            jTextFieldURL.setPreferredSize(new java.awt.Dimension(valueWidth, 20));\r
+            jTextFieldURL.setLocation(new java.awt.Point(valueCol, 430));\r
+            jTextFieldURL.setSize(new java.awt.Dimension(valueWidth, 20));\r
             jTextFieldURL.addFocusListener(this);\r
-            jTextFieldURL.setToolTipText("A URL for the latest version of the license");\r
+            jTextFieldURL.setToolTipText("A URL for the latest version of the license.");\r
         }\r
         return jTextFieldURL;\r
     }\r
@@ -547,10 +575,10 @@ public class MsaHeader extends IInternalFrame {
     private JScrollPane getJScrollPaneCopyright() {\r
         if (jScrollPaneCopyright == null) {\r
             jScrollPaneCopyright = new JScrollPane();\r
-            jScrollPaneCopyright.setBounds(new java.awt.Rectangle(160, 260, 320, 40));\r
-            jScrollPaneCopyright.setPreferredSize(new java.awt.Dimension(320, 40));\r
+            jScrollPaneCopyright.setBounds(new java.awt.Rectangle(valueCol, 260, valueWidth, 40));\r
+            jScrollPaneCopyright.setPreferredSize(new java.awt.Dimension(valueWidth, 40));\r
             jScrollPaneCopyright.setViewportView(getJTextAreaCopyright());\r
-            jScrollPaneCopyright.setSize(new java.awt.Dimension(320, 40));\r
+            jScrollPaneCopyright.setSize(new java.awt.Dimension(valueWidth, 40));\r
         }\r
         return jScrollPaneCopyright;\r
     }\r
@@ -569,35 +597,12 @@ public class MsaHeader extends IInternalFrame {
             jTextAreaCopyright.setWrapStyleWord(true);\r
             jTextAreaCopyright.setSelectionStart(0);\r
             jTextAreaCopyright.setSelectionEnd(0);\r
-            jTextAreaCopyright.setBounds(new java.awt.Rectangle(0, 0, 320, 40));\r
-            jTextAreaCopyright.setToolTipText("One or more copyright lines");\r
+            jTextAreaCopyright.setBounds(new java.awt.Rectangle(0, 0, valueWidth, 40));\r
+            jTextAreaCopyright.setToolTipText("One or more copyright lines.");\r
         }\r
         return jTextAreaCopyright;\r
     }\r
 \r
-    /**\r
-     * This method initializes jComboBoxBinaryModule    \r
-     *  \r
-     * @return javax.swing.JComboBox    \r
-     */\r
-    private JComboBox getJComboBoxBinaryModule() {\r
-        if (jComboBoxBinaryModule == null) {\r
-            jComboBoxBinaryModule = new JComboBox();\r
-            jComboBoxBinaryModule.setBounds(new java.awt.Rectangle(160, 480, 320, 20));\r
-            jComboBoxBinaryModule.setPreferredSize(new java.awt.Dimension(320, 20));\r
-            jComboBoxBinaryModule.addFocusListener(this);\r
-            jComboBoxBinaryModule.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
-                                                 + "but the BINARY MSA should have <br>"\r
-                                                 + "a higher version number.</html>");\r
-        }\r
-        return jComboBoxBinaryModule;\r
-    }\r
-\r
     /**\r
      * This method initializes jTextFieldOutputFileBasename \r
      *  \r
@@ -606,14 +611,33 @@ public class MsaHeader extends IInternalFrame {
     private JTextField getJTextFieldOutputFileBasename() {\r
         if (jTextFieldOutputFileBasename == null) {\r
             jTextFieldOutputFileBasename = new JTextField();\r
-            jTextFieldOutputFileBasename.setBounds(new java.awt.Rectangle(160, 455, 320, 20));\r
-            jTextFieldOutputFileBasename.setPreferredSize(new java.awt.Dimension(320, 20));\r
+            jTextFieldOutputFileBasename.setBounds(new java.awt.Rectangle(valueCol, 455, valueWidth, 20));\r
+            jTextFieldOutputFileBasename.setPreferredSize(new java.awt.Dimension(valueWidth, 20));\r
             jTextFieldOutputFileBasename.addFocusListener(this);\r
-            jTextFieldOutputFileBasename.setToolTipText("Enter a single word for generated output file names");\r
+            jTextFieldOutputFileBasename.setToolTipText("Enter a single word for generated output file names.");\r
         }\r
         return jTextFieldOutputFileBasename;\r
     }\r
 \r
+    /**\r
+     * This method initializes jComboBoxPcdIsDriver \r
+     *  \r
+     * @return javax.swing.JComboBox    \r
+     */\r
+    private JComboBox getJComboBoxPcdIsDriver() {\r
+        if (jComboBoxPcdIsDriver == null) {\r
+            jComboBoxPcdIsDriver = new JComboBox();\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
+    }\r
+\r
     /**\r
      This is the default constructor\r
      \r
@@ -646,8 +670,14 @@ public class MsaHeader extends IInternalFrame {
             md.setSupportedArchitectures(ed.getVSupportedArchitectures());\r
             msa.setModuleDefinitions(md);\r
         }\r
+\r
+        //\r
+        // Init items of Header, Definitions and Externs\r
+        //\r
         init(msa.getMsaHeader());\r
         init(msa.getModuleDefinitions());\r
+        init(msa.getExterns());\r
+\r
         this.setVisible(true);\r
         this.setViewMode(false);\r
     }\r
@@ -680,8 +710,8 @@ public class MsaHeader extends IInternalFrame {
      \r
      **/\r
     private void init() {\r
-        this.setSize(500, 515);\r
-        this.setPreferredSize(new java.awt.Dimension(490, 615));\r
+        this.setSize(dialogWidth, dialogHeight);\r
+        this.setPreferredSize(new java.awt.Dimension(dialogWidth, dialogHeight));\r
         this.setContentPane(getJScrollPane());\r
         this.setTitle("Module Surface Area Header");\r
         initFrame();\r
@@ -743,16 +773,15 @@ public class MsaHeader extends IInternalFrame {
      \r
      **/\r
     private void init(ModuleDefinitionsDocument.ModuleDefinitions inMd) {\r
-        init();\r
         if (inMd != null) {\r
             this.md = inMd;\r
             if (md.getSupportedArchitectures() != null) {\r
                 this.setSelectedItems(Tools.convertListToVector(md.getSupportedArchitectures()));\r
             }\r
             if (md.getBinaryModule()) {\r
-                this.jComboBoxBinaryModule.setSelectedIndex(1);\r
+                this.jRadioButtonBinaryModuleTrue.setSelected(true);\r
             } else {\r
-                this.jComboBoxBinaryModule.setSelectedIndex(0);\r
+                this.jRadioButtonBinaryModuleFalse.setSelected(true);\r
             }\r
             if (md.getOutputFileBasename() != null) {\r
                 this.jTextFieldOutputFileBasename.setText(md.getOutputFileBasename());\r
@@ -760,6 +789,28 @@ public class MsaHeader extends IInternalFrame {
         }\r
     }\r
 \r
+    /**\r
+     This method initializes this\r
+     Fill values to all fields if these values are not empty\r
+     \r
+     @param inEx  The input data of ExternsDocument.Externs\r
+     \r
+     **/\r
+    private void init(ExternsDocument.Externs inEx) {\r
+        if (inEx != null) {\r
+            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
+            }\r
+            this.jCheckBoxFlashMap.setSelected(ex.getTianoR8FlashMapH());\r
+        }\r
+    }\r
+\r
     /**\r
      This method initializes jContentPane\r
      \r
@@ -771,55 +822,56 @@ public class MsaHeader extends IInternalFrame {
 \r
             jLabelURL = new JLabel();\r
             jLabelURL.setText("License URL");\r
-            jLabelURL.setLocation(new java.awt.Point(15, 430));\r
-            jLabelURL.setSize(new java.awt.Dimension(140, 20));\r
+            jLabelURL.setLocation(new java.awt.Point(labelCol, 430));\r
+            jLabelURL.setSize(new java.awt.Dimension(labelWidth, 20));\r
             jLabelBaseName = new JLabel();\r
             jLabelBaseName.setText("Module Name");\r
-            jLabelBaseName.setBounds(new java.awt.Rectangle(15, 10, 140, 20));\r
+            jLabelBaseName.setBounds(new java.awt.Rectangle(labelCol, 10, labelWidth, 20));\r
             jLabelModuleType = new JLabel();\r
-            jLabelModuleType.setBounds(new java.awt.Rectangle(15, 35, 140, 20));\r
+            jLabelModuleType.setBounds(new java.awt.Rectangle(labelCol, 35, labelWidth, 20));\r
             jLabelModuleType.setText("Module Type");\r
             jLabelGuid = new JLabel();\r
             jLabelGuid.setText("Guid Value");\r
-            jLabelGuid.setLocation(new java.awt.Point(15, 60));\r
-            jLabelGuid.setSize(new java.awt.Dimension(140, 20));\r
+            jLabelGuid.setLocation(new java.awt.Point(labelCol, 60));\r
+            jLabelGuid.setSize(new java.awt.Dimension(labelWidth, 20));\r
             jLabelVersion = new JLabel();\r
             jLabelVersion.setText("Version");\r
-            jLabelVersion.setLocation(new java.awt.Point(15, 85));\r
-            jLabelVersion.setSize(new java.awt.Dimension(140, 20));\r
+            jLabelVersion.setLocation(new java.awt.Point(labelCol, 85));\r
+            jLabelVersion.setSize(new java.awt.Dimension(labelWidth, 20));\r
             jLabelAbstract = new JLabel();\r
             jLabelAbstract.setText("Abstract");\r
-            jLabelAbstract.setLocation(new java.awt.Point(15, 110));\r
-            jLabelAbstract.setSize(new java.awt.Dimension(140, 20));\r
+            jLabelAbstract.setLocation(new java.awt.Point(labelCol, 110));\r
+            jLabelAbstract.setSize(new java.awt.Dimension(labelWidth, 20));\r
             jLabelDescription = new JLabel();\r
             jLabelDescription.setText("Description");\r
-            jLabelDescription.setLocation(new java.awt.Point(15, 135));\r
-            jLabelDescription.setSize(new java.awt.Dimension(140, 20));\r
+            jLabelDescription.setLocation(new java.awt.Point(labelCol, 135));\r
+            jLabelDescription.setSize(new java.awt.Dimension(labelWidth, 20));\r
             jLabelCopyright = new JLabel();\r
             jLabelCopyright.setText("Copyright");\r
-            jLabelCopyright.setLocation(new java.awt.Point(15, 260));\r
-            jLabelCopyright.setSize(new java.awt.Dimension(140, 20));\r
+            jLabelCopyright.setLocation(new java.awt.Point(labelCol, 260));\r
+            jLabelCopyright.setSize(new java.awt.Dimension(labelWidth, 20));\r
             jLabelLicense = new JLabel();\r
             jLabelLicense.setText("License");\r
-            jLabelLicense.setLocation(new java.awt.Point(15, 305));\r
-            jLabelLicense.setSize(new java.awt.Dimension(140, 20));\r
+            jLabelLicense.setLocation(new java.awt.Point(labelCol, 305));\r
+            jLabelLicense.setSize(new java.awt.Dimension(labelWidth, 20));\r
             jLabelOutputFileBasename = new JLabel();\r
-            jLabelOutputFileBasename.setBounds(new java.awt.Rectangle(15, 455, 140, 20));\r
+            jLabelOutputFileBasename.setBounds(new java.awt.Rectangle(labelCol, 455, labelWidth, 20));\r
             jLabelOutputFileBasename.setText("Output File Basename");\r
             jLabelBinaryModule = new JLabel();\r
-            jLabelBinaryModule.setBounds(new java.awt.Rectangle(15, 480, 140, 20));\r
+            jLabelBinaryModule.setBounds(new java.awt.Rectangle(labelCol, 480, labelWidth, 20));\r
             jLabelBinaryModule.setText("Binary Module");\r
             jLabelArch = new JLabel();\r
-            jLabelArch.setBounds(new java.awt.Rectangle(15, 505, 140, 20));\r
+            jLabelArch.setBounds(new java.awt.Rectangle(labelCol, 505, labelWidth, 20));\r
             jLabelArch.setText("Supported Architectures");\r
             jLabelSpecification = new JLabel();\r
             jLabelSpecification.setText("Specification");\r
-            jLabelSpecification.setLocation(new java.awt.Point(14, 530));\r
-            jLabelSpecification.setSize(new java.awt.Dimension(140, 20));\r
+            jLabelSpecification.setLocation(new java.awt.Point(labelCol, 530));\r
+            jLabelSpecification.setSize(new java.awt.Dimension(labelWidth, 20));\r
 \r
             jContentPane = new JPanel();\r
             jContentPane.setLayout(null);\r
-            jContentPane.setPreferredSize(new java.awt.Dimension(490, 565));\r
+            jContentPane.setPreferredSize(new java.awt.Dimension(dialogWidth - 10, dialogHeight - 10));\r
+\r
             jContentPane.addFocusListener(this);\r
 \r
             jContentPane.add(jLabelBaseName, null);\r
@@ -832,7 +884,6 @@ public class MsaHeader extends IInternalFrame {
             jContentPane.add(jLabelLicense, null);\r
             jContentPane.add(jLabelCopyright, null);\r
             jContentPane.add(jLabelDescription, null);\r
-            jContentPane.add(jLabelSpecification, null);\r
             jContentPane.add(getJTextFieldSpecification(), null);\r
             jContentPane.add(getJButtonOk(), null);\r
             jContentPane.add(getJButtonCancel(), null);\r
@@ -847,7 +898,6 @@ public class MsaHeader extends IInternalFrame {
             jContentPane.add(jLabelOutputFileBasename, null);\r
             jContentPane.add(getJTextFieldOutputFileBasename(), null);\r
             jContentPane.add(jLabelBinaryModule, null);\r
-            jContentPane.add(getJComboBoxBinaryModule(), null);\r
             jContentPane.add(jLabelArch, null);\r
 \r
             jStarLabel1 = new StarLabel();\r
@@ -872,8 +922,6 @@ public class MsaHeader extends IInternalFrame {
             jStarLabel13.setLocation(new java.awt.Point(0, 480));\r
             jStarLabel14 = new StarLabel();\r
             jStarLabel14.setLocation(new java.awt.Point(0, 505));\r
-            jStarLabel15 = new StarLabel();\r
-            jStarLabel15.setLocation(new java.awt.Point(0, 530));\r
 \r
             jContentPane.add(jStarLabel1, null);\r
             jContentPane.add(jStarLabel2, null);\r
@@ -886,7 +934,6 @@ public class MsaHeader extends IInternalFrame {
             jContentPane.add(jStarLabel12, null);\r
             jContentPane.add(jStarLabel13, null);\r
             jContentPane.add(jStarLabel14, null);\r
-            jContentPane.add(jStarLabel15, null);\r
             jContentPane.add(getJScrollPaneCopyright(), null);\r
 \r
             jContentPane.add(getJCheckBoxIa32(), null);\r
@@ -895,6 +942,16 @@ public class MsaHeader extends IInternalFrame {
             jContentPane.add(getJCheckBoxEbc(), null);\r
             jContentPane.add(getJCheckBoxArm(), null);\r
             jContentPane.add(getJCheckBoxPpc(), null);\r
+\r
+            jContentPane.add(getJCheckBoxPcd(), null);\r
+            jContentPane.add(getJComboBoxPcdIsDriver(), null);\r
+            jContentPane.add(getJCheckBoxFlashMap(), null);\r
+\r
+            ButtonGroup bg = new ButtonGroup();\r
+            jContentPane.add(getJRadioButtonBinaryModuleTrue(), null);\r
+            jContentPane.add(getJRadioButtonBinaryModuleFalse(), null);\r
+            bg.add(getJRadioButtonBinaryModuleTrue());\r
+            bg.add(getJRadioButtonBinaryModuleFalse());\r
         }\r
         return jContentPane;\r
     }\r
@@ -915,11 +972,19 @@ public class MsaHeader extends IInternalFrame {
             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
@@ -940,12 +1005,12 @@ public class MsaHeader extends IInternalFrame {
         // Check Base Name\r
         //\r
         if (isEmpty(this.jTextFieldBaseName.getText())) {\r
-            Log.wrn("Update Msa Header", "Base Name couldn't be empty");\r
+            Log.wrn("Update Msa Header", "Name must be entered!");\r
             //this.jTextFieldBaseName.requestFocus();\r
             return false;\r
         }\r
         if (!DataValidation.isBaseName(this.jTextFieldBaseName.getText())) {\r
-            Log.wrn("Update Msa Header", "Incorrect data type for Base Name");\r
+            Log.wrn("Update Msa Header", "Incorrect data type for Name, it must start with an alpha character!");\r
             //this.jTextFieldBaseName.requestFocus();\r
             return false;\r
         }\r
@@ -954,12 +1019,12 @@ public class MsaHeader extends IInternalFrame {
         // Check Guid\r
         //\r
         if (isEmpty(this.jTextFieldGuid.getText())) {\r
-            Log.wrn("Update Msa Header", "Guid Value couldn't be empty");\r
+            Log.wrn("Update Msa Header", "The Guid Value must be entered!");\r
             //this.jTextFieldGuid.requestFocus();\r
             return false;\r
         }\r
         if (!DataValidation.isGuid((this.jTextFieldGuid).getText())) {\r
-            Log.wrn("Update Msa Header", "Incorrect data type for Guid");\r
+            Log.wrn("Update Msa Header", "Incorrect data type for Guid, it must be registry format, 8-4-4-4-12");\r
             //this.jTextFieldGuid.requestFocus();\r
             return false;\r
         }\r
@@ -968,12 +1033,12 @@ public class MsaHeader extends IInternalFrame {
         // Check Version\r
         //\r
         if (isEmpty(this.jTextFieldVersion.getText())) {\r
-            Log.wrn("Update Msa Header", "Version couldn't be empty");\r
+            Log.wrn("Update Msa Header", "Version must be entered!");\r
             //this.jTextFieldVersion.requestFocus();\r
             return false;\r
         }\r
         if (!DataValidation.isVersion(this.jTextFieldVersion.getText())) {\r
-            Log.wrn("Update Msa Header", "Incorrect data type for Version");\r
+            Log.wrn("Update Msa Header", "Incorrect data type for Version, it must start with a digit.");\r
             //this.jTextFieldVersion.requestFocus();\r
             return false;\r
         }\r
@@ -982,12 +1047,13 @@ public class MsaHeader extends IInternalFrame {
         // Check Abstact\r
         //\r
         if (isEmpty(this.jTextFieldAbstract.getText())) {\r
-            Log.wrn("Update Msa Header", "Abstract couldn't be empty");\r
+            Log.wrn("Update Msa Header", "Abstract must be entered!");\r
             //this.jTextFieldAbstract.requestFocus();\r
             return false;\r
         }\r
         if (!DataValidation.isAbstract(this.jTextFieldAbstract.getText())) {\r
-            Log.wrn("Update Msa Header", "Incorrect data type for Abstract");\r
+            Log.wrn("Update Msa Header",\r
+                    "Incorrect data type for Abstract, is should be a sentence describing the module.");\r
             //this.jTextFieldAbstract.requestFocus();\r
             return false;\r
         }\r
@@ -996,7 +1062,7 @@ public class MsaHeader extends IInternalFrame {
         // Check Description\r
         //\r
         if (isEmpty(this.jTextAreaDescription.getText())) {\r
-            Log.wrn("Update Msa Header", "Description couldn't be empty");\r
+            Log.wrn("Update Msa Header", "Description must be entered!");\r
             //this.jTextAreaDescription.requestFocus();\r
             return false;\r
         }\r
@@ -1005,7 +1071,7 @@ public class MsaHeader extends IInternalFrame {
         // Check Copyright\r
         //\r
         if (isEmpty(this.jTextAreaCopyright.getText())) {\r
-            Log.wrn("Update Msa Header", "Copyright couldn't be empty");\r
+            Log.wrn("Update Msa Header", "Copyright must be entered!");\r
             //this.jTextFieldCopyright.requestFocus();\r
             return false;\r
         }\r
@@ -1014,7 +1080,7 @@ public class MsaHeader extends IInternalFrame {
         // Check License\r
         //\r
         if (isEmpty(this.jTextAreaLicense.getText())) {\r
-            Log.wrn("Update Msa Header", "License couldn't be empty");\r
+            Log.wrn("Update Msa Header", "License must be entered!");\r
             //this.jTextAreaLicense.requestFocus();\r
             return false;\r
         }\r
@@ -1023,11 +1089,14 @@ public class MsaHeader extends IInternalFrame {
         // Check Specification\r
         //\r
         if (isEmpty(this.jTextFieldSpecification.getText())) {\r
-            Log.wrn("Update Msa Header", "Specification couldn't be empty");\r
+            Log.wrn("Update Msa Header", "Specification must exist.");\r
             //this.jTextFieldSpecification.requestFocus();\r
             return false;\r
         }\r
         if (!DataValidation.isSpecification(this.jTextFieldSpecification.getText())) {\r
+            // TODO Add code to check the specification number.\r
+            // Future releases of Schema may require that we process these files\r
+            // differently.\r
             Log.wrn("Update Msa Header", "Incorrect data type for Specification");\r
             //this.jTextFieldSpecification.requestFocus();\r
             return false;\r
@@ -1061,7 +1130,6 @@ public class MsaHeader extends IInternalFrame {
     private void initFrame() {\r
         EnumerationData ed = new EnumerationData();\r
         Tools.generateComboBoxByVector(jComboBoxModuleType, ed.getVModuleType());\r
-        Tools.generateComboBoxByVector(jComboBoxBinaryModule, ed.getVBoolean());\r
         this.setSelectedItems(ed.getVSupportedArchitectures());\r
     }\r
 \r
@@ -1094,21 +1162,21 @@ public class MsaHeader extends IInternalFrame {
         int intCurrentWidth = this.getJContentPane().getWidth();\r
         int intPreferredWidth = this.getJContentPane().getPreferredSize().width;\r
 \r
-        resizeComponentWidth(this.jTextFieldBaseName, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldGuid, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldVersion, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jScrollPaneLicense, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldURL, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jScrollPaneCopyright, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jScrollPaneDescription, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldSpecification, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldAbstract, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jComboBoxModuleType, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jComboBoxBinaryModule, intCurrentWidth, intPreferredWidth);\r
-        resizeComponentWidth(this.jTextFieldOutputFileBasename, intCurrentWidth, intPreferredWidth);\r
-\r
-        relocateComponentX(this.jButtonGenerateGuid, intCurrentWidth, intPreferredWidth,\r
-                           DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
+        Tools.resizeComponentWidth(this.jTextFieldBaseName, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldGuid, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldVersion, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jScrollPaneLicense, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldURL, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jScrollPaneCopyright, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jScrollPaneDescription, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldSpecification, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldAbstract, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jComboBoxModuleType, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jTextFieldOutputFileBasename, intCurrentWidth, intPreferredWidth);\r
+        Tools.resizeComponentWidth(this.jComboBoxPcdIsDriver, intCurrentWidth, intPreferredWidth);\r
+\r
+        Tools.relocateComponentX(this.jButtonGenerateGuid, intCurrentWidth, intPreferredWidth,\r
+                                 DataType.SPACE_TO_RIGHT_FOR_GENERATE_BUTTON);\r
     }\r
 \r
     public void focusLost(FocusEvent arg0) {\r
@@ -1121,12 +1189,12 @@ public class MsaHeader extends IInternalFrame {
         //\r
         if (arg0.getSource() == this.jTextFieldBaseName) {\r
             if (isEmpty(this.jTextFieldBaseName.getText())) {\r
-                Log.wrn("Update Msa Header", "Base Name couldn't be empty");\r
+                Log.wrn("Update Msa Header", "The Name must be entered!");\r
                 //this.jTextFieldBaseName.requestFocus();\r
                 return;\r
             }\r
             if (!DataValidation.isBaseName(this.jTextFieldBaseName.getText())) {\r
-                Log.wrn("Update Msa Header", "Incorrect data type for Base Name");\r
+                Log.wrn("Update Msa Header", "Incorrect data type for Name, it must begin with an alpha character.");\r
                 //this.jTextFieldBaseName.requestFocus();\r
                 return;\r
             }\r
@@ -1153,12 +1221,12 @@ public class MsaHeader extends IInternalFrame {
         //\r
         if (arg0.getSource() == this.jTextFieldGuid) {\r
             if (isEmpty(this.jTextFieldGuid.getText())) {\r
-                Log.wrn("Update Msa Header", "Guid Value couldn't be empty");\r
+                Log.wrn("Update Msa Header", "Guid must be entered!");\r
                 //this.jTextFieldGuid.requestFocus();\r
                 return;\r
             }\r
             if (!DataValidation.isGuid((this.jTextFieldGuid).getText())) {\r
-                Log.wrn("Update Msa Header", "Incorrect data type for Guid");\r
+                Log.wrn("Update Msa Header", "Incorrect data type for Guid, it must be registry format. (8-4-4-4-12)");\r
                 //this.jTextFieldGuid.requestFocus();\r
                 return;\r
             }\r
@@ -1174,12 +1242,12 @@ public class MsaHeader extends IInternalFrame {
         //\r
         if (arg0.getSource() == this.jTextFieldVersion) {\r
             if (isEmpty(this.jTextFieldVersion.getText())) {\r
-                Log.wrn("Update Msa Header", "Version couldn't be empty");\r
+                Log.wrn("Update Msa Header", "Version must be entered!");\r
                 //this.jTextFieldVersion.requestFocus();\r
                 return;\r
             }\r
             if (!DataValidation.isVersion(this.jTextFieldVersion.getText())) {\r
-                Log.wrn("Update Msa Header", "Incorrect data type for Version");\r
+                Log.wrn("Update Msa Header", "Incorrect data type for Version, it must start with a digit.");\r
                 //this.jTextFieldVersion.requestFocus();\r
                 return;\r
             }\r
@@ -1195,12 +1263,12 @@ public class MsaHeader extends IInternalFrame {
         //\r
         if (arg0.getSource() == this.jTextFieldAbstract) {\r
             if (isEmpty(this.jTextFieldAbstract.getText())) {\r
-                Log.wrn("Update Msa Header", "Abstract couldn't be empty");\r
+                Log.wrn("Update Msa Header", "Abstract must be entered!");\r
                 //this.jTextFieldAbstract.requestFocus();\r
                 return;\r
             }\r
             if (!DataValidation.isAbstract(this.jTextFieldAbstract.getText())) {\r
-                Log.wrn("Update Msa Header", "Incorrect data type for Abstract");\r
+                Log.wrn("Update Msa Header", "Incorrect data type for Abstract, it must be sentence.");\r
                 //this.jTextFieldAbstract.requestFocus();\r
                 return;\r
             }\r
@@ -1216,7 +1284,7 @@ public class MsaHeader extends IInternalFrame {
         //\r
         if (arg0.getSource() == this.jTextAreaDescription) {\r
             if (isEmpty(this.jTextAreaDescription.getText())) {\r
-                Log.wrn("Update Msa Header", "Description couldn't be empty");\r
+                Log.wrn("Update Msa Header", "Description must be entered!");\r
                 //this.jTextAreaDescription.requestFocus();\r
                 return;\r
             }\r
@@ -1232,7 +1300,7 @@ public class MsaHeader extends IInternalFrame {
         //\r
         if (arg0.getSource() == this.jTextAreaCopyright) {\r
             if (isEmpty(this.jTextAreaCopyright.getText())) {\r
-                Log.wrn("Update Msa Header", "Copyright couldn't be empty");\r
+                Log.wrn("Update Msa Header", "Copyright must be entered!");\r
                 //this.jTextFieldCopyright.requestFocus();\r
                 return;\r
             }\r
@@ -1248,7 +1316,7 @@ public class MsaHeader extends IInternalFrame {
         //\r
         if (arg0.getSource() == this.jTextAreaLicense) {\r
             if (isEmpty(this.jTextAreaLicense.getText())) {\r
-                Log.wrn("Update Msa Header", "License couldn't be empty");\r
+                Log.wrn("Update Msa Header", "License must be entered!");\r
                 //this.jTextAreaLicense.requestFocus();\r
                 return;\r
             }\r
@@ -1289,7 +1357,7 @@ public class MsaHeader extends IInternalFrame {
         //\r
         if (arg0.getSource() == this.jTextFieldOutputFileBasename) {\r
             if (isEmpty(this.jTextFieldOutputFileBasename.getText())) {\r
-                Log.wrn("Update Msa Header", "Output File Basename couldn't be empty");\r
+                Log.wrn("Update Msa Header", "Output File Basename must be entered!");\r
                 //                jTextFieldOutputFileBasename.removeFocusListener(this);\r
                 //                jTextFieldOutputFileBasename.requestFocus();\r
                 //                jTextFieldOutputFileBasename.addFocusListener(this);\r
@@ -1305,14 +1373,21 @@ public class MsaHeader extends IInternalFrame {
         //\r
         // Check Binary Module Type\r
         //\r
-        if (arg0.getSource() == this.jComboBoxBinaryModule) {\r
-            if (jComboBoxBinaryModule.getSelectedItem().toString().equals(DataType.TRUE)) {\r
+        if (arg0.getSource() == this.jRadioButtonBinaryModuleTrue) {\r
+            if (jRadioButtonBinaryModuleTrue.isSelected()) {\r
                 if (md.getBinaryModule()) {\r
                     return;\r
                 } else {\r
                     md.setBinaryModule(true);\r
                 }\r
-            } else if (jComboBoxBinaryModule.getSelectedItem().toString().equals(DataType.FALSE)) {\r
+            }\r
+        }\r
+\r
+        //\r
+        // Check Binary Module Type\r
+        //\r
+        if (arg0.getSource() == this.jRadioButtonBinaryModuleFalse) {\r
+            if (jRadioButtonBinaryModuleFalse.isSelected()) {\r
                 if (md.getBinaryModule()) {\r
                     md.setBinaryModule(false);\r
                 } else {\r
@@ -1334,6 +1409,84 @@ public class MsaHeader extends IInternalFrame {
             }\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
@@ -1423,4 +1576,82 @@ public class MsaHeader extends IInternalFrame {
             }\r
         }\r
     }\r
+\r
+    /**\r
+     * This method initializes jCheckBoxPcd    \r
+     *         \r
+     * @return javax.swing.JCheckBox   \r
+     */\r
+    private JCheckBox getJCheckBoxPcd() {\r
+        if (jCheckBoxPcd == null) {\r
+            jCheckBoxPcd = new JCheckBox();\r
+            jCheckBoxPcd.setBounds(new java.awt.Rectangle(labelCol, 530, labelWidth, 20));\r
+            jCheckBoxPcd.setText("Is this a PCD Driver?");\r
+            jCheckBoxPcd.addFocusListener(this);\r
+            jCheckBoxPcd.addActionListener(this);\r
+        }\r
+        return jCheckBoxPcd;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jCheckBoxFlashMap       \r
+     *         \r
+     * @return javax.swing.JCheckBox   \r
+     */\r
+    private JCheckBox getJCheckBoxFlashMap() {\r
+        if (jCheckBoxFlashMap == null) {\r
+            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
+\r
+    /**\r
+     * This method initializes jRadioButtonBinaryModuleTrue    \r
+     *         \r
+     * @return javax.swing.JRadioButton        \r
+     */\r
+    private JRadioButton getJRadioButtonBinaryModuleTrue() {\r
+        if (jRadioButtonBinaryModuleTrue == null) {\r
+            jRadioButtonBinaryModuleTrue = new JRadioButton();\r
+            jRadioButtonBinaryModuleTrue.setBounds(new java.awt.Rectangle(valueCol, 480, 140, 20));\r
+            jRadioButtonBinaryModuleTrue.setText("True");\r
+            jRadioButtonBinaryModuleTrue.setSelected(true);\r
+            jRadioButtonBinaryModuleTrue.addFocusListener(this);\r
+            jRadioButtonBinaryModuleTrue.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
+        }\r
+        return jRadioButtonBinaryModuleTrue;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jRadioButtonBinaryModuleFalse   \r
+     *         \r
+     * @return javax.swing.JRadioButton        \r
+     */\r
+    private JRadioButton getJRadioButtonBinaryModuleFalse() {\r
+        if (jRadioButtonBinaryModuleFalse == null) {\r
+            jRadioButtonBinaryModuleFalse = new JRadioButton();\r
+            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
+        }\r
+        return jRadioButtonBinaryModuleFalse;\r
+    }\r
 }\r