]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/PackageEditor/src/org/tianocore/packaging/PackageLibraryClass.java
Remove the assumption of package location under workspace and prompt user to specify...
[mirror_edk2.git] / Tools / Source / PackageEditor / src / org / tianocore / packaging / PackageLibraryClass.java
CommitLineData
878ddf1f 1/** @file\r
2 Java class PackageLibraryClass 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.packaging;\r
14\r
15import java.awt.BorderLayout;\r
16import java.awt.Dimension;\r
17import java.awt.Toolkit;\r
18import java.awt.event.ActionEvent;\r
19import java.awt.event.ActionListener;\r
20import java.io.File;\r
21import java.util.Vector;\r
22\r
23import javax.swing.DefaultListModel;\r
24import javax.swing.JFileChooser;\r
25import javax.swing.JOptionPane;\r
26import javax.swing.JPanel;\r
27import javax.swing.JRadioButton;\r
28import javax.swing.JTextField;\r
29import javax.swing.JComboBox;\r
30import javax.swing.JLabel;\r
31import javax.swing.JList;\r
32import javax.swing.JScrollPane;\r
33import javax.swing.JButton;\r
34import javax.swing.JFrame;\r
35\r
36/**\r
37 GUI for create library definition elements of spd file.\r
38 \r
39 @since PackageEditor 1.0\r
40**/\r
41public class PackageLibraryClass extends JFrame implements ActionListener {\r
42 static JFrame frame;\r
43 \r
44 private static String Separator = "::";\r
45\r
46 private DefaultListModel listItem = new DefaultListModel();\r
47\r
48 private SpdFileContents sfc = null;\r
49\r
50 private JPanel jContentPane = null;\r
51\r
52 private JRadioButton jRadioButtonAdd = null;\r
53\r
54 private JRadioButton jRadioButtonSelect = null;\r
55\r
56 private JTextField jTextFieldAdd = null;\r
57\r
58 private JComboBox jComboBoxSelect = null;\r
59\r
60 private JLabel jLabelUsage = null;\r
61\r
62 private JComboBox jComboBoxUsage = null;\r
63\r
64 private JScrollPane jScrollPane = null;\r
65\r
66 private JList jListLibraryClassDefinitions = null;\r
67\r
68 private JButton jButtonAdd = null;\r
69\r
70 private JButton jButtonRemove = null;\r
71\r
72 private JButton jButtonClearAll = null;\r
73\r
74 private JButton jButtonCancel = null;\r
75\r
76 private JButton jButtonOk = null;\r
77\r
78 private JLabel jLabel = null;\r
79\r
80 private JTextField jTextField = null;\r
81\r
82 private JButton jButtonBrowse = null;\r
83\r
84 /**\r
85 This method initializes this\r
86 \r
87 **/\r
88 private void initialize() {\r
89 this.setTitle("Library Declarations");\r
90 this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);\r
91\r
92 }\r
93\r
94 /**\r
95 This method initializes jRadioButtonAdd \r
96 \r
97 @return javax.swing.JRadioButton \r
98 **/\r
99 private JRadioButton getJRadioButtonAdd() {\r
100 if (jRadioButtonAdd == null) {\r
101 jRadioButtonAdd = new JRadioButton();\r
102 jRadioButtonAdd.setBounds(new java.awt.Rectangle(10, 35, 205, 20));\r
103 jRadioButtonAdd.setText("Add a new Library Class");\r
104 jRadioButtonAdd.addActionListener(this);\r
105 jRadioButtonAdd.setSelected(false);\r
106 }\r
107 return jRadioButtonAdd;\r
108 }\r
109\r
110 /**\r
111 This method initializes jRadioButtonSelect \r
112 \r
113 @return javax.swing.JRadioButton \r
114 **/\r
115 private JRadioButton getJRadioButtonSelect() {\r
116 if (jRadioButtonSelect == null) {\r
117 jRadioButtonSelect = new JRadioButton();\r
118 jRadioButtonSelect.setBounds(new java.awt.Rectangle(10, 10, 205, 20));\r
119 jRadioButtonSelect.setText("Select Existing Library Class");\r
120 jRadioButtonSelect.addActionListener(this);\r
121 jRadioButtonSelect.setSelected(true);\r
122 }\r
123 return jRadioButtonSelect;\r
124 }\r
125\r
126 /**\r
127 This method initializes jTextFieldAdd \r
128 \r
129 @return javax.swing.JTextField \r
130 **/\r
131 private JTextField getJTextFieldAdd() {\r
132 if (jTextFieldAdd == null) {\r
133 jTextFieldAdd = new JTextField();\r
134 jTextFieldAdd.setBounds(new java.awt.Rectangle(220, 35, 260, 20));\r
135 jTextFieldAdd.setEnabled(false);\r
136 }\r
137 return jTextFieldAdd;\r
138 }\r
139\r
140 /**\r
141 This method initializes jComboBoxSelect \r
142 \r
143 @return javax.swing.JComboBox \r
144 **/\r
145 private JComboBox getJComboBoxSelect() {\r
146 if (jComboBoxSelect == null) {\r
147 jComboBoxSelect = new JComboBox();\r
148 jComboBoxSelect.setBounds(new java.awt.Rectangle(220, 10, 260, 20));\r
149 jComboBoxSelect.setEnabled(true);\r
150 }\r
151 return jComboBoxSelect;\r
152 }\r
153\r
154 /**\r
155 This method initializes jComboBoxUsage \r
156 \r
157 @return javax.swing.JComboBox \r
158 **/\r
159 private JComboBox getJComboBoxUsage() {\r
160 if (jComboBoxUsage == null) {\r
161 jComboBoxUsage = new JComboBox();\r
162 jComboBoxUsage.setBounds(new java.awt.Rectangle(220, 60, 260, 20));\r
163 jComboBoxUsage.setEnabled(false);\r
164 }\r
165 return jComboBoxUsage;\r
166 }\r
167\r
168 /**\r
169 This method initializes jScrollPane \r
170 \r
171 @return javax.swing.JScrollPane \r
172 **/\r
173 private JScrollPane getJScrollPane() {\r
174 if (jScrollPane == null) {\r
175 jScrollPane = new JScrollPane();\r
176 jScrollPane.setBounds(new java.awt.Rectangle(10,149,350,146));\r
177 jScrollPane.setViewportView(getJListLibraryClassDefinitions());\r
178 }\r
179 return jScrollPane;\r
180 }\r
181\r
182 /**\r
183 This method initializes jListLibraryClassDefinitions \r
184 \r
185 @return javax.swing.JList \r
186 **/\r
187 private JList getJListLibraryClassDefinitions() {\r
188 if (jListLibraryClassDefinitions == null) {\r
189 jListLibraryClassDefinitions = new JList(listItem);\r
190 }\r
191 return jListLibraryClassDefinitions;\r
192 }\r
193\r
194 /**\r
195 This method initializes jButtonAdd \r
196 \r
197 @return javax.swing.JButton \r
198 **/\r
199 private JButton getJButtonAdd() {\r
200 if (jButtonAdd == null) {\r
201 jButtonAdd = new JButton();\r
202 jButtonAdd.setBounds(new java.awt.Rectangle(375,152,90,20));\r
203 jButtonAdd.setText("Add");\r
204 jButtonAdd.addActionListener(this);\r
205 }\r
206 return jButtonAdd;\r
207 }\r
208\r
209 /**\r
210 This method initializes jButtonRemove \r
211 \r
212 @return javax.swing.JButton \r
213 **/\r
214 private JButton getJButtonRemove() {\r
215 if (jButtonRemove == null) {\r
216 jButtonRemove = new JButton();\r
217 jButtonRemove.setBounds(new java.awt.Rectangle(375, 230, 90, 20));\r
218 jButtonRemove.setText("Remove");\r
219 jButtonRemove.addActionListener(this);\r
220 }\r
221 return jButtonRemove;\r
222 }\r
223\r
224 /**\r
225 This method initializes jButtonRemoveAll \r
226 \r
227 @return javax.swing.JButton \r
228 **/\r
229 private JButton getJButtonClearAll() {\r
230 if (jButtonClearAll == null) {\r
231 jButtonClearAll = new JButton();\r
232 jButtonClearAll.setBounds(new java.awt.Rectangle(375, 260, 90, 20));\r
233 jButtonClearAll.setText("Clear All");\r
234 jButtonClearAll.addActionListener(this);\r
235 }\r
236 return jButtonClearAll;\r
237 }\r
238\r
239 /**\r
240 This method initializes jButtonCancel \r
241 \r
242 @return javax.swing.JButton \r
243 **/\r
244 private JButton getJButtonCancel() {\r
245 if (jButtonCancel == null) {\r
246 jButtonCancel = new JButton();\r
247 jButtonCancel.setPreferredSize(new java.awt.Dimension(90, 20));\r
248 jButtonCancel.setLocation(new java.awt.Point(390, 305));\r
249 jButtonCancel.setText("Cancel");\r
250 jButtonCancel.setSize(new java.awt.Dimension(90, 20));\r
251 jButtonCancel.addActionListener(this);\r
252 }\r
253 return jButtonCancel;\r
254 }\r
255\r
256 /**\r
257 This method initializes jButton \r
258 \r
259 @return javax.swing.JButton \r
260 **/\r
261 private JButton getJButtonOk() {\r
262 if (jButtonOk == null) {\r
263 jButtonOk = new JButton();\r
264 jButtonOk.setSize(new java.awt.Dimension(90, 20));\r
265 jButtonOk.setText("OK");\r
266 jButtonOk.setLocation(new java.awt.Point(290, 305));\r
267 jButtonOk.addActionListener(this);\r
268 }\r
269 return jButtonOk;\r
270 }\r
271\r
272 /**\r
273 This is the default constructor\r
274 **/\r
275 public PackageLibraryClass(SpdFileContents sfc) {\r
276 super();\r
277 initialize();\r
278 init();\r
279 this.sfc = sfc;\r
280 }\r
281\r
282 /**\r
283 Start the window at the center of screen\r
284 \r
285 **/\r
286 protected void centerWindow(int intWidth, int intHeight) {\r
287 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
288 this.setLocation((d.width - intWidth) / 2, (d.height - intHeight) / 2);\r
289 }\r
290\r
291 /**\r
292 Start the window at the center of screen\r
293 \r
294 **/\r
295 protected void centerWindow() {\r
296 centerWindow(this.getSize().width, this.getSize().height);\r
297 }\r
298\r
299 /**\r
300 This method initializes this\r
301 \r
302 @return void\r
303 **/\r
304 private void init() {\r
305 this.setContentPane(getJContentPane());\r
306 this.setTitle("Library Class Declarations");\r
307 this.setBounds(new java.awt.Rectangle(0, 0, 500, 370));\r
308 this.centerWindow();\r
309 initFrame();\r
310 }\r
311\r
312 /**\r
313 This method initializes jContentPane\r
314 \r
315 @return javax.swing.JPanel\r
316 **/\r
317 private JPanel getJContentPane() {\r
318 if (jContentPane == null) {\r
319 jLabel = new JLabel();\r
320 jLabel.setBounds(new java.awt.Rectangle(14, 85, 201, 22));\r
321 jLabel.setText("Include Header for Selected Class");\r
322 jLabelUsage = new JLabel();\r
323 jLabelUsage.setBounds(new java.awt.Rectangle(15, 60, 200, 20));\r
324 jLabelUsage.setEnabled(false);\r
325 jLabelUsage.setText("Usage");\r
326 jContentPane = new JPanel();\r
327 jContentPane.setLayout(null);\r
328 jContentPane.add(getJRadioButtonAdd(), null);\r
329 jContentPane.add(getJRadioButtonSelect(), null);\r
330 jContentPane.add(getJTextFieldAdd(), null);\r
331 jContentPane.add(getJComboBoxSelect(), null);\r
332 jContentPane.add(jLabelUsage, null);\r
333 jContentPane.add(getJComboBoxUsage(), null);\r
334 jContentPane.add(getJScrollPane(), null);\r
335 jContentPane.add(getJButtonAdd(), null);\r
336 jContentPane.add(getJButtonRemove(), null);\r
337 jContentPane.add(getJButtonClearAll(), null);\r
338 jContentPane.add(getJButtonCancel(), null);\r
339 jContentPane.add(getJButtonOk(), null);\r
340 jContentPane.add(jLabel, null);\r
341 jContentPane.add(getJTextField(), null);\r
342 jContentPane.add(getJButtonBrowse(), null);\r
343 }\r
344 return jContentPane;\r
345 }\r
346\r
347 /**\r
348 fill ComboBoxes with pre-defined contents\r
349 **/\r
350 private void initFrame() {\r
351 jComboBoxSelect.addItem("BaseCpuICacheFlush");\r
352 jComboBoxSelect.addItem("BaseDebugLibNull");\r
353 jComboBoxSelect.addItem("BaseDebugLibReportStatusCode");\r
354 jComboBoxSelect.addItem("BaseIoLibIntrinsic");\r
355 jComboBoxSelect.addItem("BaseLib");\r
356 jComboBoxSelect.addItem("BaseMemoryLib");\r
357 jComboBoxSelect.addItem("BaseMemoryLibMmx");\r
358 jComboBoxSelect.addItem("BaseMemoryLibSse2");\r
359 jComboBoxSelect.addItem("BasePeCoffGetEntryPointLib");\r
360 jComboBoxSelect.addItem("BasePeCoffLib");\r
361 jComboBoxSelect.addItem("BasePrintLib");\r
362 jComboBoxSelect.addItem("BaseReportStatusCodeLibNull");\r
363 jComboBoxSelect.addItem("CommonPciCf8Lib");\r
364 jComboBoxSelect.addItem("CommonPciExpressLib");\r
365 jComboBoxSelect.addItem("CommonPciLibCf8");\r
366 jComboBoxSelect.addItem("CommonPciLibPciExpress");\r
367 jComboBoxSelect.addItem("DxeCoreEntryPoint");\r
368 jComboBoxSelect.addItem("DxeHobLib");\r
369 jComboBoxSelect.addItem("DxeIoLibCpuIo");\r
370 jComboBoxSelect.addItem("DxeLib");\r
371 jComboBoxSelect.addItem("DxePcdLib");\r
372 jComboBoxSelect.addItem("DxeReportStatusCodeLib");\r
373 jComboBoxSelect.addItem("DxeServicesTableLib");\r
374 jComboBoxSelect.addItem("PeiCoreEntryPoint");\r
375 jComboBoxSelect.addItem("PeiMemoryLib");\r
376 jComboBoxSelect.addItem("PeimEntryPoint");\r
377 jComboBoxSelect.addItem("PeiReportStatusCodeLib");\r
378 jComboBoxSelect.addItem("PeiServicesTablePointerLib");\r
379 jComboBoxSelect.addItem("PeiServicesTablePointerLibMm7");\r
380 jComboBoxSelect.addItem("UefiDebugLibConOut");\r
381 jComboBoxSelect.addItem("UefiDebugLibStdErr");\r
382 jComboBoxSelect.addItem("UefiDriverEntryPointMultiple");\r
383 jComboBoxSelect.addItem("UefiDriverEntryPointSingle");\r
384 jComboBoxSelect.addItem("UefiDriverEntryPointSingleUnload");\r
385 jComboBoxSelect.addItem("UefiDriverModelLib");\r
386 jComboBoxSelect.addItem("UefiDriverModelLibNoConfigNoDiag");\r
387 jComboBoxSelect.addItem("UefiLib");\r
388 jComboBoxSelect.addItem("UefiMemoryLib");\r
389\r
390 jComboBoxUsage.addItem("ALWAYS_CONSUMED");\r
391 jComboBoxUsage.addItem("SOMETIMES_CONSUMED");\r
392 jComboBoxUsage.addItem("ALWAYS_PRODUCED");\r
393 jComboBoxUsage.addItem("SOMETIMES_PRODUCED");\r
394 jComboBoxUsage.addItem("DEFAULT");\r
395 jComboBoxUsage.addItem("PRIVATE");\r
396 }\r
397\r
398 /* (non-Javadoc)\r
399 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
400 */\r
401 public void actionPerformed(ActionEvent arg0) {\r
402 if (arg0.getSource() == jButtonOk) {\r
403 this.save();\r
404 this.dispose();\r
405\r
406 }\r
407 if (arg0.getSource() == jButtonCancel) {\r
408 this.dispose();\r
409 }\r
410\r
411 if (arg0.getSource() == jButtonAdd) {\r
412 String strLibClass = "";\r
413 if (jRadioButtonAdd.isSelected()) {\r
414 strLibClass = jTextFieldAdd.getText();\r
415 }\r
416 if (jRadioButtonSelect.isSelected()) {\r
417 strLibClass = jComboBoxSelect.getSelectedItem().toString();\r
418 }\r
33f1b485 419 listItem.addElement(jTextField.getText().replace('\\', '/') + this.Separator + strLibClass);\r
878ddf1f 420 }\r
421 //\r
422 // remove selected line\r
423 //\r
424 if (arg0.getSource() == jButtonRemove) {\r
425 int intSelected[] = jListLibraryClassDefinitions.getSelectedIndices();\r
426 if (intSelected.length > 0) {\r
427 for (int index = intSelected.length - 1; index > -1; index--) {\r
428 listItem.removeElementAt(intSelected[index]);\r
429 }\r
430 }\r
431 jListLibraryClassDefinitions.getSelectionModel().clearSelection();\r
432 }\r
433\r
434 if (arg0.getSource() == jButtonClearAll) {\r
435 listItem.removeAllElements();\r
436 }\r
437\r
438 if (arg0.getSource() == jRadioButtonAdd) {\r
439 if (jRadioButtonAdd.isSelected()) {\r
440 jRadioButtonSelect.setSelected(false);\r
441 jTextFieldAdd.setEnabled(true);\r
442 jComboBoxSelect.setEnabled(false);\r
443 }\r
444 if (!jRadioButtonSelect.isSelected() && !jRadioButtonAdd.isSelected()) {\r
445 jRadioButtonAdd.setSelected(true);\r
446 jTextFieldAdd.setEnabled(true);\r
447 jComboBoxSelect.setEnabled(false);\r
448 }\r
449 }\r
450\r
451 if (arg0.getSource() == jRadioButtonSelect) {\r
452 if (jRadioButtonSelect.isSelected()) {\r
453 jRadioButtonAdd.setSelected(false);\r
454 jTextFieldAdd.setEnabled(false);\r
455 jComboBoxSelect.setEnabled(true);\r
456 }\r
457 if (!jRadioButtonSelect.isSelected() && !jRadioButtonAdd.isSelected()) {\r
458 jRadioButtonSelect.setSelected(true);\r
459 jTextFieldAdd.setEnabled(false);\r
460 jComboBoxSelect.setEnabled(true);\r
461 }\r
462 }\r
463 }\r
464\r
465 /**\r
466 Add contents in list to sfc\r
467 **/\r
468 protected void save() {\r
469 try {\r
470 int intLibraryCount = listItem.getSize();\r
471\r
472 if (intLibraryCount > 0) {\r
473\r
474 for (int index = 0; index < intLibraryCount; index++) {\r
475 String strAll = listItem.get(index).toString();\r
476 String strInclude = strAll.substring(0, strAll.indexOf(Separator));\r
477 String strLibraryClass = strAll.substring(strAll.indexOf(Separator) + Separator.length());\r
478 sfc.genSpdLibClassDeclarations(strLibraryClass, null, strInclude, null, null, null, null, null,\r
479 null, null);\r
480 }\r
481 } else {\r
482\r
483 }\r
484\r
485 } catch (Exception e) {\r
486 System.out.println(e.toString());\r
487 }\r
488 }\r
489\r
490 /**\r
491 This method initializes jTextField \r
492 \r
493 @return javax.swing.JTextField \r
494 **/\r
495 private JTextField getJTextField() {\r
496 if (jTextField == null) {\r
497 jTextField = new JTextField();\r
498 jTextField.setBounds(new java.awt.Rectangle(12,112,346,21));\r
499 }\r
500 return jTextField;\r
501 }\r
502\r
503 /**\r
504 This method initializes jButtonBrowse \r
505 \r
506 @return javax.swing.JButton \r
507 **/\r
508 private JButton getJButtonBrowse() {\r
509 if (jButtonBrowse == null) {\r
510 jButtonBrowse = new JButton();\r
511 jButtonBrowse.setBounds(new java.awt.Rectangle(374,111,92,21));\r
512 jButtonBrowse.setText("Browse");\r
513 jButtonBrowse.setPreferredSize(new java.awt.Dimension(34,20));\r
514 jButtonBrowse.addMouseListener(new java.awt.event.MouseAdapter() {\r
515 public void mouseClicked(java.awt.event.MouseEvent e) {\r
516 //\r
517 // Select files from current workspace\r
518 //\r
519 JFileChooser chooser = new JFileChooser(System.getenv("WORKSPACE"));\r
33f1b485 520 File theFile = null;\r
521 String headerDest = null;\r
878ddf1f 522 \r
523 chooser.setMultiSelectionEnabled(false);\r
524 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);\r
525 int retval = chooser.showOpenDialog(frame);\r
526 if (retval == JFileChooser.APPROVE_OPTION) {\r
527\r
33f1b485 528 theFile = chooser.getSelectedFile();\r
878ddf1f 529 String file = theFile.getPath();\r
530 if (!file.startsWith(System.getenv("WORKSPACE"))) {\r
531 JOptionPane.showMessageDialog(frame, "You can only select files in current workspace!");\r
532 return;\r
533 }\r
33f1b485 534 \r
535 \r
536 }\r
537 else {\r
538 return;\r
539 }\r
540 \r
541 if (!theFile.getPath().startsWith(PackagingMain.dirForNewSpd)) {\r
878ddf1f 542 //\r
33f1b485 543 //ToDo: copy elsewhere header file to new pkg dir, prompt user to chooser a location\r
878ddf1f 544 //\r
33f1b485 545 JOptionPane.showMessageDialog(frame, "You must copy header file into current package directory!");\r
546 return;\r
878ddf1f 547 }\r
33f1b485 548 \r
549 headerDest = theFile.getPath();\r
550 int fileIndex = headerDest.indexOf(System.getProperty("file.separator"), PackagingMain.dirForNewSpd.length());\r
551 \r
552 jTextField.setText(headerDest.substring(fileIndex + 1).replace('\\', '/'));\r
553 \r
878ddf1f 554 }\r
555 });\r
556 }\r
557 return jButtonBrowse;\r
558 }\r
559\r
560}\r