diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java index 9ca0509d3c..00371cdc97 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFileContents.java @@ -2608,7 +2608,7 @@ public class FpdFileContents { } } - public void AddFvImageFvImageNames (String[] fvNames) { + public void addFvImageFvImageNames (String[] fvNames) { FvImagesDocument.FvImages fis = getfpdFlash().getFvImages(); if (fis == null || fis.getFvImageList() == null) { genFvImagesFvImage (fvNames, "ImageName", null); @@ -2619,14 +2619,35 @@ public class FpdFileContents { while (li.hasNext()) { FvImagesDocument.FvImages.FvImage fi = li.next(); if (fi.getType().toString().equals("ImageName")) { - for (int i = 0; i < fvNames.length; ++i) { - fi.addFvImageNames(fvNames[i]); - } + addFvImageNamesInFvImage (fi, fvNames); return; } } - genFvImagesFvImage (fvNames, "ImageName", null); + genFvImagesFvImage (fvNames, "ImageName", null); + } + + public void addFvImageNamesInFvImage (FvImagesDocument.FvImages.FvImage fi, String[] fvNames) { + for (int i = 0; i < fvNames.length; ++i) { + fi.addFvImageNames(fvNames[i]); + } + } + + public void addFvImageNamesInFvImage (int i, String[] fvNames) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + addFvImageNamesInFvImage(fi, fvNames); + } + cursor.dispose(); } public void genFvImagesFvImage(String[] names, String types, Map options) { @@ -2706,6 +2727,22 @@ public class FpdFileContents { } } + public void updateFvImageNamesInFvImage (int i, String oldFvName, String newFvName) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + updateFvImageNamesInFvImage (fi, oldFvName, newFvName); + } + cursor.dispose(); + } /** * @param fi * @param oldFvName The FV Name to be replaced. @@ -2723,7 +2760,7 @@ public class FpdFileContents { cursor.setTextValue(newFvName); } else { - cursor.removeXml(); + cursor.removeXml(); } } }while (cursor.toNextSibling(qFvImageNames)); @@ -2870,6 +2907,22 @@ public class FpdFileContents { } } + public void removeFvImageNameValue (int i, String attributeName) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + removeFvImageNameValue (fi, attributeName); + } + cursor.dispose(); + } /**Remove from fi the attribute pair with attributeName in FvImageOptions. * @param fi * @param attributeName @@ -2953,6 +3006,23 @@ public class FpdFileContents { } + public void setFvImagesFvImageNameValue (int i, String name, String value) { + XmlObject o = getfpdFlash().getFvImages(); + if (o == null) { + return; + } + XmlCursor cursor = o.newCursor(); + QName qFvImage = new QName(xmlNs, "FvImage"); + if (cursor.toChild(qFvImage)) { + for (int j = 0; j < i; ++j) { + cursor.toNextSibling(qFvImage); + } + FvImagesDocument.FvImages.FvImage fi = (FvImagesDocument.FvImages.FvImage)cursor.getObject(); + setFvImagesFvImageNameValue (fi, name, value, null); + } + cursor.dispose(); + } + /**Add to FvImage the name-value pair, or replace old name with newName, or generate new name-value pair if not exists before. * @param fi * @param name @@ -2961,6 +3031,12 @@ public class FpdFileContents { */ public void setFvImagesFvImageNameValue (FvImagesDocument.FvImages.FvImage fi, String name, String value, String newName) { if (fi.getFvImageOptions() == null || fi.getFvImageOptions().getNameValueList() == null) { + FvImagesDocument.FvImages.FvImage.FvImageOptions.NameValue nv = fi.addNewFvImageOptions().addNewNameValue(); + nv.setName(name); + nv.setValue(value); + if (newName != null) { + nv.setName(newName); + } return; } @@ -3013,7 +3089,7 @@ public class FpdFileContents { } int pos = -1; - String[] fvNameArray = fvNameList.split(" "); + String[] fvNameArray = fvNameList.trim().split(" "); Vector vFvNames = new Vector(); diff --git a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java index bdcb193819..ece4fb3e7f 100644 --- a/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java +++ b/Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFlash.java @@ -105,10 +105,10 @@ public class FpdFlash extends IInternalFrame { private JLabel jLabelFvImageNames = null; private JLabel jLabelFvParaName = null; private JTextField jTextFieldFvParaName = null; - private JButton jButtonFvParaAdd = null; + private JButton jButtonFvNameAdd = null; private JScrollPane jScrollPaneFvImageNames = null; private JTable jTableFvImageNames = null; - private JButton jButtonFvParaDel = null; + private JButton jButtonFvNameDel = null; private JPanel jPanelFvImageOpts = null; private JButton jButtonAddFvImage = null; private JScrollPane jScrollPaneFvInfo = null; @@ -169,6 +169,7 @@ public class FpdFlash extends IInternalFrame { private JPanel jPanelBgFvName = null; private JPanel jPanelBgFvImage = null; private JPanel jPanelW = null; + private String oldFvNameInFvImage = ""; public FpdFlash() { super(); @@ -587,6 +588,7 @@ public class FpdFlash extends IInternalFrame { jComboBoxFvParaType = new JComboBox(); jComboBoxFvParaType.addItem("Attributes"); jComboBoxFvParaType.addItem("Components"); + jComboBoxFvParaType.setSelectedIndex(0); jComboBoxFvParaType.setPreferredSize(new java.awt.Dimension(180,20)); jComboBoxFvParaType.addItemListener(new ItemListener() { @@ -634,13 +636,13 @@ public class FpdFlash extends IInternalFrame { * * @return javax.swing.JButton */ - private JButton getJButtonFvParaAdd() { - if (jButtonFvParaAdd == null) { - jButtonFvParaAdd = new JButton(); - jButtonFvParaAdd.setPreferredSize(new Dimension(80, 20)); - jButtonFvParaAdd.setEnabled(true); - jButtonFvParaAdd.setText("Add"); - jButtonFvParaAdd.addActionListener(new AbstractAction() { + private JButton getJButtonFvNameAdd() { + if (jButtonFvNameAdd == null) { + jButtonFvNameAdd = new JButton(); + jButtonFvNameAdd.setPreferredSize(new Dimension(80, 20)); + jButtonFvNameAdd.setEnabled(true); + jButtonFvNameAdd.setText("Add"); + jButtonFvNameAdd.addActionListener(new AbstractAction() { /** * */ @@ -649,26 +651,34 @@ public class FpdFlash extends IInternalFrame { public void actionPerformed(java.awt.event.ActionEvent e) { if (jTextFieldFvParaName.getText().length() > 0){ String[] row = {jTextFieldFvParaName.getText()}; - fvImageNameTableModel.addRow(row); - if (jTableFvInfo.getSelectedRow() < 0) { + int selectedRow = jTableFvInfo.getSelectedRow(); + if (selectedRow < 0) { return; } - String fvNameList = jTableFvInfo.getValueAt(jTableFvInfo.getSelectedRow(), 0)+""; - String type = jTableFvInfo.getValueAt(jTableFvInfo.getSelectedRow(), 1)+""; + String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+""; + String type = jTableFvInfo.getValueAt(selectedRow, 1)+""; int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type); if (fvImagePos < 0) { // new FvImage. + ffc.genFvImagesFvImage(row, jComboBoxFvParaType.getSelectedItem()+"", null); } else { - //append Fv name. + //append Fv name. + ffc.addFvImageNamesInFvImage(fvImagePos, row); } + docConsole.setSaved(false); + fvImageNameTableModel.addRow(row); + fvNameList += " "; + fvNameList += row[0]; + jTableFvInfo.setValueAt(fvNameList.trim(), selectedRow, 0); + jTableFvImageNames.changeSelection(jTableFvImageNames.getRowCount() - 1, 0, false, false); } } }); } - return jButtonFvParaAdd; + return jButtonFvNameAdd; } @@ -694,37 +704,11 @@ public class FpdFlash extends IInternalFrame { */ private JTable getJTableFvImageNames() { if (jTableFvImageNames == null) { - fvImageNameTableModel = new DefaultTableModel(); + fvImageNameTableModel = new NonEditableTableModel(); jTableFvImageNames = new JTable(fvImageNameTableModel); jTableFvImageNames.setRowHeight(20); fvImageNameTableModel.addColumn("FV Image Name"); - jTableFvImageNames.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - public void valueChanged(ListSelectionEvent e) { - if (e.getValueIsAdjusting()) { - return; - } - ListSelectionModel lsm = (ListSelectionModel) e.getSource(); - if (lsm.isSelectionEmpty()) { - return; - } else { - int selectedRow = lsm.getMinSelectionIndex(); - String oldFvName = jTableFvImageNames.getValueAt(selectedRow, 0)+""; - } - } - }); - - jTableFvImageNames.getModel().addTableModelListener(new TableModelListener() { - public void tableChanged(TableModelEvent arg0) { - // TODO Auto-generated method stub - int row = arg0.getFirstRow(); - int col = arg0.getColumn(); - TableModel m = (TableModel) arg0.getSource(); - - if (arg0.getType() == TableModelEvent.UPDATE) { - } - } - }); } return jTableFvImageNames; } @@ -735,13 +719,13 @@ public class FpdFlash extends IInternalFrame { * * @return javax.swing.JButton */ - private JButton getJButtonFvParaDel() { - if (jButtonFvParaDel == null) { - jButtonFvParaDel = new JButton(); - jButtonFvParaDel.setPreferredSize(new Dimension(80, 20)); - jButtonFvParaDel.setEnabled(true); - jButtonFvParaDel.setText("Delete"); - jButtonFvParaDel.addActionListener(new AbstractAction() { + private JButton getJButtonFvNameDel() { + if (jButtonFvNameDel == null) { + jButtonFvNameDel = new JButton(); + jButtonFvNameDel.setPreferredSize(new Dimension(80, 20)); + jButtonFvNameDel.setEnabled(true); + jButtonFvNameDel.setText("Delete"); + jButtonFvNameDel.addActionListener(new AbstractAction() { /** * */ @@ -749,16 +733,58 @@ public class FpdFlash extends IInternalFrame { public void actionPerformed(java.awt.event.ActionEvent e) { if (jTableFvImageNames.getSelectedRow() >= 0){ - + int selectedRow = jTableFvInfo.getSelectedRow(); + if (selectedRow < 0) { + return; + } + + String selectedFvName = jTableFvImageNames.getValueAt(jTableFvImageNames.getSelectedRow(), 0)+""; + String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+""; + String type = jTableFvInfo.getValueAt(selectedRow, 1)+""; + int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type); + + if (fvImagePos < 0) { + return; + } + else { + //delete Fv name. + ffc.updateFvImageNamesInFvImage(fvImagePos, selectedFvName, null); + } + docConsole.setSaved(false); + String newList = removeFvNameFromList(fvNameList, selectedFvName); + jTableFvInfo.setValueAt(newList, selectedRow, 0); fvImageNameTableModel.removeRow(jTableFvImageNames.getSelectedRow()); } } }); } - return jButtonFvParaDel; + return jButtonFvNameDel; } - + private String removeFvNameFromList (String list, String name) { + String[] nameArray = list.split(" "); + int occursAt = -1; + for (int i = 0; i < nameArray.length; ++i) { + if (nameArray[i].equals(name)) { + occursAt = i; + break; + } + } + + if (occursAt == -1) { + return list; + } + + String newList = " "; + for (int j = 0; j < nameArray.length; ++j) { + if (j != occursAt) { + newList += nameArray[j]; + newList += " "; + } + } + + return newList.trim(); + } private JPanel getJPanelFvImageOpts() { @@ -818,33 +844,24 @@ public class FpdFlash extends IInternalFrame { private static final long serialVersionUID = 1L; public void actionPerformed(java.awt.event.ActionEvent e) { - if (jTableFvInfo.isEditing()) { - jTableFvInfo.getCellEditor().stopCellEditing(); - } - if (jTableFvImageOpts.isEditing()) { - jTableFvImageOpts.getCellEditor().stopCellEditing(); - } - if (jTableFvImageNames.getRowCount()== 0){ - return; - } - String imageName = " "; - for (int i = 0; i < jTableFvImageNames.getRowCount(); ++i){ - imageName += (String)jTableFvImageNames.getValueAt(i, 0); - imageName += " "; - } - imageName = imageName.trim(); - - - LinkedHashMap m = null; -// if (jCheckBoxFvImageOpts.isSelected()) { - m = new LinkedHashMap(); - getOptionNameValue(m); +// String imageName = " "; +// for (int i = 0; i < jTableFvImageNames.getRowCount(); ++i){ +// imageName += (String)jTableFvImageNames.getValueAt(i, 0); +// imageName += " "; // } - ffc.genFvImagesFvImage(imageName.split(" "), jComboBoxFvParaType.getSelectedItem()+"", m); - docConsole.setSaved(false); - Object[] row = {imageName, jComboBoxFvParaType.getSelectedItem()}; - fvImageParaTableModel.addRow(row); +// imageName = imageName.trim(); + +// LinkedHashMap m = null; +// m = new LinkedHashMap(); +// getOptionNameValue(m); +// ffc.genFvImagesFvImage(imageName.split(" "), jComboBoxFvParaType.getSelectedItem()+"", m); +// docConsole.setSaved(false); + fvImageNameTableModel.setRowCount(0); + fvOptionTableModel.setRowCount(0); + Object[] row = {"", jComboBoxFvParaType.getSelectedItem()}; + fvImageParaTableModel.addRow(row); + jTableFvInfo.changeSelection(jTableFvInfo.getRowCount() - 1, 0, false, false); } }); } @@ -897,9 +914,12 @@ public class FpdFlash extends IInternalFrame { jComboBoxFvParaType.setSelectedItem(type); String[] fvNames = fvNameList.split(" "); fvImageNameTableModel.setRowCount(0); + fvOptionTableModel.setRowCount(0); for (int i = 0; i < fvNames.length; ++i) { String[] row = { fvNames[i] }; - fvImageNameTableModel.addRow(row); + if (row[0].length() > 0) { + fvImageNameTableModel.addRow(row); + } } int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type); @@ -909,7 +929,6 @@ public class FpdFlash extends IInternalFrame { LinkedHashMap optionMap = new LinkedHashMap(); ffc.getFvImagesFvImageOptions(fvImagePos, optionMap); if (optionMap.size() > 0){ - fvOptionTableModel.setRowCount(0); Set key = optionMap.keySet(); Iterator i = key.iterator(); while (i.hasNext()) { @@ -947,9 +966,15 @@ public class FpdFlash extends IInternalFrame { public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub if (jTableFvInfo.getSelectedRow() >= 0 ) { - ffc.removeFvImagesFvImage(jTableFvInfo.getSelectedRow()); + String fvNameList = fvImageParaTableModel.getValueAt(jTableFvInfo.getSelectedRow(), 0)+""; + int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, jComboBoxFvParaType.getSelectedItem()+""); + + ffc.removeFvImagesFvImage(fvImagePos); fvImageParaTableModel.removeRow(jTableFvInfo.getSelectedRow()); docConsole.setSaved(false); + + fvImageNameTableModel.setRowCount(0); + fvOptionTableModel.setRowCount(0); } } @@ -1158,7 +1183,7 @@ public class FpdFlash extends IInternalFrame { JOptionPane.showMessageDialog(frame, "FDF file does NOT contain valid Erase Polarity."); } else { - ffc.setTypedFvImageNameValue("Attributes", "ErasePolarity", erasePolarity); + ffc.setTypedFvImageNameValue("Attributes", "EFI_ERASE_POLARITY", erasePolarity); } // BugBug: assume all blocks have same size; @@ -1298,8 +1323,26 @@ public class FpdFlash extends IInternalFrame { public void actionPerformed(ActionEvent e) { if (jTextFieldFvImageOptName.getText().length() > 0 && jTextFieldFvImageOptValue.getText().length() > 0){ - String[] row = {jTextFieldFvImageOptName.getText(), jTextFieldFvImageOptValue.getText()}; + int selectedRow = jTableFvInfo.getSelectedRow(); + if (selectedRow < 0) { + return; + } + + String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+""; + String type = jTableFvInfo.getValueAt(selectedRow, 1)+""; + int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type); + String[] row = {jTextFieldFvImageOptName.getText(), jTextFieldFvImageOptValue.getText()}; + + if (fvImagePos < 0) { + return; + } + else { + //append options to FvImage. + ffc.setFvImagesFvImageNameValue(fvImagePos, row[0], row[1]); + } + docConsole.setSaved(false); fvOptionTableModel.addRow(row); + jTableFvImageOpts.changeSelection(jTableFvImageOpts.getRowCount() - 1, 0, false, false); } } }); @@ -1326,7 +1369,22 @@ public class FpdFlash extends IInternalFrame { public void actionPerformed(ActionEvent e) { if (jTableFvImageOpts.getSelectedRow() >= 0){ - fvOptionTableModel.removeRow(jTableFvProp.getSelectedRow()); + int selectedRow = jTableFvInfo.getSelectedRow(); + if (selectedRow < 0) { + return; + } + + String fvNameList = jTableFvInfo.getValueAt(selectedRow, 0)+""; + String type = jTableFvInfo.getValueAt(selectedRow, 1)+""; + int fvImagePos = ffc.getFvImagePosInFvImages(fvNameList, type); + if (fvImagePos < 0) { + return; + } + + String optName = fvOptionTableModel.getValueAt(jTableFvImageOpts.getSelectedRow(), 0)+""; + ffc.removeFvImageNameValue(fvImagePos, optName); + docConsole.setSaved(false); + fvOptionTableModel.removeRow(jTableFvImageOpts.getSelectedRow()); } } }); @@ -1355,7 +1413,7 @@ public class FpdFlash extends IInternalFrame { */ private JTable getJTableFvImageOpts() { if (jTableFvImageOpts == null) { - fvOptionTableModel = new DefaultTableModel(); + fvOptionTableModel = new NonEditableTableModel(); fvOptionTableModel.addColumn("Name"); fvOptionTableModel.addColumn("Value"); jTableFvImageOpts = new JTable(fvOptionTableModel); @@ -1735,7 +1793,7 @@ public class FpdFlash extends IInternalFrame { jTabbedPane.addTab(newFvName, new ModuleOrderPane(newFvName, "")); // Add FvImageNames in Flash String[] fvNames = {newFvName}; - ffc.AddFvImageFvImageNames(fvNames); + ffc.addFvImageFvImageNames(fvNames); } docConsole.setSaved(false); oldFvName = newFvName; @@ -1980,8 +2038,8 @@ public class FpdFlash extends IInternalFrame { if (jPanelBgFvName == null) { jPanelBgFvName = new JPanel(); jPanelBgFvName.setPreferredSize(new java.awt.Dimension(80,55)); - jPanelBgFvName.add(getJButtonFvParaAdd(), null); - jPanelBgFvName.add(getJButtonFvParaDel(), null); + jPanelBgFvName.add(getJButtonFvNameAdd(), null); + jPanelBgFvName.add(getJButtonFvNameDel(), null); } return jPanelBgFvName; }