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