org.jdesktop.swingx.renderer
Class WrappingProvider

java.lang.Object
  extended by org.jdesktop.swingx.renderer.ComponentProvider<WrappingIconPanel>
      extended by org.jdesktop.swingx.renderer.WrappingProvider
All Implemented Interfaces:
java.io.Serializable, RolloverRenderer

public class WrappingProvider
extends ComponentProvider<WrappingIconPanel>
implements RolloverRenderer

Wrapping ComponentProvider for usage in tree rendering. Handles the icon itself, delegates the node content to the wrappee. Value-based icon and content mapping can be configured by custom IconValues and StringValue, respectively.

An example of how to configure a file tree by using the system icons and display names


 StringValue sv = new StringValue() {
 
     public String getString(Object value) {
         if (value instanceof File) {
             return FileSystemView.getFileSystemView().getSystemDisplayName(
                     (File) value);
         }
         return TO_STRING.getString(value);
     }
 
 };
 IconValue iv = new IconValue() {
 
     public Icon getIcon(Object value) {
         if (value instanceof File) {
             return FileSystemView.getFileSystemView().getSystemIcon(
                     (File) value);
         }
         return null;
     }
 };
 TreeCellRenderer r = new DefaultTreeRenderer(iv, sv);
 tree.setCellRenderer(r);
 treeTable.setTreeCellRenderer(r);
 
PENDING: ui specific focus rect variation (draw rect around icon) missing

See Also:
Serialized Form

Constructor Summary
WrappingProvider()
          Instantiates a WrappingProvider with default delegate provider.
WrappingProvider(ComponentProvider delegate)
          Instantiates a WrappingProvider with the given delegate provider for the node content.
WrappingProvider(ComponentProvider delegate, boolean unwrapUserObject)
          Instantiates a WrappingProvider with the given delegate provider for the node content and unwrapUserObject property.
WrappingProvider(IconValue iconValue)
          Instantiates a WrappingProvider with default wrappee.
WrappingProvider(IconValue iv, ComponentProvider delegate, boolean unwrapUserObject)
          Instantiates a WrappingProvider with the given delegate provider for the node content and unwrapUserObject property.
WrappingProvider(IconValue iconValue, StringValue wrappeeStringValue)
          Instantiates a WrappingProvider with default wrappee, configured to use the wrappeeStringValue.
WrappingProvider(IconValue iv, StringValue delegateStringValue, boolean unwrapUserObject)
          Instantiates a WrappingProvider with the given delegate provider for the node content and unwrapUserObject property.
WrappingProvider(StringValue wrappeeStringValue)
          Instantiates a WrappingProvider with default wrappee configured with the given StringValue.
 
Method Summary
 void doClick()
          Same as AbstractButton.doClick().
 WrappingIconPanel getRendererComponent(CellContext context)
          Configures and returns an appropriate component to render a cell in the given context.
 java.lang.String getString(java.lang.Object value)
          Returns a string representation of the content.
 boolean getUnwrapUserObject()
          Returns a boolean indicating whether this provider tries to unwrap a userObject from a tree/table/node type value before delegating the context.
 ComponentProvider getWrappee()
          Returns the delegate provider used to render the node content.
 boolean isEnabled()
          
 void setUnwrapUserObject(boolean unwrap)
          Sets the unwrapUserObject property.
 void setWrappee(ComponentProvider delegate)
          Sets the given provider as delegate for the node content.
 
Methods inherited from class org.jdesktop.swingx.renderer.ComponentProvider
getHorizontalAlignment, getStringValue, setHorizontalAlignment, setStringValue
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WrappingProvider

public WrappingProvider()
Instantiates a WrappingProvider with default delegate provider.


WrappingProvider

public WrappingProvider(IconValue iconValue,
                        StringValue wrappeeStringValue)
Instantiates a WrappingProvider with default wrappee, configured to use the wrappeeStringValue. Uses the given IconValue to configure the icon.

Parameters:
iconValue - the IconValue to use for configuring the icon.
wrappeeStringValue - the StringValue to use in the wrappee.

WrappingProvider

public WrappingProvider(IconValue iconValue)
Instantiates a WrappingProvider with default wrappee. Uses the given IconValue to configure the icon.

Parameters:
iconValue - the IconValue to use for configuring the icon.

WrappingProvider

public WrappingProvider(StringValue wrappeeStringValue)
Instantiates a WrappingProvider with default wrappee configured with the given StringValue. PENDING: we have a slight semantic glitch compared to super because the given StringValue is not for use in this provider but for use in the wrappee!

Parameters:
wrappeeStringValue - the StringValue to use in the wrappee.

WrappingProvider

public WrappingProvider(ComponentProvider delegate)
Instantiates a WrappingProvider with the given delegate provider for the node content. If null, a default LabelProvider will be used.

Parameters:
delegate - the provider to use as delegate

WrappingProvider

public WrappingProvider(ComponentProvider delegate,
                        boolean unwrapUserObject)
Instantiates a WrappingProvider with the given delegate provider for the node content and unwrapUserObject property. If the delegate is null, a default LabelProvider will be used.

Parameters:
delegate - the provider to use as delegate
unwrapUserObject - a flag indicating whether this provider should auto-unwrap the userObject from the context value.

WrappingProvider

public WrappingProvider(IconValue iv,
                        ComponentProvider delegate,
                        boolean unwrapUserObject)
Instantiates a WrappingProvider with the given delegate provider for the node content and unwrapUserObject property. If the delegate is null, a default LabelProvider will be used.

Parameters:
iv - the icon converter to use for this provider
delegate - the provider to use as delegate
unwrapUserObject - a flag indicating whether this provider should auto-unwrap the userObject from the context value.

WrappingProvider

public WrappingProvider(IconValue iv,
                        StringValue delegateStringValue,
                        boolean unwrapUserObject)
Instantiates a WrappingProvider with the given delegate provider for the node content and unwrapUserObject property. If the delegate is null, a default LabelProvider will be used.

Parameters:
iv - the icon converter to use for this provider
delegateStringValue - the StringValue to use in the wrappee.
unwrapUserObject - a flag indicating whether this provider should auto-unwrap the userObject from the context value.
Method Detail

setWrappee

public void setWrappee(ComponentProvider delegate)
Sets the given provider as delegate for the node content. If the delegate is null, a default LabelProvider is set.

PENDING: rename to setDelegate?

Parameters:
delegate - the provider to use as delegate.

getWrappee

public ComponentProvider getWrappee()
Returns the delegate provider used to render the node content.

Returns:
the provider used for rendering the node content.

setUnwrapUserObject

public void setUnwrapUserObject(boolean unwrap)
Sets the unwrapUserObject property. If true, this provider replaces a context value of type XXNode with its user object before delegating to the wrappee. Otherwise the value is passed as-is always.

The default value is true.

Parameters:
unwrap -
See Also:
getUnwrapUserObject()

getUnwrapUserObject

public boolean getUnwrapUserObject()
Returns a boolean indicating whether this provider tries to unwrap a userObject from a tree/table/node type value before delegating the context.

Returns:
a flag indicating the auto-unwrap property.
See Also:
setUnwrapUserObject(boolean)

getString

public java.lang.String getString(java.lang.Object value)
Returns a string representation of the content.

This method guarantees to return the same string representation as would appear in the renderer, given that the corresponding cellContext has the same value as the parameter passed-in here. That is (assuming that the rendering component has a getText())


 if (equals(value, context.getValue()) {
     assertEquals(provider.getString(value), 
     provider.getRenderingComponent(context).getText());
 }
 
This implementation simply delegates to its StringValue. Subclasses might need to override to comply.

This is a second attempt - the driving force is the need for a consistent string representation across all (new and old) themes: rendering, (pattern) filtering/highlighting, searching, auto-complete ...

Overridden to comply to contract: returns the string representation as provided by the wrappee (as this level has no string rep). Must do the same unwrapping magic as in configuring the rendering component if the unwrapUserObject property is true.

Overrides:
getString in class ComponentProvider<WrappingIconPanel>
Parameters:
value - the Object to get a String representation for.
Returns:
a appropriate string representation of the cell's content.
See Also:
setUnwrapUserObject(boolean), getUnwrappedValue(Object)

getRendererComponent

public WrappingIconPanel getRendererComponent(CellContext context)
Configures and returns an appropriate component to render a cell in the given context. If the context is null, returns the component in its current state.

Overrides:
getRendererComponent in class ComponentProvider<WrappingIconPanel>
Parameters:
context - the cell context to configure from
Returns:
a component to render a cell in the given context.

doClick

public void doClick()
Same as AbstractButton.doClick(). It's up to client code to prepare the renderer's component before calling this method.

Specified by:
doClick in interface RolloverRenderer

isEnabled

public boolean isEnabled()

Specified by:
isEnabled in interface RolloverRenderer
Returns:
true if rollover effects are on and clickable.