]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/module/ui/dialog/VariablesDlg.java
1. Gray out all "Feature Flag" fields in module and move them to the bottom of the...
[mirror_edk2.git] / Tools / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / module / ui / dialog / VariablesDlg.java
CommitLineData
06a19cee 1/** @file\r
2 \r
3f62225f 3 The file is used to create, update Variables section of the MSA file\r
06a19cee 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
15\r
16package org.tianocore.frameworkwizard.module.ui.dialog;\r
17\r
18import java.awt.event.ActionEvent;\r
19import java.util.Vector;\r
20\r
21import javax.swing.JButton;\r
22import javax.swing.JComboBox;\r
23import javax.swing.JLabel;\r
24import javax.swing.JPanel;\r
25import javax.swing.JScrollPane;\r
26import javax.swing.JTextField;\r
ccb063b1 27import javax.swing.JTextArea;\r
06a19cee 28\r
29import org.tianocore.frameworkwizard.common.DataType;\r
30import org.tianocore.frameworkwizard.common.DataValidation;\r
31import org.tianocore.frameworkwizard.common.EnumerationData;\r
32import org.tianocore.frameworkwizard.common.Log;\r
33import org.tianocore.frameworkwizard.common.Tools;\r
34import org.tianocore.frameworkwizard.common.ui.ArchCheckBox;\r
35import org.tianocore.frameworkwizard.common.ui.IDialog;\r
36import org.tianocore.frameworkwizard.common.ui.IFrame;\r
37import org.tianocore.frameworkwizard.common.ui.StarLabel;\r
38import org.tianocore.frameworkwizard.module.Identifications.Variables.VariablesIdentification;\r
39import org.tianocore.frameworkwizard.workspace.WorkspaceTools;\r
40\r
41/**\r
9e857952 42 * The class is used to create, update Variables section of the MSA file\r
43 * \r
3f62225f 44 * It extends IDialog\r
ccb063b1 45 * \r
46 */\r
06a19cee 47public class VariablesDlg extends IDialog {\r
48\r
a929458e 49 // /\r
50 // / Define class Serial Version UID\r
51 // /\r
52 private static final long serialVersionUID = -6998982978030439446L;\r
06a19cee 53\r
a929458e 54 //\r
55 // Define class members\r
56 //\r
57 private JPanel jContentPane = null;\r
06a19cee 58\r
a929458e 59 private JLabel jLabelVariableName = null;\r
06a19cee 60\r
a929458e 61 private JTextField jTextFieldVariableName = null;\r
06a19cee 62\r
a929458e 63 private JLabel jLabelUsage = null;\r
06a19cee 64\r
a929458e 65 private JComboBox jComboBoxUsage = null;\r
06a19cee 66\r
a929458e 67 private StarLabel jStarLabel1 = null;\r
06a19cee 68\r
a929458e 69 private StarLabel jStarLabel2 = null;\r
06a19cee 70\r
a929458e 71 private StarLabel jStarLabel3 = null;\r
06a19cee 72\r
a929458e 73 private JScrollPane jScrollPane = null;\r
06a19cee 74\r
a929458e 75 private JLabel jLabelGuidCName = null;\r
06a19cee 76\r
a929458e 77 private JComboBox jComboBoxGuidC_Name = null;\r
06a19cee 78\r
a929458e 79 private JTextField jTextFieldFeatureFlag = null;\r
06a19cee 80\r
a929458e 81 private JLabel jLabelFeatureFlag = null;\r
06a19cee 82\r
a929458e 83 private JLabel jLabelArch = null;\r
06a19cee 84\r
a929458e 85 private JLabel jLabelHelpText = null;\r
06a19cee 86\r
a929458e 87 private JTextArea jTextAreaHelpText = null;\r
06a19cee 88\r
a929458e 89 private JScrollPane jScrollPaneHelpText = null;\r
06a19cee 90\r
a929458e 91 private ArchCheckBox jArchCheckBox = null;\r
06a19cee 92\r
a929458e 93 private JButton jButtonOk = null;\r
06a19cee 94\r
a929458e 95 private JButton jButtonCancel = null;\r
06a19cee 96\r
a929458e 97 //\r
98 // Not used by UI\r
99 //\r
100 private VariablesIdentification id = null;\r
101\r
102 private EnumerationData ed = new EnumerationData();\r
103\r
104 private WorkspaceTools wt = new WorkspaceTools();\r
105\r
106 /**\r
107 * This method initializes jTextFieldString\r
108 * \r
109 * @return javax.swing.JTextField jTextFieldString\r
110 * \r
111 */\r
112 private JTextField getJTextFieldString() {\r
113 if (jTextFieldVariableName == null) {\r
114 jTextFieldVariableName = new JTextField();\r
115 jTextFieldVariableName.setSize(new java.awt.Dimension(320, 20));\r
116 jTextFieldVariableName.setPreferredSize(new java.awt.Dimension(320, 20));\r
3f62225f 117 jTextFieldVariableName.setLocation(new java.awt.Point(168, 12));\r
a929458e 118 jTextFieldVariableName\r
2cc02cdb 119 .setToolTipText("Enter a string; the tool will convert to Unicode hex");\r
a929458e 120 }\r
121 return jTextFieldVariableName;\r
122 }\r
06a19cee 123\r
a929458e 124 /**\r
125 * This method initializes jComboBoxUsage\r
126 * \r
127 * @return javax.swing.JComboBox jComboBoxUsage\r
128 * \r
129 */\r
130 private JComboBox getJComboBoxUsage() {\r
131 if (jComboBoxUsage == null) {\r
132 jComboBoxUsage = new JComboBox();\r
3f62225f 133 jComboBoxUsage.setBounds(new java.awt.Rectangle(168, 62, 320, 20));\r
a929458e 134 jComboBoxUsage.setPreferredSize(new java.awt.Dimension(320, 20));\r
135 jComboBoxUsage\r
9e857952 136 .setToolTipText("<html><table>"\r
137 + "<tr><td>ALWAYS_CONSUMED</td><td>The module requires the variable entry to be set</td></tr>"\r
138 + "<tr><td>SOMETIMES_CONSUMED</td><td>The module will use the variable entry if it is set.</td></tr>"\r
139 + "<tr><td>ALWAYS_PRODUCED</td><td>The module will always write the variable.</td></tr>"\r
140 + "<tr><td>SOMETIMES_PRODUCED</td><td>The module will sometimes write the variable.</td></tr>"\r
141 + "</table></html>");\r
a929458e 142 }\r
143 return jComboBoxUsage;\r
144 }\r
06a19cee 145\r
a929458e 146 /**\r
147 * This method initializes jScrollPane\r
148 * \r
149 * @return javax.swing.JScrollPane\r
150 */\r
151 private JScrollPane getJScrollPane() {\r
152 if (jScrollPane == null) {\r
153 jScrollPane = new JScrollPane();\r
154 jScrollPane.setViewportView(getJContentPane());\r
155 }\r
156 return jScrollPane;\r
06a19cee 157 }\r
a929458e 158\r
159 /**\r
160 * This method initializes jTextFieldFeatureFlag\r
161 * \r
162 * @return javax.swing.JTextField jTextFieldFeatureFlag\r
163 * \r
164 */\r
165 private JTextField getJTextFieldFeatureFlag() {\r
166 if (jTextFieldFeatureFlag == null) {\r
167 jTextFieldFeatureFlag = new JTextField();\r
21b42c66 168 jTextFieldFeatureFlag.setBounds(new java.awt.Rectangle(168, 157, 320, 20));\r
a929458e 169 jTextFieldFeatureFlag.setPreferredSize(new java.awt.Dimension(320, 20));\r
170 jTextFieldFeatureFlag.setToolTipText("Postfix expression that must evaluate to TRUE or FALSE");\r
21b42c66 171 jTextFieldFeatureFlag.setEnabled(false);\r
a929458e 172 }\r
173 return jTextFieldFeatureFlag;\r
06a19cee 174 }\r
a929458e 175\r
176 /**\r
177 * This method initializes jTextFieldHelpText\r
178 * \r
179 * @return javax.swing.JTextField\r
180 * \r
181 */\r
182 private JTextArea getJTextAreaHelpText() {\r
183 if (jTextAreaHelpText == null) {\r
184 jTextAreaHelpText = new JTextArea();\r
185 jTextAreaHelpText.setLineWrap(true);\r
186 jTextAreaHelpText.setWrapStyleWord(true);\r
187 jTextAreaHelpText.setToolTipText("Enter information on how to use this Variable.");\r
188 }\r
189 return jTextAreaHelpText;\r
06a19cee 190 }\r
a929458e 191\r
192 private JScrollPane getJScrollPaneHelpText() {\r
193 if (jScrollPaneHelpText == null) {\r
194 jScrollPaneHelpText = new JScrollPane();\r
195 jScrollPaneHelpText.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);\r
196 jScrollPaneHelpText.setSize(new java.awt.Dimension(320, 40));\r
197 jScrollPaneHelpText.setPreferredSize(new java.awt.Dimension(320, 40));\r
3f62225f 198 jScrollPaneHelpText.setLocation(new java.awt.Point(168, 87));\r
a929458e 199 jScrollPaneHelpText.setViewportView(getJTextAreaHelpText());\r
200 }\r
201 return jScrollPaneHelpText;\r
06a19cee 202 }\r
a929458e 203\r
204 /**\r
205 * This method initializes jComboBoxGuidC_Name\r
206 * \r
207 * @return javax.swing.JComboBox jComboBoxGuidC_Name\r
208 * \r
209 */\r
210 private JComboBox getJComboBoxGuidC_Name() {\r
211 if (jComboBoxGuidC_Name == null) {\r
212 jComboBoxGuidC_Name = new JComboBox();\r
3f62225f 213 jComboBoxGuidC_Name.setBounds(new java.awt.Rectangle(168, 37, 320, 20));\r
a929458e 214 jComboBoxGuidC_Name.setPreferredSize(new java.awt.Dimension(320, 20));\r
215 jComboBoxGuidC_Name.setToolTipText("Select the GUID C Name of the Variable.");\r
216 }\r
217 return jComboBoxGuidC_Name;\r
06a19cee 218 }\r
a929458e 219\r
220 /**\r
221 * This method initializes jButtonOk\r
222 * \r
223 * @return javax.swing.JButton\r
224 * \r
225 */\r
226 private JButton getJButtonOk() {\r
227 if (jButtonOk == null) {\r
228 jButtonOk = new JButton();\r
3f62225f 229 jButtonOk.setBounds(new java.awt.Rectangle(290, 187, 90, 20));\r
a929458e 230 jButtonOk.setText("Ok");\r
231 jButtonOk.addActionListener(this);\r
232 }\r
233 return jButtonOk;\r
06a19cee 234 }\r
a929458e 235\r
236 /**\r
237 * This method initializes jButtonCancel\r
238 * \r
239 * @return javax.swing.JButton\r
240 * \r
241 */\r
242 private JButton getJButtonCancel() {\r
243 if (jButtonCancel == null) {\r
244 jButtonCancel = new JButton();\r
3f62225f 245 jButtonCancel.setBounds(new java.awt.Rectangle(390, 187, 90, 20));\r
a929458e 246 jButtonCancel.setText("Cancel");\r
247 jButtonCancel.addActionListener(this);\r
248 }\r
249 return jButtonCancel;\r
250 }\r
251\r
252 public static void main(String[] args) {\r
253\r
06a19cee 254 }\r
a929458e 255\r
256 /**\r
257 * This method initializes this\r
258 * \r
259 */\r
260 private void init() {\r
3f62225f 261 this.setSize(505, 260);\r
a929458e 262 this.setContentPane(getJScrollPane());\r
263 this.setTitle("Variables");\r
264 initFrame();\r
265 this.setViewMode(false);\r
266 this.centerWindow();\r
06a19cee 267 }\r
a929458e 268\r
269 /**\r
270 * This method initializes this Fill values to all fields if these values are\r
271 * not empty\r
272 * \r
273 * @param inVariablesId\r
274 * \r
275 */\r
276 private void init(VariablesIdentification inVariablesId) {\r
277 init();\r
278 this.id = inVariablesId;\r
279\r
280 if (this.id != null) {\r
281 this.jTextFieldVariableName.setText(id.getName());\r
282 this.jComboBoxGuidC_Name.setSelectedItem(id.getGuid());\r
283 this.jComboBoxUsage.setSelectedItem(id.getUsage());\r
284 this.jTextAreaHelpText.setText(id.getHelp());\r
285 this.jTextFieldFeatureFlag.setText(id.getFeatureFlag());\r
286 this.jArchCheckBox.setSelectedItems(id.getSupArchList());\r
287 }\r
06a19cee 288 }\r
a929458e 289\r
290 /**\r
291 * This is the override edit constructor\r
292 * \r
293 * @param inVariablesIdentification\r
294 * @param iFrame\r
295 * \r
296 */\r
297 public VariablesDlg(VariablesIdentification inVariablesIdentification, IFrame iFrame) {\r
298 super(iFrame, true);\r
299 init(inVariablesIdentification);\r
06a19cee 300 }\r
a929458e 301\r
302 /**\r
303 * Disable all components when the mode is view\r
304 * \r
305 * @param isView\r
306 * true - The view mode; false - The non-view mode\r
307 * \r
308 */\r
309 public void setViewMode(boolean isView) {\r
310 if (isView) {\r
311 this.jTextFieldVariableName.setEnabled(!isView);\r
312 this.jComboBoxUsage.setEnabled(!isView);\r
313 }\r
06a19cee 314 }\r
a929458e 315\r
316 /**\r
317 * This method initializes jContentPane\r
318 * \r
319 * @return javax.swing.JPanel jContentPane\r
320 * \r
321 */\r
322 private JPanel getJContentPane() {\r
323 if (jContentPane == null) {\r
324 jStarLabel1 = new StarLabel();\r
3f62225f 325 jStarLabel1.setLocation(new java.awt.Point(2, 12));\r
a929458e 326 jLabelVariableName = new JLabel();\r
327 jLabelVariableName.setText("Variable Name");\r
3f62225f 328 jLabelVariableName.setBounds(new java.awt.Rectangle(12, 12, 168, 20));\r
a929458e 329\r
330 jStarLabel2 = new StarLabel();\r
3f62225f 331 jStarLabel2.setLocation(new java.awt.Point(2, 37));\r
a929458e 332 jLabelGuidCName = new JLabel();\r
3f62225f 333 jLabelGuidCName.setBounds(new java.awt.Rectangle(12, 37, 168, 20));\r
a929458e 334 jLabelGuidCName.setText("Variable Guid C Name");\r
335\r
336 jStarLabel3 = new StarLabel();\r
3f62225f 337 jStarLabel3.setLocation(new java.awt.Point(2, 62));\r
a929458e 338 jLabelUsage = new JLabel();\r
339 jLabelUsage.setText("Usage");\r
3f62225f 340 jLabelUsage.setBounds(new java.awt.Rectangle(12, 62, 168, 20));\r
a929458e 341\r
342 jLabelHelpText = new JLabel();\r
3f62225f 343 jLabelHelpText.setBounds(new java.awt.Rectangle(12, 87, 168, 20));\r
a929458e 344 jLabelHelpText.setText("Help Text");\r
345\r
346 jLabelFeatureFlag = new JLabel();\r
347 jLabelFeatureFlag.setText("Feature Flag Expression");\r
21b42c66 348 jLabelFeatureFlag.setBounds(new java.awt.Rectangle(12, 157, 168, 20));\r
349 jLabelFeatureFlag.setEnabled(false);\r
a929458e 350\r
351 jLabelArch = new JLabel();\r
21b42c66 352 jLabelArch.setBounds(new java.awt.Rectangle(12, 132, 168, 20));\r
a929458e 353 jLabelArch.setText("Supported Architectures");\r
354 jArchCheckBox = new ArchCheckBox();\r
21b42c66 355 jArchCheckBox.setBounds(new java.awt.Rectangle(168, 132, 320, 20));\r
a929458e 356 jArchCheckBox.setPreferredSize(new java.awt.Dimension(320, 20));\r
357\r
358 jContentPane = new JPanel();\r
359 jContentPane.setLayout(null);\r
3f62225f 360 jContentPane.setPreferredSize(new java.awt.Dimension(485, 215));\r
a929458e 361\r
362 jContentPane.add(jStarLabel1, null);\r
363 jContentPane.add(jLabelVariableName, null);\r
364 jContentPane.add(getJTextFieldString(), null);\r
365 jContentPane.add(jStarLabel2, null);\r
366 jContentPane.add(jLabelGuidCName, null);\r
367 jContentPane.add(getJComboBoxGuidC_Name(), null);\r
368 jContentPane.add(jStarLabel3, null);\r
369 jContentPane.add(jLabelUsage, null);\r
370 jContentPane.add(getJComboBoxUsage(), null);\r
371 jContentPane.add(jLabelHelpText, null);\r
372 jContentPane.add(getJScrollPaneHelpText(), null);\r
373 jContentPane.add(jLabelFeatureFlag, null);\r
374 jContentPane.add(getJTextFieldFeatureFlag(), null);\r
375 jContentPane.add(jLabelArch, null);\r
376 jContentPane.add(jArchCheckBox, null);\r
377 jContentPane.add(getJButtonOk(), null);\r
378 jContentPane.add(getJButtonCancel(), null);\r
379 }\r
380 return jContentPane;\r
06a19cee 381 }\r
a929458e 382\r
383 /*\r
384 * (non-Javadoc)\r
385 * \r
386 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
387 * \r
388 * Override actionPerformed to listen all actions\r
389 * \r
390 */\r
391 public void actionPerformed(ActionEvent arg0) {\r
392 if (arg0.getSource() == jButtonOk) {\r
393 if (checkAdd()) {\r
394 getCurrentVariables();\r
395 this.returnType = DataType.RETURN_TYPE_OK;\r
396 this.setVisible(false);\r
397 }\r
398 }\r
399\r
400 if (arg0.getSource() == jButtonCancel) {\r
401 this.returnType = DataType.RETURN_TYPE_CANCEL;\r
402 this.setVisible(false);\r
403 }\r
06a19cee 404 }\r
405\r
a929458e 406 /**\r
407 * This method initializes Usage type\r
408 * \r
409 */\r
410 private void initFrame() {\r
411 Tools.generateComboBoxByVector(jComboBoxUsage, ed.getVPpiUsage());\r
412 Tools.generateComboBoxByVector(jComboBoxGuidC_Name, wt.getAllGuidDeclarationsFromWorkspace());\r
ccb063b1 413 }\r
06a19cee 414\r
a929458e 415 /**\r
416 * Data validation for all fields\r
417 * \r
418 * @retval true - All datas are valid\r
419 * @retval false - At least one data is invalid\r
420 * \r
421 */\r
422 public boolean checkAdd() {\r
423 //\r
424 // Check if all fields have correct data types\r
425 //\r
426\r
427 //\r
428 // Check VariableName\r
429 //\r
430 if (isEmpty(this.jTextFieldVariableName.getText())) {\r
431 Log.wrn("Update Variables", "Variable Name must not be empty");\r
432 return false;\r
433 }\r
434\r
a929458e 435 //\r
436 // Check FeatureFlag\r
437 //\r
438 if (!isEmpty(this.jTextFieldFeatureFlag.getText())) {\r
439 if (!DataValidation.isFeatureFlag(this.jTextFieldFeatureFlag.getText())) {\r
440 Log.wrn("Update Variables", "Incorrect data type for Feature Flag");\r
441 return false;\r
442 }\r
443 }\r
444\r
445 return true;\r
06a19cee 446 }\r
447\r
a929458e 448 private VariablesIdentification getCurrentVariables() {\r
449 String arg0 = this.jTextFieldVariableName.getText();\r
450 String arg1 = this.jComboBoxGuidC_Name.getSelectedItem().toString();\r
451 String arg2 = this.jComboBoxUsage.getSelectedItem().toString();\r
452\r
453 String arg3 = this.jTextFieldFeatureFlag.getText();\r
454 Vector<String> arg4 = this.jArchCheckBox.getSelectedItemsVector();\r
455 String arg5 = this.jTextAreaHelpText.getText();\r
456\r
457 id = new VariablesIdentification(arg0, arg1, arg2, arg3, arg4, arg5);\r
458 return id;\r
06a19cee 459 }\r
460\r
a929458e 461 public VariablesIdentification getId() {\r
462 return id;\r
06a19cee 463 }\r
ccb063b1 464\r
a929458e 465 public void setId(VariablesIdentification id) {\r
466 this.id = id;\r
467 }\r
06a19cee 468}\r