com.threerings.editor.swing
Class EditorPanel

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by com.samskivert.swing.CollapsiblePanel
                      extended by com.threerings.editor.swing.BasePropertyEditor
                          extended by com.threerings.editor.swing.EditorPanel
All Implemented Interfaces:
ActionListener, ImageObserver, MenuContainer, Serializable, EventListener, Accessible, ChangeListener

public class EditorPanel
extends BasePropertyEditor
implements ChangeListener

Allows editing properties of an object as determined through reflection.

See Also:
Serialized Form

Nested Class Summary
static class EditorPanel.CategoryMode
          Determines how the different property categories are displayed (in sequential collapsible panels, in separate tabs, or in a card layout with a combo box at the top).
 
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
protected  Property[] _ancestors
          The ancestor properties from which constraints are inherited.
protected  EditorPanel.CategoryMode _catmode
          How to present different categories of properties.
protected  EditorContext _ctx
          Provides access to common services.
protected  DirectDialog _ddialog
          The dialog for creating direct parameters.
protected  JPanel _dynamic
          A container for the dynamic properties.
protected  ArrayList<PropertyEditor> _editors
          The current list of editors.
protected  Object _object
          The object being edited.
protected  boolean _omitColumns
          If true, do not add editors for the properties flagged as columns.
 
Fields inherited from class com.threerings.editor.swing.BasePropertyEditor
_collapseIcon, _expandIcon, _highlight, _highlighted, _highlightIcon, _msgmgr, _msgs, BASE_BACKGROUND, DEFAULT_BACKGROUND, PANEL_BUTTON_SIZE, SHADE_DECREMENT
 
Fields inherited from class com.samskivert.swing.CollapsiblePanel
_content, _downIcon, _trigger, _upIcon
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
EditorPanel(EditorContext ctx)
          Creates an empty editor panel.
EditorPanel(EditorContext ctx, EditorPanel.CategoryMode catmode)
          Creates an empty editor panel.
EditorPanel(EditorContext ctx, EditorPanel.CategoryMode catmode, Property[] ancestors)
          Creates an empty editor panel.
EditorPanel(EditorContext ctx, EditorPanel.CategoryMode catmode, Property[] ancestors, boolean omitColumns)
          Creates an empty editor panel.
 
Method Summary
protected  void addEditors(Property[] props, String category, JPanel panel)
          Creates and adds editors for all properties in the specified category (or all properties, if category is null).
protected  JPanel addScrollPanel()
          Adds and returns a scrolling panel (if not embedded).
static JDialog createDialog(Component parent, EditorContext ctx, EditorPanel.CategoryMode catmode, String title, Object object)
          Creates and returns a simple dialog for editing the supplied object.
static JDialog createDialog(Component parent, EditorContext ctx, String title, Object object)
          Creates and returns a simple dialog for editing the supplied object.
protected  void createDirectPath(String path)
          Attempts to create a new direct property path.
protected  PropertyEditor createEditor(Property prop)
          Creates an editor for the specified property.
protected static JScrollPane createScrollPane(Component view)
          Creates a scroll pane with an increment that's more useful than the default.
protected  PropertyEditor getEditor(String name)
          Returns the editor with the given property name.
protected  String[] getFilteredCategories(Class<?> clazz, Property[] props)
          Returns the list of categories, minus any made empty by omission.
protected  String getMousePath(Point pt)
          Returns the path of the property under the mouse cursor relative to this property.
 Object getObject()
          Returns the object being edited.
 PropertyEditor getPropertyEditor(String name)
          Returns the property editor for the property with the supplied name.
protected  boolean isCategoryPresent(Property[] props, String cat)
          Determines whether the specified category is represented in the property array.
protected  boolean isEmbedded()
          Determines whether this editor panel is embedded within another.
 void setObject(Object object)
          Sets the object being edited.
 void stateChanged(ChangeEvent event)
           
 void update()
          Updates the editor state in response to an external change in the object's state.
protected  void updateDynamicProperties()
          Updates the dynamic properties.
 
Methods inherited from class com.threerings.editor.swing.BasePropertyEditor
actionPerformed, addChangeListener, copyPropertyPath, createButton, darkenColor, fireStateChanged, getBackgroundColor, getColor, getColor, getColor, getDarkerBackground, getLabel, getLabel, getLabel, getLabel, getLabels, getLabels, getLabels, getMousePath, getPropertyColor, loadIcon, makeCollapsible, removeChangeListener, updateBorder
 
Methods inherited from class com.samskivert.swing.CollapsiblePanel
getContent, isCollapsed, setCollapsed, setGap, setTrigger, setTriggerContainer, setTriggerContainer, setTriggerContainer
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_ctx

protected EditorContext _ctx
Provides access to common services.


_catmode

protected EditorPanel.CategoryMode _catmode
How to present different categories of properties.


_ancestors

protected Property[] _ancestors
The ancestor properties from which constraints are inherited.


_omitColumns

protected boolean _omitColumns
If true, do not add editors for the properties flagged as columns.


_object

protected Object _object
The object being edited.


_editors

protected ArrayList<PropertyEditor> _editors
The current list of editors.


_dynamic

protected JPanel _dynamic
A container for the dynamic properties.


_ddialog

protected DirectDialog _ddialog
The dialog for creating direct parameters.

Constructor Detail

EditorPanel

public EditorPanel(EditorContext ctx)
Creates an empty editor panel.


EditorPanel

public EditorPanel(EditorContext ctx,
                   EditorPanel.CategoryMode catmode)
Creates an empty editor panel.

Parameters:
catmode - determines how different property categories will be displayed.

EditorPanel

public EditorPanel(EditorContext ctx,
                   EditorPanel.CategoryMode catmode,
                   Property[] ancestors)
Creates an empty editor panel.

Parameters:
catmode - determines how different property categories will be displayed.
ancestors - the ancestor properties from which constraints are inherited. If this is non-null, the panel is assumed to be embedded within another.

EditorPanel

public EditorPanel(EditorContext ctx,
                   EditorPanel.CategoryMode catmode,
                   Property[] ancestors,
                   boolean omitColumns)
Creates an empty editor panel.

Parameters:
catmode - determines how different property categories will be displayed.
ancestors - the ancestor properties from which constraints are inherited. If this is non-null, the panel is assumed to be embedded within another.
omitColumns - if true, do not add editors for the properties flagged as columns.
Method Detail

createDialog

public static JDialog createDialog(Component parent,
                                   EditorContext ctx,
                                   String title,
                                   Object object)
Creates and returns a simple dialog for editing the supplied object.

Parameters:
title - the translated title of the dialog.

createDialog

public static JDialog createDialog(Component parent,
                                   EditorContext ctx,
                                   EditorPanel.CategoryMode catmode,
                                   String title,
                                   Object object)
Creates and returns a simple dialog for editing the supplied object.

Parameters:
title - the translated title of the dialog.

setObject

public void setObject(Object object)
Sets the object being edited.


getObject

public Object getObject()
Returns the object being edited.


getPropertyEditor

public PropertyEditor getPropertyEditor(String name)
Returns the property editor for the property with the supplied name.


update

public void update()
Updates the editor state in response to an external change in the object's state.


stateChanged

public void stateChanged(ChangeEvent event)
Specified by:
stateChanged in interface ChangeListener

getMousePath

protected String getMousePath(Point pt)
Description copied from class: BasePropertyEditor
Returns the path of the property under the mouse cursor relative to this property.

Overrides:
getMousePath in class BasePropertyEditor
Parameters:
pt - the location of the mouse cursor.

createDirectPath

protected void createDirectPath(String path)
Attempts to create a new direct property path.


getFilteredCategories

protected String[] getFilteredCategories(Class<?> clazz,
                                         Property[] props)
Returns the list of categories, minus any made empty by omission.


isCategoryPresent

protected boolean isCategoryPresent(Property[] props,
                                    String cat)
Determines whether the specified category is represented in the property array.


addScrollPanel

protected JPanel addScrollPanel()
Adds and returns a scrolling panel (if not embedded).


isEmbedded

protected boolean isEmbedded()
Determines whether this editor panel is embedded within another.


addEditors

protected void addEditors(Property[] props,
                          String category,
                          JPanel panel)
Creates and adds editors for all properties in the specified category (or all properties, if category is null).


createEditor

protected PropertyEditor createEditor(Property prop)
Creates an editor for the specified property.


getEditor

protected PropertyEditor getEditor(String name)
Returns the editor with the given property name.


updateDynamicProperties

protected void updateDynamicProperties()
Updates the dynamic properties.


createScrollPane

protected static JScrollPane createScrollPane(Component view)
Creates a scroll pane with an increment that's more useful than the default.