]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/packaging/ui/SpdPackageHeaders.java
Delete useless file SpdPackageDefinitions.java;
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / packaging / ui / SpdPackageHeaders.java
... / ...
CommitLineData
1/** @file\r
2 Java class SpdPackageHeaders is GUI for create library definition elements of spd file.\r
3 \r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12**/\r
13package org.tianocore.frameworkwizard.packaging.ui;\r
14\r
15import java.awt.Dimension;\r
16import java.awt.event.ActionEvent;\r
17import java.awt.event.ComponentEvent;\r
18import java.io.File;\r
19\r
20import javax.swing.DefaultCellEditor;\r
21import javax.swing.JFileChooser;\r
22import javax.swing.JOptionPane;\r
23import javax.swing.JPanel;\r
24import javax.swing.JTable;\r
25import javax.swing.JTextField;\r
26import javax.swing.JComboBox;\r
27import javax.swing.JLabel;\r
28import javax.swing.JScrollPane;\r
29import javax.swing.JButton;\r
30import javax.swing.JFrame;\r
31import javax.swing.ListSelectionModel;\r
32import javax.swing.event.InternalFrameAdapter;\r
33import javax.swing.event.InternalFrameEvent;\r
34import javax.swing.event.ListSelectionEvent;\r
35import javax.swing.event.ListSelectionListener;\r
36import javax.swing.event.TableModelEvent;\r
37import javax.swing.event.TableModelListener;\r
38import javax.swing.table.DefaultTableModel;\r
39import javax.swing.table.TableColumn;\r
40import javax.swing.table.TableModel;\r
41\r
42import org.tianocore.PackageSurfaceAreaDocument;\r
43import org.tianocore.frameworkwizard.common.DataValidation;\r
44import org.tianocore.frameworkwizard.common.Tools;\r
45import org.tianocore.frameworkwizard.common.Identifications.OpeningPackageType;\r
46import org.tianocore.frameworkwizard.common.ui.IInternalFrame;\r
47import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
48\r
49/**\r
50 GUI for create library definition elements of spd file.\r
51 \r
52 @since PackageEditor 1.0\r
53**/\r
54public class SpdPackageHeaders extends IInternalFrame implements TableModelListener{\r
55 /**\r
56 * \r
57 */\r
58 private static final long serialVersionUID = 1L;\r
59\r
60 static JFrame frame;\r
61 \r
62 private SpdFileContents sfc = null;\r
63 \r
64 private OpeningPackageType docConsole = null;\r
65\r
66 private DefaultTableModel model = null;\r
67\r
68 private JPanel jContentPane = null;\r
69\r
70 private JLabel jLabelSelect = null;\r
71\r
72 private JComboBox jComboBoxSelect = null;\r
73\r
74 private JButton jButtonAdd = null;\r
75\r
76 private JButton jButtonRemove = null;\r
77\r
78 private JButton jButtonClearAll = null;\r
79\r
80 private JLabel jLabel = null;\r
81\r
82 private JTextField jTextField = null;\r
83\r
84 private JButton jButtonBrowse = null;\r
85 \r
86 private StarLabel jStarLabel1 = null;\r
87 \r
88 private StarLabel jStarLabel2 = null;\r
89\r
90 private JScrollPane jScrollPane = null;\r
91\r
92 private JScrollPane jScrollPanePkgHdr = null;\r
93\r
94 private int selectedRow = -1;\r
95\r
96 private JTable jTable = null;\r
97\r
98 private final int buttonWidth = 100;\r
99 private final int buttonSep = 6;\r
100 private final int addButtonCol = 148;\r
101 private final int removeButtonCol = addButtonCol + buttonWidth + buttonSep;\r
102 private final int removeAllButtonCol = removeButtonCol + buttonWidth + buttonSep;\r
103 private final int labelCol = 12;\r
104 private final int valueCol = 168;\r
105 private final int rowOne = 12;\r
106 private final int rowTwo = rowOne + 25;\r
107 private final int rowThree = rowTwo + 25;\r
108 private final int rowFour = rowThree + 30;\r
109 private final int rowFive = rowFour + 30;\r
110\r
111\r
112 /**\r
113 This method initializes this\r
114 \r
115 **/\r
116 private void initialize() {\r
117 \r
118 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
119\r
120 }\r
121\r
122 /**\r
123 This method initializes jLabelSelect\r
124 \r
125 @return javax.swing.JLabel jLabelSelect\r
126 **/\r
127 private JLabel getJLabelSelect() {\r
128 if (jLabelSelect == null) {\r
129 jLabelSelect = new JLabel();\r
130 jLabelSelect.setBounds(new java.awt.Rectangle(labelCol,rowOne,155,20));\r
131 jLabelSelect.setText("Select ModuleType");\r
132\r
133 }\r
134 return jLabelSelect;\r
135 }\r
136\r
137 /**\r
138 This method initializes jComboBoxSelect \r
139 \r
140 @return javax.swing.JComboBox \r
141 **/\r
142 private JComboBox getJComboBoxSelect() {\r
143 if (jComboBoxSelect == null) {\r
144 jComboBoxSelect = new JComboBox();\r
145 jComboBoxSelect.setBounds(new java.awt.Rectangle(valueCol, rowOne, 260, 20));\r
146 jComboBoxSelect.setPreferredSize(new java.awt.Dimension(260,20));\r
147 \r
148 jComboBoxSelect.setEnabled(true);\r
149 }\r
150 return jComboBoxSelect;\r
151 }\r
152\r
153 /**\r
154 This method initializes jTable \r
155 \r
156 @return javax.swing.JTable \r
157 *\r
158 private JTable getJTable() {\r
159 if (jTable == null) {\r
160 model = new PackageHeaderTableModel();\r
161 model.addColumn("ModuleType");\r
162 model.addColumn("IncludeHeader");\r
163 \r
164\r
165 }\r
166 return jTable;\r
167 }*/\r
168 /**\r
169 This method initializes jButtonAdd \r
170 \r
171 @return javax.swing.JButton \r
172 **/\r
173 private JButton getJButtonAdd() {\r
174 if (jButtonAdd == null) {\r
175 jButtonAdd = new JButton();\r
176 jButtonAdd.setBounds(new java.awt.Rectangle(addButtonCol,rowFour,buttonWidth,20));\r
177 jButtonAdd.setText("Add");\r
178 jButtonAdd.addActionListener(this);\r
179 }\r
180 return jButtonAdd;\r
181 }\r
182\r
183 /**\r
184 This method initializes jButtonRemove \r
185 \r
186 @return javax.swing.JButton \r
187 **/\r
188 private JButton getJButtonRemove() {\r
189 if (jButtonRemove == null) {\r
190 jButtonRemove = new JButton();\r
191 jButtonRemove.setBounds(new java.awt.Rectangle(removeButtonCol,rowFour,buttonWidth,20));\r
192 jButtonRemove.setText("Delete");\r
193 jButtonRemove.addActionListener(this);\r
194 }\r
195 return jButtonRemove;\r
196 }\r
197\r
198 /**\r
199 This method initializes jButtonRemoveAll \r
200 \r
201 @return javax.swing.JButton \r
202 **/\r
203 private JButton getJButtonClearAll() {\r
204 if (jButtonClearAll == null) {\r
205 jButtonClearAll = new JButton();\r
206 jButtonClearAll.setBounds(new java.awt.Rectangle(removeAllButtonCol,rowFour,buttonWidth,20));\r
207 jButtonClearAll.setText("Clear All");\r
208 jButtonClearAll.addActionListener(this);\r
209 }\r
210 return jButtonClearAll;\r
211 }\r
212\r
213 /**\r
214 This is the default constructor\r
215 **/\r
216 public SpdPackageHeaders() {\r
217 super();\r
218 initialize();\r
219 init();\r
220 \r
221 }\r
222\r
223 public SpdPackageHeaders(PackageSurfaceAreaDocument.PackageSurfaceArea inPsa){\r
224 this();\r
225 sfc = new SpdFileContents(inPsa);\r
226 init(sfc);\r
227 }\r
228 \r
229 public SpdPackageHeaders(OpeningPackageType opt) {\r
230 this(opt.getXmlSpd());\r
231 docConsole = opt;\r
232 }\r
233 /**\r
234 This method initializes this\r
235 \r
236 @return void\r
237 **/\r
238 private void init() {\r
239 \r
240 this.setContentPane(getJScrollPane());\r
241 this.setTitle("Package Headers");\r
242 this.setBounds(new java.awt.Rectangle(0, 0, 500, 370));\r
243 this.setVisible(true);\r
244 this.addInternalFrameListener(new InternalFrameAdapter(){\r
245 public void internalFrameDeactivated(InternalFrameEvent e){\r
246 if (jTable.isEditing()) {\r
247 jTable.getCellEditor().stopCellEditing();\r
248 }\r
249 }\r
250 });\r
251 }\r
252\r
253 private void init(SpdFileContents sfc){\r
254\r
255 if (sfc.getSpdPkgDefsRdOnly().equals("true")) {\r
256 JOptionPane.showMessageDialog(frame, "This is a read-only package. You will not be able to edit contents in table.");\r
257 }\r
258 initFrame();\r
259 \r
260 if (sfc.getSpdPackageHeaderCount() == 0) {\r
261 return ;\r
262 }\r
263 String[][] saa = new String[sfc.getSpdPackageHeaderCount()][2];\r
264 sfc.getSpdPackageHeaders(saa);\r
265 int i = 0;\r
266 while (i < saa.length) {\r
267 model.addRow(saa[i]);\r
268 i++;\r
269 }\r
270 \r
271 }\r
272 \r
273 private JScrollPane getJScrollPane(){\r
274 if (jScrollPane == null){\r
275 jScrollPane = new JScrollPane();\r
276 jScrollPane.setViewportView(getJContentPane());\r
277 }\r
278 return jScrollPane;\r
279 }\r
280 /**\r
281 This method initializes jContentPane\r
282 \r
283 @return javax.swing.JPanel\r
284 **/\r
285 private JPanel getJContentPane() {\r
286 if (jContentPane == null) {\r
287 jStarLabel1 = new StarLabel();\r
288 jStarLabel1.setLocation(new java.awt.Point(0, rowOne));\r
289 jStarLabel2 = new StarLabel();\r
290 jStarLabel2.setLocation(new java.awt.Point(0,rowTwo));\r
291 jLabel = new JLabel();\r
292 jLabel.setBounds(new java.awt.Rectangle(labelCol,rowTwo,320,22));\r
293 jLabel.setText("Include Header for Module Type");\r
294 \r
295 jContentPane = new JPanel();\r
296 jContentPane.setPreferredSize(new Dimension(480, 325));\r
297 jContentPane.setLayout(null);\r
298 jContentPane.add(jLabel, null);\r
299 jContentPane.add(jStarLabel1, null);\r
300 jContentPane.add(jStarLabel2, null);\r
301 jContentPane.add(getJLabelSelect(), null);\r
302 jContentPane.add(getJComboBoxSelect(), null);\r
303 jContentPane.add(getJButtonAdd(), null);\r
304 jContentPane.add(getJButtonRemove(), null);\r
305 jContentPane.add(getJButtonClearAll(), null);\r
306 \r
307 jContentPane.add(getJTextField(), null);\r
308 jContentPane.add(getJButtonBrowse(), null);\r
309 jContentPane.add(getJScrollPanePkgHdr(), null);\r
310 }\r
311 return jContentPane;\r
312 }\r
313\r
314 /**\r
315 fill ComboBoxes with pre-defined contents\r
316 **/\r
317 private void initFrame() {\r
318 jComboBoxSelect.addItem("BASE");\r
319 jComboBoxSelect.addItem("SEC");\r
320 jComboBoxSelect.addItem("PEI_CORE");\r
321 jComboBoxSelect.addItem("PEIM");\r
322 jComboBoxSelect.addItem("DXE_CORE");\r
323 jComboBoxSelect.addItem("DXE_DRIVER");\r
324 jComboBoxSelect.addItem("DXE_RUNTIME_DRIVER");\r
325 jComboBoxSelect.addItem("DXE_SAL_DRIVER");\r
326 jComboBoxSelect.addItem("DXE_SMM_DRIVER");\r
327 jComboBoxSelect.addItem("TOOL");\r
328 jComboBoxSelect.addItem("UEFI_DRIVER");\r
329 jComboBoxSelect.addItem("UEFI_APPLICATION");\r
330 jComboBoxSelect.addItem("USER_DEFINED");\r
331 jComboBoxSelect.setSelectedIndex(0);\r
332 \r
333 boolean editable = true;\r
334 if (sfc.getSpdPkgDefsRdOnly().equals("true")) {\r
335 editable = false;\r
336 }\r
337 \r
338 jButtonAdd.setEnabled(editable);\r
339 jButtonRemove.setEnabled(editable);\r
340 jButtonClearAll.setEnabled(editable);\r
341 jTable.setEnabled(editable);\r
342 }\r
343\r
344 /* (non-Javadoc)\r
345 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
346 */\r
347 public void actionPerformed(ActionEvent arg0) {\r
348 \r
349 docConsole.setSaved(false);\r
350\r
351 if (arg0.getSource() == jButtonAdd) {\r
352 String strLibClass = "";\r
353 \r
354 strLibClass = jComboBoxSelect.getSelectedItem().toString();\r
355 //ToDo: check before add\r
356 String[] row = {"", ""};\r
357 row[0] = strLibClass;\r
358 row[1] = jTextField.getText().replace('\\', '/');\r
359 if (!dataValidation(row)) {\r
360 return;\r
361 }\r
362 model.addRow(row);\r
363 jTable.changeSelection(model.getRowCount()-1, 0, false, false);\r
364 sfc.genSpdModuleHeaders(row[0], row[1], null, null, null, null, null, null);\r
365 }\r
366 //\r
367 // remove selected line\r
368 //\r
369 if (arg0.getSource() == jButtonRemove) {\r
370 if (jTable.isEditing()){\r
371 jTable.getCellEditor().stopCellEditing();\r
372 }\r
373 int rowSelected = selectedRow;\r
374 if (rowSelected >= 0) {\r
375 model.removeRow(rowSelected);\r
376 sfc.removeSpdPkgHeader(rowSelected);\r
377 }\r
378 }\r
379\r
380 if (arg0.getSource() == jButtonClearAll) {\r
381 if (model.getRowCount() == 0) {\r
382 return;\r
383 }\r
384 model.setRowCount(0);\r
385 sfc.removeSpdPkgHeader();\r
386 }\r
387\r
388 }\r
389 \r
390 private boolean dataValidation(String[] row) {\r
391 if (!DataValidation.isPathAndFilename(row[1])) {\r
392 JOptionPane.showMessageDialog(this, "Include header path is NOT PathAndFilename type.");\r
393 return false;\r
394 }\r
395 \r
396 return true;\r
397 }\r
398\r
399 /**\r
400 Add contents in list to sfc\r
401 **/\r
402 protected void save() {\r
403 \r
404 }\r
405\r
406 /**\r
407 This method initializes jTextField \r
408 \r
409 @return javax.swing.JTextField \r
410 **/\r
411 private JTextField getJTextField() {\r
412 if (jTextField == null) {\r
413 jTextField = new JTextField();\r
414 jTextField.setBounds(new java.awt.Rectangle(labelCol,rowThree,346,20));\r
415 jTextField.setPreferredSize(new java.awt.Dimension(345,20));\r
416 }\r
417 return jTextField;\r
418 }\r
419\r
420 /**\r
421 This method initializes jButtonBrowse \r
422 \r
423 @return javax.swing.JButton \r
424 **/\r
425 private JButton getJButtonBrowse() {\r
426 if (jButtonBrowse == null) {\r
427 jButtonBrowse = new JButton();\r
428 jButtonBrowse.setBounds(new java.awt.Rectangle(374,rowThree,buttonWidth,20));\r
429 jButtonBrowse.setText("Browse");\r
430 jButtonBrowse.setPreferredSize(new java.awt.Dimension(buttonWidth,20));\r
431 jButtonBrowse.addActionListener(new javax.swing.AbstractAction() {\r
432 /**\r
433 * \r
434 */\r
435 private static final long serialVersionUID = 1L;\r
436\r
437 public void actionPerformed(ActionEvent e) {\r
438 //\r
439 // Select files from current workspace\r
440 //\r
441 String dirPrefix = Tools.dirForNewSpd.substring(0, Tools.dirForNewSpd.lastIndexOf(File.separator));\r
442 JFileChooser chooser = new JFileChooser(dirPrefix);\r
443 File theFile = null;\r
444 String headerDest = null;\r
445 \r
446 chooser.setMultiSelectionEnabled(false);\r
447 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
448 int retval = chooser.showOpenDialog(frame);\r
449 if (retval == JFileChooser.APPROVE_OPTION) {\r
450\r
451 theFile = chooser.getSelectedFile();\r
452 String file = theFile.getPath();\r
453 if (!file.startsWith(dirPrefix)) {\r
454 JOptionPane.showMessageDialog(frame, "You can only select files in current package!");\r
455 return;\r
456 }\r
457 \r
458 \r
459 }\r
460 else {\r
461 return;\r
462 }\r
463 \r
464 headerDest = theFile.getPath();\r
465 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), dirPrefix.length());\r
466 \r
467 jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));\r
468 \r
469 }\r
470 });\r
471 }\r
472 return jButtonBrowse;\r
473 }\r
474 \r
475 /**\r
476 * This method initializes jScrollPane \r
477 * \r
478 * @return javax.swing.JScrollPane \r
479 */\r
480 private JScrollPane getJScrollPanePkgHdr() {\r
481 if (jScrollPanePkgHdr == null) {\r
482 jScrollPanePkgHdr = new JScrollPane();\r
483 jScrollPanePkgHdr.setBounds(new java.awt.Rectangle(labelCol,rowFive,453,258));\r
484 jScrollPanePkgHdr.setViewportView(getJTable());\r
485 }\r
486 return jScrollPanePkgHdr;\r
487 }\r
488\r
489 /**\r
490 * This method initializes jTable \r
491 * \r
492 * @return javax.swing.JTable \r
493 */\r
494 private JTable getJTable() {\r
495 if (jTable == null) {\r
496 model = new DefaultTableModel();\r
497 jTable = new JTable(model);\r
498 jTable.setRowHeight(20);\r
499 model.addColumn("ModuleType");\r
500 model.addColumn("IncludeHeader");\r
501 TableColumn typeColumn = jTable.getColumnModel().getColumn(0);\r
502 JComboBox jComboBoxSelect = new JComboBox();\r
503 jComboBoxSelect.addItem("BASE");\r
504 jComboBoxSelect.addItem("SEC");\r
505 jComboBoxSelect.addItem("PEI_CORE");\r
506 jComboBoxSelect.addItem("PEIM");\r
507 jComboBoxSelect.addItem("DXE_CORE");\r
508 jComboBoxSelect.addItem("DXE_DRIVER");\r
509 jComboBoxSelect.addItem("DXE_RUNTIME_DRIVER");\r
510 jComboBoxSelect.addItem("DXE_SAL_DRIVER");\r
511 jComboBoxSelect.addItem("DXE_SMM_DRIVER");\r
512 jComboBoxSelect.addItem("TOOL");\r
513 jComboBoxSelect.addItem("UEFI_DRIVER");\r
514 jComboBoxSelect.addItem("UEFI_APPLICATION");\r
515 jComboBoxSelect.addItem("USER_DEFINED");\r
516 typeColumn.setCellEditor(new DefaultCellEditor(jComboBoxSelect));\r
517 \r
518 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
519 jTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){\r
520 public void valueChanged(ListSelectionEvent e) {\r
521 if (e.getValueIsAdjusting()){\r
522 return;\r
523 }\r
524 ListSelectionModel lsm = (ListSelectionModel)e.getSource();\r
525 if (lsm.isSelectionEmpty()) {\r
526 return;\r
527 }\r
528 else{\r
529 selectedRow = lsm.getMinSelectionIndex();\r
530 }\r
531 }\r
532 });\r
533 \r
534 jTable.getModel().addTableModelListener(this);\r
535 }\r
536 return jTable;\r
537 }\r
538 \r
539 public void tableChanged(TableModelEvent arg0) {\r
540 // TODO Auto-generated method stub\r
541 int row = arg0.getFirstRow();\r
542 int column = arg0.getColumn();\r
543 TableModel m = (TableModel)arg0.getSource();\r
544 if (arg0.getType() == TableModelEvent.UPDATE){\r
545 String[] sa = new String[2];\r
546 sfc.getSpdModuleHeader(sa, row);\r
547 Object cellData = m.getValueAt(row, column);\r
548 if (cellData == null) {\r
549 cellData = "";\r
550 }\r
551 if (cellData.equals(sa[column])) {\r
552 return;\r
553 }\r
554 if (cellData.toString().length() == 0 && sa[column] == null) {\r
555 return;\r
556 }\r
557 String pkg = m.getValueAt(row, 0) + "";\r
558 String hdr = m.getValueAt(row, 1) + "";\r
559 String[] rowData = {pkg, hdr};\r
560 if (!dataValidation(rowData)) {\r
561 return;\r
562 }\r
563 docConsole.setSaved(false);\r
564 sfc.updateSpdPkgHdr(row, pkg, hdr);\r
565 }\r
566 }\r
567\r
568 public void componentResized(ComponentEvent arg0) {\r
569 int intPreferredWidth = 500;\r
570 \r
571 // Tools.resizeComponentWidth(this.jComboBoxSelect, this.getWidth(), intPreferredWidth);\r
572 Tools.resizeComponentWidth(this.jTextField, this.getWidth(), intPreferredWidth);\r
573 Tools.resizeComponentWidth(this.jScrollPanePkgHdr, this.getWidth(), intPreferredWidth);\r
574 Tools.relocateComponentX(this.jButtonBrowse, this.getWidth(), this.getPreferredSize().width, 30);\r
575 }\r
576 \r
577 public static void main(String[] args){\r
578 new SpdPackageHeaders().setVisible(true);\r
579 }\r
580}\r
581\r
582\r