]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java
Use unified global data to get module informations.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFlash.java
index 690291bd506ff019613f2734589f91e05f6cacf1..a326f5e2caf62b959c4fad211a61c2c7ac445f58 100644 (file)
@@ -17,6 +17,7 @@ import javax.swing.JPanel;
 \r
 import javax.swing.AbstractAction;\r
 import javax.swing.DefaultCellEditor;\r
+import javax.swing.JComponent;\r
 import javax.swing.JFileChooser;\r
 import javax.swing.JFrame;\r
 import javax.swing.JOptionPane;\r
@@ -36,11 +37,14 @@ import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;\r
 import java.awt.event.ItemEvent;\r
 import java.awt.event.ItemListener;\r
+import java.io.BufferedReader;\r
 import java.io.File;\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
@@ -59,6 +63,7 @@ import javax.swing.table.TableColumn;
 import javax.swing.table.TableModel;\r
 import javax.swing.JComboBox;\r
 import java.awt.Dimension;\r
+import javax.swing.JSplitPane;\r
 \r
 public class FpdFlash extends IInternalFrame {\r
 \r
@@ -124,6 +129,284 @@ public class FpdFlash extends IInternalFrame {
     private JScrollPane jScrollPane = null;\r
     private JTable jTableFvImageOpts = null;\r
     private JButton jButtonUpdateFvImage = null;\r
+    private JButton jButtonTest = 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
+    private NonEditableTableModel nonEditableTableModel = null;  //  @jve:decl-index=0:visual-constraint=""\r
+    \r
+    private JPanel jPanelModOrder = null;\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
+    \r
+    /**\r
+     * This method initializes jPanelModOrder   \r
+     *  \r
+     * @return javax.swing.JPanel   \r
+     */\r
+    private JPanel getJPanelModOrder() {\r
+//        if (jPanelModOrder == null) {\r
+            jPanelModOrder = new JPanel();\r
+            jPanelModOrder.setLayout(new BorderLayout());\r
+            jPanelModOrder.add(getJPanelModOrderN(), java.awt.BorderLayout.NORTH);\r
+            jPanelModOrder.add(getJPanelModOrderS(), java.awt.BorderLayout.SOUTH);\r
+            jPanelModOrder.add(getJPanelModOrderC(), java.awt.BorderLayout.CENTER);\r
+            jPanelModOrder.addComponentListener(new java.awt.event.ComponentAdapter() {\r
+                public void componentShown(java.awt.event.ComponentEvent e) {\r
+                    System.out.println("componentShown()" + jTabbedPane.getTitleAt(jTabbedPane.getSelectedIndex())); // TODO Auto-generated Event stub componentShown()\r
+                }\r
+            });\r
+//        }\r
+        return jPanelModOrder;\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(150,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
+            NonEditableTableModel modInFvTableModel = new NonEditableTableModel();\r
+            modInFvTableModel.addColumn("Module Orders in FV");\r
+            jTableModInFv = new JTable(modInFvTableModel);\r
+            jTableModInFv.setRowHeight(20);\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(150,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
+            NonEditableTableModel fpdModTableModel = new NonEditableTableModel();\r
+            fpdModTableModel.addColumn("Modules in Platform");\r
+            jTableFpdModules = new JTable(fpdModTableModel);\r
+            jTableFpdModules.setRowHeight(20);\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
+//        }\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
+//        }\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
+//        }\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
+//        }\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
+                    getJTabbedPane().setSelectedIndex(0);\r
+                }\r
+            });\r
+//        }\r
+        return jButtonCancel;\r
+    }\r
+\r
+    \r
     public FpdFlash() {\r
         super();\r
         // TODO Auto-generated constructor stub\r
@@ -205,8 +488,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, getJPanelFdf(), null);\r
+            jTabbedPane.addTab("General", null, getJPanelFdf(), null);\r
+            jTabbedPane.addTab("FV Parameters", null, getJPanelFvImages(), null);\r
             \r
         }\r
         return jTabbedPane;\r
@@ -246,7 +529,7 @@ public class FpdFlash extends IInternalFrame {
             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
@@ -289,7 +572,7 @@ public class FpdFlash extends IInternalFrame {
     private JCheckBox getJCheckBoxFvProperty() {\r
         if (jCheckBoxFvProperty == null) {\r
             jCheckBoxFvProperty = new JCheckBox();\r
-            jCheckBoxFvProperty.setText("FV Properties");\r
+            jCheckBoxFvProperty.setText("Global FV Variables");\r
             jCheckBoxFvProperty.addItemListener(new ItemListener(){\r
 \r
                 public void itemStateChanged(ItemEvent arg0) {\r
@@ -952,25 +1235,24 @@ public class FpdFlash extends IInternalFrame {
      */\r
     private JPanel getJPanelFdf() {\r
         if (jPanelFdf == null) {\r
-            FlowLayout flowLayout1 = new FlowLayout();\r
-            flowLayout1.setAlignment(FlowLayout.LEFT);\r
             jPanelFdf = new JPanel();\r
-            jPanelFdf.setLayout(flowLayout1);\r
-            jPanelFdf.add(getJCheckBoxFdf(), null);\r
-            jPanelFdf.add(getJTextFieldFdf(), null);\r
-            jPanelFdf.add(getJButtonFdfBrowse(), null);\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
+            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
@@ -1055,6 +1337,16 @@ public class FpdFlash extends IInternalFrame {
                             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
@@ -1231,6 +1523,352 @@ public class FpdFlash extends IInternalFrame {
         return jButtonUpdateFvImage;\r
     }\r
 \r
+    /**\r
+     * This method initializes jButtonTest     \r
+     *         \r
+     * @return javax.swing.JButton     \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 jPanelFdfN      \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\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 jSplitPaneFdfC  \r
+     *         \r
+     * @return javax.swing.JSplitPane  \r
+     */\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 jPanelFdfCBottom        \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\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 jPanelFdfCTopS  \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\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 jPanelFdfCTopS;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelFdfCTopC  \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelFdfCTopC() {\r
+        if (jPanelFdfCTopC == null) {\r
+            jPanelFdfCTopC = new JPanel();\r
+            jPanelFdfCTopC.add(getJScrollPaneFvInFdf(), null);\r
+        }\r
+        return jPanelFdfCTopC;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelFdfCBottomN       \r
+     *         \r
+     * @return javax.swing.JPanel      \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 jPanelFdfCBottomC;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jScrollPaneFvInFdf      \r
+     *         \r
+     * @return javax.swing.JScrollPane \r
+     */\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
+    /**\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
+                    fvInFdfTableModel.moveRow(selectedRow, selectedRow, selectedRow - 1);\r
+                    jTableFvInFdf.changeSelection(selectedRow - 1, 0, false, false);\r
+                }\r
+            });\r
+        }\r
+        return jButtonFvInFdfOptions;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jScrollPaneFvAdditional \r
+     *         \r
+     * @return javax.swing.JScrollPane \r
+     */\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 jScrollPaneFvAdditional;\r
+    }\r
+\r
+    /**\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 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
+    /**\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 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
+\r
+    /**\r
+     * This method initializes nonEditableTableModel   \r
+     *         \r
+     * @return org.tianocore.frameworkwizard.platform.ui.NonEditableTableModel \r
+     */\r
+    private NonEditableTableModel getNonEditableTableModel() {\r
+        if (nonEditableTableModel == null) {\r
+            nonEditableTableModel = new NonEditableTableModel();\r
+        }\r
+        return nonEditableTableModel;\r
+    }\r
+\r
+    \r
     /**\r
      * @param args\r
      */\r
@@ -1269,13 +1907,7 @@ 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);\r
-        \r
        \r
         int i = 0;\r
         while (i < saa.length) {\r
@@ -1284,10 +1916,34 @@ public class FpdFlash extends IInternalFrame {
             ++i;\r
         }\r
         \r
-//        String fdfFile = ffc.getFlashDefinitionFile();\r
-//        if (fdfFile != null) {\r
-//            jTextField3.setText(fdfFile);\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
+        \r
+        jTextFieldFdf.setText("");\r
+        String fdfFile = ffc.getFlashDefinitionFile();\r
+        if (fdfFile != null) {\r
+            jTextFieldFdf.setText(fdfFile);\r
+        }\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
+        \r
+\r
+        for (int k = 0; k < vFvInfo.size(); ++k) {\r
+            FvInfoFromFdf fvInfo = vFvInfo.get(k);\r
+            getJTabbedPane().addTab(fvInfo.getFvName(), null, getJPanelModOrder(), null);\r
+\r
+        }\r
     }\r
     \r
     private void getOptionNameValue(Map<String, String> m){\r
@@ -1312,6 +1968,118 @@ public class FpdFlash extends IInternalFrame {
         }\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
+    \r
 \r
 }  //  @jve:decl-index=0:visual-constraint="10,10"\r
 \r
@@ -1327,3 +2095,39 @@ class ImageParaTableModel extends DefaultTableModel {
     }\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