]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/platform/ui/FpdFvOptions.java
Add Fv option value edit support;
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / platform / ui / FpdFvOptions.java
CommitLineData
b411fc1f 1/** @file\r
2 Java class FpdFvOptions is GUI for FV options in FPD 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.platform.ui;\r
14\r
15import java.awt.BorderLayout;\r
16import java.awt.Dimension;\r
17import java.awt.Toolkit;\r
0cc00bf0 18import java.awt.event.MouseEvent;\r
19import java.awt.event.WindowEvent;\r
b411fc1f 20import java.util.Iterator;\r
0cc00bf0 21import java.util.LinkedHashMap;\r
b411fc1f 22import java.util.Set;\r
23\r
0cc00bf0 24import javax.swing.JFrame;\r
25import javax.swing.JOptionPane;\r
b411fc1f 26import javax.swing.JPanel;\r
27import javax.swing.JDialog;\r
28import javax.swing.JScrollPane;\r
29import javax.swing.JTable;\r
0cc00bf0 30import javax.swing.ListSelectionModel;\r
31import javax.swing.event.ListSelectionEvent;\r
32import javax.swing.event.ListSelectionListener;\r
b411fc1f 33import javax.swing.event.TableModelEvent;\r
34import javax.swing.event.TableModelListener;\r
35import javax.swing.table.DefaultTableModel;\r
36import javax.swing.table.TableModel;\r
37import javax.swing.JButton;\r
38\r
39import org.tianocore.frameworkwizard.common.Identifications.OpeningPlatformType;\r
40\r
41/**\r
42 * \r
43 *\r
44 */\r
45public class FpdFvOptions extends JDialog {\r
46\r
72426064 47 /**\r
48 * \r
49 */\r
50 private static final long serialVersionUID = 1L;\r
0cc00bf0 51 private static JFrame frame;\r
b411fc1f 52 private JPanel jContentPane = null;\r
53 private JPanel jPanelN = null;\r
54 private JPanel jPanelS = null;\r
55 private JPanel jPanelC = null;\r
56 private JScrollPane jScrollPaneFvOptions = null;\r
57 private JTable jTableFvOptions = null;\r
58 private DefaultTableModel tableModel = null;\r
59 private String fvName = null;\r
60 private FpdFileContents ffc = null;\r
61 private OpeningPlatformType docConsole = null;\r
62 private JButton jButtonNew = null;\r
63 private JButton jButtonDelete = null;\r
0cc00bf0 64 private String oldOptionName = "";\r
65 private int selectedRow = -1;\r
66 private TableModelListener tableModelListener = null;\r
b411fc1f 67\r
68 /**\r
69 * This is the default constructor\r
70 */\r
71 public FpdFvOptions(String name, DefaultTableModel tm, FpdFileContents ffc, OpeningPlatformType dc) {\r
72 super();\r
73 fvName = name;\r
74 this.ffc = ffc;\r
75 this.docConsole = dc;\r
76 setTableModel(tm);\r
77 initOptions();\r
78 initialize();\r
79 \r
80 }\r
0cc00bf0 81 \r
82 protected void processWindowEvent (WindowEvent e) {\r
83 if (e.getID() == WindowEvent.WINDOW_CLOSING) {\r
84 if (jTableFvOptions.isEditing()) {\r
85 jTableFvOptions.getCellEditor().stopCellEditing();\r
86 }\r
87 tableModel.removeTableModelListener(tableModelListener);\r
88 this.dispose();\r
89 }\r
90 }\r
b411fc1f 91\r
92 private void initOptions() {\r
93 tableModel.setRowCount(0);\r
0cc00bf0 94 LinkedHashMap<String, String> mOpts = new LinkedHashMap<String, String>();\r
b411fc1f 95 ffc.getFvImagesFvImageOptions(fvName, mOpts);\r
96 Set<String> sKey = mOpts.keySet();\r
97 Iterator<String> iter = sKey.iterator();\r
98 while (iter.hasNext()) {\r
99 String name = iter.next();\r
100 String value = mOpts.get(name);\r
101 tableModel.addRow(new String[]{name, value});\r
102 }\r
103 }\r
0cc00bf0 104 \r
105 private boolean fvOptionNameExists (String name) {\r
106 int count = 0;\r
107 for (int i = 0; i < jTableFvOptions.getRowCount(); ++i) {\r
108 if (getTableModel().getValueAt(i, 0).equals(name)) {\r
109 ++count;\r
110 }\r
111 }\r
112 if (count > 1) {\r
113 return true;\r
114 }\r
115 return false;\r
116 }\r
b411fc1f 117 /**\r
118 * This method initializes this\r
119 * \r
120 * @return void\r
121 */\r
122 private void initialize() {\r
123 this.setSize(650, 400);\r
0cc00bf0 124// this.setModal(true);\r
b411fc1f 125 this.setTitle("FV Options");\r
0cc00bf0 126 this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);\r
b411fc1f 127 this.setContentPane(getJContentPane());\r
128 this.centerWindow();\r
129 this.setVisible(true);\r
0cc00bf0 130 \r
b411fc1f 131 }\r
132\r
133 /**\r
134 * This method initializes jContentPane\r
135 * \r
136 * @return javax.swing.JPanel\r
137 */\r
138 private JPanel getJContentPane() {\r
139 if (jContentPane == null) {\r
140 jContentPane = new JPanel();\r
141 jContentPane.setLayout(new BorderLayout());\r
142 jContentPane.add(getJPanelN(), java.awt.BorderLayout.NORTH);\r
143 jContentPane.add(getJPanelS(), java.awt.BorderLayout.SOUTH);\r
144 jContentPane.add(getJPanelC(), java.awt.BorderLayout.CENTER);\r
145 }\r
146 return jContentPane;\r
147 }\r
148\r
149 /**\r
150 * This method initializes jPanelN \r
151 * \r
152 * @return javax.swing.JPanel \r
153 */\r
154 private JPanel getJPanelN() {\r
155 if (jPanelN == null) {\r
156 jPanelN = new JPanel();\r
157 }\r
158 return jPanelN;\r
159 }\r
160\r
161 /**\r
162 * This method initializes jPanelS \r
163 * \r
164 * @return javax.swing.JPanel \r
165 */\r
166 private JPanel getJPanelS() {\r
167 if (jPanelS == null) {\r
168 jPanelS = new JPanel();\r
169 jPanelS.add(getJButtonNew(), null);\r
170 jPanelS.add(getJButtonDelete(), null);\r
171 }\r
172 return jPanelS;\r
173 }\r
174\r
175 /**\r
176 * This method initializes jPanelC \r
177 * \r
178 * @return javax.swing.JPanel \r
179 */\r
180 private JPanel getJPanelC() {\r
181 if (jPanelC == null) {\r
182 jPanelC = new JPanel();\r
183 jPanelC.add(getJScrollPaneFvOptions(), null);\r
184 }\r
185 return jPanelC;\r
186 }\r
187\r
188 /**\r
189 * This method initializes jScrollPaneFvOptions \r
190 * \r
191 * @return javax.swing.JScrollPane \r
192 */\r
193 private JScrollPane getJScrollPaneFvOptions() {\r
194 if (jScrollPaneFvOptions == null) {\r
195 jScrollPaneFvOptions = new JScrollPane();\r
196 jScrollPaneFvOptions.setPreferredSize(new java.awt.Dimension(600,320));\r
197 jScrollPaneFvOptions.setViewportView(getJTableFvOptions());\r
198 }\r
199 return jScrollPaneFvOptions;\r
200 }\r
201\r
202 /**\r
203 * This method initializes jTableFvOptions \r
204 * \r
205 * @return javax.swing.JTable \r
206 */\r
207 private JTable getJTableFvOptions() {\r
208 if (jTableFvOptions == null) {\r
0cc00bf0 209 jTableFvOptions = new JTable(getTableModel()) {\r
210 /**\r
211 * \r
212 */\r
213 private static final long serialVersionUID = -1941328952828651192L;\r
214\r
215 public String getToolTipText(MouseEvent e) {\r
216 String tip = null;\r
217 java.awt.Point p = e.getPoint();\r
218 int rowIndex = rowAtPoint(p);\r
219// int colIndex = columnAtPoint(p);\r
220// int realColumnIndex = convertColumnIndexToModel(colIndex);\r
221\r
222 TableModel model = getModel();\r
223 String optName = (String) model.getValueAt(rowIndex, 0);\r
224 if (((FvOptsTableModel)model).getVKeyWords().contains(optName)){\r
225 tip = optName + " is from Flash Definition File and it is NOT editable.";\r
226 }\r
227 \r
228 return tip;\r
229 }\r
230\r
231 };\r
232 \r
b411fc1f 233 jTableFvOptions.setRowHeight(20);\r
b411fc1f 234 \r
0cc00bf0 235 jTableFvOptions.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
236 public void valueChanged(ListSelectionEvent e) {\r
237 if (e.getValueIsAdjusting()) {\r
238 return;\r
239 }\r
240 ListSelectionModel lsm = (ListSelectionModel) e.getSource();\r
241 if (lsm.isSelectionEmpty()) {\r
242 return;\r
243 } else {\r
244 selectedRow = lsm.getMinSelectionIndex();\r
245 oldOptionName = getTableModel().getValueAt(selectedRow, 0)+"";\r
246 }\r
247 }\r
248 });\r
249 \r
250 tableModelListener = new TableModelListener() {\r
b411fc1f 251 public void tableChanged(TableModelEvent arg0) {\r
252 // TODO Auto-generated method stub\r
253 int row = arg0.getFirstRow();\r
0cc00bf0 254 int col = arg0.getColumn();\r
b411fc1f 255 TableModel m = (TableModel) arg0.getSource();\r
256 \r
257 if (arg0.getType() == TableModelEvent.UPDATE) {\r
0cc00bf0 258 String newOptionName = m.getValueAt(row, 0) + "";\r
259 if (col == 0) {\r
260 if (newOptionName.equals(oldOptionName)) {\r
261 return;\r
262 }\r
263 if (fvOptionNameExists(newOptionName)) {\r
264 JOptionPane.showMessageDialog(frame, "This Option already exists. Please choose another Option name.");\r
265 m.setValueAt(oldOptionName, row, 0);\r
266 return;\r
267 }\r
268 \r
269 ffc.setTypedNamedFvImageNameValue(fvName, "Options", oldOptionName, m.getValueAt(row, 1)+"", newOptionName);\r
270 docConsole.setSaved(false);\r
271 oldOptionName = newOptionName;\r
b411fc1f 272 }\r
0cc00bf0 273 \r
274 if (col == 1) {\r
275 ffc.setTypedNamedFvImageNameValue(fvName, "Options", oldOptionName, m.getValueAt(row, 1)+"", newOptionName);\r
276 docConsole.setSaved(false); \r
277 }\r
278 \r
b411fc1f 279 }\r
280 }\r
0cc00bf0 281 };\r
282 \r
283 jTableFvOptions.getModel().addTableModelListener(tableModelListener);\r
b411fc1f 284 }\r
285 return jTableFvOptions;\r
286 }\r
287\r
288 protected DefaultTableModel getTableModel() {\r
289 return tableModel;\r
290 }\r
291\r
292 protected void setTableModel(DefaultTableModel tableModel) {\r
293 \r
294 this.tableModel = tableModel;\r
295 \r
296 }\r
297\r
298 /**\r
299 Start the window at the center of screen\r
300 \r
301 **/\r
302 protected void centerWindow(int intWidth, int intHeight) {\r
303 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();\r
304 this.setLocation((d.width - intWidth) / 2, (d.height - intHeight) / 2);\r
305 }\r
306\r
307 /**\r
308 Start the window at the center of screen\r
309 \r
310 **/\r
311 protected void centerWindow() {\r
312 centerWindow(this.getSize().width, this.getSize().height);\r
313 }\r
314\r
315/**\r
316 * This method initializes jButtonNew \r
317 * \r
318 * @return javax.swing.JButton \r
319 */\r
320private JButton getJButtonNew() {\r
321 if (jButtonNew == null) {\r
322 jButtonNew = new JButton();\r
323 jButtonNew.setPreferredSize(new java.awt.Dimension(80,20));\r
324 jButtonNew.setText("New");\r
325 jButtonNew.addActionListener(new java.awt.event.ActionListener() {\r
326 public void actionPerformed(java.awt.event.ActionEvent e) {\r
327 tableModel.addRow(new String[]{"", ""});\r
0cc00bf0 328 oldOptionName = "";\r
b411fc1f 329 }\r
330 });\r
331 }\r
332 return jButtonNew;\r
333}\r
334\r
335/**\r
336 * This method initializes jButtonDelete \r
337 * \r
338 * @return javax.swing.JButton \r
339 */\r
340private JButton getJButtonDelete() {\r
341 if (jButtonDelete == null) {\r
342 jButtonDelete = new JButton();\r
343 jButtonDelete.setPreferredSize(new java.awt.Dimension(80,20));\r
344 jButtonDelete.setText("Delete");\r
345 jButtonDelete.addActionListener(new java.awt.event.ActionListener() {\r
346 public void actionPerformed(java.awt.event.ActionEvent e) {\r
347 int selectedRow = jTableFvOptions.getSelectedRow();\r
348 if (selectedRow < 0) {\r
349 return;\r
350 }\r
351 String optName = tableModel.getValueAt(selectedRow, 0)+"";\r
352 if (((FvOptsTableModel)tableModel).getVKeyWords().contains(optName)){\r
353 return;\r
354 }\r
72426064 355 if (((FvOptsTableModel)tableModel).getVNonEditableName().contains(optName)){\r
356 return;\r
357 }\r
b411fc1f 358 \r
359 ffc.removeTypedNamedFvImageNameValue(fvName, "Options", optName);\r
360 tableModel.removeRow(selectedRow);\r
361 docConsole.setSaved(false);\r
362 }\r
363 });\r
364 }\r
365 return jButtonDelete;\r
366}\r
367}\r