package org.tianocore.frameworkwizard.packaging.ui;\r
\r
import java.awt.Dimension;\r
+import java.awt.FontMetrics;\r
import java.awt.event.ActionEvent;\r
import java.awt.event.ComponentEvent;\r
\r
import javax.swing.JCheckBox;\r
import org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList;\r
import org.tianocore.frameworkwizard.platform.ui.ListEditor;\r
+import org.tianocore.frameworkwizard.platform.ui.LongTextEditor;\r
\r
import java.awt.Rectangle;\r
import java.util.Vector;\r
*/\r
private static final long serialVersionUID = 1L;\r
\r
- static JFrame frame;\r
+ private JFrame topFrame;\r
\r
private JPanel jContentPane = null; \r
\r
private JLabel jLabelSupMod = null;\r
\r
private JLabel jLabelSupArch = null;\r
+ \r
+ private final int pcdCNameMinWidth = 200;\r
+ private final int pcdTokenMinWidth = 100;\r
+ private final int pcdTokenSpaceMinWidth = 200;\r
+ private final int datumTypeMinWidth = 80;\r
+ private final int defaultValueMinWidth = 100;\r
+ private final int helpTextMinWidth = 200;\r
+ private final int usageMinWidth = 60;\r
+ private final int supArchMinWidth = 200;\r
+ private final int supModMinWidth = 200;\r
+ \r
+// private Object boolModifyLock = new Object();\r
+// private boolean exclusiveUsage = false;\r
\r
/**\r
This method initializes this\r
this.setTitle("PCD Declarations");\r
this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
\r
+ int xPos = jCheckBoxPatchInMod.getX() + jCheckBoxPatchInMod.getWidth();\r
+ jCheckBoxFixedAtBuild.setLocation(xPos,133);\r
+ \r
+ xPos = jCheckBoxFeatureFlag.getX() + jCheckBoxFeatureFlag.getWidth();\r
+ jCheckBoxDyn.setLocation(xPos,161);\r
+ \r
+ xPos = jCheckBoxDyn.getX() + jCheckBoxDyn.getWidth();\r
+ jCheckBoxDynEx.setLocation(xPos,161);\r
+ \r
}\r
\r
/**\r
/**\r
This is the default constructor\r
**/\r
- public SpdPcdDefs() {\r
+ public SpdPcdDefs(JFrame frame) {\r
super();\r
init();\r
initialize();\r
- \r
+ topFrame = frame;\r
}\r
\r
- public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa) {\r
- this();\r
+ public SpdPcdDefs(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa, JFrame frame) {\r
+ this(frame);\r
sfc = new SpdFileContents(inPsa);\r
init(sfc);\r
}\r
\r
- public SpdPcdDefs(OpeningPackageType opt) {\r
- this(opt.getXmlSpd());\r
+ public SpdPcdDefs(OpeningPackageType opt, JFrame frame) {\r
+ this(opt.getXmlSpd(), frame);\r
docConsole = opt;\r
}\r
/**\r
}\r
\r
private void init(SpdFileContents sfc){\r
- initFrame(sfc);\r
+ \r
+ if (sfc.getSpdPkgDefsRdOnly().equals("true")) {\r
+ JOptionPane.showMessageDialog(topFrame, "This is a read-only package. You will not be able to edit contents in table.");\r
+ }\r
+ initFrame();\r
+ \r
if (sfc.getSpdPcdDefinitionCount() == 0) {\r
return ;\r
}\r
i++;\r
}\r
\r
- \r
- \r
}\r
\r
private JScrollPane getJContentPane(){\r
jLabelSupArch.setBounds(new java.awt.Rectangle(241,192,89,16));\r
jLabelSupArch.setText("Supported Architectures");\r
jLabelSupArch.setEnabled(true);\r
+ FontMetrics fm = jLabelSupArch.getFontMetrics(jLabelSupArch.getFont());\r
+ jLabelSupArch.setSize(fm.stringWidth(jLabelSupArch.getText()) + 10, 20);\r
jLabelSupMod = new JLabel();\r
jLabelSupMod.setBounds(new java.awt.Rectangle(15,193,103,16));\r
- jLabelSupMod.setText("Supported Module type");\r
+ jLabelSupMod.setText("Supported Module types");\r
jLabelSupMod.setEnabled(true);\r
+ fm = jLabelSupMod.getFontMetrics(jLabelSupMod.getFont());\r
+ jLabelSupMod.setSize(fm.stringWidth(jLabelSupMod.getText()) + 10, 20);\r
starLabel = new StarLabel();\r
starLabel.setBounds(new java.awt.Rectangle(2,134,10,20));\r
jLabelDefVal = new JLabel();\r
jLabelDefVal.setBounds(new java.awt.Rectangle(277,84,80,20));\r
jLabelDefVal.setText("Default Value");\r
+ fm = jLabelDefVal.getFontMetrics(jLabelDefVal.getFont());\r
+ jLabelDefVal.setSize(fm.stringWidth(jLabelDefVal.getText()) + 10, 20);\r
jLabelVarVal = new JLabel();\r
- jLabelVarVal.setBounds(new java.awt.Rectangle(11,133,84,20));\r
+ jLabelVarVal.setBounds(new java.awt.Rectangle(11,133,100,20));\r
jLabelVarVal.setText("Valid Usage");\r
jLabelC_Name = new JLabel();\r
jLabelC_Name.setText("C Name");\r
jContentPane.add(jLabelTokenSpace, null);\r
\r
**/\r
- private void initFrame(SpdFileContents sfc) {\r
+ private void initFrame() {\r
\r
jComboBoxDataType.addItem("UINT8");\r
jComboBoxDataType.addItem("UINT16");\r
for (int i = 0; i < vGuidCName.size(); ++i) {\r
jComboBoxTsGuid.addItem(vGuidCName.get(i));\r
}\r
+ \r
+ boolean editable = true;\r
+ if (sfc.getSpdPkgDefsRdOnly().equals("true")) {\r
+ editable = false;\r
+ }\r
+ \r
+ jButtonAdd.setEnabled(editable);\r
+ jButtonRemove.setEnabled(editable);\r
+ jButtonClearAll.setEnabled(editable);\r
+ jTable.setEnabled(editable);\r
}\r
\r
public void actionPerformed(ActionEvent arg0) {\r
jCheckBoxFeatureFlag.isSelected(), jCheckBoxFixedAtBuild.isSelected(),\r
jCheckBoxPatchInMod.isSelected(), jCheckBoxDyn.isSelected(), jCheckBoxDynEx.isSelected(),\r
archList, modTypeList};\r
+ try {\r
if (!dataValidation(row)) {\r
return;\r
}\r
if (tokenCNameExisted(jTextFieldToken.getText(), jTextFieldC_Name.getText())) {\r
return;\r
}\r
+ } catch (Exception e) {\r
+ JOptionPane.showMessageDialog(this, "Illegal Token:"+ e.getCause());\r
+ return;\r
+ }\r
\r
model.addRow(row);\r
jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
private JTextField getJTextFieldDefaultValue() {\r
if (jTextFieldDefaultValue == null) {\r
jTextFieldDefaultValue = new JTextField();\r
- jTextFieldDefaultValue.setBounds(new java.awt.Rectangle(368,84,105,20));\r
+ int xPos = jLabelDefVal.getX() + jLabelDefVal.getWidth();\r
+ jTextFieldDefaultValue.setBounds(new java.awt.Rectangle(xPos,84,105,20));\r
jTextFieldDefaultValue.setPreferredSize(new java.awt.Dimension(104,20));\r
}\r
return jTextFieldDefaultValue;\r
model.addColumn("SupportedArch");\r
model.addColumn("SupportedModule");\r
\r
+ TableColumn column = jTable.getColumnModel().getColumn(0);\r
+ column.setMinWidth(this.pcdCNameMinWidth);\r
+ column = jTable.getColumnModel().getColumn(1);\r
+ column.setMinWidth(this.pcdTokenMinWidth);\r
+ column = jTable.getColumnModel().getColumn(2);\r
+ column.setMinWidth(this.pcdTokenSpaceMinWidth);\r
+ column = jTable.getColumnModel().getColumn(3);\r
+ column.setMinWidth(this.datumTypeMinWidth);\r
+ column = jTable.getColumnModel().getColumn(4);\r
+ column.setMinWidth(this.defaultValueMinWidth);\r
+ column = jTable.getColumnModel().getColumn(5);\r
+ column.setMinWidth(this.helpTextMinWidth);\r
+ column = jTable.getColumnModel().getColumn(6);\r
+ column.setMinWidth(this.usageMinWidth);\r
+ column = jTable.getColumnModel().getColumn(7);\r
+ column.setMinWidth(this.usageMinWidth);\r
+ column = jTable.getColumnModel().getColumn(8);\r
+ column.setMinWidth(this.usageMinWidth);\r
+ column = jTable.getColumnModel().getColumn(9);\r
+ column.setMinWidth(this.usageMinWidth);\r
+ column = jTable.getColumnModel().getColumn(10);\r
+ column.setMinWidth(this.usageMinWidth);\r
+ column = jTable.getColumnModel().getColumn(11);\r
+ column.setMinWidth(this.supArchMinWidth);\r
+ column = jTable.getColumnModel().getColumn(12);\r
+ column.setMinWidth(this.supModMinWidth);\r
+ \r
//ToDo: add a valid usage editor\r
\r
JComboBox jComboBoxDataType = new JComboBox();\r
jComboBoxDataType.addItem("BOOLEAN");\r
TableColumn dataTypeColumn = jTable.getColumnModel().getColumn(3);\r
dataTypeColumn.setCellEditor(new DefaultCellEditor(jComboBoxDataType));\r
+ \r
+ jTable.getColumnModel().getColumn(5).setCellEditor(new LongTextEditor(topFrame));\r
\r
Vector<String> vArch = new Vector<String>();\r
vArch.add("IA32");\r
vArch.add("EBC");\r
vArch.add("ARM");\r
vArch.add("PPC");\r
- jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch));\r
+ jTable.getColumnModel().getColumn(11).setCellEditor(new ListEditor(vArch, topFrame));\r
\r
Vector<String> vModule = new Vector<String>();\r
vModule.add("BASE");\r
vModule.add("UEFI_DRIVER");\r
vModule.add("UEFI_APPLICATION");\r
vModule.add("USER_DEFINED");\r
- jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule));\r
+ jTable.getColumnModel().getColumn(12).setCellEditor(new ListEditor(vModule, topFrame));\r
\r
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
\r
String usage = getValidUsage(new Boolean(m.getValueAt(row, 6)+""), new Boolean(m.getValueAt(row, 7)+""), new Boolean(m.getValueAt(row, 8)+""), new Boolean(m.getValueAt(row, 9)+""), new Boolean(m.getValueAt(row, 10)+""));\r
if (usage.length() == 0) {\r
- JOptionPane.showMessageDialog(frame, "You must choose at least one usage for PCD entry.");\r
+ JOptionPane.showMessageDialog(this, "You must choose at least one usage for PCD entry.");\r
return;\r
}\r
+\r
if (column <= 10 && column >= 6) {\r
- if (compareTwoVectors(stringToVector(usage), stringToVector(sa[6]))) {\r
+ Vector<String> v = stringToVector(usage);\r
+ if (compareTwoVectors(v, stringToVector(sa[6]))) {\r
return;\r
}\r
+ if (v.contains("FEATURE_FLAG")/* && v.size() > 1 && !exclusiveUsage*/) {\r
+ if (v.size() > 1) {\r
+ JOptionPane.showMessageDialog(this, "Usage Feature Flag can NOT co-exist with others.");\r
+ return;\r
+ }\r
+// synchronized (boolModifyLock){\r
+// exclusiveUsage = true;\r
+// }\r
+// m.setValueAt(false, row, 7);\r
+// m.setValueAt(false, row, 8);\r
+// m.setValueAt(false, row, 9);\r
+// m.setValueAt(false, row, 10);\r
+ else {\r
+ m.setValueAt("BOOLEAN", row, 3);\r
+ }\r
+ \r
+ }\r
}\r
\r
if (column == 11) {\r
}\r
\r
Object[] o = {cName, token, ts, dataType, defaultVal, help};\r
+ try {\r
if (!dataValidation(o)){\r
return;\r
}\r
+ }\r
+ catch (Exception e) {\r
+ JOptionPane.showMessageDialog(this, "Illegal Token:" + e.getCause());\r
+ return;\r
+ }\r
docConsole.setSaved(false);\r
sfc.updateSpdPcdDefinition(row, cName, token, dataType, usage, ts, defaultVal, help, archList, modTypeList);\r
}\r
jCheckBoxFeatureFlag = new JCheckBox();\r
jCheckBoxFeatureFlag.setBounds(new java.awt.Rectangle(156,161,100,21));\r
jCheckBoxFeatureFlag.setText("Feature Flag");\r
- jCheckBoxFeatureFlag.setPreferredSize(new java.awt.Dimension(21,20));\r
+ FontMetrics fm = jCheckBoxFeatureFlag.getFontMetrics(jCheckBoxFeatureFlag.getFont());\r
+ jCheckBoxFeatureFlag.setSize(fm.stringWidth(jCheckBoxFeatureFlag.getText()) + 30, 20);\r
jCheckBoxFeatureFlag.addItemListener(new java.awt.event.ItemListener() {\r
public void itemStateChanged(java.awt.event.ItemEvent e) {\r
if (jCheckBoxFeatureFlag.isSelected()) {\r
jCheckBoxFixedAtBuild.setSelected(false);\r
jCheckBoxDyn.setSelected(false);\r
jCheckBoxDynEx.setSelected(false);\r
+ jComboBoxDataType.setSelectedItem("BOOLEAN");\r
}\r
}\r
});\r
private JCheckBox getJCheckBoxFixedAtBuild() {\r
if (jCheckBoxFixedAtBuild == null) {\r
jCheckBoxFixedAtBuild = new JCheckBox();\r
- jCheckBoxFixedAtBuild.setBounds(new java.awt.Rectangle(312,133,108,20));\r
+ \r
jCheckBoxFixedAtBuild.setText("Fixed at Build");\r
- jCheckBoxFixedAtBuild.setPreferredSize(new java.awt.Dimension(21,20));\r
+ FontMetrics fm = jCheckBoxFixedAtBuild.getFontMetrics(jCheckBoxFixedAtBuild.getFont());\r
+ jCheckBoxFixedAtBuild.setSize(fm.stringWidth(jCheckBoxFixedAtBuild.getText()) + 30, 20);\r
jCheckBoxFixedAtBuild.addItemListener(new java.awt.event.ItemListener() {\r
public void itemStateChanged(java.awt.event.ItemEvent e) {\r
if (jCheckBoxFixedAtBuild.isSelected()) {\r
private JCheckBox getJCheckBoxPatchInMod() {\r
if (jCheckBoxPatchInMod == null) {\r
jCheckBoxPatchInMod = new JCheckBox();\r
+ \r
jCheckBoxPatchInMod.setBounds(new java.awt.Rectangle(156,133,154,20));\r
jCheckBoxPatchInMod.setText("Patchable in Module");\r
- jCheckBoxPatchInMod.setPreferredSize(new java.awt.Dimension(21,20));\r
+ FontMetrics fm = jCheckBoxPatchInMod.getFontMetrics(jCheckBoxPatchInMod.getFont());\r
+ jCheckBoxPatchInMod.setSize(fm.stringWidth(jCheckBoxPatchInMod.getText()) + 30, 20);\r
jCheckBoxPatchInMod.addItemListener(new java.awt.event.ItemListener() {\r
public void itemStateChanged(java.awt.event.ItemEvent e) {\r
if (jCheckBoxPatchInMod.isSelected()) {\r
private JCheckBox getJCheckBoxDyn() {\r
if (jCheckBoxDyn == null) {\r
jCheckBoxDyn = new JCheckBox();\r
- jCheckBoxDyn.setBounds(new java.awt.Rectangle(278,161,80,20));\r
+ \r
jCheckBoxDyn.setText("Dynamic");\r
- jCheckBoxDyn.setPreferredSize(new java.awt.Dimension(21,20));\r
+ FontMetrics fm = jCheckBoxDyn.getFontMetrics(jCheckBoxDyn.getFont());\r
+ jCheckBoxDyn.setSize(fm.stringWidth(jCheckBoxDyn.getText()) + 30, 20);\r
jCheckBoxDyn.addItemListener(new java.awt.event.ItemListener() {\r
public void itemStateChanged(java.awt.event.ItemEvent e) {\r
if (jCheckBoxDyn.isSelected()) {\r
private JCheckBox getJCheckBoxDynEx() {\r
if (jCheckBoxDynEx == null) {\r
jCheckBoxDynEx = new JCheckBox();\r
- jCheckBoxDynEx.setBounds(new java.awt.Rectangle(371,161,99,20));\r
+ \r
jCheckBoxDynEx.setText("DynamicEx");\r
- jCheckBoxDynEx.setPreferredSize(new java.awt.Dimension(21,20));\r
+ FontMetrics fm = jCheckBoxDynEx.getFontMetrics(jCheckBoxDynEx.getFont());\r
+ jCheckBoxDynEx.setSize(fm.stringWidth(jCheckBoxDynEx.getText()) + 30, 20);\r
jCheckBoxDynEx.addItemListener(new java.awt.event.ItemListener() {\r
public void itemStateChanged(java.awt.event.ItemEvent e) {\r
if (jCheckBoxDynEx.isSelected()) {\r
return usage.trim();\r
}\r
\r
- private boolean tokenCNameExisted(String token, String cName) {\r
- Integer inputToken = Integer.decode(token);\r
+ private boolean tokenCNameExisted(String token, String cName) throws Exception{\r
+ Long inputToken = Long.decode(token);\r
\r
- for (int i = 0; i < jTable.getRowCount(); ++i) {\r
- if (jTable.getValueAt(i, 0).equals(cName)) {\r
- JOptionPane.showMessageDialog(frame, "C_Name already existed in table.");\r
+ for (int i = 0; i < model.getRowCount(); ++i) {\r
+ if (model.getValueAt(i, 0).equals(cName)) {\r
+ JOptionPane.showMessageDialog(this, "C_Name already existed in table.");\r
return true;\r
}\r
- if (jTable.getValueAt(i, 1).equals(token)) {\r
- JOptionPane.showMessageDialog(frame, "Token already existed in table.");\r
+ if (model.getValueAt(i, 1).equals(token)) {\r
+ JOptionPane.showMessageDialog(this, "Token already existed in table.");\r
return true;\r
}\r
- Integer tokenValue = Integer.decode(jTable.getValueAt(i, 1)+"");\r
+ Long tokenValue = Long.decode(model.getValueAt(i, 1)+"");\r
if (tokenValue.equals(inputToken)) {\r
- JOptionPane.showMessageDialog(frame, "Same token value already existed in table.");\r
+ JOptionPane.showMessageDialog(this, "Same token value already existed in table.");\r
return true;\r
}\r
\r
\r
private boolean checkValidUsage(boolean[] b) {\r
if (!(b[0] || b[1] || b[2] || b[3] || b[4])){\r
- JOptionPane.showMessageDialog(frame, "You must specify at least one usage.");\r
+ JOptionPane.showMessageDialog(this, "You must specify at least one usage.");\r
return false;\r
}\r
return true;\r
}\r
- private boolean dataValidation(Object[] row) {\r
+ private boolean dataValidation(Object[] row) throws Exception{\r
\r
if (!DataValidation.isC_NameType(row[0].toString())) {\r
- JOptionPane.showMessageDialog(frame, "C_Name is NOT C_NameType.");\r
+ JOptionPane.showMessageDialog(this, "C_Name is NOT C_NameType.");\r
return false;\r
}\r
if (!DataValidation.isHexDoubleWordDataType(row[1].toString()) && \r
- !DataValidation.isInt(row[1].toString(), Integer.MIN_VALUE, Integer.MAX_VALUE)) {\r
- JOptionPane.showMessageDialog(frame, "Token is NOT correct.");\r
+ !DataValidation.isLongInt(row[1].toString(), 1, Long.MAX_VALUE)) {\r
+ JOptionPane.showMessageDialog(this, "Token is NOT correct.");\r
return false;\r
}\r
if (!DataValidation.isC_NameType(row[2].toString())) {\r
- JOptionPane.showMessageDialog(frame, "Token Space is NOT C_NameType");\r
+ JOptionPane.showMessageDialog(this, "Token Space is NOT C_NameType");\r
return false;\r
}\r
if (row[5].toString().length() == 0) {\r
- JOptionPane.showMessageDialog(frame, "HelpText could NOT be empty.");\r
+ JOptionPane.showMessageDialog(this, "HelpText could NOT be empty.");\r
return false;\r
}\r
return true;\r
}\r
\r
protected Vector<String> stringToVector(String s){\r
+ Vector<String> v = new Vector<String>();\r
if (s == null) {\r
- return null;\r
+ return v;\r
}\r
String[] sArray = s.split(" ");\r
- Vector<String> v = new Vector<String>();\r
+ \r
for (int i = 0; i < sArray.length; ++i) {\r
v.add(sArray[i]);\r
}\r