]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/ModulePCDs.java
Fixed a spelling error and changed the Package Headers Tab title to be Package Header...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / ModulePCDs.java
CommitLineData
a13899c5 1/** @file\r
2 \r
3 The file is used to create, update PCD of MSA/MBD file\r
4 \r
5 Copyright (c) 2006, Intel Corporation\r
6 All rights reserved. This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10 \r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 \r
14 **/\r
15package org.tianocore.frameworkwizard.module.ui;\r
16\r
06a19cee 17import java.awt.Dimension;\r
a13899c5 18import java.awt.event.ActionEvent;\r
19import java.awt.event.ComponentEvent;\r
06a19cee 20import java.awt.event.MouseEvent;\r
a13899c5 21import java.util.Vector;\r
22\r
23import javax.swing.JButton;\r
a13899c5 24import javax.swing.JPanel;\r
25import javax.swing.JScrollPane;\r
06a19cee 26import javax.swing.JTable;\r
27import javax.swing.ListSelectionModel;\r
28import javax.swing.event.ListSelectionEvent;\r
a13899c5 29\r
30import org.tianocore.PcdCodedDocument;\r
31import org.tianocore.PcdItemTypes;\r
32import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
33import org.tianocore.PcdCodedDocument.PcdCoded;\r
34import org.tianocore.PcdCodedDocument.PcdCoded.PcdEntry;\r
35import org.tianocore.frameworkwizard.common.DataType;\r
06a19cee 36import org.tianocore.frameworkwizard.common.IDefaultTableModel;\r
a13899c5 37import org.tianocore.frameworkwizard.common.Log;\r
a13899c5 38import org.tianocore.frameworkwizard.common.Tools;\r
79cb6fdb 39import org.tianocore.frameworkwizard.common.Identifications.OpeningModuleType;\r
06a19cee 40import org.tianocore.frameworkwizard.common.ui.IFrame;\r
a13899c5 41import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
79cb6fdb 42import org.tianocore.frameworkwizard.module.Identifications.PcdCoded.PcdCodedIdentification;\r
43import org.tianocore.frameworkwizard.module.Identifications.PcdCoded.PcdCodedVector;\r
06a19cee 44import org.tianocore.frameworkwizard.module.ui.dialog.PCDsDlg;\r
a13899c5 45\r
46/**\r
47 The class is used to create, update PCD of MSA/MBD file\r
48 It extends IInternalFrame\r
49 \r
50\r
51\r
52 **/\r
53public class ModulePCDs extends IInternalFrame {\r
54\r
55 ///\r
56 /// Define class Serial Version UID\r
57 ///\r
58 private static final long serialVersionUID = 2227717658188438696L;\r
59\r
60 //\r
61 //Define class members\r
62 //\r
63 private JPanel jContentPane = null;\r
64\r
a13899c5 65 private JButton jButtonAdd = null;\r
66\r
67 private JButton jButtonRemove = null;\r
68\r
69 private JButton jButtonUpdate = null;\r
70\r
71 private JScrollPane jScrollPane = null;\r
72\r
06a19cee 73 private JScrollPane jScrollPaneTable = null;\r
a13899c5 74\r
06a19cee 75 private JTable jTable = null;\r
a13899c5 76\r
77 //\r
78 // Not used by UI\r
79 //\r
a13899c5 80 private OpeningModuleType omt = null;\r
81\r
82 private ModuleSurfaceArea msa = null;\r
83\r
84 private PcdCodedDocument.PcdCoded pcds = null;\r
85\r
86 private PcdCodedIdentification id = null;\r
87\r
88 private PcdCodedVector vid = new PcdCodedVector();\r
89\r
06a19cee 90 private IDefaultTableModel model = null;\r
a13899c5 91\r
06a19cee 92 private int selectedRow = -1;\r
a13899c5 93\r
94 /**\r
95 This method initializes jButtonAdd \r
96 \r
97 @return javax.swing.JButton jButtonAdd\r
98 \r
99 **/\r
100 private JButton getJButtonAdd() {\r
101 if (jButtonAdd == null) {\r
102 jButtonAdd = new JButton();\r
103 jButtonAdd.setBounds(new java.awt.Rectangle(230, 245, 80, 20));\r
104 jButtonAdd.setText("Add");\r
105 jButtonAdd.addActionListener(this);\r
106 jButtonAdd.setPreferredSize(new java.awt.Dimension(80, 20));\r
107 }\r
108 return jButtonAdd;\r
109 }\r
110\r
111 /**\r
112 This method initializes jButtonRemove \r
113 \r
114 @return javax.swing.JButton jButtonRemove\r
115 \r
116 **/\r
117 private JButton getJButtonRemove() {\r
118 if (jButtonRemove == null) {\r
119 jButtonRemove = new JButton();\r
120 jButtonRemove.setBounds(new java.awt.Rectangle(400, 245, 80, 20));\r
121 jButtonRemove.setText("Remove");\r
122 jButtonRemove.addActionListener(this);\r
123 jButtonRemove.setPreferredSize(new java.awt.Dimension(80, 20));\r
124 }\r
125 return jButtonRemove;\r
126 }\r
127\r
128 /**\r
129 This method initializes jButtonUpdate \r
130 \r
131 @return javax.swing.JButton jButtonUpdate\r
132 \r
133 **/\r
134 private JButton getJButtonUpdate() {\r
135 if (jButtonUpdate == null) {\r
136 jButtonUpdate = new JButton();\r
137 jButtonUpdate.setBounds(new java.awt.Rectangle(315, 245, 80, 20));\r
138 jButtonUpdate.setPreferredSize(new java.awt.Dimension(80, 20));\r
06a19cee 139 jButtonUpdate.setText("Edit");\r
a13899c5 140 jButtonUpdate.addActionListener(this);\r
141 }\r
142 return jButtonUpdate;\r
143 }\r
144\r
a13899c5 145 /**\r
146 This method initializes jScrollPane \r
147 \r
148 @return javax.swing.JScrollPane \r
149 */\r
150 private JScrollPane getJScrollPane() {\r
151 if (jScrollPane == null) {\r
152 jScrollPane = new JScrollPane();\r
153 jScrollPane.setViewportView(getJContentPane());\r
154 }\r
155 return jScrollPane;\r
156 }\r
157\r
158 /**\r
06a19cee 159 This method initializes jScrollPaneTable \r
160 \r
161 @return javax.swing.JScrollPane \r
162 **/\r
163 private JScrollPane getJScrollPaneTable() {\r
164 if (jScrollPaneTable == null) {\r
165 jScrollPaneTable = new JScrollPane();\r
166 jScrollPaneTable.setBounds(new java.awt.Rectangle(15, 10, 470, 420));\r
167 jScrollPaneTable.setPreferredSize(new Dimension(470, 420));\r
168 jScrollPaneTable.setViewportView(getJTable());\r
a13899c5 169 }\r
06a19cee 170 return jScrollPaneTable;\r
a13899c5 171 }\r
172\r
173 /**\r
06a19cee 174 This method initializes jTable \r
175 \r
176 @return javax.swing.JTable \r
177 **/\r
178 private JTable getJTable() {\r
179 if (jTable == null) {\r
180 jTable = new JTable();\r
181 model = new IDefaultTableModel();\r
182 jTable = new JTable(model);\r
183 jTable.setRowHeight(20);\r
184\r
185 model.addColumn("Name");\r
186 model.addColumn("Type");\r
187 model.addColumn("Value");\r
188\r
189 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
190 jTable.getSelectionModel().addListSelectionListener(this);\r
191 jTable.getModel().addTableModelListener(this);\r
192 jTable.addMouseListener(this);\r
a13899c5 193 }\r
06a19cee 194 return jTable;\r
a13899c5 195 }\r
196\r
06a19cee 197 public static void main(String[] args) {\r
198\r
a13899c5 199 }\r
200\r
201 /**\r
06a19cee 202 This method initializes this\r
203 \r
a13899c5 204 **/\r
06a19cee 205 private void init() {\r
206 this.setSize(500, 515);\r
207 this.setContentPane(getJScrollPane());\r
208 this.setTitle("Pcd Coded");\r
a13899c5 209 }\r
210\r
211 /**\r
06a19cee 212 This method initializes this\r
213 Fill values to all fields if these values are not empty\r
214 \r
215 @param inPackageDependencies\r
a13899c5 216\r
217 **/\r
06a19cee 218 private void init(PcdCoded inPcdCodeds) {\r
219 init();\r
220 this.pcds = inPcdCodeds;\r
221\r
222 if (this.pcds != null) {\r
223 if (this.pcds.getPcdEntryList().size() > 0) {\r
224 for (int index = 0; index < this.pcds.getPcdEntryList().size(); index++) {\r
225 String arg0 = pcds.getPcdEntryList().get(index).getCName();\r
226 String arg1 = pcds.getPcdEntryList().get(index).getTokenSpaceGuidCName();\r
227\r
228 String arg2 = pcds.getPcdEntryList().get(index).getFeatureFlag();\r
229 Vector<String> arg3 = Tools.convertListToVector(pcds.getPcdEntryList().get(index).getSupArchList());\r
230\r
231 String arg4 = pcds.getPcdEntryList().get(index).getDefaultValue();\r
232 String arg5 = pcds.getPcdEntryList().get(index).getHelpText();\r
233 String arg6 = null;\r
234 if (pcds.getPcdEntryList().get(index).getPcdItemType() != null) {\r
235 arg6 = pcds.getPcdEntryList().get(index).getPcdItemType().toString();\r
236 }\r
a13899c5 237\r
06a19cee 238 id = new PcdCodedIdentification(arg0, arg1, arg2, arg3, arg4, arg5, arg6);\r
239 vid.addPcdCoded(id);\r
240 }\r
241 }\r
242 }\r
243 showTable();\r
a13899c5 244 }\r
245\r
a13899c5 246 /**\r
247 This is the default constructor\r
248 \r
249 **/\r
250 public ModulePCDs() {\r
251 super();\r
252 init();\r
253 this.setVisible(true);\r
254 }\r
255\r
256 /**\r
257 This is the override edit constructor\r
258 \r
259 @param inPcds The input data of PCDsDocument.PCDs\r
260 \r
261 **/\r
262 public ModulePCDs(OpeningModuleType inOmt) {\r
263 super();\r
264 this.omt = inOmt;\r
265 this.msa = omt.getXmlMsa();\r
266 init(msa.getPcdCoded());\r
267 this.setVisible(true);\r
268 }\r
269\r
a13899c5 270 /**\r
271 This method initializes jContentPane\r
272 \r
273 @return javax.swing.JPanel jContentPane\r
274 \r
275 **/\r
276 private JPanel getJContentPane() {\r
277 if (jContentPane == null) {\r
a13899c5 278 jContentPane = new JPanel();\r
279 jContentPane.setLayout(null);\r
06a19cee 280 jContentPane.setPreferredSize(new java.awt.Dimension(490, 490));\r
281\r
a13899c5 282 jContentPane.add(getJButtonAdd(), null);\r
283 jContentPane.add(getJButtonRemove(), null);\r
284 jContentPane.add(getJButtonUpdate(), null);\r
06a19cee 285 jContentPane.add(getJScrollPaneTable(), null);\r
a13899c5 286 }\r
287 return jContentPane;\r
288 }\r
289\r
06a19cee 290 private void showEdit(int index) {\r
291 PCDsDlg dlg = new PCDsDlg(vid.getPcdCoded(index), new IFrame());\r
292 int result = dlg.showDialog();\r
293 if (result == DataType.RETURN_TYPE_OK) {\r
294 if (index == -1) {\r
295 this.vid.addPcdCoded(dlg.getId());\r
296 } else {\r
297 this.vid.setPcdCoded(dlg.getId(), index);\r
298 }\r
299 this.showTable();\r
300 this.save();\r
301 dlg.dispose();\r
302 }\r
303 if (result == DataType.RETURN_TYPE_CANCEL) {\r
304 dlg.dispose();\r
305 }\r
306 }\r
307\r
a13899c5 308 /**\r
06a19cee 309 Clear all table rows\r
a13899c5 310 \r
311 **/\r
06a19cee 312 private void clearAll() {\r
313 if (model != null) {\r
314 for (int index = model.getRowCount() - 1; index >= 0; index--) {\r
315 model.removeRow(index);\r
316 }\r
317 }\r
318 }\r
319\r
320 /**\r
321 Read content of vector and put then into table\r
322 \r
323 **/\r
324 private void showTable() {\r
325 clearAll();\r
326\r
327 if (vid.size() > 0) {\r
328 for (int index = 0; index < vid.size(); index++) {\r
329 model.addRow(vid.toStringVector(index));\r
330 }\r
331 }\r
332 this.jTable.repaint();\r
333 this.jTable.updateUI();\r
a13899c5 334 }\r
335\r
336 /* (non-Javadoc)\r
337 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
338 *\r
339 * Override actionPerformed to listen all actions\r
340 * \r
341 */\r
342 public void actionPerformed(ActionEvent arg0) {\r
343 if (arg0.getSource() == jButtonAdd) {\r
06a19cee 344 showEdit(-1);\r
a13899c5 345 }\r
346 if (arg0.getSource() == jButtonUpdate) {\r
06a19cee 347 if (this.selectedRow < 0) {\r
348 Log.err("Please select one record first.");\r
a13899c5 349 return;\r
350 }\r
06a19cee 351 showEdit(selectedRow);\r
a13899c5 352 }\r
a13899c5 353\r
06a19cee 354 if (arg0.getSource() == jButtonRemove) {\r
355 if (jTable.isEditing()) {\r
356 jTable.getCellEditor().stopCellEditing();\r
a13899c5 357 }\r
06a19cee 358 if (selectedRow > -1) {\r
359 this.model.removeRow(selectedRow);\r
360 this.vid.removePcdCoded(selectedRow);\r
361 selectedRow = -1;\r
362 this.save();\r
a13899c5 363 }\r
364 }\r
a13899c5 365 }\r
366\r
367 /**\r
368 Save all components of PCDs\r
369 if exists pcds, set the value directly\r
370 if not exists pcds, new an instance first\r
371 \r
372 **/\r
373 public void save() {\r
374 try {\r
375 int count = this.vid.size();\r
376\r
377 this.pcds = PcdCoded.Factory.newInstance();\r
378 if (count > 0) {\r
379 for (int index = 0; index < count; index++) {\r
380 PcdEntry p = PcdEntry.Factory.newInstance();\r
381 if (!isEmpty(vid.getPcdCoded(index).getName())) {\r
382 p.setCName(vid.getPcdCoded(index).getName());\r
383 }\r
384 if (!isEmpty(vid.getPcdCoded(index).getGuid())) {\r
385 p.setTokenSpaceGuidCName(vid.getPcdCoded(index).getGuid());\r
386 }\r
387 if (!isEmpty(vid.getPcdCoded(index).getFeatureFlag())) {\r
388 p.setFeatureFlag(vid.getPcdCoded(index).getFeatureFlag());\r
389 }\r
06a19cee 390 if (vid.getPcdCoded(index).getSupArchList() != null\r
391 && vid.getPcdCoded(index).getSupArchList().size() > 0) {\r
a13899c5 392 p.setSupArchList(vid.getPcdCoded(index).getSupArchList());\r
393 }\r
394 if (!isEmpty(vid.getPcdCoded(index).getValue())) {\r
395 p.setDefaultValue(vid.getPcdCoded(index).getValue());\r
396 }\r
397 if (!isEmpty(vid.getPcdCoded(index).getHelp())) {\r
398 p.setHelpText(vid.getPcdCoded(index).getHelp());\r
399 }\r
400 if (!isEmpty(vid.getPcdCoded(index).getType())) {\r
401 p.setPcdItemType(PcdItemTypes.Enum.forString(vid.getPcdCoded(index).getType()));\r
402 }\r
403 this.pcds.addNewPcdEntry();\r
404 this.pcds.setPcdEntryArray(pcds.getPcdEntryList().size() - 1, p);\r
405 }\r
406 }\r
407\r
408 this.msa.setPcdCoded(pcds);\r
409 this.omt.setSaved(false);\r
410 } catch (Exception e) {\r
411 Log.err("Update Hobs", e.getMessage());\r
412 }\r
413 }\r
414\r
06a19cee 415 /* (non-Javadoc)\r
416 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)\r
417 *\r
418 */\r
419 public void valueChanged(ListSelectionEvent arg0) {\r
420 if (arg0.getValueIsAdjusting()) {\r
421 return;\r
422 }\r
423 ListSelectionModel lsm = (ListSelectionModel) arg0.getSource();\r
424 if (lsm.isSelectionEmpty()) {\r
425 return;\r
426 } else {\r
427 selectedRow = lsm.getMinSelectionIndex();\r
428 }\r
429 }\r
430\r
431 /* (non-Javadoc)\r
432 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)\r
433 *\r
434 */\r
435 public void mouseClicked(MouseEvent arg0) {\r
436 if (arg0.getClickCount() == 2) {\r
437 if (this.selectedRow < 0) {\r
438 return;\r
439 } else {\r
440 showEdit(selectedRow);\r
441 }\r
442 }\r
443 }\r
444\r
a13899c5 445 /* (non-Javadoc)\r
446 * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)\r
447 * \r
448 * Override componentResized to resize all components when frame's size is changed\r
449 */\r
450 public void componentResized(ComponentEvent arg0) {\r
451 int intCurrentWidth = this.getJContentPane().getWidth();\r
452 int intCurrentHeight = this.getJContentPane().getHeight();\r
453 int intPreferredWidth = this.getJContentPane().getPreferredSize().width;\r
454 int intPreferredHeight = this.getJContentPane().getPreferredSize().height;\r
455\r
06a19cee 456 resizeComponent(this.jScrollPaneTable, intCurrentWidth, intCurrentHeight, intPreferredWidth, intPreferredHeight);\r
457 relocateComponent(this.jButtonAdd, intCurrentWidth, intCurrentHeight, intPreferredWidth, intPreferredHeight,\r
458 DataType.SPACE_TO_RIGHT_FOR_ADD_BUTTON, DataType.SPACE_TO_BOTTOM_FOR_ADD_BUTTON);\r
459 relocateComponent(this.jButtonRemove, intCurrentWidth, intCurrentHeight, intPreferredWidth, intPreferredHeight,\r
460 DataType.SPACE_TO_RIGHT_FOR_REMOVE_BUTTON, DataType.SPACE_TO_BOTTOM_FOR_REMOVE_BUTTON);\r
461 relocateComponent(this.jButtonUpdate, intCurrentWidth, intCurrentHeight, intPreferredWidth, intPreferredHeight,\r
462 DataType.SPACE_TO_RIGHT_FOR_UPDATE_BUTTON, DataType.SPACE_TO_BOTTOM_FOR_UPDATE_BUTTON);\r
a13899c5 463 }\r
a13899c5 464}\r