@Override public Image getIcon(final int iconType) { Image icon = img.get(iconType); if (icon != null) return icon; // try to get a special icon icon = BeanSupport.getBeanIcon(component.getBeanClass(), iconType); if (icon == null) { final String className = component.getBeanClass().getName(); final String classDetails = (String) component.getAuxValue(RADComponent.AUX_VALUE_CLASS_DETAILS); if (!iconsInitialized) { // getIconForClass invokes getNodes(true) which cannot be called in Mutex EventQueue.invokeLater( new Runnable() { @Override public void run() { Image icon = PaletteUtils.getIconForClass(className, classDetails, iconType, true); iconsInitialized = true; if (icon != null) { img.put(iconType, icon); fireIconChange(); } } }); } else { icon = PaletteUtils.getIconForClass(className, classDetails, iconType, false); } if (icon == null) { // get icon from BeanInfo java.beans.BeanInfo bi = component.getBeanInfo(); if (bi != null) { icon = bi.getIcon(iconType); } if (icon == null) { // use default icon icon = super.getIcon(iconType); } } } img.put(iconType, icon); return icon; }
/** * Creates the customizer component for the node. * * @return the component, or null if there is no customizer */ @Override protected Component createCustomizer() { Class customizerClass = component.getBeanInfo().getBeanDescriptor().getCustomizerClass(); if (customizerClass == null) { if (javax.swing.JTable.class.isAssignableFrom(component.getBeanClass())) { customizerClass = TableCustomizer.class; } else { return null; } } Object customizerObject; try { customizerObject = customizerClass.newInstance(); } catch (InstantiationException e) { ErrorManager.getDefault().notify(ErrorManager.WARNING, e); return null; } catch (IllegalAccessException e) { ErrorManager.getDefault().notify(ErrorManager.WARNING, e); return null; } if (!(customizerObject instanceof Component) || !(customizerObject instanceof Customizer)) return null; if (customizerObject instanceof NodeCustomizer) ((NodeCustomizer) customizerObject).attach(component.getNodeReference()); // Issue 203352 - default values of properties must be initialized // before the customizer is shown/used component.ensureDefaultPropertyValuesInitialization(); Customizer customizer = (Customizer) customizerObject; customizer.setObject(component.getBeanInstance()); if (customizerObject instanceof FormAwareEditor) { // Hack - returns some property Node.Property prop = component.getProperties()[0].getProperties()[0]; ((FormAwareEditor) customizerObject) .setContext(component.getFormModel(), (FormProperty) prop); } customizer.addPropertyChangeListener( new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { FormProperty[] properties; if (evt.getPropertyName() != null) { FormProperty changedProperty = component.getBeanProperty(evt.getPropertyName()); if (changedProperty != null) properties = new FormProperty[] {changedProperty}; else return; // non-existing property? } else { properties = component.getAllBeanProperties(); evt = null; } updatePropertiesFromCustomizer(properties, evt); } }); // [undo/redo for customizer probably does not work...] return (Component) customizerObject; }
@Override public Action[] getActions(boolean context) { if (actions == null) { List<Action> actions = new ArrayList<Action>(20); RADComponent topComp = component.getFormModel().getTopRADComponent(); if (component.isReadOnly()) { if (component == topComp) { actions.add(SystemAction.get(TestAction.class)); actions.add(null); } Event[] events = component.getKnownEvents(); for (int i = 0; i < events.length; i++) { if (events[i].hasEventHandlers()) { actions.add(SystemAction.get(EventsAction.class)); actions.add(null); break; } } actions.add(SystemAction.get(CopyAction.class)); } else { if (InPlaceEditLayer.supportsEditingFor(component.getBeanClass(), false)) { actions.add(SystemAction.get(InPlaceEditAction.class)); } if (javax.swing.JTable.class.isAssignableFrom(component.getBeanClass())) { actions.add(SystemAction.get(CustomizeTableAction.class)); } if (component != topComp) { actions.add(SystemAction.get(ChangeVariableNameAction.class)); } else { actions.add(SystemAction.get(TestAction.class)); } if (FormEditor.getBindingSupport(component.getFormModel()) != null) { // zxb:删除掉绑定菜单项。 // actions.add(SystemAction.get(BindAction.class)); } actions.add(SystemAction.get(EventsAction.class)); actions.add(null); java.util.List actionProps = component.getActionProperties(); Iterator iter = actionProps.iterator(); while (iter.hasNext()) { final RADProperty prop = (RADProperty) iter.next(); Action action = PropertyAction.createIfEditable(prop); if (action != null) { actions.add(action); } } addSeparator(actions); if (component instanceof ComponentContainer) { addContainerActions(actions); addLayoutActions(actions); } else { addLayoutActions(actions); addContainerActions(actions); } if (component != topComp) { actions.add(SystemAction.get(MoveUpAction.class)); actions.add(SystemAction.get(MoveDownAction.class)); } if (component instanceof ComponentContainer) { actions.add(SystemAction.get(ReorderAction.class)); } addSeparator(actions); if (component != topComp) { actions.add(SystemAction.get(CutAction.class)); } actions.add(SystemAction.get(CopyAction.class)); if (component instanceof ComponentContainer) { actions.add(SystemAction.get(PasteAction.class)); } if (component != topComp) { actions.add(SystemAction.get(DuplicateAction.class)); actions.add(SystemAction.get(DeleteAction.class)); } actions.add(null); // zxb:删除掉自定义代码菜单项。 // actions.add(SystemAction.get(CustomCodeAction.class)); } actions.add(null); javax.swing.Action[] superActions = super.getActions(context); for (int i = 0; i < superActions.length; i++) actions.add(superActions[i]); this.actions = new Action[actions.size()]; actions.toArray(this.actions); } return actions; }
void updateName() { String compClassName = Utilities.getShortClassName(component.getBeanClass()); if (component == component.getFormModel().getTopRADComponent()) setDisplayName(nodeNoNameFormat.format(new Object[] {compClassName})); else setDisplayName(nodeNameFormat.format(new Object[] {getName(), compClassName})); }