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