]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java
FV attribute editor alpha.
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFlash.java
index ee419d5d0beec83e52e6d8ac12de8be6b036b698..bdcb193819986442e220b8aa006b53e99cbbe482 100644 (file)
@@ -100,7 +100,6 @@ public class FpdFlash extends IInternalFrame {
     private ImageParaTableModel fvImageParaTableModel = null;\r
     private DefaultTableModel fvOptionTableModel = null;\r
     private JPanel jPanelFvImageC = null;\r
-    private JCheckBox jCheckBoxFvImagePara = null;\r
     private JLabel jLabelFvParaType = null;\r
     private JComboBox jComboBoxFvParaType = null;\r
     private JLabel jLabelFvImageNames = null;\r
@@ -115,7 +114,6 @@ public class FpdFlash extends IInternalFrame {
     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
@@ -160,10 +158,17 @@ public class FpdFlash extends IInternalFrame {
     private String oldFvName = null;\r
     private Vector<String> vBlockSize = new Vector<String>();\r
     private String determinedFvBlockSize = null;\r
+    private final String defaultBlkSize = "0x10000";\r
     private String erasePolarity = "";\r
     boolean memModified = false;\r
     private FvOptsTableModel fvInFdfOptTableModel = null;\r
     private FvOptsTableModel fvAdditionalOptTableModel = null;\r
+    private boolean sizeFromOptionDlg = false;\r
+    private boolean fileFromOptionDlg = false;\r
+    private JLabel jLabelOptions = null;\r
+    private JPanel jPanelBgFvName = null;\r
+    private JPanel jPanelBgFvImage = null;\r
+    private JPanel jPanelW = null;\r
     \r
     public FpdFlash() {\r
         super();\r
@@ -197,7 +202,10 @@ public class FpdFlash extends IInternalFrame {
      */\r
     private JPanel getJPanelContentEast() {\r
         if (jPanelContentEast == null) {\r
+            FlowLayout flowLayout7 = new FlowLayout();\r
+            flowLayout7.setVgap(50);\r
             jPanelContentEast = new JPanel();\r
+            jPanelContentEast.setLayout(flowLayout7);\r
         }\r
         return jPanelContentEast;\r
     }\r
@@ -267,32 +275,16 @@ public class FpdFlash extends IInternalFrame {
         if (jPanelFvImages == null) {\r
             jPanelFvImages = new JPanel();\r
             jPanelFvImages.setLayout(new BorderLayout());\r
-            jPanelFvImages.add(getJPanelFvImageN(), java.awt.BorderLayout.NORTH);\r
-//            jPanelFvImages.add(getJPanelFvImageW(), java.awt.BorderLayout.WEST);\r
-            jPanelFvImages.add(getJPanelFvImageS(), java.awt.BorderLayout.SOUTH);\r
+            jPanelFvImages.add(getJPanelFvImageS(), java.awt.BorderLayout.NORTH);\r
+            jPanelFvImages.add(getJPanelFvImageN(), java.awt.BorderLayout.SOUTH);\r
             jPanelFvImages.add(getJPanelFvImageC(), java.awt.BorderLayout.CENTER);\r
+            jPanelFvImages.add(getJPanelW(), java.awt.BorderLayout.EAST);\r
             jPanelFvImages.addComponentListener(new java.awt.event.ComponentAdapter() {\r
                 public void componentShown(java.awt.event.ComponentEvent e) {\r
-                    fvImageParaTableModel.setRowCount(0);\r
-                    fvPropertyTableModel.setRowCount(0);\r
+//                    fvImageParaTableModel.setRowCount(0);\r
+//                    fvPropertyTableModel.setRowCount(0);\r
                     \r
-                    if (ffc.getFvImagesFvImageCount("Attributes") == 0) {\r
-                        return;\r
-                    }\r
-                    String[][] saa = new String[ffc.getFvImagesFvImageCount("Attributes")][2];\r
-                    ffc.getFvImagesFvImages(saa, "Attributes");\r
-                    \r
-                    int i = 0;\r
-                    while (i < saa.length) {\r
-                        fvImageParaTableModel.addRow(saa[i]);\r
-                        ++i;\r
-                    }\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
             });\r
             \r
@@ -317,9 +309,9 @@ public class FpdFlash extends IInternalFrame {
             jLabelFvPropName.setPreferredSize(new java.awt.Dimension(38,20));\r
             FlowLayout flowLayout2 = new FlowLayout();\r
             flowLayout2.setAlignment(java.awt.FlowLayout.LEFT);\r
-            flowLayout2.setHgap(15);\r
+            flowLayout2.setHgap(5);\r
             jPanelFvImageN = new JPanel();\r
-            jPanelFvImageN.setPreferredSize(new java.awt.Dimension(576,100));\r
+            jPanelFvImageN.setPreferredSize(new java.awt.Dimension(576,130));\r
             jPanelFvImageN.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));\r
             jPanelFvImageN.setLayout(flowLayout2);\r
             jPanelFvImageN.add(getJCheckBoxFvProperty(), null);\r
@@ -343,7 +335,7 @@ 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,190));\r
+            jPanelFvImageS.setPreferredSize(new java.awt.Dimension(480,150));\r
             jPanelFvImageS.setLayout(gridLayout2);\r
             jPanelFvImageS.add(getJScrollPaneFvInfo(), null);\r
         }\r
@@ -452,7 +444,7 @@ public class FpdFlash extends IInternalFrame {
     private JScrollPane getJScrollPaneFvProp() {\r
         if (jScrollPaneFvProp == null) {\r
             jScrollPaneFvProp = new JScrollPane();\r
-            jScrollPaneFvProp.setPreferredSize(new java.awt.Dimension(350,55));\r
+            jScrollPaneFvProp.setPreferredSize(new java.awt.Dimension(350,100));\r
             jScrollPaneFvProp.setViewportView(getJTableFvProp());\r
         }\r
         return jScrollPaneFvProp;\r
@@ -564,15 +556,12 @@ public class FpdFlash extends IInternalFrame {
         if (jPanelFvImageC == null) {\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
@@ -588,41 +577,6 @@ public class FpdFlash extends IInternalFrame {
     }\r
 \r
 \r
-    /**\r
-     * This method initializes jCheckBox2      \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
-     */\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 = jCheckBoxFvImagePara.isSelected();\r
-                    \r
-                        jLabelFvParaType.setEnabled(seleted);\r
-                        jLabelFvImageNames.setEnabled(seleted);\r
-                        jLabelFvParaName.setEnabled(seleted);\r
-                        jComboBoxFvParaType.setEnabled(seleted);\r
-                        jTextFieldFvParaName.setEnabled(seleted);\r
-                        \r
-                        jTableFvImageNames.setEnabled(seleted);\r
-                        jButtonFvParaAdd.setEnabled(seleted);\r
-                        jButtonFvParaDel.setEnabled(seleted);\r
-                    \r
-                   \r
-                }\r
-                \r
-            });\r
-        }\r
-        return jCheckBoxFvImagePara;\r
-    }\r
-\r
-\r
     /**\r
      * This method initializes jComboBox       \r
      *         \r
@@ -631,17 +585,28 @@ public class FpdFlash extends IInternalFrame {
     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.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
+                    int selectedRow = jTableFvInfo.getSelectedRow();\r
+                    if (selectedRow < 0) {\r
+                        return;\r
+                    }\r
+                    String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+"";\r
+                    String oldType = jTableFvInfo.getValueAt(selectedRow, 1)+"";\r
+                    int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, oldType);\r
+                    if (fvImagePos < 0) {\r
+                        return;\r
+                    }\r
                     \r
+                    String type = jComboBoxFvParaType.getSelectedItem()+"";\r
+                    ffc.updateFvImagesFvImageType(fvImagePos, type);\r
+                    jTableFvInfo.setValueAt(type, selectedRow, 1);\r
+                    docConsole.setSaved(false);\r
                 }\r
                 \r
             });\r
@@ -659,7 +624,6 @@ public class FpdFlash extends IInternalFrame {
         if (jTextFieldFvParaName == null) {\r
             jTextFieldFvParaName = new JTextField();\r
             jTextFieldFvParaName.setPreferredSize(new java.awt.Dimension(140,20));\r
-            jTextFieldFvParaName.setEnabled(false);\r
         }\r
         return jTextFieldFvParaName;\r
     }\r
@@ -674,7 +638,7 @@ public class FpdFlash extends IInternalFrame {
         if (jButtonFvParaAdd == null) {\r
             jButtonFvParaAdd = new JButton();\r
             jButtonFvParaAdd.setPreferredSize(new Dimension(80, 20));\r
-            jButtonFvParaAdd.setEnabled(false);\r
+            jButtonFvParaAdd.setEnabled(true);\r
             jButtonFvParaAdd.setText("Add");\r
             jButtonFvParaAdd.addActionListener(new AbstractAction() {\r
                 /**\r
@@ -686,6 +650,20 @@ public class FpdFlash extends IInternalFrame {
                     if (jTextFieldFvParaName.getText().length() > 0){\r
                         String[] row = {jTextFieldFvParaName.getText()};                        \r
                         fvImageNameTableModel.addRow(row);\r
+                        if (jTableFvInfo.getSelectedRow() < 0) {\r
+                            return;\r
+                        }\r
+                        \r
+                        String fvNameList = jTableFvInfo.getValueAt(jTableFvInfo.getSelectedRow(), 0)+"";\r
+                        String type = jTableFvInfo.getValueAt(jTableFvInfo.getSelectedRow(), 1)+"";\r
+                        int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type);\r
+                        \r
+                        if (fvImagePos < 0) {\r
+                          // new FvImage.\r
+                        }\r
+                        else {\r
+                          //append Fv name.  \r
+                        }\r
                     }\r
                 }\r
             });\r
@@ -702,7 +680,7 @@ public class FpdFlash extends IInternalFrame {
     private JScrollPane getJScrollPaneFvImageNames() {\r
         if (jScrollPaneFvImageNames == null) {\r
             jScrollPaneFvImageNames = new JScrollPane();\r
-            jScrollPaneFvImageNames.setPreferredSize(new java.awt.Dimension(350,50));\r
+            jScrollPaneFvImageNames.setPreferredSize(new java.awt.Dimension(350,80));\r
             jScrollPaneFvImageNames.setViewportView(getJTableFvImageNames());\r
         }\r
         return jScrollPaneFvImageNames;\r
@@ -718,8 +696,35 @@ public class FpdFlash extends IInternalFrame {
         if (jTableFvImageNames == null) {\r
             fvImageNameTableModel = new DefaultTableModel();\r
             jTableFvImageNames = new JTable(fvImageNameTableModel);\r
-            jTableFvImageNames.setEnabled(false);\r
+            jTableFvImageNames.setRowHeight(20);\r
             fvImageNameTableModel.addColumn("FV Image Name");\r
+            \r
+            jTableFvImageNames.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
+                public void valueChanged(ListSelectionEvent e) {\r
+                    if (e.getValueIsAdjusting()) {\r
+                        return;\r
+                    }\r
+                    ListSelectionModel lsm = (ListSelectionModel) e.getSource();\r
+                    if (lsm.isSelectionEmpty()) {\r
+                        return;\r
+                    } else {\r
+                        int selectedRow = lsm.getMinSelectionIndex();\r
+                        String oldFvName = jTableFvImageNames.getValueAt(selectedRow, 0)+"";\r
+                    }\r
+                }\r
+            });\r
+            \r
+            jTableFvImageNames.getModel().addTableModelListener(new TableModelListener() {\r
+                public void tableChanged(TableModelEvent arg0) {\r
+                    // TODO Auto-generated method stub\r
+                    int row = arg0.getFirstRow();\r
+                    int col = arg0.getColumn();\r
+                    TableModel m = (TableModel) arg0.getSource();\r
+                    \r
+                    if (arg0.getType() == TableModelEvent.UPDATE) {\r
+                    }\r
+                }\r
+            });\r
         }\r
         return jTableFvImageNames;\r
     }\r
@@ -734,7 +739,7 @@ public class FpdFlash extends IInternalFrame {
         if (jButtonFvParaDel == null) {\r
             jButtonFvParaDel = new JButton();\r
             jButtonFvParaDel.setPreferredSize(new Dimension(80, 20));\r
-            jButtonFvParaDel.setEnabled(false);\r
+            jButtonFvParaDel.setEnabled(true);\r
             jButtonFvParaDel.setText("Delete");\r
             jButtonFvParaDel.addActionListener(new AbstractAction() {\r
                 /**\r
@@ -761,6 +766,10 @@ public class FpdFlash extends IInternalFrame {
 \r
  if (jPanelFvImageOpts == null) {\r
      //ToDo add ButtonGroup for RadioButtons\r
+            FlowLayout flowLayout5 = new FlowLayout();\r
+            flowLayout5.setAlignment(java.awt.FlowLayout.LEFT);\r
+            jLabelOptions = new JLabel();\r
+            jLabelOptions.setText("Attribute");\r
             jLabelFvImageOptValue = new JLabel();\r
             jLabelFvImageOptValue.setEnabled(true);\r
             jLabelFvImageOptValue.setText("Value");\r
@@ -770,21 +779,18 @@ public class FpdFlash extends IInternalFrame {
             jLabelFvImageOptName.setText("Name");\r
             jLabelFvImageOptName.setPreferredSize(new Dimension(38, 20));\r
             jPanelFvImageOpts = new JPanel();\r
-            jPanelFvImageOpts.setPreferredSize(new java.awt.Dimension(480,150));\r
+            jPanelFvImageOpts.setLayout(flowLayout5);\r
+            jPanelFvImageOpts.setPreferredSize(new java.awt.Dimension(450,130));\r
             \r
-            jPanelFvImageOpts.setLayout(new FlowLayout());\r
             \r
                        jPanelFvImageOpts.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.LOWERED));\r
-                       jPanelFvImageOpts.add(getJCheckBoxFvImageOpts(), null);\r
+                       jPanelFvImageOpts.add(jLabelOptions, 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
@@ -803,9 +809,8 @@ public class FpdFlash extends IInternalFrame {
     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
-            jButtonAddFvImage.setText("Add FV Image");\r
+            jButtonAddFvImage.setPreferredSize(new java.awt.Dimension(150,20));\r
+            jButtonAddFvImage.setText("New FV Attributes");\r
             jButtonAddFvImage.addActionListener(new AbstractAction() {\r
                 /**\r
                  * \r
@@ -829,16 +834,13 @@ public class FpdFlash extends IInternalFrame {
                     }\r
                     imageName = imageName.trim();\r
                     \r
-                    if (!jCheckBoxFvImageOpts.isSelected() && jComboBoxFvParaType.getSelectedIndex() != 0){\r
-                        return;\r
-                      \r
-                    }\r
+                    \r
                     \r
                     LinkedHashMap<String, String> m = null;\r
-                    if (jCheckBoxFvImageOpts.isSelected()) {\r
+//                    if (jCheckBoxFvImageOpts.isSelected()) {\r
                         m = new LinkedHashMap<String, String>();\r
                         getOptionNameValue(m);\r
-                    }\r
+//                    }\r
                     ffc.genFvImagesFvImage(imageName.split(" "), jComboBoxFvParaType.getSelectedItem()+"", m);\r
                     docConsole.setSaved(false);\r
                     Object[] row = {imageName, jComboBoxFvParaType.getSelectedItem()};\r
@@ -877,16 +879,8 @@ public class FpdFlash extends IInternalFrame {
             fvImageParaTableModel.addColumn("FvImageNames");\r
             fvImageParaTableModel.addColumn("Type");\r
             \r
-            \r
-//            TableColumn typeCol = jTableFvInfo.getColumnModel().getColumn(1);\r
-//            JComboBox cb = new JComboBox();\r
-//            cb.addItem("ImageName");\r
-//            cb.addItem("Attributes");\r
-//            cb.addItem("Options");\r
-//            cb.addItem("Components");\r
-//            typeCol.setCellEditor(new DefaultCellEditor(cb));\r
-            \r
             jTableFvInfo.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+            jTableFvInfo.setRowHeight(20);\r
             jTableFvInfo.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
                 public void valueChanged(ListSelectionEvent e) {\r
                     if (e.getValueIsAdjusting()){\r
@@ -898,29 +892,32 @@ public class FpdFlash extends IInternalFrame {
                     }\r
                     else{\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
+                        String fvNameList = fvImageParaTableModel.getValueAt(selectedRow, 0)+"";\r
+                        String type = fvImageParaTableModel.getValueAt(selectedRow, 1)+"";\r
+                        jComboBoxFvParaType.setSelectedItem(type);\r
+                        String[] fvNames = fvNameList.split(" ");\r
+                        fvImageNameTableModel.setRowCount(0);\r
+                        for (int i = 0; i < fvNames.length; ++i) {\r
+                            String[] row = { fvNames[i] };\r
+                            fvImageNameTableModel.addRow(row);\r
+                        }\r
+                        \r
+                        int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type);\r
+                        if (fvImagePos < 0) {\r
                             return;\r
                         }\r
                         LinkedHashMap<String, String> optionMap = new LinkedHashMap<String, String>();\r
-                        ffc.getFvImagesFvImageOptions(selectedRow, optionMap);\r
+                        ffc.getFvImagesFvImageOptions(fvImagePos, 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
@@ -939,9 +936,8 @@ public class FpdFlash extends IInternalFrame {
     private JButton getJButtonDelFvImage() {\r
         if (jButtonDelFvImage == null) {\r
             jButtonDelFvImage = new JButton();\r
-            jButtonDelFvImage.setPreferredSize(new java.awt.Dimension(120,20));\r
-            jButtonDelFvImage.setEnabled(false);\r
-            jButtonDelFvImage.setText("Delete Row");\r
+            jButtonDelFvImage.setPreferredSize(new java.awt.Dimension(150,20));\r
+            jButtonDelFvImage.setText("Delete FV Attributes");\r
             jButtonDelFvImage.addActionListener(new AbstractAction() {\r
                 /**\r
                  * \r
@@ -963,33 +959,6 @@ public class FpdFlash extends IInternalFrame {
     }\r
 \r
 \r
-    /**\r
-     * This method initializes jCheckBox3      \r
-     *         \r
-     * @return javax.swing.JCheckBox   \r
-     */\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 selected = jCheckBox3.isSelected();\r
-                    \r
-                        if (!jCheckBoxFvImagePara.isSelected() || jComboBoxFvParaType.getSelectedIndex() == 0) {\r
-                            return;\r
-                        }\r
-                        \r
-                }\r
-                \r
-            });\r
-        }\r
-        return jCheckBoxFvImageOpts;\r
-    }\r
-\r
-\r
     /**\r
      * This method initializes jPanel6 \r
      *         \r
@@ -997,21 +966,22 @@ public class FpdFlash extends IInternalFrame {
      */\r
     private JPanel getJPanelFvImagePara() {\r
         if (jPanelFvImagePara == null) {\r
+            FlowLayout flowLayout6 = new FlowLayout();\r
+            flowLayout6.setAlignment(java.awt.FlowLayout.LEFT);\r
             StarLabel starLabel = new StarLabel();\r
             starLabel.setVisible(false);\r
             jPanelFvImagePara = new JPanel();\r
-            jPanelFvImagePara.setPreferredSize(new java.awt.Dimension(480,120));\r
+            jPanelFvImagePara.setLayout(flowLayout6);\r
+            jPanelFvImagePara.setPreferredSize(new java.awt.Dimension(450,140));\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
+            jPanelFvImagePara.add(getJPanelBgFvName(), null);\r
+            jPanelFvImagePara.add(jLabelFvParaType, null);\r
+            jPanelFvImagePara.add(getJComboBoxFvParaType(), null);\r
         }\r
         return jPanelFvImagePara;\r
     }\r
@@ -1139,6 +1109,34 @@ public class FpdFlash extends IInternalFrame {
         return jButtonFdfBrowse;\r
     }\r
     \r
+    private void initFvAttributes () {\r
+        if (ffc.getFvImagesFvImageCount("Attributes") == 0 && ffc.getFvImagesFvImageCount("Components") == 0) {\r
+            return;\r
+        }\r
+        String[][] saa = new String[ffc.getFvImagesFvImageCount("Attributes")][2];\r
+        ffc.getFvImagesFvImages(saa, "Attributes");\r
+        \r
+        int i = 0;\r
+        while (i < saa.length) {\r
+            fvImageParaTableModel.addRow(saa[i]);\r
+            ++i;\r
+        }\r
+        \r
+        saa = new String[ffc.getFvImagesFvImageCount("Components")][2];\r
+        ffc.getFvImagesFvImages(saa, "Components");\r
+        i = 0;\r
+        while (i < saa.length) {\r
+            fvImageParaTableModel.addRow(saa[i]);\r
+            ++i;\r
+        }\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
+    \r
     private void initFvAdditionalTable() {\r
         Vector<String> vFvNames = new Vector<String>();\r
         ffc.getFvImagesFvImageFvImageNames(vFvNames);\r
@@ -1147,35 +1145,7 @@ public class FpdFlash extends IInternalFrame {
             if (fvNameExists(fvName)) {\r
                 continue;\r
             }\r
-            HashMap<String, String> mFvOpts = new HashMap<String, String>();\r
-            ffc.getFvImagesFvImageOptions(fvName, mFvOpts);\r
-            String bSize = "";\r
-            String numBlks = "";\r
-            String fvSize = "";\r
-            String fvFile = "";\r
-            if (mFvOpts.get("EFI_FILE_NAME") != null) {\r
-                fvFile = mFvOpts.get("EFI_FILE_NAME");\r
-            }\r
-            if (mFvOpts.get("EFI_BLOCK_SIZE") != null && mFvOpts.get("EFI_NUM_BLOCKS") != null) {\r
-                bSize = mFvOpts.get("EFI_BLOCK_SIZE");\r
-                numBlks = mFvOpts.get("EFI_NUM_BLOCKS");\r
-                boolean blockSizeWellFormat = true;\r
-                boolean numOfBlockWellFormat = true;\r
-                if (!DataValidation.isHexDoubleWordDataType(bSize) && !DataValidation.isInt(bSize)) {\r
-                   blockSizeWellFormat = false;\r
-                   JOptionPane.showMessageDialog(frame, fvName + " block size bad format.");\r
-                } \r
-                if (!DataValidation.isHexDoubleWordDataType(numBlks) && !DataValidation.isInt(numBlks)) {\r
-                   numOfBlockWellFormat = false;\r
-                   JOptionPane.showMessageDialog(frame, fvName + " number of blocks bad format.");\r
-                }\r
-                if (blockSizeWellFormat && numOfBlockWellFormat) {\r
-                    int size = Integer.decode(bSize);\r
-                    int num = Integer.decode(numBlks);\r
-                    fvSize = "0x" + Integer.toHexString(size*num);\r
-                }\r
-            }\r
-            fvAdditionalTableModel.addRow(new String[]{fvName, fvSize, fvFile});\r
+            fvAdditionalTableModel.addRow(getBasicFvInfo(fvName));\r
             addTabForFv(new FvInfoFromFdf(fvName, "", ""));\r
         }\r
     }\r
@@ -1193,12 +1163,12 @@ public class FpdFlash extends IInternalFrame {
         \r
         // BugBug: assume all blocks have same size;\r
         \r
-        String blkSize = "0x10000";\r
+        String blkSize = defaultBlkSize;\r
         if (vBlockSize.size() > 0) {\r
             blkSize = vBlockSize.get(0);\r
             if (!DataValidation.isInt(blkSize) && !DataValidation.isHexDoubleWordDataType(blkSize)) {\r
                 JOptionPane.showMessageDialog(frame, "FDF file does NOT contain valid FV block size. Default size 0x10000 will be used.");\r
-                blkSize = "0x10000";\r
+                blkSize = defaultBlkSize;\r
             }\r
         }\r
         determinedFvBlockSize = blkSize;\r
@@ -1372,7 +1342,7 @@ public class FpdFlash extends IInternalFrame {
     private JScrollPane getJScrollPane() {\r
         if (jScrollPane == null) {\r
             jScrollPane = new JScrollPane();\r
-            jScrollPane.setPreferredSize(new java.awt.Dimension(350,80));\r
+            jScrollPane.setPreferredSize(new java.awt.Dimension(350,100));\r
             jScrollPane.setViewportView(getJTableFvImageOpts());\r
         }\r
         return jScrollPane;\r
@@ -1405,10 +1375,10 @@ public class FpdFlash extends IInternalFrame {
     private JButton getJButtonUpdateFvImage() {\r
         if (jButtonUpdateFvImage == null) {\r
             jButtonUpdateFvImage = new JButton();\r
-            jButtonUpdateFvImage.setPreferredSize(new Dimension(120, 20));\r
+            jButtonUpdateFvImage.setPreferredSize(new java.awt.Dimension(150,20));\r
             jButtonUpdateFvImage.setActionCommand("Update");\r
-            jButtonUpdateFvImage.setEnabled(false);\r
-            jButtonUpdateFvImage.setText("Update FV");\r
+            jButtonUpdateFvImage.setText("Update FV Attributes");\r
+            jButtonUpdateFvImage.setVisible(false);\r
             jButtonUpdateFvImage.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
                     int row = jTableFvInfo.getSelectedRow();\r
@@ -1435,25 +1405,6 @@ public class FpdFlash extends IInternalFrame {
         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 jPanelFdfN      \r
      *         \r
@@ -1669,6 +1620,9 @@ public class FpdFlash extends IInternalFrame {
                         return;\r
                     }\r
                     String fvName = jTableFvInFdf.getValueAt(selectedRow, 0)+"";\r
+                    if (fvName.length() == 0) {\r
+                        return;\r
+                    }\r
                     DefaultTableModel dtm = getFvInFdfOptTableModel();\r
                     new FpdFvOptions(fvName, dtm, ffc, docConsole);\r
                 }\r
@@ -1691,6 +1645,20 @@ public class FpdFlash extends IInternalFrame {
         }\r
         return fvInFdfOptTableModel;\r
     }\r
+    \r
+    private DefaultTableModel getFvAdditionalOptTableModel() {\r
+        if (fvAdditionalOptTableModel == null) {\r
+            fvAdditionalOptTableModel = new FvOptsTableModel();\r
+            fvAdditionalOptTableModel.addColumn("Name");\r
+            fvAdditionalOptTableModel.addColumn("Value");\r
+            Vector<Object> v = new Vector<Object>();\r
+            v.add("EFI_BLOCK_SIZE");\r
+            v.add("EFI_NUM_BLOCKS");\r
+            v.add("EFI_FILE_NAME");\r
+            fvAdditionalOptTableModel.setVNonEditableName(v);\r
+        }\r
+        return fvAdditionalOptTableModel;\r
+    }\r
 \r
     /**\r
      * This method initializes jScrollPaneFvAdditional \r
@@ -1773,7 +1741,7 @@ public class FpdFlash extends IInternalFrame {
                             oldFvName = newFvName;\r
                         }\r
                         \r
-                        if (col == 1) {\r
+                        if (col == 1 && !sizeFromOptionDlg) {\r
                             String fvSize = m.getValueAt(row, col) + "";\r
                             if (!DataValidation.isInt(fvSize) && !DataValidation.isHexDoubleWordDataType(fvSize)) {\r
                                 JOptionPane.showMessageDialog(frame, "FV size should be Integer or Hex format.");\r
@@ -1783,9 +1751,15 @@ public class FpdFlash extends IInternalFrame {
                             ffc.getFvImagesFvImageOptions(oldFvName, mFvOpts);\r
                             String blkSize = mFvOpts.get("EFI_BLOCK_SIZE");\r
                             if (blkSize == null) {\r
-                                ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_BLOCK_SIZE", determinedFvBlockSize);\r
+                                if (determinedFvBlockSize != null) {\r
+                                    blkSize = determinedFvBlockSize;\r
+                                }\r
+                                else {\r
+                                    blkSize = defaultBlkSize;\r
+                                }\r
+                                ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_BLOCK_SIZE", blkSize);\r
                                 int fs = Integer.decode(fvSize);\r
-                                int bs = Integer.decode(determinedFvBlockSize);\r
+                                int bs = Integer.decode(blkSize);\r
                                 ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_NUM_BLOCKS", (fs/bs)+"");\r
                                 docConsole.setSaved(false);\r
                             }\r
@@ -1793,9 +1767,9 @@ public class FpdFlash extends IInternalFrame {
                                 if (!DataValidation.isInt(blkSize) && !DataValidation.isHexDoubleWordDataType(blkSize)) {\r
                                     int retVal = JOptionPane.showConfirmDialog(frame, "Confirm", "FPD file contains error block size format. Would you like to replace it with a default value?", JOptionPane.YES_NO_OPTION);\r
                                     if (retVal == JOptionPane.YES_OPTION) {\r
-                                        ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_BLOCK_SIZE", determinedFvBlockSize);\r
+                                        ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_BLOCK_SIZE", defaultBlkSize);\r
                                         int fs = Integer.decode(fvSize);\r
-                                        int bs = Integer.decode(determinedFvBlockSize);\r
+                                        int bs = Integer.decode(defaultBlkSize);\r
                                         ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_NUM_BLOCKS", (fs/bs)+"");\r
                                         docConsole.setSaved(false);\r
                                         return;\r
@@ -1812,7 +1786,7 @@ public class FpdFlash extends IInternalFrame {
                             }\r
                         }\r
                         \r
-                        if (col == 2) {\r
+                        if (col == 2 && !fileFromOptionDlg) {\r
                             ffc.setTypedNamedFvImageNameValue(oldFvName, "Options", "EFI_FILE_NAME", m.getValueAt(row, col)+"");\r
                             docConsole.setSaved(false);\r
                         }\r
@@ -1933,13 +1907,114 @@ public class FpdFlash extends IInternalFrame {
             jButtonAddFvOptions.setText("Options");\r
             jButtonAddFvOptions.addActionListener(new java.awt.event.ActionListener() {\r
                 public void actionPerformed(java.awt.event.ActionEvent e) {\r
-                    System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()\r
+                    int selectedRow = jTableFvAdditional.getSelectedRow();\r
+                    if (selectedRow < 0) {\r
+                        return;\r
+                    }\r
+                    String fvName = jTableFvAdditional.getValueAt(selectedRow, 0)+"";\r
+                    String oldFvSize = jTableFvAdditional.getValueAt(selectedRow, 1)+"";\r
+                    String oldFileName = jTableFvAdditional.getValueAt(selectedRow, 2)+"";\r
+                    if (fvName.length() == 0) {\r
+                        return;\r
+                    }\r
+                    DefaultTableModel dtm = getFvAdditionalOptTableModel();\r
+                    new FpdFvOptions(fvName, dtm, ffc, docConsole);\r
+                    \r
+                    String[] updatedFvInfo = getBasicFvInfo (fvName);\r
+                    if (!oldFvSize.equalsIgnoreCase(updatedFvInfo[1])) {\r
+                        sizeFromOptionDlg = true;\r
+                        jTableFvAdditional.setValueAt(updatedFvInfo[1], selectedRow, 1);\r
+                        sizeFromOptionDlg = false;\r
+                    }\r
+                    if (!oldFileName.equals(updatedFvInfo[2])) {\r
+                        fileFromOptionDlg = true;\r
+                        jTableFvAdditional.setValueAt(updatedFvInfo[2], selectedRow, 2);\r
+                        fileFromOptionDlg = false;\r
+                    }\r
                 }\r
             });\r
         }\r
         return jButtonAddFvOptions;\r
     }\r
     \r
+    private String[] getBasicFvInfo (String fvName) {\r
+        HashMap<String, String> mFvOpts = new HashMap<String, String>();\r
+        ffc.getFvImagesFvImageOptions(fvName, mFvOpts);\r
+        String bSize = "";\r
+        String numBlks = "";\r
+        String fvSize = "";\r
+        String fvFile = "";\r
+        if (mFvOpts.get("EFI_FILE_NAME") != null) {\r
+            fvFile = mFvOpts.get("EFI_FILE_NAME");\r
+        }\r
+        if (mFvOpts.get("EFI_BLOCK_SIZE") != null && mFvOpts.get("EFI_NUM_BLOCKS") != null) {\r
+            bSize = mFvOpts.get("EFI_BLOCK_SIZE");\r
+            numBlks = mFvOpts.get("EFI_NUM_BLOCKS");\r
+            boolean blockSizeWellFormat = true;\r
+            boolean numOfBlockWellFormat = true;\r
+            if (!DataValidation.isHexDoubleWordDataType(bSize) && !DataValidation.isInt(bSize)) {\r
+               blockSizeWellFormat = false;\r
+               JOptionPane.showMessageDialog(frame, fvName + " block size bad format.");\r
+            } \r
+            if (!DataValidation.isHexDoubleWordDataType(numBlks) && !DataValidation.isInt(numBlks)) {\r
+               numOfBlockWellFormat = false;\r
+               JOptionPane.showMessageDialog(frame, fvName + " number of blocks bad format.");\r
+            }\r
+            if (blockSizeWellFormat && numOfBlockWellFormat) {\r
+                int size = Integer.decode(bSize);\r
+                int num = Integer.decode(numBlks);\r
+                fvSize = "0x" + Integer.toHexString(size*num);\r
+            }\r
+        }\r
+        \r
+        return new String[]{fvName, fvSize, fvFile};\r
+\r
+    }\r
+    \r
+    /**\r
+     * This method initializes jPanelBgFvName  \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelBgFvName() {\r
+        if (jPanelBgFvName == null) {\r
+            jPanelBgFvName = new JPanel();\r
+            jPanelBgFvName.setPreferredSize(new java.awt.Dimension(80,55));\r
+            jPanelBgFvName.add(getJButtonFvParaAdd(), null);\r
+            jPanelBgFvName.add(getJButtonFvParaDel(), null);\r
+        }\r
+        return jPanelBgFvName;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelBgFvImage \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelBgFvImage() {\r
+        if (jPanelBgFvImage == null) {\r
+            jPanelBgFvImage = new JPanel();\r
+            jPanelBgFvImage.setPreferredSize(new java.awt.Dimension(150,100));\r
+            jPanelBgFvImage.add(getJButtonAddFvImage(), null);\r
+            jPanelBgFvImage.add(getJButtonDelFvImage(), null);\r
+            jPanelBgFvImage.add(getJButtonUpdateFvImage(), null);\r
+        }\r
+        return jPanelBgFvImage;\r
+    }\r
+\r
+    /**\r
+     * This method initializes jPanelW \r
+     *         \r
+     * @return javax.swing.JPanel      \r
+     */\r
+    private JPanel getJPanelW() {\r
+        if (jPanelW == null) {\r
+            jPanelW = new JPanel();\r
+            jPanelW.add(getJPanelBgFvImage(), null);\r
+        }\r
+        return jPanelW;\r
+    }\r
+\r
     /**\r
      * @param args\r
      */\r
@@ -1954,7 +2029,7 @@ public class FpdFlash extends IInternalFrame {
      * @return void\r
      */\r
     private void initialize() {\r
-        this.setSize(518, 650);\r
+        this.setSize(660, 650);\r
         this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
         this.setContentPane(getJContentPane());\r
         this.setTitle("FPD Flash Definitions");\r
@@ -1977,6 +2052,7 @@ public class FpdFlash extends IInternalFrame {
     }\r
 \r
     private void init(FpdFileContents ffc) {\r
+        initFvAttributes();\r
         \r
         jTextFieldFdf.setText("");\r
         String fdfFile = ffc.getFlashDefinitionFile();\r