]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java
draft UI implementation of module orders in FV.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFlash.java
index 6ad18492202eb91802f3ab395a9e01086da116cf..3b07c696b265588866a7a38cb3f11ca029a550bd 100644 (file)
@@ -16,40 +16,35 @@ import java.awt.BorderLayout;
 import javax.swing.JPanel;\r
 \r
 import javax.swing.AbstractAction;\r
-import javax.swing.ButtonGroup;\r
 import javax.swing.DefaultCellEditor;\r
-import javax.swing.DefaultListModel;\r
-import javax.swing.JDialog;\r
 import javax.swing.JFileChooser;\r
 import javax.swing.JFrame;\r
-import javax.swing.JInternalFrame;\r
 import javax.swing.JOptionPane;\r
 import javax.swing.JTabbedPane;\r
 import javax.swing.JButton;\r
 import javax.swing.ListSelectionModel;\r
 \r
 import org.tianocore.PlatformSurfaceAreaDocument;\r
-import org.tianocore.frameworkwizard.common.Tools;\r
+import org.tianocore.frameworkwizard.common.GlobalData;\r
+import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
 import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
 import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
-\r
+import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r
+import org.tianocore.frameworkwizard.platform.ui.FpdFrameworkModules;\r
+import org.tianocore.frameworkwizard.platform.ui.global.WorkspaceProfile;\r
 \r
 import java.awt.FlowLayout;\r
 import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.ComponentAdapter;\r
-import java.awt.event.ComponentEvent;\r
-import java.awt.event.FocusAdapter;\r
-import java.awt.event.FocusEvent;\r
 import java.awt.event.ItemEvent;\r
 import java.awt.event.ItemListener;\r
-import java.awt.event.ActionEvent;\r
+import java.io.BufferedReader;\r
 import java.io.File;\r
-import java.util.ArrayList;\r
+import java.io.FileReader;\r
 import java.util.Iterator;\r
 import java.util.LinkedHashMap;\r
 import java.util.Map;\r
 import java.util.Set;\r
+import java.util.Vector;\r
 \r
 import javax.swing.JCheckBox;\r
 import javax.swing.JTextField;\r
@@ -57,7 +52,8 @@ import java.awt.GridLayout;
 import javax.swing.JLabel;\r
 import javax.swing.JScrollPane;\r
 import javax.swing.JTable;\r
-import javax.swing.JList;\r
+import javax.swing.event.InternalFrameAdapter;\r
+import javax.swing.event.InternalFrameEvent;\r
 import javax.swing.event.ListSelectionEvent;\r
 import javax.swing.event.ListSelectionListener;\r
 import javax.swing.event.TableModelEvent;\r
@@ -67,81 +63,95 @@ import javax.swing.table.TableColumn;
 import javax.swing.table.TableModel;\r
 import javax.swing.JComboBox;\r
 import java.awt.Dimension;\r
-import javax.swing.JRadioButton;\r
-import javax.swing.JTextArea;\r
-import java.awt.CardLayout;\r
+import javax.swing.JSplitPane;\r
 \r
 public class FpdFlash extends IInternalFrame {\r
 \r
+    /**\r
+     * \r
+     */\r
+    private static final long serialVersionUID = 1L;\r
     static JFrame frame;\r
     private JPanel jContentPane = null;\r
-    private JPanel jPanel = null;\r
-    private JPanel jPanel1 = null;\r
-    private JPanel jPanel2 = null;\r
-    private JPanel jPanel3 = null;\r
+    private JPanel jPanelContentEast = null;\r
+    private JPanel jPanelContentSouth = null;\r
+    private JPanel jPanelContentWest = null;\r
+    private JPanel jPanelContentNorth = null;\r
     private JTabbedPane jTabbedPane = null;\r
     private JPanel jPanelFvImages = null;\r
-    private JButton jButtonOk = null;\r
-    private JButton jButtonCancel = null;\r
     private JPanel jPanelFvImageN = null;\r
-    private JPanel jPanelFvImageW = null;\r
     private JPanel jPanelFvImageS = null;\r
-    private JCheckBox jCheckBox1 = null;\r
-    private JLabel jLabel = null;\r
-    private JTextField jTextField = null;\r
-    private JLabel jLabel1 = null;\r
-    private JTextField jTextField1 = null;\r
-    private JButton jButton = null;\r
-    private JScrollPane jScrollPane = null;\r
-    private JScrollPane jScrollPane1 = null;\r
-    private JTable jTable = null;\r
-    private JPanel jPanel4 = null;\r
-    private JButton jButton1 = null;\r
+    private JCheckBox jCheckBoxFvProperty = null;\r
+    private JLabel jLabelFvPropName = null;\r
+    private JTextField jTextFieldFvPropName = null;\r
+    private JLabel jLabelFvPropValue = null;\r
+    private JTextField jTextFieldFvPropValue = null;\r
+    private JButton jButtonFvPropAdd = null;\r
+    private JScrollPane jScrollPaneFvProp = null;\r
+    private JTable jTableFvProp = null;\r
+    private JPanel jPanelFvPropButtonGroup = null;\r
+    private JButton jButtonFvPropDel = null;\r
     private DefaultTableModel fvPropertyTableModel = null;\r
     private DefaultTableModel fvImageNameTableModel = null;\r
     private ImageParaTableModel fvImageParaTableModel = null;\r
+    private DefaultTableModel fvOptionTableModel = null;\r
     private JPanel jPanelFvImageC = null;\r
-    private JCheckBox jCheckBox2 = null;\r
-    private JLabel jLabel2 = null;\r
-    private JComboBox jComboBox = null;\r
-    private JLabel jLabel3 = null;\r
-    private JLabel jLabel4 = null;\r
-    private JTextField jTextField2 = null;\r
-    private JButton jButton2 = null;\r
-    private JScrollPane jScrollPane2 = null;\r
-    private JTable jTable1 = null;\r
-    private JButton jButton3 = null;\r
-    private JPanel jPanel5 = null;\r
-    private JButton jButton4 = null;\r
-    private JScrollPane jScrollPane3 = null;\r
-    private JTable jTable2 = null;\r
-    private JButton jButton6 = null;\r
-    private JCheckBox jCheckBox3 = null;\r
-    private JLabel jLabel5 = null;\r
-    private JComboBox jComboBox1 = null;\r
-    private JCheckBox jCheckBox4 = null;\r
-    private JCheckBox jCheckBox5 = null;\r
-    private JCheckBox jCheckBox6 = null;\r
-    private JCheckBox jCheckBox7 = null;\r
-    private JCheckBox jCheckBox8 = null;\r
-    private JCheckBox jCheckBox9 = null;\r
-    private JCheckBox jCheckBox10 = null;\r
-    private JCheckBox jCheckBox11 = null;\r
-    private JCheckBox jCheckBox12 = null;\r
-    private JCheckBox jCheckBox13 = null;\r
-    private JPanel jPanel6 = null;\r
-    private DefaultTableModel fdfImageDefTableModel = null;\r
-    private DefaultTableModel fdfBlocksTableModel = null;\r
-    private DefaultTableModel fdfRegionsTableModel = null;\r
-    private DefaultTableModel fdfSubRegionsTableModel = null;\r
-    \r
-    private JLabel jLabel17 = null;\r
-    private DefaultListModel listModel = new DefaultListModel();\r
+    private JCheckBox jCheckBoxFvImagePara = null;\r
+    private JLabel jLabelFvParaType = null;\r
+    private JComboBox jComboBoxFvParaType = null;\r
+    private JLabel jLabelFvImageNames = null;\r
+    private JLabel jLabelFvParaName = null;\r
+    private JTextField jTextFieldFvParaName = null;\r
+    private JButton jButtonFvParaAdd = null;\r
+    private JScrollPane jScrollPaneFvImageNames = null;\r
+    private JTable jTableFvImageNames = null;\r
+    private JButton jButtonFvParaDel = null;\r
+    private JPanel jPanelFvImageOpts = null;\r
+    private JButton jButtonAddFvImage = null;\r
+    private JScrollPane jScrollPaneFvInfo = null;\r
+    private JTable jTableFvInfo = null;\r
+    private JButton jButtonDelFvImage = null;\r
+    private JCheckBox jCheckBoxFvImageOpts = null;\r
+    private JPanel jPanelFvImagePara = null;\r
+    private OpeningPlatformType docConsole = null;\r
     private FpdFileContents ffc = null;\r
-    private JPanel jPanel7 = null;\r
-    private JCheckBox jCheckBox = null;\r
-    private JTextField jTextField3 = null;\r
-    private JButton jButton5 = null;\r
+    private JPanel jPanelFdf = null;\r
+    private JCheckBox jCheckBoxFdf = null;\r
+    private JTextField jTextFieldFdf = null;\r
+    private JButton jButtonFdfBrowse = null;\r
+    private JLabel jLabelFvImageOptName = null;\r
+    private JTextField jTextFieldFvImageOptName = null;\r
+    private JLabel jLabelFvImageOptValue = null;\r
+    private JTextField jTextFieldFvImageOptValue = null;\r
+    private JPanel jPanelFvImageOptsButtonGroup = null;\r
+    private JButton jButtonFvImageOptAdd = null;\r
+    private JButton jButtonFvImageOptDel = null;\r
+    private JScrollPane jScrollPane = null;\r
+    private JTable jTableFvImageOpts = null;\r
+    private JButton jButtonUpdateFvImage = null;\r
+    private JPanel jPanelFdfN = null;\r
+    private JPanel jPanelFdfS = null;\r
+    private JSplitPane jSplitPaneFdfC = null;\r
+    private JPanel jPanelFdfCTop = null;\r
+    private JPanel jPanelFdfCBottom = null;\r
+    private JPanel jPanelFdfCTopN = null;\r
+    private JPanel jPanelFdfCTopS = null;\r
+    private JPanel jPanelFdfCTopC = null;\r
+    private JPanel jPanelFdfCBottomN = null;\r
+    private JPanel jPanelFdfCBottomC = null;\r
+    private JLabel jLabelFvInFdf = null;\r
+    private JLabel jLabelFvAdditional = null;\r
+    private JScrollPane jScrollPaneFvInFdf = null;\r
+    private JTable jTableFvInFdf = null;\r
+    private NonEditableTableModel fvInFdfTableModel = null;  //  @jve:decl-index=0:visual-constraint=""\r
+    private JButton jButtonFvInFdfOptions = null;\r
+    private JScrollPane jScrollPaneFvAdditional = null;\r
+    private JTable jTableFvAdditional = null;\r
+    private DefaultTableModel fvAddtionalTableModel = null;  //  @jve:decl-index=0:visual-constraint=""\r
+    private JButton jButtonAddFv = null;\r
+    private JButton jButtonDelFv = null;\r
+    private JButton jButtonAddFvOptions = null;\r
+    \r
     \r
     public FpdFlash() {\r
         super();\r
@@ -158,16 +168,21 @@ public class FpdFlash extends IInternalFrame {
         init(ffc);\r
     }\r
     \r
+    public FpdFlash(OpeningPlatformType opt) {\r
+        this(opt.getXmlFpd());\r
+        docConsole = opt;\r
+    }\r
+    \r
     /**\r
      * This method initializes jPanel  \r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel() {\r
-        if (jPanel == null) {\r
-            jPanel = new JPanel();\r
+    private JPanel getJPanelContentEast() {\r
+        if (jPanelContentEast == null) {\r
+            jPanelContentEast = new JPanel();\r
         }\r
-        return jPanel;\r
+        return jPanelContentEast;\r
     }\r
 \r
     /**\r
@@ -175,18 +190,16 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel1() {\r
-        if (jPanel1 == null) {\r
+    private JPanel getJPanelContentSouth() {\r
+        if (jPanelContentSouth == null) {\r
             FlowLayout flowLayout = new FlowLayout();\r
             flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);\r
             flowLayout.setHgap(15);\r
-            jPanel1 = new JPanel();\r
-            jPanel1.setLayout(flowLayout);\r
-            jPanel1.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);\r
-            jPanel1.add(getJButtonCancel(), null);\r
-            jPanel1.add(getJButtonOk(), null);\r
+            jPanelContentSouth = new JPanel();\r
+            jPanelContentSouth.setLayout(flowLayout);\r
+            jPanelContentSouth.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);\r
         }\r
-        return jPanel1;\r
+        return jPanelContentSouth;\r
     }\r
 \r
     /**\r
@@ -194,11 +207,11 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel2() {\r
-        if (jPanel2 == null) {\r
-            jPanel2 = new JPanel();\r
+    private JPanel getJPanelContentWest() {\r
+        if (jPanelContentWest == null) {\r
+            jPanelContentWest = new JPanel();\r
         }\r
-        return jPanel2;\r
+        return jPanelContentWest;\r
     }\r
 \r
     /**\r
@@ -206,11 +219,11 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel3() {\r
-        if (jPanel3 == null) {\r
-            jPanel3 = new JPanel();\r
+    private JPanel getJPanelContentNorth() {\r
+        if (jPanelContentNorth == null) {\r
+            jPanelContentNorth = new JPanel();\r
         }\r
-        return jPanel3;\r
+        return jPanelContentNorth;\r
     }\r
 \r
     /**\r
@@ -221,8 +234,8 @@ public class FpdFlash extends IInternalFrame {
     private JTabbedPane getJTabbedPane() {\r
         if (jTabbedPane == null) {\r
             jTabbedPane = new JTabbedPane();\r
-            jTabbedPane.addTab("FV Images", null, getJPanelFvImages(), null);\r
-            jTabbedPane.addTab("Flash Definition File", null, getJPanel7(), null);\r
+            jTabbedPane.addTab("General", null, getJPanelFdf(), null);\r
+            jTabbedPane.addTab("Advanced", null, getJPanelFvImages(), null);\r
             \r
         }\r
         return jTabbedPane;\r
@@ -246,36 +259,6 @@ public class FpdFlash extends IInternalFrame {
         return jPanelFvImages;\r
     }\r
 \r
-    /**\r
-     * This method initializes jButtonOk       \r
-     *         \r
-     * @return javax.swing.JButton     \r
-     */\r
-    private JButton getJButtonOk() {\r
-        if (jButtonOk == null) {\r
-            jButtonOk = new JButton();\r
-            jButtonOk.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonOk.setText("Cancel");\r
-            jButtonOk.setVisible(false);\r
-        }\r
-        return jButtonOk;\r
-    }\r
-\r
-    /**\r
-     * This method initializes jButtonCancel   \r
-     *         \r
-     * @return javax.swing.JButton     \r
-     */\r
-    private JButton getJButtonCancel() {\r
-        if (jButtonCancel == null) {\r
-            jButtonCancel = new JButton();\r
-            jButtonCancel.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButtonCancel.setText("Ok");\r
-            jButtonCancel.setVisible(false);\r
-        }\r
-        return jButtonCancel;\r
-    }\r
-\r
     /**\r
      * This method initializes jPanelFvImageN  \r
      *         \r
@@ -283,47 +266,32 @@ public class FpdFlash extends IInternalFrame {
      */\r
     private JPanel getJPanelFvImageN() {\r
         if (jPanelFvImageN == null) {\r
-            jLabel1 = new JLabel();\r
-            jLabel1.setText("Value");\r
-            jLabel1.setEnabled(false);\r
-            jLabel1.setPreferredSize(new java.awt.Dimension(38,20));\r
-            jLabel = new JLabel();\r
-            jLabel.setText("Name");\r
-            jLabel.setEnabled(false);\r
-            jLabel.setPreferredSize(new java.awt.Dimension(38,20));\r
+            jLabelFvPropValue = new JLabel();\r
+            jLabelFvPropValue.setText("Value");\r
+            jLabelFvPropValue.setEnabled(false);\r
+            jLabelFvPropValue.setPreferredSize(new java.awt.Dimension(38,20));\r
+            jLabelFvPropName = new JLabel();\r
+            jLabelFvPropName.setText("Name");\r
+            jLabelFvPropName.setEnabled(false);\r
+            jLabelFvPropName.setPreferredSize(new java.awt.Dimension(38,20));\r
             FlowLayout flowLayout2 = new FlowLayout();\r
-            flowLayout2.setAlignment(java.awt.FlowLayout.CENTER);\r
+            flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);\r
             flowLayout2.setHgap(15);\r
             jPanelFvImageN = new JPanel();\r
             jPanelFvImageN.setPreferredSize(new java.awt.Dimension(576,100));\r
             jPanelFvImageN.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));\r
             jPanelFvImageN.setLayout(flowLayout2);\r
-            jPanelFvImageN.add(getJCheckBox1(), null);\r
-            jPanelFvImageN.add(jLabel, null);\r
-            jPanelFvImageN.add(getJTextField(), null);\r
-            jPanelFvImageN.add(jLabel1, null);\r
-            jPanelFvImageN.add(getJTextField1(), null);\r
-            jPanelFvImageN.add(getJScrollPane1(), null);\r
-            jPanelFvImageN.add(getJPanel4(), null);\r
+            jPanelFvImageN.add(getJCheckBoxFvProperty(), null);\r
+            jPanelFvImageN.add(jLabelFvPropName, null);\r
+            jPanelFvImageN.add(getJTextFieldFvPropName(), null);\r
+            jPanelFvImageN.add(jLabelFvPropValue, null);\r
+            jPanelFvImageN.add(getJTextFieldFvPropValue(), null);\r
+            jPanelFvImageN.add(getJScrollPaneFvProp(), null);\r
+            jPanelFvImageN.add(getJPanelFvPropButtonGroup(), null);\r
         }\r
         return jPanelFvImageN;\r
     }\r
 \r
-\r
-    /**\r
-     * This method initializes jPanelFvImageW  \r
-     *         \r
-     * @return javax.swing.JPanel      \r
-     */\r
-    private JPanel getJPanelFvImageW() {\r
-        if (jPanelFvImageW == null) {\r
-            jPanelFvImageW = new JPanel();\r
-            jPanelFvImageW.setPreferredSize(new java.awt.Dimension(10,2));\r
-        }\r
-        return jPanelFvImageW;\r
-    }\r
-\r
-\r
     /**\r
      * This method initializes jPanelFvImageS  \r
      *         \r
@@ -334,9 +302,9 @@ public class FpdFlash extends IInternalFrame {
             GridLayout gridLayout2 = new GridLayout();\r
             gridLayout2.setRows(1);\r
             jPanelFvImageS = new JPanel();\r
-            jPanelFvImageS.setPreferredSize(new java.awt.Dimension(480,200));\r
+            jPanelFvImageS.setPreferredSize(new java.awt.Dimension(480,190));\r
             jPanelFvImageS.setLayout(gridLayout2);\r
-            jPanelFvImageS.add(getJScrollPane3(), null);\r
+            jPanelFvImageS.add(getJScrollPaneFvInfo(), null);\r
         }\r
         return jPanelFvImageS;\r
     }\r
@@ -347,30 +315,30 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox1() {\r
-        if (jCheckBox1 == null) {\r
-            jCheckBox1 = new JCheckBox();\r
-            jCheckBox1.setText("FV Properties");\r
-            jCheckBox1.addItemListener(new ItemListener(){\r
+    private JCheckBox getJCheckBoxFvProperty() {\r
+        if (jCheckBoxFvProperty == null) {\r
+            jCheckBoxFvProperty = new JCheckBox();\r
+            jCheckBoxFvProperty.setText("Global FV Variables");\r
+            jCheckBoxFvProperty.addItemListener(new ItemListener(){\r
 \r
                 public void itemStateChanged(ItemEvent arg0) {\r
                     // TODO Auto-generated method stub\r
-                    boolean seleted = jCheckBox1.isSelected();\r
+                    boolean seleted = jCheckBoxFvProperty.isSelected();\r
                     \r
-                        jLabel.setEnabled(seleted);\r
-                        jTextField.setEnabled(seleted);\r
-                        jLabel1.setEnabled(seleted);\r
-                        jTextField1.setEnabled(seleted);\r
-                        jTable.setEnabled(seleted);\r
-                        jButton.setEnabled(seleted);\r
-                        jButton1.setEnabled(seleted);\r
+                        jLabelFvPropName.setEnabled(seleted);\r
+                        jTextFieldFvPropName.setEnabled(seleted);\r
+                        jLabelFvPropValue.setEnabled(seleted);\r
+                        jTextFieldFvPropValue.setEnabled(seleted);\r
+                        jTableFvProp.setEnabled(seleted);\r
+                        jButtonFvPropAdd.setEnabled(seleted);\r
+                        jButtonFvPropDel.setEnabled(seleted);\r
                     \r
                    \r
                 }\r
                 \r
             });\r
         }\r
-        return jCheckBox1;\r
+        return jCheckBoxFvProperty;\r
     }\r
 \r
 \r
@@ -379,13 +347,13 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField() {\r
-        if (jTextField == null) {\r
-            jTextField = new JTextField();\r
-            jTextField.setPreferredSize(new java.awt.Dimension(100,20));\r
-            jTextField.setEnabled(false);\r
+    private JTextField getJTextFieldFvPropName() {\r
+        if (jTextFieldFvPropName == null) {\r
+            jTextFieldFvPropName = new JTextField();\r
+            jTextFieldFvPropName.setPreferredSize(new java.awt.Dimension(100,20));\r
+            jTextFieldFvPropName.setEnabled(false);\r
         }\r
-        return jTextField;\r
+        return jTextFieldFvPropName;\r
     }\r
 \r
 \r
@@ -394,13 +362,13 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField1() {\r
-        if (jTextField1 == null) {\r
-            jTextField1 = new JTextField();\r
-            jTextField1.setPreferredSize(new java.awt.Dimension(100,20));\r
-            jTextField1.setEnabled(false);\r
+    private JTextField getJTextFieldFvPropValue() {\r
+        if (jTextFieldFvPropValue == null) {\r
+            jTextFieldFvPropValue = new JTextField();\r
+            jTextFieldFvPropValue.setPreferredSize(new java.awt.Dimension(100,20));\r
+            jTextFieldFvPropValue.setEnabled(false);\r
         }\r
-        return jTextField1;\r
+        return jTextFieldFvPropValue;\r
     }\r
 \r
 \r
@@ -409,23 +377,29 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton() {\r
-        if (jButton == null) {\r
-            jButton = new JButton();\r
-            jButton.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButton.setEnabled(false);\r
-            jButton.setText("Add");\r
-            jButton.addActionListener(new AbstractAction() {\r
+    private JButton getJButtonFvPropAdd() {\r
+        if (jButtonFvPropAdd == null) {\r
+            jButtonFvPropAdd = new JButton();\r
+            jButtonFvPropAdd.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonFvPropAdd.setEnabled(false);\r
+            jButtonFvPropAdd.setText("Add");\r
+            jButtonFvPropAdd.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(ActionEvent e) {\r
-                    if (jTextField.getText().length() > 0 && jTextField1.getText().length() > 0){\r
-                        String[] row = {jTextField.getText(), jTextField1.getText()};                        \r
+                    if (jTextFieldFvPropName.getText().length() > 0 && jTextFieldFvPropValue.getText().length() > 0){\r
+                        String[] row = {jTextFieldFvPropName.getText(), jTextFieldFvPropValue.getText()};                        \r
                         fvPropertyTableModel.addRow(row);\r
+                        docConsole.setSaved(false);\r
                         ffc.genFvImagesNameValue(row[0], row[1]);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jButton;\r
+        return jButtonFvPropAdd;\r
     }\r
 \r
 \r
@@ -434,13 +408,13 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane1() {\r
-        if (jScrollPane1 == null) {\r
-            jScrollPane1 = new JScrollPane();\r
-            jScrollPane1.setPreferredSize(new java.awt.Dimension(350,55));\r
-            jScrollPane1.setViewportView(getJTable());\r
+    private JScrollPane getJScrollPaneFvProp() {\r
+        if (jScrollPaneFvProp == null) {\r
+            jScrollPaneFvProp = new JScrollPane();\r
+            jScrollPaneFvProp.setPreferredSize(new java.awt.Dimension(350,55));\r
+            jScrollPaneFvProp.setViewportView(getJTableFvProp());\r
         }\r
-        return jScrollPane1;\r
+        return jScrollPaneFvProp;\r
     }\r
 \r
 \r
@@ -449,17 +423,17 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable() {\r
-        if (jTable == null) {\r
+    private JTable getJTableFvProp() {\r
+        if (jTableFvProp == null) {\r
             fvPropertyTableModel = new DefaultTableModel();\r
-            jTable = new JTable(fvPropertyTableModel);\r
+            jTableFvProp = new JTable(fvPropertyTableModel);\r
             fvPropertyTableModel.addColumn("Name");\r
             fvPropertyTableModel.addColumn("Value");\r
-            jTable.setRowHeight(20);\r
-            jTable.setEnabled(false);\r
+            jTableFvProp.setRowHeight(20);\r
+            jTableFvProp.setEnabled(false);\r
             \r
-            jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+            jTableFvProp.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableFvProp.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
                 public void valueChanged(ListSelectionEvent e) {\r
                     if (e.getValueIsAdjusting()){\r
                         return;\r
@@ -474,7 +448,7 @@ public class FpdFlash extends IInternalFrame {
                 }\r
             });\r
             \r
-            jTable.getModel().addTableModelListener(new TableModelListener(){\r
+            jTableFvProp.getModel().addTableModelListener(new TableModelListener(){\r
                 public void tableChanged(TableModelEvent arg0) {\r
                     // TODO Auto-generated method stub\r
                     int row = arg0.getFirstRow();\r
@@ -483,13 +457,13 @@ public class FpdFlash extends IInternalFrame {
                         \r
                         String name = m.getValueAt(row, 0) + "";\r
                         String value = m.getValueAt(row, 1) + "";\r
-\r
+                        docConsole.setSaved(false);\r
                         ffc.updateFvImagesNameValue(row, name, value);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jTable;\r
+        return jTableFvProp;\r
     }\r
 \r
 \r
@@ -498,15 +472,15 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel4() {\r
-        if (jPanel4 == null) {\r
-            jPanel4 = new JPanel();\r
-            jPanel4.setPreferredSize(new java.awt.Dimension(80,55));\r
+    private JPanel getJPanelFvPropButtonGroup() {\r
+        if (jPanelFvPropButtonGroup == null) {\r
+            jPanelFvPropButtonGroup = new JPanel();\r
+            jPanelFvPropButtonGroup.setPreferredSize(new java.awt.Dimension(80,55));\r
             \r
-            jPanel4.add(getJButton(), null);\r
-            jPanel4.add(getJButton1(), null);\r
+            jPanelFvPropButtonGroup.add(getJButtonFvPropAdd(), null);\r
+            jPanelFvPropButtonGroup.add(getJButtonFvPropDel(), null);\r
         }\r
-        return jPanel4;\r
+        return jPanelFvPropButtonGroup;\r
     }\r
 \r
 \r
@@ -515,22 +489,28 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton1() {\r
-        if (jButton1 == null) {\r
-            jButton1 = new JButton();\r
-            jButton1.setPreferredSize(new java.awt.Dimension(80,20));\r
-            jButton1.setEnabled(false);\r
-            jButton1.setText("Delete");\r
-            jButton1.addActionListener(new AbstractAction() {\r
+    private JButton getJButtonFvPropDel() {\r
+        if (jButtonFvPropDel == null) {\r
+            jButtonFvPropDel = new JButton();\r
+            jButtonFvPropDel.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonFvPropDel.setEnabled(false);\r
+            jButtonFvPropDel.setText("Delete");\r
+            jButtonFvPropDel.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(ActionEvent e) {\r
-                    if (jTable.getSelectedRow() >= 0){\r
-                        fvPropertyTableModel.removeRow(jTable.getSelectedRow());\r
-                        ffc.removeFvImagesNameValue(jTable.getSelectedRow());\r
+                    if (jTableFvProp.getSelectedRow() >= 0){\r
+                        fvPropertyTableModel.removeRow(jTableFvProp.getSelectedRow());\r
+                        docConsole.setSaved(false);\r
+                        ffc.removeFvImagesNameValue(jTableFvProp.getSelectedRow());\r
                     }\r
                 }\r
             });\r
         }\r
-        return jButton1;\r
+        return jButtonFvPropDel;\r
     }\r
 \r
 \r
@@ -541,26 +521,26 @@ public class FpdFlash extends IInternalFrame {
      */\r
     private JPanel getJPanelFvImageC() {\r
         if (jPanelFvImageC == null) {\r
-            jLabel4 = new JLabel();\r
-            jLabel4.setPreferredSize(new Dimension(38, 20));\r
-            jLabel4.setEnabled(false);\r
-            jLabel4.setText("Name");\r
-            jLabel3 = new JLabel();\r
-            jLabel3.setText("FV Image Names");\r
-            jLabel3.setEnabled(false);\r
-            jLabel3.setPreferredSize(new java.awt.Dimension(150,20));\r
-            jLabel2 = new JLabel();\r
-            jLabel2.setText("Type");\r
-            jLabel2.setEnabled(false);\r
-            jLabel2.setPreferredSize(new java.awt.Dimension(70,20));\r
+            jLabelFvParaName = new JLabel();\r
+            jLabelFvParaName.setPreferredSize(new Dimension(38, 20));\r
+            jLabelFvParaName.setEnabled(false);\r
+            jLabelFvParaName.setText("Name");\r
+            jLabelFvImageNames = new JLabel();\r
+            jLabelFvImageNames.setText("FV Image Names");\r
+            jLabelFvImageNames.setEnabled(false);\r
+            jLabelFvImageNames.setPreferredSize(new java.awt.Dimension(150,20));\r
+            jLabelFvParaType = new JLabel();\r
+            jLabelFvParaType.setText("Type");\r
+            jLabelFvParaType.setEnabled(false);\r
+            jLabelFvParaType.setPreferredSize(new java.awt.Dimension(70,20));\r
             FlowLayout flowLayout3 = new FlowLayout();\r
             flowLayout3.setAlignment(java.awt.FlowLayout.LEFT);\r
             flowLayout3.setHgap(5);\r
             jPanelFvImageC = new JPanel();\r
             jPanelFvImageC.setLayout(flowLayout3);\r
-            jPanelFvImageC.add(getJPanel6(), null);\r
+            jPanelFvImageC.add(getJPanelFvImagePara(), null);\r
             \r
-            jPanelFvImageC.add(getJPanel5(), null);\r
+            jPanelFvImageC.add(getJPanelFvImageOpts(), null);\r
             \r
         }\r
         return jPanelFvImageC;\r
@@ -572,33 +552,33 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox2() {\r
-        if (jCheckBox2 == null) {\r
-            jCheckBox2 = new JCheckBox();\r
-            jCheckBox2.setText("FV Image Parameters");\r
-            jCheckBox2.setPreferredSize(new java.awt.Dimension(200,20));\r
-            jCheckBox2.addItemListener(new ItemListener(){\r
+    private JCheckBox getJCheckBoxFvImagePara() {\r
+        if (jCheckBoxFvImagePara == null) {\r
+            jCheckBoxFvImagePara = new JCheckBox();\r
+            jCheckBoxFvImagePara.setText("FV Image Parameters");\r
+            jCheckBoxFvImagePara.setPreferredSize(new java.awt.Dimension(200,20));\r
+            jCheckBoxFvImagePara.addItemListener(new ItemListener(){\r
 \r
                 public void itemStateChanged(ItemEvent arg0) {\r
                     // TODO Auto-generated method stub\r
-                    boolean seleted = jCheckBox2.isSelected();\r
+                    boolean seleted = jCheckBoxFvImagePara.isSelected();\r
                     \r
-                        jLabel2.setEnabled(seleted);\r
-                        jLabel3.setEnabled(seleted);\r
-                        jLabel4.setEnabled(seleted);\r
-                        jComboBox.setEnabled(seleted);\r
-                        jTextField2.setEnabled(seleted);\r
+                        jLabelFvParaType.setEnabled(seleted);\r
+                        jLabelFvImageNames.setEnabled(seleted);\r
+                        jLabelFvParaName.setEnabled(seleted);\r
+                        jComboBoxFvParaType.setEnabled(seleted);\r
+                        jTextFieldFvParaName.setEnabled(seleted);\r
                         \r
-                        jTable1.setEnabled(seleted);\r
-                        jButton2.setEnabled(seleted);\r
-                        jButton3.setEnabled(seleted);\r
+                        jTableFvImageNames.setEnabled(seleted);\r
+                        jButtonFvParaAdd.setEnabled(seleted);\r
+                        jButtonFvParaDel.setEnabled(seleted);\r
                     \r
                    \r
                 }\r
                 \r
             });\r
         }\r
-        return jCheckBox2;\r
+        return jCheckBoxFvImagePara;\r
     }\r
 \r
 \r
@@ -607,16 +587,16 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JComboBox   \r
      */\r
-    private JComboBox getJComboBox() {\r
-        if (jComboBox == null) {\r
-            jComboBox = new JComboBox();\r
-            jComboBox.addItem("ImageName");\r
-            jComboBox.addItem("Attributes");\r
-            jComboBox.addItem("Options");\r
-            jComboBox.addItem("Components");\r
-            jComboBox.setPreferredSize(new java.awt.Dimension(180,20));\r
-            jComboBox.setEnabled(false);\r
-            jComboBox.addItemListener(new ItemListener() {\r
+    private JComboBox getJComboBoxFvParaType() {\r
+        if (jComboBoxFvParaType == null) {\r
+            jComboBoxFvParaType = new JComboBox();\r
+            jComboBoxFvParaType.addItem("ImageName");\r
+            jComboBoxFvParaType.addItem("Attributes");\r
+            jComboBoxFvParaType.addItem("Options");\r
+            jComboBoxFvParaType.addItem("Components");\r
+            jComboBoxFvParaType.setPreferredSize(new java.awt.Dimension(180,20));\r
+            jComboBoxFvParaType.setEnabled(false);\r
+            jComboBoxFvParaType.addItemListener(new ItemListener() {\r
 \r
                 public void itemStateChanged(ItemEvent arg0) {\r
                     // TODO disable attribute settings when ValidImageNames selected.\r
@@ -625,7 +605,7 @@ public class FpdFlash extends IInternalFrame {
                 \r
             });\r
         }\r
-        return jComboBox;\r
+        return jComboBoxFvParaType;\r
     }\r
 \r
 \r
@@ -634,13 +614,13 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JTextField  \r
      */\r
-    private JTextField getJTextField2() {\r
-        if (jTextField2 == null) {\r
-            jTextField2 = new JTextField();\r
-            jTextField2.setPreferredSize(new java.awt.Dimension(140,20));\r
-            jTextField2.setEnabled(false);\r
+    private JTextField getJTextFieldFvParaName() {\r
+        if (jTextFieldFvParaName == null) {\r
+            jTextFieldFvParaName = new JTextField();\r
+            jTextFieldFvParaName.setPreferredSize(new java.awt.Dimension(140,20));\r
+            jTextFieldFvParaName.setEnabled(false);\r
         }\r
-        return jTextField2;\r
+        return jTextFieldFvParaName;\r
     }\r
 \r
 \r
@@ -649,22 +629,27 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton2() {\r
-        if (jButton2 == null) {\r
-            jButton2 = new JButton();\r
-            jButton2.setPreferredSize(new Dimension(80, 20));\r
-            jButton2.setEnabled(false);\r
-            jButton2.setText("Add");\r
-            jButton2.addActionListener(new AbstractAction() {\r
+    private JButton getJButtonFvParaAdd() {\r
+        if (jButtonFvParaAdd == null) {\r
+            jButtonFvParaAdd = new JButton();\r
+            jButtonFvParaAdd.setPreferredSize(new Dimension(80, 20));\r
+            jButtonFvParaAdd.setEnabled(false);\r
+            jButtonFvParaAdd.setText("Add");\r
+            jButtonFvParaAdd.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTextField2.getText().length() > 0){\r
-                        String[] row = {jTextField2.getText()};                        \r
+                    if (jTextFieldFvParaName.getText().length() > 0){\r
+                        String[] row = {jTextFieldFvParaName.getText()};                        \r
                         fvImageNameTableModel.addRow(row);\r
                     }\r
                 }\r
             });\r
         }\r
-        return jButton2;\r
+        return jButtonFvParaAdd;\r
     }\r
 \r
 \r
@@ -673,13 +658,13 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane2() {\r
-        if (jScrollPane2 == null) {\r
-            jScrollPane2 = new JScrollPane();\r
-            jScrollPane2.setPreferredSize(new java.awt.Dimension(350,50));\r
-            jScrollPane2.setViewportView(getJTable1());\r
+    private JScrollPane getJScrollPaneFvImageNames() {\r
+        if (jScrollPaneFvImageNames == null) {\r
+            jScrollPaneFvImageNames = new JScrollPane();\r
+            jScrollPaneFvImageNames.setPreferredSize(new java.awt.Dimension(350,50));\r
+            jScrollPaneFvImageNames.setViewportView(getJTableFvImageNames());\r
         }\r
-        return jScrollPane2;\r
+        return jScrollPaneFvImageNames;\r
     }\r
 \r
 \r
@@ -688,14 +673,14 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable1() {\r
-        if (jTable1 == null) {\r
+    private JTable getJTableFvImageNames() {\r
+        if (jTableFvImageNames == null) {\r
             fvImageNameTableModel = new DefaultTableModel();\r
-            jTable1 = new JTable(fvImageNameTableModel);\r
-            jTable1.setEnabled(false);\r
+            jTableFvImageNames = new JTable(fvImageNameTableModel);\r
+            jTableFvImageNames.setEnabled(false);\r
             fvImageNameTableModel.addColumn("FV Image Name");\r
         }\r
-        return jTable1;\r
+        return jTableFvImageNames;\r
     }\r
 \r
 \r
@@ -704,66 +689,68 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton3() {\r
-        if (jButton3 == null) {\r
-            jButton3 = new JButton();\r
-            jButton3.setPreferredSize(new Dimension(80, 20));\r
-            jButton3.setEnabled(false);\r
-            jButton3.setText("Delete");\r
-            jButton3.addActionListener(new AbstractAction() {\r
+    private JButton getJButtonFvParaDel() {\r
+        if (jButtonFvParaDel == null) {\r
+            jButtonFvParaDel = new JButton();\r
+            jButtonFvParaDel.setPreferredSize(new Dimension(80, 20));\r
+            jButtonFvParaDel.setEnabled(false);\r
+            jButtonFvParaDel.setText("Delete");\r
+            jButtonFvParaDel.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTable1.getSelectedRow() >= 0){\r
+                    if (jTableFvImageNames.getSelectedRow() >= 0){\r
                                    \r
-                        fvImageNameTableModel.removeRow(jTable1.getSelectedRow());\r
+                        fvImageNameTableModel.removeRow(jTableFvImageNames.getSelectedRow());\r
                     }\r
                 }\r
             });\r
         }\r
-        return jButton3;\r
+        return jButtonFvParaDel;\r
     }\r
 \r
 \r
 \r
                        \r
-  private JPanel getJPanel5() {\r
+  private JPanel getJPanelFvImageOpts() {\r
                                \r
 \r
- if (jPanel5 == null) {\r
+ if (jPanelFvImageOpts == null) {\r
      //ToDo add ButtonGroup for RadioButtons\r
-            jPanel5 = new JPanel();\r
-            jPanel5.setPreferredSize(new java.awt.Dimension(480,120));\r
+            jLabelFvImageOptValue = new JLabel();\r
+            jLabelFvImageOptValue.setEnabled(true);\r
+            jLabelFvImageOptValue.setText("Value");\r
+            jLabelFvImageOptValue.setPreferredSize(new Dimension(38, 20));\r
+            jLabelFvImageOptName = new JLabel();\r
+            jLabelFvImageOptName.setEnabled(true);\r
+            jLabelFvImageOptName.setText("Name");\r
+            jLabelFvImageOptName.setPreferredSize(new Dimension(38, 20));\r
+            jPanelFvImageOpts = new JPanel();\r
+            jPanelFvImageOpts.setPreferredSize(new java.awt.Dimension(480,150));\r
             \r
-            GridLayout gridLayout = new GridLayout();\r
-            gridLayout.setRows(5);\r
-            gridLayout.setColumns(3);\r
-            jPanel5.setLayout(gridLayout);\r
-            jPanel5.add(getJCheckBox3(), null);\r
+            jPanelFvImageOpts.setLayout(new FlowLayout());\r
             \r
-            jLabel5 = new JLabel();\r
-            jLabel5.setText("EFI_ERASE_POLARITY");\r
-            jLabel5.setEnabled(false);\r
-                       jPanel5.add(jLabel5, null);\r
-                       jPanel5.add(getJComboBox1(), null);\r
-                       jPanel5.add(getJCheckBox4(), null);\r
-                       jPanel5.add(getJCheckBox5(), null);\r
-                       jPanel5.add(getJCheckBox6(), null);\r
-                       jPanel5.add(getJCheckBox7(), null);\r
-                       jPanel5.add(getJCheckBox8(), null);\r
-                       jPanel5.add(getJCheckBox9(), null);\r
-                       jPanel5.add(getJCheckBox10(), null);\r
-                       jPanel5.add(getJCheckBox11(), null);\r
-                       jPanel5.add(getJCheckBox12(), null);\r
-                       jPanel5.add(getJCheckBox13(), null);\r
-            jPanel5.add(getJButton4(), null);\r
-                       jPanel5.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.LOWERED));\r
-                       jPanel5.add(getJButton6(), null);\r
+                       jPanelFvImageOpts.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.LOWERED));\r
+                       jPanelFvImageOpts.add(getJCheckBoxFvImageOpts(), null);\r
+                       jPanelFvImageOpts.add(jLabelFvImageOptName, null);\r
+                       jPanelFvImageOpts.add(getJTextFieldFvImageOptName(), null);\r
+                       jPanelFvImageOpts.add(jLabelFvImageOptValue, null);\r
+                       jPanelFvImageOpts.add(getJTextFieldFvImageOptValue(), null);\r
+                       jPanelFvImageOpts.add(getJScrollPane(), null);\r
+                       jPanelFvImageOpts.add(getJPanelFvImageOptsButtonGroup(), null);\r
+                       jPanelFvImageOpts.add(getJButtonAddFvImage(), null);\r
+                       jPanelFvImageOpts.add(getJButtonDelFvImage(), null);\r
+                       jPanelFvImageOpts.add(getJButtonUpdateFvImage(), null);\r
             \r
             \r
                                \r
 \r
             \r
         }\r
-        return jPanel5;\r
+        return jPanelFvImageOpts;\r
     }\r
 \r
 \r
@@ -772,49 +759,53 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton4() {\r
-        if (jButton4 == null) {\r
-            jButton4 = new JButton();\r
-            jButton4.setPreferredSize(new java.awt.Dimension(80,20));\r
+    private JButton getJButtonAddFvImage() {\r
+        if (jButtonAddFvImage == null) {\r
+            jButtonAddFvImage = new JButton();\r
+            jButtonAddFvImage.setPreferredSize(new java.awt.Dimension(120,20));\r
 //            jButton4.setEnabled(false);\r
-            jButton4.setText("Add FV Image");\r
-            jButton4.addActionListener(new AbstractAction() {\r
+            jButtonAddFvImage.setText("Add FV Image");\r
+            jButtonAddFvImage.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    if (jTable1.getRowCount()== 0){\r
+                    if (jTableFvInfo.isEditing()) {\r
+                        jTableFvInfo.getCellEditor().stopCellEditing();\r
+                    }\r
+                    if (jTableFvImageOpts.isEditing()) {\r
+                        jTableFvImageOpts.getCellEditor().stopCellEditing();\r
+                    }\r
+                    if (jTableFvImageNames.getRowCount()== 0){\r
                         return;\r
                     }\r
                     String imageName = " ";\r
-                    for (int i = 0; i < jTable1.getRowCount(); ++i){\r
-                        imageName += (String)jTable1.getValueAt(i, 0);\r
+                    for (int i = 0; i < jTableFvImageNames.getRowCount(); ++i){\r
+                        imageName += (String)jTableFvImageNames.getValueAt(i, 0);\r
                         imageName += " ";\r
                     }\r
                     imageName = imageName.trim();\r
                     \r
-                    if (!jCheckBox3.isSelected() && jComboBox.getSelectedIndex() != 0){\r
+                    if (!jCheckBoxFvImageOpts.isSelected() && jComboBoxFvParaType.getSelectedIndex() != 0){\r
                         return;\r
                       \r
                     }\r
                     \r
-                    LinkedHashMap<String, String> m = new LinkedHashMap<String, String>();\r
-                    boolean[] boolArray = {jComboBox1.getSelectedIndex()==0 ? true: false, jCheckBox6.isSelected(), jCheckBox9.isSelected(),\r
-                                                                            jCheckBox11.isSelected(), jCheckBox12.isSelected(),\r
-                                                                            jCheckBox13.isSelected(),jCheckBox4.isSelected(),\r
-                                                                            jCheckBox5.isSelected(), jCheckBox7.isSelected(),\r
-                                                                            jCheckBox8.isSelected(),jCheckBox10.isSelected()};\r
-                    booleanToNameValue(boolArray, m);\r
-                    ffc.genFvImagesFvImage(imageName.split(" "), jComboBox.getSelectedItem()+"", m);\r
-                    \r
-                    Object[] o = {imageName, jComboBox.getSelectedItem(), jComboBox1.getSelectedIndex()==0 ? true: false, \r
-                                  jCheckBox6.isSelected(), jCheckBox9.isSelected(),\r
-                                  jCheckBox11.isSelected(), jCheckBox12.isSelected(),\r
-                                  jCheckBox13.isSelected(),jCheckBox4.isSelected(),\r
-                                  jCheckBox5.isSelected(), jCheckBox7.isSelected(),\r
-                                  jCheckBox8.isSelected(),jCheckBox10.isSelected()};\r
-                   fvImageParaTableModel.addRow(o); \r
+                    LinkedHashMap<String, String> m = null;\r
+                    if (jCheckBoxFvImageOpts.isSelected()) {\r
+                        m = new LinkedHashMap<String, String>();\r
+                        getOptionNameValue(m);\r
+                    }\r
+                    ffc.genFvImagesFvImage(imageName.split(" "), jComboBoxFvParaType.getSelectedItem()+"", m);\r
+                    docConsole.setSaved(false);\r
+                    Object[] row = {imageName, jComboBoxFvParaType.getSelectedItem()};\r
+                    fvImageParaTableModel.addRow(row); \r
                 }\r
             });\r
         }\r
-        return jButton4;\r
+        return jButtonAddFvImage;\r
     }\r
 \r
 \r
@@ -823,13 +814,13 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JScrollPane \r
      */\r
-    private JScrollPane getJScrollPane3() {\r
-        if (jScrollPane3 == null) {\r
-            jScrollPane3 = new JScrollPane();\r
-            jScrollPane3.setPreferredSize(new java.awt.Dimension(480,150));\r
-            jScrollPane3.setViewportView(getJTable2());\r
+    private JScrollPane getJScrollPaneFvInfo() {\r
+        if (jScrollPaneFvInfo == null) {\r
+            jScrollPaneFvInfo = new JScrollPane();\r
+            jScrollPaneFvInfo.setPreferredSize(new java.awt.Dimension(480,150));\r
+            jScrollPaneFvInfo.setViewportView(getJTableFvInfo());\r
         }\r
-        return jScrollPane3;\r
+        return jScrollPaneFvInfo;\r
     }\r
 \r
 \r
@@ -838,40 +829,24 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JTable      \r
      */\r
-    private JTable getJTable2() {\r
-        if (jTable2 == null) {\r
+    private JTable getJTableFvInfo() {\r
+        if (jTableFvInfo == null) {\r
             fvImageParaTableModel = new ImageParaTableModel();\r
-            jTable2 = new JTable(fvImageParaTableModel);\r
-            jTable2.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);\r
+            jTableFvInfo = new JTable(fvImageParaTableModel);\r
             fvImageParaTableModel.addColumn("FvImageNames");\r
             fvImageParaTableModel.addColumn("Type");\r
-            fvImageParaTableModel.addColumn("ErasePolarity");\r
-            fvImageParaTableModel.addColumn("ReadStatus");\r
-            fvImageParaTableModel.addColumn("WriteStatus");\r
-            fvImageParaTableModel.addColumn("LockStatus");\r
-            fvImageParaTableModel.addColumn("MemoryMapped");\r
-            fvImageParaTableModel.addColumn("StickyWrite");\r
-            fvImageParaTableModel.addColumn("ReadDisableCap");\r
-            fvImageParaTableModel.addColumn("ReadEnableCap");\r
-            fvImageParaTableModel.addColumn("WriteDisableCap");\r
-            fvImageParaTableModel.addColumn("WriteEnableCap");\r
-            fvImageParaTableModel.addColumn("LockCap");\r
             \r
-            TableColumn typeCol = jTable2.getColumnModel().getColumn(1);\r
+            \r
+            TableColumn typeCol = jTableFvInfo.getColumnModel().getColumn(1);\r
             JComboBox cb = new JComboBox();\r
-            cb.addItem("ValidImageNames");\r
+            cb.addItem("ImageName");\r
             cb.addItem("Attributes");\r
             cb.addItem("Options");\r
             cb.addItem("Components");\r
             typeCol.setCellEditor(new DefaultCellEditor(cb));\r
             \r
-//            TableColumn epCol = jTable2.getColumnModel().getColumn(2);\r
-//            JComboBox cb1 = new JComboBox();\r
-//            cb1.addItem("1");\r
-//            cb1.addItem("0");\r
-//            epCol.setCellEditor(new DefaultCellEditor(cb1));\r
-            jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
-            jTable2.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
+            jTableFvInfo.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableFvInfo.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
                 public void valueChanged(ListSelectionEvent e) {\r
                     if (e.getValueIsAdjusting()){\r
                         return;\r
@@ -881,33 +856,37 @@ public class FpdFlash extends IInternalFrame {
                         return;\r
                     }\r
                     else{\r
-//                        selectedRow = lsm.getMinSelectionIndex();\r
-                    }\r
-                }\r
-            });\r
-            \r
-            jTable2.getModel().addTableModelListener(new TableModelListener(){\r
-                public void tableChanged(TableModelEvent arg0) {\r
-                    // TODO Auto-generated method stub\r
-                    int row = arg0.getFirstRow();\r
-                    TableModel m = (TableModel)arg0.getSource();\r
-                    if (arg0.getType() == TableModelEvent.UPDATE){\r
-                        //ToDo Check data validity before update\r
-                        String name = m.getValueAt(row, 0) + "";\r
-                        String type = m.getValueAt(row, 1) + "";\r
-                        boolean[] boolArray = new boolean[11];\r
-                        for (int i = 2; i < 13; ++i) {\r
-                            boolArray[i-2] = (Boolean)m.getValueAt(row, i);\r
+                        int selectedRow = lsm.getMinSelectionIndex();\r
+                        if (fvImageParaTableModel.getValueAt(selectedRow, 1).equals("ImageName")) {\r
+                            String[] fvNames = fvImageParaTableModel.getValueAt(selectedRow, 0).toString().split(" ");\r
+                            for (int i = 0; i < fvNames.length; ++i) {\r
+                                String[] row = {fvNames[i]};\r
+                                fvImageNameTableModel.addRow(row);\r
+                            }\r
+                            return;\r
                         }\r
-                        LinkedHashMap<String, String> lhm = new LinkedHashMap<String, String>();\r
-                        booleanToNameValue(boolArray, lhm);\r
-\r
-                        ffc.updateFvImagesFvImage(row, name.split(" "), type, lhm);\r
+                        LinkedHashMap<String, String> optionMap = new LinkedHashMap<String, String>();\r
+                        ffc.getFvImagesFvImageOptions(selectedRow, optionMap);\r
+                        if (optionMap.size() > 0){\r
+                            fvOptionTableModel.setRowCount(0);\r
+                            Set<String> key = optionMap.keySet();\r
+                            Iterator<String> i = key.iterator();\r
+                            while (i.hasNext()) {\r
+                                \r
+                                String k = (String)i.next();\r
+                                String[] row = {k, optionMap.get(k)};\r
+                                \r
+                                fvOptionTableModel.addRow(row);\r
+                            }\r
+                        }\r
+                        \r
                     }\r
                 }\r
             });\r
+            \r
+            \r
         }\r
-        return jTable2;\r
+        return jTableFvInfo;\r
     }\r
 \r
 \r
@@ -916,25 +895,30 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton6() {\r
-        if (jButton6 == null) {\r
-            jButton6 = new JButton();\r
-            jButton6.setPreferredSize(new java.awt.Dimension(150,20));\r
+    private JButton getJButtonDelFvImage() {\r
+        if (jButtonDelFvImage == null) {\r
+            jButtonDelFvImage = new JButton();\r
+            jButtonDelFvImage.setPreferredSize(new java.awt.Dimension(120,20));\r
 //            jButton6.setEnabled(false);\r
-            jButton6.setText("Delete Row");\r
-            jButton6.addActionListener(new AbstractAction() {\r
+            jButtonDelFvImage.setText("Delete Row");\r
+            jButtonDelFvImage.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
 \r
                 public void actionPerformed(ActionEvent arg0) {\r
                     // TODO Auto-generated method stub\r
-                    if (jTable2.getSelectedRow() >= 0 ) {\r
-                        fvImageParaTableModel.removeRow(jTable2.getSelectedRow());\r
-                        ffc.removeFvImagesFvImage(jTable2.getSelectedRow());\r
+                    if (jTableFvInfo.getSelectedRow() >= 0 ) {\r
+                        ffc.removeFvImagesFvImage(jTableFvInfo.getSelectedRow());\r
+                        fvImageParaTableModel.removeRow(jTableFvInfo.getSelectedRow());\r
+                        docConsole.setSaved(false);\r
                     }\r
                 }\r
                 \r
             });\r
         }\r
-        return jButton6;\r
+        return jButtonDelFvImage;\r
     }\r
 \r
 \r
@@ -943,339 +927,673 @@ public class FpdFlash extends IInternalFrame {
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox3() {\r
-        if (jCheckBox3 == null) {\r
-            jCheckBox3 = new JCheckBox();\r
-            jCheckBox3.setText("FV Image Options");\r
-            jCheckBox3.addItemListener(new ItemListener(){\r
+    private JCheckBox getJCheckBoxFvImageOpts() {\r
+        if (jCheckBoxFvImageOpts == null) {\r
+            jCheckBoxFvImageOpts = new JCheckBox();\r
+            jCheckBoxFvImageOpts.setText("FV Image Options");\r
+            jCheckBoxFvImageOpts.addItemListener(new ItemListener(){\r
 \r
                 public void itemStateChanged(ItemEvent arg0) {\r
                     // TODO Auto-generated method stub\r
-                    boolean seleted = jCheckBox3.isSelected();\r
+//                    boolean selected = jCheckBox3.isSelected();\r
                     \r
-                        if (!jCheckBox2.isSelected() || jComboBox.getSelectedIndex() == 0) {\r
+                        if (!jCheckBoxFvImagePara.isSelected() || jComboBoxFvParaType.getSelectedIndex() == 0) {\r
                             return;\r
                         }\r
                         \r
-                        jLabel5.setEnabled(seleted);\r
-                        jComboBox1.setEnabled(seleted);\r
-                        \r
-                        jCheckBox4.setEnabled(seleted);\r
-                        jCheckBox5.setEnabled(seleted);\r
-                        jCheckBox6.setEnabled(seleted);\r
-                        jCheckBox7.setEnabled(seleted);\r
-                        jCheckBox8.setEnabled(seleted);\r
-                        jCheckBox9.setEnabled(seleted);\r
-                        jCheckBox10.setEnabled(seleted);\r
-                        jCheckBox11.setEnabled(seleted);\r
-                        jCheckBox12.setEnabled(seleted);\r
-                        jCheckBox13.setEnabled(seleted);\r
-//                        jButton4.setEnabled(seleted);\r
-//                        jButton6.setEnabled(seleted);\r
                 }\r
                 \r
             });\r
         }\r
-        return jCheckBox3;\r
+        return jCheckBoxFvImageOpts;\r
     }\r
 \r
 \r
     /**\r
-     * This method initializes jComboBox1      \r
+     * This method initializes jPanel6 \r
      *         \r
-     * @return javax.swing.JComboBox   \r
+     * @return javax.swing.JPanel      \r
      */\r
-    private JComboBox getJComboBox1() {\r
-        if (jComboBox1 == null) {\r
-            jComboBox1 = new JComboBox();\r
-            jComboBox1.setPreferredSize(new java.awt.Dimension(20,20));\r
-            jComboBox1.setEnabled(false);\r
-            jComboBox1.addItem("1");\r
-            jComboBox1.addItem("0");\r
-            jComboBox1.setSelectedIndex(0);\r
-        }\r
-        return jComboBox1;\r
+    private JPanel getJPanelFvImagePara() {\r
+        if (jPanelFvImagePara == null) {\r
+            StarLabel starLabel = new StarLabel();\r
+            starLabel.setVisible(false);\r
+            jPanelFvImagePara = new JPanel();\r
+            jPanelFvImagePara.setPreferredSize(new java.awt.Dimension(480,120));\r
+            jPanelFvImagePara.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));\r
+            jPanelFvImagePara.add(getJCheckBoxFvImagePara(), null);\r
+            jPanelFvImagePara.add(jLabelFvParaType, null);\r
+            jPanelFvImagePara.add(getJComboBoxFvParaType(), null);\r
+            jPanelFvImagePara.add(new StarLabel(), null);\r
+            jPanelFvImagePara.add(jLabelFvImageNames, null);\r
+            jPanelFvImagePara.add(jLabelFvParaName, null);\r
+            jPanelFvImagePara.add(getJTextFieldFvParaName(), null);\r
+            jPanelFvImagePara.add(getJButtonFvParaAdd(), null);\r
+            jPanelFvImagePara.add(getJScrollPaneFvImageNames(), null);\r
+            jPanelFvImagePara.add(getJButtonFvParaDel(), null);\r
+        }\r
+        return jPanelFvImagePara;\r
     }\r
 \r
+    /**\r
+     * This method initializes jPanel7 \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelFdf() {\r
+        if (jPanelFdf == null) {\r
+            jPanelFdf = new JPanel();\r
+            jPanelFdf.setLayout(new BorderLayout());\r
+\r
+            jPanelFdf.add(getJPanelFdfN(), java.awt.BorderLayout.NORTH);\r
+            jPanelFdf.add(getJPanelFdfS(), java.awt.BorderLayout.SOUTH);\r
+            jPanelFdf.add(getJSplitPaneFdfC(), java.awt.BorderLayout.CENTER);\r
+//            jPanelFdf.addComponentListener(new ComponentAdapter(){\r
+//                public void componentShown(ComponentEvent e) {\r
+//                    if (ffc.getFlashDefinitionFile() != null) {\r
+//                        jTextFieldFdf.setText(ffc.getFlashDefinitionFile());\r
+//                    }\r
+//                }\r
+//                public void componentHidden(ComponentEvent e) {\r
+//                    if (jCheckBoxFdf.isSelected()) {\r
+//                        ffc.genFlashDefinitionFile(jTextFieldFdf.getText());\r
+//                    }\r
+//                }\r
+//            });\r
+        }\r
+        return jPanelFdf;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox4      \r
+     * This method initializes jCheckBox       \r
      *         \r
      * @return javax.swing.JCheckBox   \r
      */\r
-    private JCheckBox getJCheckBox4() {\r
-        if (jCheckBox4 == null) {\r
-            jCheckBox4 = new JCheckBox();\r
-            jCheckBox4.setText("Read Disable CAP");\r
-            jCheckBox4.setEnabled(false);\r
+    private JCheckBox getJCheckBoxFdf() {\r
+        if (jCheckBoxFdf == null) {\r
+            jCheckBoxFdf = new JCheckBox();\r
+            jCheckBoxFdf.setText("Flash Definition File");\r
+            jCheckBoxFdf.addItemListener(new ItemListener() {\r
+\r
+                public void itemStateChanged(ItemEvent arg0) {\r
+                    // TODO Auto-generated method stub\r
+                    if (jCheckBoxFdf.isSelected()){\r
+                        jTextFieldFdf.setEnabled(true);\r
+                        jButtonFdfBrowse.setEnabled(true);\r
+                    }\r
+                    else {\r
+                        \r
+                        jTextFieldFdf.setEnabled(false);\r
+                        jButtonFdfBrowse.setEnabled(false);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jCheckBox4;\r
+        return jCheckBoxFdf;\r
     }\r
 \r
+    /**\r
+     * This method initializes jTextField3     \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldFdf() {\r
+        if (jTextFieldFdf == null) {\r
+            jTextFieldFdf = new JTextField();\r
+            jTextFieldFdf.setEnabled(false);\r
+            jTextFieldFdf.setPreferredSize(new Dimension(300, 20));\r
+            jTextFieldFdf.addFocusListener(new java.awt.event.FocusAdapter() {\r
+                public void focusLost(java.awt.event.FocusEvent e) {\r
+                    ffc.genFlashDefinitionFile(jTextFieldFdf.getText());\r
+                }\r
+            });\r
+        }\r
+        return jTextFieldFdf;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox5      \r
+     * This method initializes jButton5        \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JButton     \r
      */\r
-    private JCheckBox getJCheckBox5() {\r
-        if (jCheckBox5 == null) {\r
-            jCheckBox5 = new JCheckBox();\r
-            jCheckBox5.setText("Read Enable CAP");\r
-            jCheckBox5.setEnabled(false);\r
+    private JButton getJButtonFdfBrowse() {\r
+        if (jButtonFdfBrowse == null) {\r
+            jButtonFdfBrowse = new JButton();\r
+            jButtonFdfBrowse.setEnabled(false);\r
+            jButtonFdfBrowse.setText("Browse");\r
+            jButtonFdfBrowse.setPreferredSize(new Dimension(78, 20));\r
+            jButtonFdfBrowse.addActionListener(new AbstractAction(){\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
+                public void actionPerformed(ActionEvent e) {\r
+                    // TODO Auto-generated method stub\r
+                    String wsDir = System.getenv("WORKSPACE");\r
+                    JFileChooser chooser = new JFileChooser(wsDir);\r
+                    chooser.setMultiSelectionEnabled(false);\r
+                    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
+                    int retval = chooser.showOpenDialog(frame);\r
+                    if (retval == JFileChooser.APPROVE_OPTION) {\r
+\r
+                        File theFile = chooser.getSelectedFile();\r
+                        String filePath = theFile.getPath();\r
+                        if (!filePath.startsWith(wsDir)) {\r
+                            JOptionPane.showMessageDialog(frame, "You can only select files in current WORKSPACE.");\r
+                            return;\r
+                        }\r
+                        jTextFieldFdf.setText(filePath.substring(wsDir.length() + 1).replace('\\', '/'));\r
+                        ffc.genFlashDefinitionFile(jTextFieldFdf.getText());\r
+                        docConsole.setSaved(false);\r
+                        Vector<FvInfoFromFdf> vFvInfo = new Vector<FvInfoFromFdf>();\r
+                        getFvInfoFromFdf(filePath, vFvInfo);\r
+                        getFvInFdfTableModel().setRowCount(0);\r
+                        for (int j = 0; j < vFvInfo.size(); ++j) {\r
+                            FvInfoFromFdf fvInfo = vFvInfo.get(j);\r
+                            String[] row = {fvInfo.getFvName(), fvInfo.getSize(), fvInfo.getEfiFileName()};\r
+                            getFvInFdfTableModel().addRow(row);\r
+                        }\r
+                    }\r
+                }\r
+                \r
+            });\r
         }\r
-        return jCheckBox5;\r
+        return jButtonFdfBrowse;\r
     }\r
 \r
+    /**\r
+     * This method initializes jTextField4     \r
+     *         \r
+     * @return javax.swing.JTextField  \r
+     */\r
+    private JTextField getJTextFieldFvImageOptName() {\r
+        if (jTextFieldFvImageOptName == null) {\r
+            jTextFieldFvImageOptName = new JTextField();\r
+            jTextFieldFvImageOptName.setEnabled(true);\r
+            jTextFieldFvImageOptName.setPreferredSize(new Dimension(100, 20));\r
+        }\r
+        return jTextFieldFvImageOptName;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox6      \r
+     * This method initializes jTextField5     \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JTextField  \r
      */\r
-    private JCheckBox getJCheckBox6() {\r
-        if (jCheckBox6 == null) {\r
-            jCheckBox6 = new JCheckBox();\r
-            jCheckBox6.setText("Read Status");\r
-            jCheckBox6.setEnabled(false);\r
+    private JTextField getJTextFieldFvImageOptValue() {\r
+        if (jTextFieldFvImageOptValue == null) {\r
+            jTextFieldFvImageOptValue = new JTextField();\r
+            jTextFieldFvImageOptValue.setEnabled(true);\r
+            jTextFieldFvImageOptValue.setPreferredSize(new Dimension(100, 20));\r
         }\r
-        return jCheckBox6;\r
+        return jTextFieldFvImageOptValue;\r
     }\r
 \r
+    /**\r
+     * This method initializes jPanel8 \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelFvImageOptsButtonGroup() {\r
+        if (jPanelFvImageOptsButtonGroup == null) {\r
+            jPanelFvImageOptsButtonGroup = new JPanel();\r
+            jPanelFvImageOptsButtonGroup.setPreferredSize(new Dimension(80, 55));\r
+            jPanelFvImageOptsButtonGroup.add(getJButtonFvImageOptAdd(), null);\r
+            jPanelFvImageOptsButtonGroup.add(getJButtonFvImageOptDel(), null);\r
+        }\r
+        return jPanelFvImageOptsButtonGroup;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox7      \r
+     * This method initializes jButton7        \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JButton     \r
      */\r
-    private JCheckBox getJCheckBox7() {\r
-        if (jCheckBox7 == null) {\r
-            jCheckBox7 = new JCheckBox();\r
-            jCheckBox7.setText("Write Disable CAP");\r
-            jCheckBox7.setEnabled(false);\r
+    private JButton getJButtonFvImageOptAdd() {\r
+        if (jButtonFvImageOptAdd == null) {\r
+            jButtonFvImageOptAdd = new JButton();\r
+            jButtonFvImageOptAdd.setEnabled(true);\r
+            jButtonFvImageOptAdd.setText("Add");\r
+            jButtonFvImageOptAdd.setPreferredSize(new Dimension(80, 20));\r
+            jButtonFvImageOptAdd.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
+                public void actionPerformed(ActionEvent e) {\r
+                    if (jTextFieldFvImageOptName.getText().length() > 0 && jTextFieldFvImageOptValue.getText().length() > 0){\r
+                        String[] row = {jTextFieldFvImageOptName.getText(), jTextFieldFvImageOptValue.getText()};                        \r
+                        fvOptionTableModel.addRow(row);\r
+                    }\r
+                }\r
+            });\r
         }\r
-        return jCheckBox7;\r
+        return jButtonFvImageOptAdd;\r
     }\r
 \r
+    /**\r
+     * This method initializes jButton8        \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButtonFvImageOptDel() {\r
+        if (jButtonFvImageOptDel == null) {\r
+            jButtonFvImageOptDel = new JButton();\r
+            jButtonFvImageOptDel.setEnabled(true);\r
+            jButtonFvImageOptDel.setText("Delete");\r
+            jButtonFvImageOptDel.setPreferredSize(new Dimension(80, 20));\r
+            jButtonFvImageOptDel.addActionListener(new AbstractAction() {\r
+                /**\r
+                 * \r
+                 */\r
+                private static final long serialVersionUID = 1L;\r
+\r
+                public void actionPerformed(ActionEvent e) {\r
+                    if (jTableFvImageOpts.getSelectedRow() >= 0){\r
+                        fvOptionTableModel.removeRow(jTableFvProp.getSelectedRow());\r
+                    }\r
+                }\r
+            });\r
+        }\r
+        return jButtonFvImageOptDel;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox8      \r
+     * This method initializes jScrollPane     \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JScrollPane \r
      */\r
-    private JCheckBox getJCheckBox8() {\r
-        if (jCheckBox8 == null) {\r
-            jCheckBox8 = new JCheckBox();\r
-            jCheckBox8.setText("Write Enable CAP");\r
-            jCheckBox8.setEnabled(false);\r
+    private JScrollPane getJScrollPane() {\r
+        if (jScrollPane == null) {\r
+            jScrollPane = new JScrollPane();\r
+            jScrollPane.setPreferredSize(new java.awt.Dimension(350,80));\r
+            jScrollPane.setViewportView(getJTableFvImageOpts());\r
         }\r
-        return jCheckBox8;\r
+        return jScrollPane;\r
     }\r
 \r
+    /**\r
+     * This method initializes jTable3 \r
+     *         \r
+     * @return javax.swing.JTable      \r
+     */\r
+    private JTable getJTableFvImageOpts() {\r
+        if (jTableFvImageOpts == null) {\r
+            fvOptionTableModel = new DefaultTableModel();\r
+            fvOptionTableModel.addColumn("Name");\r
+            fvOptionTableModel.addColumn("Value");\r
+            jTableFvImageOpts = new JTable(fvOptionTableModel);\r
+\r
+            jTableFvImageOpts.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableFvImageOpts.setRowHeight(20);\r
+            \r
+        }\r
+        return jTableFvImageOpts;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox9      \r
+     * This method initializes jButton9        \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JButton     \r
      */\r
-    private JCheckBox getJCheckBox9() {\r
-        if (jCheckBox9 == null) {\r
-            jCheckBox9 = new JCheckBox();\r
-            jCheckBox9.setText("Write Status");\r
-            jCheckBox9.setEnabled(false);\r
+    private JButton getJButtonUpdateFvImage() {\r
+        if (jButtonUpdateFvImage == null) {\r
+            jButtonUpdateFvImage = new JButton();\r
+            jButtonUpdateFvImage.setPreferredSize(new Dimension(120, 20));\r
+            jButtonUpdateFvImage.setActionCommand("Update");\r
+            jButtonUpdateFvImage.setText("Update FV");\r
+            jButtonUpdateFvImage.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    int row = jTableFvInfo.getSelectedRow();\r
+                    if (jTableFvInfo.isEditing()) {\r
+                        jTableFvInfo.getCellEditor().stopCellEditing();\r
+                    }\r
+                    if (jTableFvImageOpts.isEditing()) {\r
+                        jTableFvImageOpts.getCellEditor().stopCellEditing();\r
+                    }\r
+                    \r
+                        //ToDo Check data validity before update\r
+                        String name = fvImageParaTableModel.getValueAt(row, 0) + "";\r
+                        String type = fvImageParaTableModel.getValueAt(row, 1) + "";\r
+                        \r
+                        LinkedHashMap<String, String> lhm = new LinkedHashMap<String, String>();\r
+                        getOptionNameValue(lhm);\r
+                        \r
+                        docConsole.setSaved(false);\r
+                        ffc.updateFvImagesFvImage(row, name.split(" "), type, lhm);\r
+                    \r
+                }\r
+            });\r
         }\r
-        return jCheckBox9;\r
+        return jButtonUpdateFvImage;\r
     }\r
 \r
+//    private JButton getJButtonTest() {\r
+//        if (jButtonTest == null) {\r
+//            jButtonTest = new JButton();\r
+//            jButtonTest.addActionListener(new java.awt.event.ActionListener() {\r
+//                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+//                    docConsole.setSaved(false);\r
+//                    String[][] includeModules = {{"1", "a"}, {"2", "b"}};\r
+//                    ffc.genBuildOptionsUserExtensions("FV_RECOVERY", "FvRecovery.inf", null, includeModules);\r
+//                    int i = ffc.getUserExtsIncModCount("FV_RECOVERY");\r
+//                    String[][] saa = new String[i][2];\r
+//                    ffc.getUserExtsIncMods("FV_RECOVERY", saa);\r
+//                    jTextFieldFdf.setText(saa[0][0] + saa[0][1] + saa[1][0] + saa[1][1]);\r
+//                    \r
+//                }\r
+//            });\r
+//        }\r
+//        return jButtonTest;\r
+//    }\r
 \r
     /**\r
-     * This method initializes jCheckBox10     \r
+     * This method initializes jPanelFdfN      \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JPanel      \r
      */\r
-    private JCheckBox getJCheckBox10() {\r
-        if (jCheckBox10 == null) {\r
-            jCheckBox10 = new JCheckBox();\r
-            jCheckBox10.setText("Lock CAP");\r
-            jCheckBox10.setEnabled(false);\r
-        }\r
-        return jCheckBox10;\r
+    private JPanel getJPanelFdfN() {\r
+        if (jPanelFdfN == null) {\r
+            jPanelFdfN = new JPanel();\r
+            jPanelFdfN.add(getJCheckBoxFdf(), null);\r
+            jPanelFdfN.add(getJTextFieldFdf(), null);\r
+            jPanelFdfN.add(getJButtonFdfBrowse(), null);\r
+        }\r
+        return jPanelFdfN;\r
     }\r
 \r
+    /**\r
+     * This method initializes jPanelFdfS      \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelFdfS() {\r
+        if (jPanelFdfS == null) {\r
+            FlowLayout flowLayout4 = new FlowLayout();\r
+            flowLayout4.setAlignment(java.awt.FlowLayout.RIGHT);\r
+            jPanelFdfS = new JPanel();\r
+            jPanelFdfS.setLayout(flowLayout4);\r
+            jPanelFdfS.add(getJButtonAddFv(), null);\r
+            jPanelFdfS.add(getJButtonDelFv(), null);\r
+            jPanelFdfS.add(getJButtonAddFvOptions(), null);\r
+        }\r
+        return jPanelFdfS;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox11     \r
+     * This method initializes jSplitPaneFdfC  \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JSplitPane  \r
      */\r
-    private JCheckBox getJCheckBox11() {\r
-        if (jCheckBox11 == null) {\r
-            jCheckBox11 = new JCheckBox();\r
-            jCheckBox11.setText("Lock Status");\r
-            jCheckBox11.setEnabled(false);\r
-        }\r
-        return jCheckBox11;\r
+    private JSplitPane getJSplitPaneFdfC() {\r
+        if (jSplitPaneFdfC == null) {\r
+            jSplitPaneFdfC = new JSplitPane();\r
+            jSplitPaneFdfC.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);\r
+            jSplitPaneFdfC.setDividerSize(5);\r
+            jSplitPaneFdfC.setTopComponent(getJPanelFdfCTop());\r
+            jSplitPaneFdfC.setBottomComponent(getJPanelFdfCBottom());\r
+            jSplitPaneFdfC.setDividerLocation(280);\r
+        }\r
+        return jSplitPaneFdfC;\r
     }\r
 \r
+    /**\r
+     * This method initializes jPanelFdfCTop   \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelFdfCTop() {\r
+        if (jPanelFdfCTop == null) {\r
+            jPanelFdfCTop = new JPanel();\r
+            jPanelFdfCTop.setLayout(new BorderLayout());\r
+            jPanelFdfCTop.add(getJPanelFdfCTopN(), java.awt.BorderLayout.NORTH);\r
+            jPanelFdfCTop.add(getJPanelFdfCTopS(), java.awt.BorderLayout.SOUTH);\r
+            jPanelFdfCTop.add(getJPanelFdfCTopC(), java.awt.BorderLayout.CENTER);\r
+        }\r
+        return jPanelFdfCTop;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox12     \r
+     * This method initializes jPanelFdfCBottom        \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JPanel      \r
      */\r
-    private JCheckBox getJCheckBox12() {\r
-        if (jCheckBox12 == null) {\r
-            jCheckBox12 = new JCheckBox();\r
-            jCheckBox12.setText("Memory Mapped");\r
-            jCheckBox12.setEnabled(false);\r
-        }\r
-        return jCheckBox12;\r
+    private JPanel getJPanelFdfCBottom() {\r
+        if (jPanelFdfCBottom == null) {\r
+            jPanelFdfCBottom = new JPanel();\r
+            jPanelFdfCBottom.setLayout(new BorderLayout());\r
+            jPanelFdfCBottom.add(getJPanelFdfCBottomN(), java.awt.BorderLayout.NORTH);\r
+            jPanelFdfCBottom.add(getJPanelFdfCBottomC(), java.awt.BorderLayout.CENTER);\r
+        }\r
+        return jPanelFdfCBottom;\r
     }\r
 \r
+    /**\r
+     * This method initializes jPanelFdfCTopN  \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelFdfCTopN() {\r
+        if (jPanelFdfCTopN == null) {\r
+            jLabelFvInFdf = new JLabel();\r
+            jLabelFvInFdf.setText("FVs in Flash Definition File");\r
+            jPanelFdfCTopN = new JPanel();\r
+            jPanelFdfCTopN.add(jLabelFvInFdf, null);\r
+        }\r
+        return jPanelFdfCTopN;\r
+    }\r
 \r
     /**\r
-     * This method initializes jCheckBox13     \r
+     * This method initializes jPanelFdfCTopS  \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JPanel      \r
      */\r
-    private JCheckBox getJCheckBox13() {\r
-        if (jCheckBox13 == null) {\r
-            jCheckBox13 = new JCheckBox();\r
-            jCheckBox13.setText("Sticky Write");\r
-            jCheckBox13.setEnabled(false);\r
+    private JPanel getJPanelFdfCTopS() {\r
+        if (jPanelFdfCTopS == null) {\r
+            FlowLayout flowLayout1 = new FlowLayout();\r
+            flowLayout1.setAlignment(java.awt.FlowLayout.RIGHT);\r
+            jPanelFdfCTopS = new JPanel();\r
+            jPanelFdfCTopS.setLayout(flowLayout1);\r
+            jPanelFdfCTopS.add(getJButtonFvInFdfOptions(), null);\r
         }\r
-        return jCheckBox13;\r
+        return jPanelFdfCTopS;\r
     }\r
 \r
-\r
     /**\r
-     * This method initializes jPanel6 \r
+     * This method initializes jPanelFdfCTopC  \r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel6() {\r
-        if (jPanel6 == null) {\r
-            StarLabel starLabel = new StarLabel();\r
-            starLabel.setVisible(false);\r
-            jPanel6 = new JPanel();\r
-            jPanel6.setPreferredSize(new java.awt.Dimension(480,120));\r
-            jPanel6.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));\r
-            jPanel6.add(getJCheckBox2(), null);\r
-            jPanel6.add(jLabel2, null);\r
-            jPanel6.add(getJComboBox(), null);\r
-            jPanel6.add(new StarLabel(), null);\r
-            jPanel6.add(jLabel3, null);\r
-            jPanel6.add(jLabel4, null);\r
-            jPanel6.add(getJTextField2(), null);\r
-            jPanel6.add(getJButton2(), null);\r
-            jPanel6.add(getJScrollPane2(), null);\r
-            jPanel6.add(getJButton3(), null);\r
+    private JPanel getJPanelFdfCTopC() {\r
+        if (jPanelFdfCTopC == null) {\r
+            jPanelFdfCTopC = new JPanel();\r
+            jPanelFdfCTopC.add(getJScrollPaneFvInFdf(), null);\r
         }\r
-        return jPanel6;\r
+        return jPanelFdfCTopC;\r
     }\r
 \r
     /**\r
-     * This method initializes jPanel7 \r
+     * This method initializes jPanelFdfCBottomN       \r
      *         \r
      * @return javax.swing.JPanel      \r
      */\r
-    private JPanel getJPanel7() {\r
-        if (jPanel7 == null) {\r
-            FlowLayout flowLayout1 = new FlowLayout();\r
-            flowLayout1.setAlignment(FlowLayout.LEFT);\r
-            jPanel7 = new JPanel();\r
-            jPanel7.setLayout(flowLayout1);\r
-            jPanel7.add(getJCheckBox(), null);\r
-            jPanel7.add(getJTextField3(), null);\r
-            jPanel7.add(getJButton5(), null);\r
-            jPanel7.addComponentListener(new ComponentAdapter(){\r
-                public void componentShown(ComponentEvent e) {\r
-                    if (ffc.getFlashDefinitionFile() != null) {\r
-                        jTextField3.setText(ffc.getFlashDefinitionFile());\r
-                    }\r
-                }\r
-                public void componentHidden(ComponentEvent e) {\r
-                    if (jCheckBox.isSelected()) {\r
-                        ffc.genFlashDefinitionFile(jTextField3.getText());\r
-                    }\r
-                }\r
-            });\r
+    private JPanel getJPanelFdfCBottomN() {\r
+        if (jPanelFdfCBottomN == null) {\r
+            jLabelFvAdditional = new JLabel();\r
+            jLabelFvAdditional.setText("Additional FVs");\r
+            jPanelFdfCBottomN = new JPanel();\r
+            jPanelFdfCBottomN.add(jLabelFvAdditional, null);\r
+        }\r
+        return jPanelFdfCBottomN;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelFdfCBottomC       \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelFdfCBottomC() {\r
+        if (jPanelFdfCBottomC == null) {\r
+            jPanelFdfCBottomC = new JPanel();\r
+            jPanelFdfCBottomC.add(getJScrollPaneFvAdditional(), null);\r
         }\r
-        return jPanel7;\r
+        return jPanelFdfCBottomC;\r
     }\r
 \r
     /**\r
-     * This method initializes jCheckBox       \r
+     * This method initializes jScrollPaneFvInFdf      \r
      *         \r
-     * @return javax.swing.JCheckBox   \r
+     * @return javax.swing.JScrollPane \r
      */\r
-    private JCheckBox getJCheckBox() {\r
-        if (jCheckBox == null) {\r
-            jCheckBox = new JCheckBox();\r
-            jCheckBox.setText("Flash Definition File");\r
-            jCheckBox.addItemListener(new ItemListener() {\r
+    private JScrollPane getJScrollPaneFvInFdf() {\r
+        if (jScrollPaneFvInFdf == null) {\r
+            jScrollPaneFvInFdf = new JScrollPane();\r
+            jScrollPaneFvInFdf.setPreferredSize(new java.awt.Dimension(653,200));\r
+            jScrollPaneFvInFdf.setViewportView(getJTableFvInFdf());\r
+        }\r
+        return jScrollPaneFvInFdf;\r
+    }\r
 \r
-                public void itemStateChanged(ItemEvent arg0) {\r
-                    // TODO Auto-generated method stub\r
-                    if (jCheckBox.isSelected()){\r
-                        jTextField3.setEnabled(true);\r
-                        jButton5.setEnabled(true);\r
-                    }\r
-                    else {\r
-                        \r
-                        jTextField3.setEnabled(false);\r
-                        jButton5.setEnabled(false);\r
+    /**\r
+     * This method initializes jTableFvInFdf   \r
+     *         \r
+     * @return javax.swing.JTable      \r
+     */\r
+    private JTable getJTableFvInFdf() {\r
+        if (jTableFvInFdf == null) {\r
+            jTableFvInFdf = new JTable();\r
+            jTableFvInFdf.setRowHeight(20);\r
+            jTableFvInFdf.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);\r
+            jTableFvInFdf.setModel(getFvInFdfTableModel());\r
+        }\r
+        return jTableFvInFdf;\r
+    }\r
+\r
+    /**\r
+     * This method initializes fvInFdfTableModel       \r
+     *         \r
+     * @return org.tianocore.frameworkwizard.platform.ui.NonEditableTableModel \r
+     */\r
+    private NonEditableTableModel getFvInFdfTableModel() {\r
+        if (fvInFdfTableModel == null) {\r
+            fvInFdfTableModel = new NonEditableTableModel();\r
+            fvInFdfTableModel.addColumn("FV Name");\r
+            fvInFdfTableModel.addColumn("Size");\r
+            fvInFdfTableModel.addColumn("Corresponding File Name");\r
+        }\r
+        return fvInFdfTableModel;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jButtonFvInFdfOptions   \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButtonFvInFdfOptions() {\r
+        if (jButtonFvInFdfOptions == null) {\r
+            jButtonFvInFdfOptions = new JButton();\r
+            jButtonFvInFdfOptions.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonFvInFdfOptions.setText("Options");\r
+            jButtonFvInFdfOptions.addActionListener(new java.awt.event.ActionListener() {\r
+                public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                    int selectedRow = jTableFvInFdf.getSelectedRow();\r
+                    if (selectedRow < 0) {\r
+                        return;\r
                     }\r
                 }\r
             });\r
         }\r
-        return jCheckBox;\r
+        return jButtonFvInFdfOptions;\r
     }\r
 \r
     /**\r
-     * This method initializes jTextField3     \r
+     * This method initializes jScrollPaneFvAdditional \r
      *         \r
-     * @return javax.swing.JTextField  \r
+     * @return javax.swing.JScrollPane \r
      */\r
-    private JTextField getJTextField3() {\r
-        if (jTextField3 == null) {\r
-            jTextField3 = new JTextField();\r
-            jTextField3.setEnabled(false);\r
-            jTextField3.setPreferredSize(new Dimension(300, 20));\r
+    private JScrollPane getJScrollPaneFvAdditional() {\r
+        if (jScrollPaneFvAdditional == null) {\r
+            jScrollPaneFvAdditional = new JScrollPane();\r
+            jScrollPaneFvAdditional.setPreferredSize(new java.awt.Dimension(653,200));\r
+            jScrollPaneFvAdditional.setViewportView(getJTableFvAdditional());\r
         }\r
-        return jTextField3;\r
+        return jScrollPaneFvAdditional;\r
     }\r
 \r
     /**\r
-     * This method initializes jButton5        \r
+     * This method initializes jTableFvAdditional      \r
+     *         \r
+     * @return javax.swing.JTable      \r
+     */\r
+    private JTable getJTableFvAdditional() {\r
+        if (jTableFvAdditional == null) {\r
+            jTableFvAdditional = new JTable();\r
+            jTableFvAdditional.setRowHeight(20);\r
+            jTableFvAdditional.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);\r
+            jTableFvAdditional.setModel(getFvAddtionalTableModel());\r
+        }\r
+        return jTableFvAdditional;\r
+    }\r
+\r
+    /**\r
+     * This method initializes fvAddtionalTableModel   \r
+     *         \r
+     * @return javax.swing.table.DefaultTableModel     \r
+     */\r
+    private DefaultTableModel getFvAddtionalTableModel() {\r
+        if (fvAddtionalTableModel == null) {\r
+            fvAddtionalTableModel = new DefaultTableModel();\r
+            fvAddtionalTableModel.addColumn("FV Name");\r
+            fvAddtionalTableModel.addColumn("Size");\r
+            fvAddtionalTableModel.addColumn("Corresponding File Name");\r
+        }\r
+        return fvAddtionalTableModel;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jButtonAddFv    \r
      *         \r
      * @return javax.swing.JButton     \r
      */\r
-    private JButton getJButton5() {\r
-        if (jButton5 == null) {\r
-            jButton5 = new JButton();\r
-            jButton5.setEnabled(false);\r
-            jButton5.setText("Browse");\r
-            jButton5.setPreferredSize(new Dimension(78, 20));\r
-            jButton5.addActionListener(new AbstractAction(){\r
-                public void actionPerformed(ActionEvent e) {\r
-                    // TODO Auto-generated method stub\r
-                    JFileChooser chooser = new JFileChooser();\r
-                    chooser.setMultiSelectionEnabled(false);\r
-                    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
-                    int retval = chooser.showOpenDialog(frame);\r
-                    if (retval == JFileChooser.APPROVE_OPTION) {\r
+    private JButton getJButtonAddFv() {\r
+        if (jButtonAddFv == null) {\r
+            jButtonAddFv = new JButton();\r
+            jButtonAddFv.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonAddFv.setText("New");\r
+        }\r
+        return jButtonAddFv;\r
+    }\r
 \r
-                        File theFile = chooser.getSelectedFile();\r
-                        jTextField3.setText(theFile.getPath());\r
-                    }\r
-                }\r
-                \r
-            });\r
+    /**\r
+     * This method initializes jButtonDelFv    \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButtonDelFv() {\r
+        if (jButtonDelFv == null) {\r
+            jButtonDelFv = new JButton();\r
+            jButtonDelFv.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonDelFv.setText("Delete");\r
         }\r
-        return jButton5;\r
+        return jButtonDelFv;\r
     }\r
 \r
+    /**\r
+     * This method initializes jButtonAddFvOptions     \r
+     *         \r
+     * @return javax.swing.JButton     \r
+     */\r
+    private JButton getJButtonAddFvOptions() {\r
+        if (jButtonAddFvOptions == null) {\r
+            jButtonAddFvOptions = new JButton();\r
+            jButtonAddFvOptions.setPreferredSize(new java.awt.Dimension(80,20));\r
+            jButtonAddFvOptions.setText("Options");\r
+        }\r
+        return jButtonAddFvOptions;\r
+    }\r
+    \r
     /**\r
      * @param args\r
      */\r
@@ -1294,6 +1612,19 @@ public class FpdFlash extends IInternalFrame {
         this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
         this.setContentPane(getJContentPane());\r
         this.setTitle("FPD Flash Definitions");\r
+        this.addInternalFrameListener(new InternalFrameAdapter(){\r
+            public void internalFrameDeactivated(InternalFrameEvent e){\r
+                if (jTableFvProp.isEditing()) {\r
+                    jTableFvProp.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTableFvImageNames.isEditing()) {\r
+                    jTableFvImageNames.getCellEditor().stopCellEditing();\r
+                }\r
+                if (jTableFvInfo.isEditing()) {\r
+                    jTableFvInfo.getCellEditor().stopCellEditing();\r
+                }\r
+            }\r
+        });\r
     }\r
 \r
     private void init(FpdFileContents ffc) {\r
@@ -1301,145 +1632,48 @@ public class FpdFlash extends IInternalFrame {
             return;\r
         }\r
         String[][] saa = new String[ffc.getFvImagesFvImageCount()][2];\r
-        ArrayList<LinkedHashMap<String, String>> options = new ArrayList<LinkedHashMap<String, String>>(ffc.getFvImagesFvImageCount());\r
-\r
-        for (int j = 0; j < ffc.getFvImagesFvImageCount(); ++j){\r
-            options.add(new LinkedHashMap<String, String>());\r
-        }\r
-        ffc.getFvImagesFvImages(saa, options);\r
-        \r
-        Object[] rowData = new Object[13];\r
+        ffc.getFvImagesFvImages(saa);\r
+       \r
         int i = 0;\r
-        Boolean f = new Boolean("false");\r
         while (i < saa.length) {\r
-            rowData[0] = saa[i][0];\r
-            rowData[1] = saa[i][1];\r
-            \r
             \r
-            //ToDo: add alignment settings\r
-            Boolean[] boolArray = new Boolean[11];\r
-            int k = 0;\r
-            while (k < 11){\r
-                boolArray[k] = f;\r
-                ++k;\r
-            }\r
-            namevalueToBoolean(options.get(i), boolArray);\r
-            for (k = 2; k < 13; ++k) {\r
-                rowData[k] = boolArray[k-2];\r
-            }\r
-            fvImageParaTableModel.addRow(rowData);\r
+            fvImageParaTableModel.addRow(saa[i]);\r
             ++i;\r
         }\r
-    }\r
-    \r
-    private void namevalueToBoolean(Map<String, String> m, Boolean[] boolArray){\r
-        Set<String> key = m.keySet();\r
-        Iterator<String> ki= key.iterator();\r
-        Boolean t = new Boolean("true");\r
-        while(ki.hasNext()) {\r
-            String k = ki.next();\r
-            if (k.equals("EFI_ERASE_POLARITY") && m.get(k).equals("1")) {\r
-                boolArray[0] = t;\r
-            }\r
-            if (k.equals("EFI_READ_STATUS") && m.get(k).equals("1")) {\r
-                boolArray[1] = t;\r
-            }\r
-            if (k.equals("EFI_WRITE_STATUS") && m.get(k).equals("1")) {\r
-                boolArray[2] = t;\r
-            }\r
-            if (k.equals("EFI_LOCK_STATUS") && m.get(k).equals("1")) {\r
-                boolArray[3] = t;\r
-            }\r
-            if (k.equals("EFI_MEMORY_MAPPED") && m.get(k).equals("1")) {\r
-                boolArray[4] = t;\r
-            }\r
-            if (k.equals("EFI_STICKY_WRITE") && m.get(k).equals("1")) {\r
-                boolArray[5] = t;\r
-            }\r
-            if (k.equals("EFI_READ_DISABLED_CAP") && m.get(k).equals("1")) {\r
-                boolArray[6] = t;\r
-            }\r
-            if (k.equals("EFI_READ_ENABLED_CAP") && m.get(k).equals("1")) {\r
-                boolArray[7] = t;\r
-            }\r
-            if (k.equals("EFI_WRITE_DISABLED_CAP") && m.get(k).equals("1")) {\r
-                boolArray[8] = t;\r
-            }\r
-            if (k.equals("EFI_WRITE_ENABLED_CAP") && m.get(k).equals("1")) {\r
-                boolArray[9] = t;\r
-            }\r
-            if (k.equals("EFI_LOCK_CAP") && m.get(k).equals("1")) {\r
-                boolArray[10] = t;\r
-            }\r
-        }\r
-    }\r
-    \r
-    private void booleanToNameValue(boolean[] boolArray, Map<String, String> m){\r
-        if (boolArray[0]) {\r
-            m.put("EFI_ERASE_POLARITY", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_ERASE_POLARITY", "0");\r
-        }\r
-        if (boolArray[1]) {\r
-            m.put("EFI_READ_STATUS", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_READ_STATUS", "0");\r
-        }\r
-        if (boolArray[2]) {\r
-            m.put("EFI_WRITE_STATUS", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_WRITE_STATUS", "0");\r
-        }\r
-        if (boolArray[3]) {\r
-            m.put("EFI_LOCK_STATUS", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_LOCK_STATUS", "0");\r
-        }\r
-        if (boolArray[4]) {\r
-            m.put("EFI_MEMORY_MAPPED", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_MEMORY_MAPPED", "0");\r
-        }\r
-        if (boolArray[5]) {\r
-            m.put("EFI_STICKY_WRITE", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_STICKY_WRITE", "0");\r
-        }\r
-        if (boolArray[6]) {\r
-            m.put("EFI_READ_DISABLED_CAP", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_READ_DISABLED_CAP", "0");\r
-        }\r
-        if (boolArray[7]) {\r
-            m.put("EFI_READ_ENABLED_CAP", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_READ_ENABLED_CAP", "0");\r
-        }\r
-        if (boolArray[8]) {\r
-            m.put("EFI_WRITE_DISABLED_CAP", "1");\r
-        }\r
-        else {\r
-            m.put("EFI_WRITE_DISABLED_CAP", "0");\r
+        \r
+        saa = new String[ffc.getFvImagesNameValueCount()][2];\r
+        ffc.getFvImagesNameValues(saa);\r
+        for (int m = 0; m < saa.length; ++m) {\r
+            fvPropertyTableModel.addRow(saa[m]);\r
         }\r
-        if (boolArray[9]) {\r
-            m.put("EFI_WRITE_ENABLED_CAP", "1");\r
+        \r
+        jTextFieldFdf.setText("");\r
+        String fdfFile = ffc.getFlashDefinitionFile();\r
+        if (fdfFile != null) {\r
+            jTextFieldFdf.setText(fdfFile);\r
         }\r
-        else {\r
-            m.put("EFI_WRITE_ENABLED_CAP", "0");\r
+        \r
+        String fdfPath = System.getenv("WORKSPACE") + File.separator + fdfFile;\r
+        Vector<FvInfoFromFdf> vFvInfo = new Vector<FvInfoFromFdf>();\r
+        getFvInfoFromFdf(fdfPath, vFvInfo);\r
+        getFvInFdfTableModel().setRowCount(0);\r
+        for (int j = 0; j < vFvInfo.size(); ++j) {\r
+            FvInfoFromFdf fvInfo = vFvInfo.get(j);\r
+            String[] row = {fvInfo.getFvName(), fvInfo.getSize(), fvInfo.getEfiFileName()};\r
+            getFvInFdfTableModel().addRow(row);\r
         }\r
-        if (boolArray[10]) {\r
-            m.put("EFI_LOCK_CAP", "1");\r
+        \r
+\r
+        for (int k = 0; k < vFvInfo.size(); ++k) {\r
+            FvInfoFromFdf fvInfo = vFvInfo.get(k);\r
+            getJTabbedPane().addTab(fvInfo.getFvName(), null, new ModuleOrderPane(), null);\r
+\r
         }\r
-        else {\r
-            m.put("EFI_LOCK_CAP", "0");\r
+    }\r
+    \r
+    private void getOptionNameValue(Map<String, String> m){\r
+        for (int i = 0; i < jTableFvImageOpts.getRowCount(); ++i) {\r
+            m.put(fvOptionTableModel.getValueAt(i, 0)+"", fvOptionTableModel.getValueAt(i, 1)+"");\r
         }\r
     }\r
     /**\r
@@ -1451,20 +1685,564 @@ public class FpdFlash extends IInternalFrame {
         if (jContentPane == null) {\r
             jContentPane = new JPanel();\r
             jContentPane.setLayout(new BorderLayout());\r
-            jContentPane.add(getJPanel(), java.awt.BorderLayout.EAST);\r
-            jContentPane.add(getJPanel1(), java.awt.BorderLayout.SOUTH);\r
-            jContentPane.add(getJPanel2(), java.awt.BorderLayout.WEST);\r
-            jContentPane.add(getJPanel3(), java.awt.BorderLayout.NORTH);\r
+            jContentPane.add(getJPanelContentEast(), java.awt.BorderLayout.EAST);\r
+            jContentPane.add(getJPanelContentSouth(), java.awt.BorderLayout.SOUTH);\r
+            jContentPane.add(getJPanelContentWest(), java.awt.BorderLayout.WEST);\r
+            jContentPane.add(getJPanelContentNorth(), java.awt.BorderLayout.NORTH);\r
             jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);\r
         }\r
         return jContentPane;\r
     }\r
+    \r
+    private void getFvInfoFromFdf(String fdfPath, Vector<FvInfoFromFdf> vFvInfo) {\r
+        File fdf = new File(fdfPath);\r
+        if (!fdf.exists()) {\r
+            return;\r
+        }\r
+        int lines = 0;\r
+\r
+        try {\r
+            FileReader reader = new FileReader(fdf);\r
+            BufferedReader in = new BufferedReader(reader);\r
+            String str;\r
+\r
+            while ((str = in.readLine()) != null) {\r
+                ++lines;\r
+                str = str.trim();\r
+                //\r
+                // skip empty line, comment (start with //) \r
+                //\r
+                if (str.length() == 0 || str.startsWith("//")) {\r
+                    continue;\r
+                }\r
+                //\r
+                // dig into Region {} section, create FvInfoFromFdf object for it.\r
+                //\r
+                if (str.startsWith("Region") && str.endsWith("{")) {\r
+                    FvInfoFromFdf fvInfo = new FvInfoFromFdf();\r
+                    boolean nameFound = false;\r
+                    boolean sizeFound = false;\r
+                    while ((str = in.readLine()) != null) {\r
+                        ++lines;\r
+                        str = str.trim();\r
+                        //\r
+                        // skip empty line, comment (start with //) \r
+                        //\r
+                        if (str.length() == 0 || str.startsWith("//")) {\r
+                            continue;\r
+                        }\r
+                        \r
+                        if (str.startsWith("Name")) {\r
+                            int firstQuote = str.indexOf("\"");\r
+                            int lastQuote = str.lastIndexOf("\"");\r
+                            fvInfo.setFvName(str.substring(firstQuote + 1, lastQuote));\r
+                            nameFound = true;\r
+                        }\r
+                        \r
+                        if (str.startsWith("Size")) {\r
+                            int equalIndex = str.indexOf("=");\r
+                            int commaIndex = str.indexOf(",");\r
+                            fvInfo.setSize(str.substring(equalIndex + 1, commaIndex).trim());\r
+                            sizeFound = true;\r
+                        }\r
+                        \r
+                        if (nameFound && sizeFound) {\r
+                            break;\r
+                        }\r
+                    }\r
+                    \r
+                    vFvInfo.add(fvInfo);\r
+                }\r
+                //\r
+                // dig into File {} section, supply file name information to existing FvInfoFromFdf object.\r
+                //\r
+                if (str.startsWith("File")) {\r
+                    boolean fileNameFound = false;\r
+                    boolean fvFound = false;\r
+                    String fileName = "";\r
+                    String fvName = "";\r
+                    while ((str = in.readLine()) != null) {\r
+                        ++lines;\r
+                        str = str.trim();\r
+                        //\r
+                        // skip empty line, comment (start with //) \r
+                        //\r
+                        if (str.length() == 0 || str.startsWith("//")) {\r
+                            continue;\r
+                        }\r
+                        \r
+                        if (str.startsWith("Name")) {\r
+                            int firstQuote = str.indexOf("\"");\r
+                            int lastQuote = str.lastIndexOf("\"");\r
+                            fileName = str.substring(firstQuote + 1, lastQuote);\r
+                            fileNameFound = true;\r
+                        }\r
+                        \r
+                        if (str.startsWith("Region")) {\r
+                            int firstQuote = str.indexOf("\"");\r
+                            int lastQuote = str.lastIndexOf("\"");\r
+                            fvName = str.substring(firstQuote + 1, lastQuote);\r
+                            fvFound = true;\r
+                        }\r
+                        \r
+                        if (fileNameFound && fvFound) {\r
+                            break;\r
+                        }\r
+                    }\r
+                    \r
+                    for (int i = 0; i <vFvInfo.size(); ++i) {\r
+                        if (vFvInfo.get(i).getFvName().equals(fvName)) {\r
+                            vFvInfo.get(i).setEfiFileName(fileName);\r
+                        }\r
+                    }\r
+                }\r
+   \r
+            }\r
+        } catch (Exception e) {\r
+           \r
+        }\r
+\r
+    }\r
+        \r
+    private class ModuleOrderPane extends JPanel {\r
+\r
+        /**\r
+         * \r
+         */\r
+        private static final long serialVersionUID = 1L;\r
+        private JPanel jPanelModOrderN = null;\r
+        private JPanel jPanelModOrderS = null;\r
+        private JPanel jPanelModOrderC = null;\r
+        private JScrollPane jScrollPaneModInFv = null;\r
+        private JTable jTableModInFv = null;\r
+        private JPanel jPanelController = null;\r
+        private JScrollPane jScrollPaneFpdModules = null;\r
+        private JTable jTableFpdModules = null;\r
+        private JButton jButtonUp = null;\r
+        private JButton jButtonInsert = null;\r
+        private JButton jButtonRemove = null;\r
+        private JButton jButtonDown = null;\r
+        private JButton jButtonOk = null;\r
+        private JButton jButtonCancel = null;\r
+        private NonEditableTableModel modInFvTableModel = null;\r
+        private NonEditableTableModel fpdModTableModel = null;\r
+        \r
+        public ModuleOrderPane() {\r
+            super(new BorderLayout());\r
+            add(getJPanelModOrderN(), java.awt.BorderLayout.NORTH);\r
+            add(getJPanelModOrderS(), java.awt.BorderLayout.SOUTH);\r
+            add(getJPanelModOrderC(), java.awt.BorderLayout.CENTER);\r
+            addComponentListener(new java.awt.event.ComponentAdapter() {\r
+                public void componentShown(java.awt.event.ComponentEvent e) {\r
+                    String title = jTabbedPane.getTitleAt(jTabbedPane.getSelectedIndex()); // TODO Auto-generated Event stub componentShown()\r
+                    showModulesInFv(title);\r
+                    showAllModulesInPlatform();\r
+                }\r
+            });\r
+        }\r
+        \r
+        private void showModulesInFv(String fvName) {\r
+            int size = ffc.getUserExtsIncModCount(fvName);\r
+            \r
+            if (size != -1) {\r
+                String[][] saa = new String[size][2];\r
+                ffc.getUserExtsIncMods(fvName, saa);\r
+\r
+                for (int i = 0; i < size; ++i) {\r
+                    String name = getModuleName(saa[i][0]);\r
+                    String[] row = { name };\r
+                    modInFvTableModel.addRow(row);\r
+                }\r
+            }\r
+            //\r
+            // From ModuleSAs, get module guids with FvBinding = fvName.\r
+            //\r
+            Vector<String> vGuid = new Vector<String>();\r
+            ffc.getFrameworkModuleGuid(fvName, vGuid);\r
+            //\r
+            // If BuildOptions->UserExtensions already contain these module info,\r
+            // no need to add them into table again.\r
+            //\r
+            Iterator<String> iter = vGuid.iterator();\r
+            while (iter.hasNext()){\r
+                String guid = iter.next();\r
+                String moduleName = getModuleName(guid);\r
+                if (existedInTable(moduleName, modInFvTableModel)) {\r
+                    vGuid.remove(guid);\r
+                }\r
+            }\r
+            \r
+            for (int j = 0; j < vGuid.size(); ++j) {\r
+                String[] row = {getModuleName(vGuid.get(j))};\r
+                modInFvTableModel.addRow(row);\r
+            }\r
+        }\r
+        \r
+        private void showAllModulesInPlatform() {\r
+            int size = ffc.getFrameworkModulesCount();\r
+            String[][] saa = new String[size][5];\r
+            ffc.getFrameworkModulesInfo(saa);\r
+            \r
+            for (int i = 0; i < size; ++i) {\r
+                String name = getModuleName(saa[i][0]);\r
+                if (existedInTable(name, modInFvTableModel) || existedInTable(name, fpdModTableModel)) {\r
+                    continue;\r
+                }\r
+                String[] row = {name};\r
+                fpdModTableModel.addRow(row);\r
+            }\r
+            \r
+            TableSorter sorter = (TableSorter)jTableFpdModules.getModel();\r
+            sorter.setSortState(0, TableSorter.ASCENDING);\r
+        }\r
+        \r
+        private String getModuleName (String guid) {\r
+            \r
+            for (int i = 0; i < GlobalData.vModuleList.size(); ++i) {\r
+                String mg = GlobalData.vModuleList.get(i).getGuid();\r
+                if (mg == null) {\r
+                    continue;\r
+                }\r
+                if (mg.equalsIgnoreCase(guid)) {\r
+                    return GlobalData.vModuleList.get(i).getName();\r
+                }\r
+            }\r
+            \r
+            return "";\r
+        }\r
+        \r
+        private boolean existedInTable (String name, DefaultTableModel model) {\r
+            int size = model.getDataVector().size();\r
+            for (int i = 0; i < size; ++i) {\r
+                if (((Vector)model.getDataVector().elementAt(i)).contains(name)) {\r
+                    return true;\r
+                }\r
+            }\r
+            return false;\r
+        }\r
+        \r
+        /**\r
+         * This method initializes jPanelModOrderN  \r
+         *  \r
+         * @return javax.swing.JPanel   \r
+         */\r
+        private JPanel getJPanelModOrderN() {\r
+            if (jPanelModOrderN == null) {\r
+                jPanelModOrderN = new JPanel();\r
+            }\r
+            return jPanelModOrderN;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jPanelModOrderS  \r
+         *  \r
+         * @return javax.swing.JPanel   \r
+         */\r
+        private JPanel getJPanelModOrderS() {\r
+            if (jPanelModOrderS == null) {\r
+                FlowLayout flowLayout6 = new FlowLayout();\r
+                flowLayout6.setAlignment(java.awt.FlowLayout.RIGHT);\r
+                jPanelModOrderS = new JPanel();\r
+                jPanelModOrderS.setLayout(flowLayout6);\r
+                jPanelModOrderS.add(getJButtonOk(), null);\r
+                jPanelModOrderS.add(getJButtonCancel(), null);\r
+            }\r
+            return jPanelModOrderS;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jPanelModOrderC  \r
+         *  \r
+         * @return javax.swing.JPanel   \r
+         */\r
+        private JPanel getJPanelModOrderC() {\r
+            if (jPanelModOrderC == null) {\r
+                jPanelModOrderC = new JPanel();\r
+                jPanelModOrderC.add(getJScrollPaneModInFv(), null);\r
+                jPanelModOrderC.add(getJPanelController(), null);\r
+                jPanelModOrderC.add(getJScrollPaneFpdModules(), null);\r
+            }\r
+            return jPanelModOrderC;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jScrollPaneModInFv   \r
+         *  \r
+         * @return javax.swing.JScrollPane  \r
+         */\r
+        private JScrollPane getJScrollPaneModInFv() {\r
+            if (jScrollPaneModInFv == null) {\r
+                jScrollPaneModInFv = new JScrollPane();\r
+                jScrollPaneModInFv.setPreferredSize(new java.awt.Dimension(200,500));\r
+                jScrollPaneModInFv.setViewportView(getJTableModInFv());\r
+            }\r
+            return jScrollPaneModInFv;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jTableModInFv    \r
+         *  \r
+         * @return javax.swing.JTable   \r
+         */\r
+        private JTable getJTableModInFv() {\r
+            if (jTableModInFv == null) {\r
+                modInFvTableModel = new NonEditableTableModel();\r
+                modInFvTableModel.addColumn("Module Orders in FV");\r
+                jTableModInFv = new JTable(modInFvTableModel);\r
+                jTableModInFv.setRowHeight(20);\r
+                jTableModInFv.setShowGrid(false);\r
+            }\r
+            return jTableModInFv;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jPanelController \r
+         *  \r
+         * @return javax.swing.JPanel   \r
+         */\r
+        private JPanel getJPanelController() {\r
+            if (jPanelController == null) {\r
+                FlowLayout flowLayout5 = new FlowLayout();\r
+                flowLayout5.setVgap(50);\r
+                flowLayout5.setHgap(50);\r
+                jPanelController = new JPanel();\r
+                jPanelController.setLayout(flowLayout5);\r
+                jPanelController.setPreferredSize(new java.awt.Dimension(150,500));\r
+                jPanelController.add(getJButtonUp(), null);\r
+                jPanelController.add(getJButtonInsert(), null);\r
+                jPanelController.add(getJButtonRemove(), null);\r
+                jPanelController.add(getJButtonDown(), null);\r
+            }\r
+            return jPanelController;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jScrollPaneFpdModules    \r
+         *  \r
+         * @return javax.swing.JScrollPane  \r
+         */\r
+        private JScrollPane getJScrollPaneFpdModules() {\r
+            if (jScrollPaneFpdModules == null) {\r
+                jScrollPaneFpdModules = new JScrollPane();\r
+                jScrollPaneFpdModules.setPreferredSize(new java.awt.Dimension(200,500));\r
+                jScrollPaneFpdModules.setViewportView(getJTableFpdModules());\r
+            }\r
+            return jScrollPaneFpdModules;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jTableFpdModules \r
+         *  \r
+         * @return javax.swing.JTable   \r
+         */\r
+        private JTable getJTableFpdModules() {\r
+            if (jTableFpdModules == null) {\r
+                fpdModTableModel = new NonEditableTableModel();\r
+                TableSorter sorter = new TableSorter(fpdModTableModel);\r
+                jTableFpdModules = new JTable(sorter);\r
+                jTableFpdModules.setRowHeight(20);\r
+                jTableFpdModules.setShowGrid(false);\r
+                fpdModTableModel.addColumn("Modules in Platform");\r
+            }\r
+            return jTableFpdModules;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jButtonUp    \r
+         *  \r
+         * @return javax.swing.JButton  \r
+         */\r
+        private JButton getJButtonUp() {\r
+            if (jButtonUp == null) {\r
+                jButtonUp = new JButton();\r
+                jButtonUp.setPreferredSize(new java.awt.Dimension(60,20));\r
+                jButtonUp.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 14));\r
+                jButtonUp.setText("^");\r
+                jButtonUp.addActionListener(new java.awt.event.ActionListener() {\r
+                    public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                        int selectedRow = jTableModInFv.getSelectedRow();\r
+                        if (selectedRow <= 0) {\r
+                            return;\r
+                        }\r
+                        modInFvTableModel.moveRow(selectedRow, selectedRow, selectedRow - 1);\r
+                        jTableModInFv.changeSelection(selectedRow - 1, 0, false, false);\r
+                    }\r
+                });\r
+            }\r
+            return jButtonUp;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jButtonInsert    \r
+         *  \r
+         * @return javax.swing.JButton  \r
+         */\r
+        private JButton getJButtonInsert() {\r
+            if (jButtonInsert == null) {\r
+                jButtonInsert = new JButton();\r
+                jButtonInsert.setText("<<");\r
+                jButtonInsert.setPreferredSize(new java.awt.Dimension(60,20));\r
+                jButtonInsert.addActionListener(new java.awt.event.ActionListener() {\r
+                    public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                        int selectedRowRight = jTableFpdModules.getSelectedRow();\r
+                        if (selectedRowRight < 0) {\r
+                            return;\r
+                        }\r
+                        \r
+                        int rowInModel = ((TableSorter)jTableFpdModules.getModel()).getModelRowIndex(selectedRowRight);\r
+                        \r
+                        String[] row = {jTableFpdModules.getValueAt(selectedRowRight, 0)+""};\r
+                        int selectedRowLeft = jTableModInFv.getSelectedRow();\r
+                        if (selectedRowLeft < 0) {\r
+                            modInFvTableModel.addRow(row);\r
+                            jTableModInFv.changeSelection(jTableModInFv.getRowCount() - 1, 0, false, false);\r
+                            fpdModTableModel.removeRow(rowInModel);\r
+                        }\r
+                        else {\r
+                            modInFvTableModel.insertRow(selectedRowLeft, row);\r
+                            jTableModInFv.changeSelection(selectedRowLeft, 0, false, false);\r
+                        }\r
+                    }\r
+                });\r
+            }\r
+            return jButtonInsert;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jButtonRemove    \r
+         *  \r
+         * @return javax.swing.JButton  \r
+         */\r
+        private JButton getJButtonRemove() {\r
+            if (jButtonRemove == null) {\r
+                jButtonRemove = new JButton();\r
+                jButtonRemove.setPreferredSize(new java.awt.Dimension(60,20));\r
+                jButtonRemove.setText(">>");\r
+                jButtonRemove.addActionListener(new java.awt.event.ActionListener() {\r
+                    public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                        int selectedRowLeft = jTableModInFv.getSelectedRow();\r
+                        if (selectedRowLeft < 0) {\r
+                            return;\r
+                        }\r
+                        \r
+                        String[] row = {jTableModInFv.getValueAt(selectedRowLeft, 0)+""};\r
+                        fpdModTableModel.addRow(row);\r
+                        int viewIndex = ((TableSorter) jTableFpdModules.getModel()).getViewIndexArray()[jTableFpdModules\r
+                                                                                                                        .getRowCount() - 1];\r
+                        jTableFpdModules.changeSelection(viewIndex, 0, false, false);\r
+                        modInFvTableModel.removeRow(selectedRowLeft);\r
+                    }\r
+                });\r
+            }\r
+            return jButtonRemove;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jButtonDown  \r
+         *  \r
+         * @return javax.swing.JButton  \r
+         */\r
+        private JButton getJButtonDown() {\r
+            if (jButtonDown == null) {\r
+                jButtonDown = new JButton();\r
+                jButtonDown.setPreferredSize(new java.awt.Dimension(60,20));\r
+                jButtonDown.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));\r
+                jButtonDown.setText("v");\r
+                jButtonDown.addActionListener(new java.awt.event.ActionListener() {\r
+                    public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                        int selectedRow = jTableModInFv.getSelectedRow();\r
+                        if (selectedRow >= jTableModInFv.getRowCount() - 1) {\r
+                            return;\r
+                        }\r
+                        modInFvTableModel.moveRow(selectedRow, selectedRow, selectedRow + 1);\r
+                        jTableModInFv.changeSelection(selectedRow + 1, 0, false, false);\r
+                    }\r
+                });\r
+            }\r
+            return jButtonDown;\r
+        }\r
+        \r
+        /**\r
+         * This method initializes jButtonOk    \r
+         *  \r
+         * @return javax.swing.JButton  \r
+         */\r
+        private JButton getJButtonOk() {\r
+            if (jButtonOk == null) {\r
+                jButtonOk = new JButton();\r
+                jButtonOk.setPreferredSize(new java.awt.Dimension(80,20));\r
+                jButtonOk.setText("Ok");\r
+            }\r
+            return jButtonOk;\r
+        }\r
+\r
+        /**\r
+         * This method initializes jButtonCancel    \r
+         *  \r
+         * @return javax.swing.JButton  \r
+         */\r
+        private JButton getJButtonCancel() {\r
+            if (jButtonCancel == null) {\r
+                jButtonCancel = new JButton();\r
+                jButtonCancel.setPreferredSize(new java.awt.Dimension(80,20));\r
+                jButtonCancel.setText("Cancel");\r
+                jButtonCancel.addActionListener(new java.awt.event.ActionListener() {\r
+                    public void actionPerformed(java.awt.event.ActionEvent e) {\r
+                        jTabbedPane.setSelectedIndex(0);\r
+                    }\r
+                });\r
+            }\r
+            return jButtonCancel;\r
+        }\r
+    }\r
 \r
 }  //  @jve:decl-index=0:visual-constraint="10,10"\r
 \r
 class ImageParaTableModel extends DefaultTableModel {\r
 \r
-    public Class getColumnClass (int c) {\r
-        return getValueAt(0, c).getClass();\r
+    private static final long serialVersionUID = 1L;\r
+    \r
+   public boolean isCellEditable(int row, int col) {\r
+        if (getValueAt(row, 1).equals("ImageName") && col >=1) {\r
+            return false;\r
+        }\r
+        return true;\r
     }\r
 }\r
+\r
+class FvInfoFromFdf {\r
+    private String fvName;\r
+    private String size;\r
+    private String efiFileName;\r
+    \r
+    public FvInfoFromFdf () {\r
+        fvName = "";\r
+        size = "";\r
+        efiFileName = "";\r
+    }\r
+    public FvInfoFromFdf (String f, String s, String e) {\r
+        this();\r
+        fvName = f;\r
+        size = s;\r
+        efiFileName = e;\r
+    }\r
+    public String getEfiFileName() {\r
+        return efiFileName;\r
+    }\r
+    public void setEfiFileName(String efiFileName) {\r
+        this.efiFileName = efiFileName;\r
+    }\r
+    public String getFvName() {\r
+        return fvName;\r
+    }\r
+    public void setFvName(String fvName) {\r
+        this.fvName = fvName;\r
+    }\r
+    public String getSize() {\r
+        return size;\r
+    }\r
+    public void setSize(String size) {\r
+        this.size = size;\r
+    }\r
+    \r
+}\r