1 19 20 package org.openide.src.nodes; 21 22 import java.awt.BorderLayout ; 23 import java.awt.event.KeyEvent ; 24 import java.beans.FeatureDescriptor ; 25 import java.util.ResourceBundle ; 26 27 import javax.swing.*; 28 import javax.swing.border.*; 29 30 import org.openide.src.*; 31 import org.openide.explorer.propertysheet.*; 32 import org.openide.*; 33 import org.openide.util.Utilities; 34 import org.openide.util.NbBundle; 35 36 import org.openide.src.nodes.SourceEditSupport.ExceptionalRunnable; 37 38 42 public class MethodCustomizer extends JPanel { 43 44 static ResourceBundle bundle = NbBundle.getBundle(MethodCustomizer.class); 45 46 47 private static final String [] COMMON_TYPES = { 48 "void", "String", "boolean", "char", "int", "long", "byte", "short", "float", "double" }; 59 60 61 ConstructorElement element; 62 63 67 MethodElement method; 68 69 boolean isOK = true; 70 71 74 public MethodCustomizer(ConstructorElement element) { 75 this.element = element; 76 this.method = (element instanceof MethodElement) ? 77 (MethodElement) element : null; 78 79 initComponents (); 80 81 methodPanel.setBorder (new CompoundBorder( 83 new TitledBorder(bundle.getString("CTL_MethodFrame")), 84 new EmptyBorder(new java.awt.Insets (5, 5, 5, 5))) 85 ); 86 modifierPanel.setBorder (new TitledBorder(bundle.getString("CTL_Modifiers"))); 87 paramsPanel.setBorder (new TitledBorder(bundle.getString("CTL_Parameters"))); 88 exceptionsPanel.setBorder (new TitledBorder(bundle.getString("CTL_Exceptions"))); 89 90 PropertyPanel modifEditor = ElementBeanModel.createModifiersPanel(element); 92 FeatureDescriptor fd = modifEditor.getProperty(); 93 final String mnc = String.valueOf(KeyEvent.CHAR_UNDEFINED); 94 fd.setValue("ModifierPanel_Modifier_Abstract_Mnemonic", mnc); fd.setValue("ModifierPanel_Modifier_Final_Mnemonic", mnc); fd.setValue("ModifierPanel_Modifier_Static_Mnemonic", mnc); fd.setValue("ModifierPanel_Modifier_Synchronized_Mnemonic", mnc); fd.setValue("ModifierPanel_Modifier_Transient_Mnemonic", mnc); fd.setValue("ModifierPanel_Modifier_Volatile_Mnemonic", mnc); fd.setValue("ModifierPanel_Modifier_Native_Mnemonic", mnc); modifierPanel.add(modifEditor, BorderLayout.CENTER); 102 103 nameTextField.setText(element.getName().toString()); 105 if (method == null) { 106 nameTextField.setEnabled(false); 107 returnCombo.setEnabled(false); 108 } 109 else { 110 returnCombo.setSelectedItem(method.getReturn().toString()); 111 } 112 113 PropertyPanel paramsEditor = ElementBeanModel.createPropertyPanel(element, ElementProperties.PROP_PARAMETERS); 115 fd = paramsEditor.getProperty(); 116 fd.setValue("mnemonic_Add", bundle.getString("CTL_Parameters_Mnemonic_Add")); fd.setValue("mnemonic_Remove", bundle.getString("CTL_Parameters_Mnemonic_Remove")); fd.setValue("mnemonic_Up", bundle.getString("CTL_Parameters_Mnemonic_Up")); fd.setValue("mnemonic_Down", bundle.getString("CTL_Parameters_Mnemonic_Down")); fd.setValue("mnemonic_Edit", bundle.getString("CTL_Parameters_Mnemonic_Edit")); paramsPanel.add(paramsEditor, BorderLayout.CENTER); 122 123 PropertyPanel exceptionsEditor = ElementBeanModel.createPropertyPanel(element, ElementProperties.PROP_EXCEPTIONS); 125 fd = exceptionsEditor.getProperty(); 126 fd.setValue("mnemonic_Add", bundle.getString("CTL_Exceptions_Mnemonic_Add")); 127 fd.setValue("mnemonic_Remove", bundle.getString("CTL_Exceptions_Mnemonic_Remove")); 128 fd.setValue("mnemonic_Up", bundle.getString("CTL_Exceptions_Mnemonic_Up")); 129 fd.setValue("mnemonic_Down", bundle.getString("CTL_Exceptions_Mnemonic_Down")); 130 fd.setValue("mnemonic_Edit", bundle.getString("CTL_Exceptions_Mnemonic_Edit")); 131 exceptionsPanel.add(exceptionsEditor, BorderLayout.CENTER); 132 133 jLabel1.setDisplayedMnemonic(bundle.getString("CTL_Name_Mnemonic").charAt(0)); jLabel2.setDisplayedMnemonic(bundle.getString("CTL_MethodType_Mnemonic").charAt(0)); initAccessibility(); 137 } 138 139 public void addNotify() { 140 super.addNotify(); 141 142 int len = nameTextField.getText().length(); 143 nameTextField.setCaretPosition(0); 144 nameTextField.moveCaretPosition(len); 145 SwingUtilities.invokeLater(new Runnable () { 146 public void run() { 147 nameTextField.requestFocus(); 148 } 149 }); 150 } 151 152 157 private void initComponents() { methodPanel = new javax.swing.JPanel (); 159 jLabel1 = new javax.swing.JLabel (); 160 nameTextField = new javax.swing.JTextField (); 161 jLabel2 = new javax.swing.JLabel (); 162 returnCombo = new javax.swing.JComboBox (COMMON_TYPES); 163 jPanel1 = new javax.swing.JPanel (); 164 modifierPanel = new javax.swing.JPanel (); 165 paramsPanel = new javax.swing.JPanel (); 166 exceptionsPanel = new javax.swing.JPanel (); 167 168 setLayout(new java.awt.GridBagLayout ()); 169 java.awt.GridBagConstraints gridBagConstraints1; 170 171 setBorder(new javax.swing.border.EmptyBorder (new java.awt.Insets (6, 6, 6, 6))); 172 methodPanel.setLayout(new java.awt.GridBagLayout ()); 173 java.awt.GridBagConstraints gridBagConstraints2; 174 175 jLabel1.setText(bundle.getString("CTL_Name")); 176 jLabel1.setLabelFor(nameTextField); 177 gridBagConstraints2 = new java.awt.GridBagConstraints (); 178 gridBagConstraints2.insets = new java.awt.Insets (10, 0, 8, 8); 179 gridBagConstraints2.anchor = java.awt.GridBagConstraints.EAST; 180 methodPanel.add(jLabel1, gridBagConstraints2); 181 182 nameTextField.addFocusListener(new java.awt.event.FocusAdapter () { 183 public void focusLost(java.awt.event.FocusEvent evt) { 184 nameTextFieldFocusLost(evt); 185 } 186 }); 187 188 gridBagConstraints2 = new java.awt.GridBagConstraints (); 189 gridBagConstraints2.gridwidth = java.awt.GridBagConstraints.REMAINDER; 190 gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH; 191 gridBagConstraints2.insets = new java.awt.Insets (10, 0, 8, 0); 192 gridBagConstraints2.weightx = 1.0; 193 methodPanel.add(nameTextField, gridBagConstraints2); 194 195 jLabel2.setText(bundle.getString("CTL_ReturnType")); 196 jLabel2.setLabelFor(returnCombo); 197 gridBagConstraints2 = new java.awt.GridBagConstraints (); 198 gridBagConstraints2.insets = new java.awt.Insets (0, 0, 0, 8); 199 gridBagConstraints2.anchor = java.awt.GridBagConstraints.EAST; 200 methodPanel.add(jLabel2, gridBagConstraints2); 201 202 returnCombo.setEditable(true); 203 returnCombo.addActionListener(new java.awt.event.ActionListener () { 204 public void actionPerformed(java.awt.event.ActionEvent evt) { 205 returnComboActionPerformed(evt); 206 } 207 }); 208 209 gridBagConstraints2 = new java.awt.GridBagConstraints (); 210 gridBagConstraints2.gridwidth = java.awt.GridBagConstraints.REMAINDER; 211 gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH; 212 gridBagConstraints2.weightx = 1.0; 213 methodPanel.add(returnCombo, gridBagConstraints2); 214 215 gridBagConstraints2 = new java.awt.GridBagConstraints (); 216 gridBagConstraints2.fill = java.awt.GridBagConstraints.VERTICAL; 217 gridBagConstraints2.weighty = 1.0; 218 methodPanel.add(jPanel1, gridBagConstraints2); 219 220 gridBagConstraints1 = new java.awt.GridBagConstraints (); 221 gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; 222 gridBagConstraints1.weightx = 1.0; 223 add(methodPanel, gridBagConstraints1); 224 225 gridBagConstraints1 = new java.awt.GridBagConstraints (); 226 gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER; 227 gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; 228 gridBagConstraints1.insets = new java.awt.Insets (0, 5, 0, 0); 229 add(modifierPanel, gridBagConstraints1); 230 231 paramsPanel.setLayout(new java.awt.BorderLayout ()); 232 233 gridBagConstraints1 = new java.awt.GridBagConstraints (); 234 gridBagConstraints1.gridx = 0; 235 gridBagConstraints1.gridy = 1; 236 gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER; 237 gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; 238 gridBagConstraints1.insets = new java.awt.Insets (5, 0, 0, 0); 239 gridBagConstraints1.weightx = 1.0; 240 gridBagConstraints1.weighty = 1.0; 241 add(paramsPanel, gridBagConstraints1); 242 243 exceptionsPanel.setLayout(new java.awt.BorderLayout ()); 244 245 gridBagConstraints1 = new java.awt.GridBagConstraints (); 246 gridBagConstraints1.gridx = 0; 247 gridBagConstraints1.gridy = 2; 248 gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER; 249 gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH; 250 gridBagConstraints1.insets = new java.awt.Insets (5, 0, 0, 0); 251 gridBagConstraints1.weightx = 1.0; 252 gridBagConstraints1.weighty = 1.0; 253 add(exceptionsPanel, gridBagConstraints1); 254 255 } 257 private void returnComboActionPerformed (java.awt.event.ActionEvent evt) { if (method == null) 259 return; 260 261 Object selItem = returnCombo.getSelectedItem(); 262 Type oldValue = method.getReturn(); 263 boolean ok = false; 264 265 if (selItem!=null) { 266 try { 267 final Type newValue = Type.parse(selItem.toString()); 268 if (!oldValue.equals(newValue)) { 269 try { 270 SourceEditSupport.runAsUser(method, new ExceptionalRunnable() { 271 public void run() throws SourceException { 272 method.setReturn(newValue); 273 } 274 }); 275 ok = true; 276 } 277 catch (SourceException e) { 278 ErrorManager.getDefault().notify(e); 279 } 280 } else 281 return; 282 } 283 catch (IllegalArgumentException e) { 284 ErrorManager.getDefault().annotate( 285 e, ErrorManager.USER, null, 286 bundle.getString("MSG_Not_Valid_Type"), 287 null, null); 288 ErrorManager.getDefault().notify(e); 289 } 290 } 291 isOK = ok; 292 if (!ok) 293 returnCombo.setSelectedItem(oldValue.toString()); 294 } 296 private void nameTextFieldFocusLost (java.awt.event.FocusEvent evt) { if ((evt != null && evt.isTemporary()) || (method == null)) 298 return; 299 300 String newName = nameTextField.getText(); 301 String oldName = method.getName().toString(); 302 boolean ok = false; 303 Exception x = null; 304 if (Utilities.isJavaIdentifier(newName)) { 305 if (!oldName.equals(newName)) { 306 final Identifier id = Identifier.create(newName); 307 try { 308 SourceEditSupport.runAsUser(method, new ExceptionalRunnable() { 309 public void run() throws SourceException { 310 method.setName(id); 311 } 312 }); 313 ok = true; 314 } 315 catch (SourceException e) { 316 ErrorManager.getDefault().notify(e); 317 } 318 } else 319 return; 320 } else { 321 x = new IllegalArgumentException ("Invalid name"); ErrorManager.getDefault().annotate( 323 x, ErrorManager.USER, null, 324 bundle.getString("MSG_Not_Valid_Identifier"), 325 null, null); 326 } 327 isOK = ok; 328 if (!ok) { 329 nameTextField.setText(oldName); 330 } 331 if (x != null) { 332 ErrorManager.getDefault().notify(x); 333 } 334 } 336 337 private javax.swing.JPanel methodPanel; 339 private javax.swing.JLabel jLabel1; 340 private javax.swing.JTextField nameTextField; 341 private javax.swing.JLabel jLabel2; 342 private javax.swing.JComboBox returnCombo; 343 private javax.swing.JPanel jPanel1; 344 private javax.swing.JPanel modifierPanel; 345 private javax.swing.JPanel paramsPanel; 346 private javax.swing.JPanel exceptionsPanel; 347 349 private void initAccessibility() { 350 nameTextField.getAccessibleContext().setAccessibleName(bundle.getString("ACS_MethodNameTextField")); 351 nameTextField.getAccessibleContext().setAccessibleDescription(bundle.getString("ACS_MethodNameTextField")); 352 this.getAccessibleContext().setAccessibleDescription("ACSD_MethodCustomizerDialog"); } 354 355 public boolean isOK() { 356 nameTextFieldFocusLost(null); 357 returnComboActionPerformed(null); 358 return isOK; 359 } 360 } 361 | Popular Tags |