You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2010/08/06 15:43:12 UTC

svn commit: r982958 - in /pivot/trunk: demos/src/org/apache/pivot/demos/styles/ tests/src/org/apache/pivot/tests/ tutorials/src/org/apache/pivot/tutorials/ tutorials/src/org/apache/pivot/tutorials/explorer/ tutorials/src/org/apache/pivot/tutorials/navi...

Author: gbrown
Date: Fri Aug  6 13:43:12 2010
New Revision: 982958

URL: http://svn.apache.org/viewvc?rev=982958&view=rev
Log:
Resolve PIVOT-570 for Accordion.

Added:
    pivot/trunk/wtk/src/org/apache/pivot/wtk/content/AccordionHeaderDataRenderer.java
Removed:
    pivot/trunk/tests/src/org/apache/pivot/tests/AccordionTest.java
Modified:
    pivot/trunk/demos/src/org/apache/pivot/demos/styles/sample_content.bxml
    pivot/trunk/tests/src/org/apache/pivot/tests/accordion_test.bxml
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/accordion.bxml
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation.bxml
    pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation/accordions.bxml
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java

Modified: pivot/trunk/demos/src/org/apache/pivot/demos/styles/sample_content.bxml
URL: http://svn.apache.org/viewvc/pivot/trunk/demos/src/org/apache/pivot/demos/styles/sample_content.bxml?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/demos/src/org/apache/pivot/demos/styles/sample_content.bxml (original)
+++ pivot/trunk/demos/src/org/apache/pivot/demos/styles/sample_content.bxml Fri Aug  6 13:43:12 2010
@@ -98,9 +98,9 @@ limitations under the License.
 
                         <TablePane.Row>
                             <Accordion>
-                                <Label text="Un" Accordion.label="One"/>
-                                <Label text="Deux" Accordion.label="Two"/>
-                                <Label text="Trois" Accordion.label="Three" enabled="false"/>
+                                <Label text="Un" Accordion.headerData="One"/>
+                                <Label text="Deux" Accordion.headerData="Two"/>
+                                <Label text="Trois" Accordion.headerData="Three" enabled="false"/>
                             </Accordion>
 
                             <BoxPane orientation="vertical" styles="{fill:true}">

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/accordion_test.bxml
URL: http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/accordion_test.bxml?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/accordion_test.bxml (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/accordion_test.bxml Fri Aug  6 13:43:12 2010
@@ -18,11 +18,20 @@ limitations under the License.
 
 <Frame title="Accordion Test"
     xmlns:bxml="http://pivot.apache.org/bxml"
+    xmlns:content="org.apache.pivot.wtk.content"
     xmlns="org.apache.pivot.wtk">
     <Accordion>
-        <Label Accordion.label="A" text="Hello"/>
-        <Label Accordion.label="B" text="World"/>
-        <Label Accordion.label="C" text="From" enabled="false"/>
-        <Label Accordion.label="D" text="Pivot"/>
+        <headerDataRenderer>
+            <content:AccordionHeaderDataRenderer/>
+        </headerDataRenderer>
+
+        <Label text="Hello">
+            <Accordion.headerData>
+                <content:ButtonData text="A" icon="@anchor.png"/>
+            </Accordion.headerData>
+        </Label>
+        <Label Accordion.headerData="B" text="World"/>
+        <Label Accordion.headerData="C" text="From" enabled="false"/>
+        <Label Accordion.headerData="D" text="Pivot"/>
     </Accordion>
 </Frame>

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/accordion.bxml
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/accordion.bxml?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/accordion.bxml (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/accordion.bxml Fri Aug  6 13:43:12 2010
@@ -19,8 +19,8 @@ limitations under the License.
 <Accordion preferredWidth="150"
     xmlns:bxml="http://pivot.apache.org/bxml"
     xmlns="org.apache.pivot.wtk">
-    <Label Accordion.label="A" text="Hello"/>
-    <Label Accordion.label="B" text="World"/>
-    <Label Accordion.label="C" text="From" enabled="false"/>
-    <Label Accordion.label="D" text="Pivot"/>
+    <Label Accordion.headerData="A" text="Hello"/>
+    <Label Accordion.headerData="B" text="World"/>
+    <Label Accordion.headerData="C" text="From" enabled="false"/>
+    <Label Accordion.headerData="D" text="Pivot"/>
 </Accordion>

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation.bxml
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation.bxml?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation.bxml (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation.bxml Fri Aug  6 13:43:12 2010
@@ -134,11 +134,11 @@ limitations under the License.
         <BoxPane orientation="vertical" styles="{padding:{top:2, left:4, bottom:4, right:4}, spacing:6}">
             <Label text="Accordion" styles="{font:{bold:true}}"/>
             <Accordion selectedIndex="1" preferredWidth="110" preferredHeight="180">
-                <Label Accordion.label="One" text="Un"
+                <Label Accordion.headerData="One" text="Un"
                   styles="{horizontalAlignment:'center', verticalAlignment:'top', font:{italic:true}}"/>
-                <Label Accordion.label="Two" text="Deux"
+                <Label Accordion.headerData="Two" text="Deux"
                   styles="{horizontalAlignment:'center', verticalAlignment:'center', font:{italic:true}}"/>
-                <Label Accordion.label="Three" text="Trois"
+                <Label Accordion.headerData="Three" text="Trois"
                   styles="{horizontalAlignment:'center', verticalAlignment:'bottom', font:{italic:true}}"/>
             </Accordion>
         </BoxPane>

Modified: pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation/accordions.bxml
URL: http://svn.apache.org/viewvc/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation/accordions.bxml?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation/accordions.bxml (original)
+++ pivot/trunk/tutorials/src/org/apache/pivot/tutorials/navigation/accordions.bxml Fri Aug  6 13:43:12 2010
@@ -21,9 +21,9 @@ limitations under the License.
     xmlns:navigation="org.apache.pivot.tutorials.navigation"
     xmlns="org.apache.pivot.wtk">
     <Accordion bxml:id="accordion" styles="{padding:0}">
-        <bxml:include bxml:id="shippingPanel" src="shipping.bxml" Accordion.label="Shipping Information"/>
-        <bxml:include bxml:id="paymentPanel" src="payment.bxml" Accordion.label="Payment Information"/>
-        <bxml:include bxml:id="summaryPanel" src="summary.bxml" Accordion.label="Summary &amp; Confirmation"/>
+        <bxml:include bxml:id="shippingPanel" src="shipping.bxml" Accordion.headerData="Shipping Information"/>
+        <bxml:include bxml:id="paymentPanel" src="payment.bxml" Accordion.headerData="Payment Information"/>
+        <bxml:include bxml:id="summaryPanel" src="summary.bxml" Accordion.headerData="Summary &amp; Confirmation"/>
     </Accordion>
 </navigation:Accordions>
 

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraAccordionSkin.java Fri Aug  6 13:43:12 2010
@@ -36,20 +36,16 @@ import org.apache.pivot.wtk.Component;
 import org.apache.pivot.wtk.ComponentStateListener;
 import org.apache.pivot.wtk.Dimensions;
 import org.apache.pivot.wtk.GraphicsUtilities;
-import org.apache.pivot.wtk.HorizontalAlignment;
 import org.apache.pivot.wtk.Insets;
 import org.apache.pivot.wtk.Keyboard;
 import org.apache.pivot.wtk.Mouse;
 import org.apache.pivot.wtk.Platform;
 import org.apache.pivot.wtk.Theme;
-import org.apache.pivot.wtk.content.ButtonData;
-import org.apache.pivot.wtk.content.ButtonDataRenderer;
 import org.apache.pivot.wtk.effects.ClipDecorator;
 import org.apache.pivot.wtk.effects.Transition;
 import org.apache.pivot.wtk.effects.TransitionListener;
 import org.apache.pivot.wtk.effects.easing.Easing;
 import org.apache.pivot.wtk.effects.easing.Quartic;
-import org.apache.pivot.wtk.media.Image;
 import org.apache.pivot.wtk.skin.ButtonSkin;
 import org.apache.pivot.wtk.skin.ContainerSkin;
 
@@ -61,9 +57,7 @@ public class TerraAccordionSkin extends 
     protected class PanelHeader extends Button {
         public PanelHeader(Component panel) {
             super(panel);
-
             super.setToggleButton(true);
-            setDataRenderer(DEFAULT_DATA_RENDERER);
 
             setSkin(new PanelHeaderSkin());
         }
@@ -90,10 +84,12 @@ public class TerraAccordionSkin extends 
         public int getPreferredWidth(int height) {
             PanelHeader panelHeader = (PanelHeader)getComponent();
 
-            Button.DataRenderer dataRenderer = panelHeader.getDataRenderer();
-            dataRenderer.render(panelHeader.getButtonData(), panelHeader, false);
+            Accordion accordion = (Accordion)TerraAccordionSkin.this.getComponent();
+            Button.DataRenderer headerDataRenderer = accordion.getHeaderDataRenderer();
+            headerDataRenderer.render(Accordion.getHeaderData((Component)panelHeader.getButtonData()),
+                panelHeader, false);
 
-            int preferredWidth = dataRenderer.getPreferredWidth(-1)
+            int preferredWidth = headerDataRenderer.getPreferredWidth(-1)
                 + buttonPadding.left + buttonPadding.right + 2;
 
             return preferredWidth;
@@ -103,8 +99,10 @@ public class TerraAccordionSkin extends 
         public int getPreferredHeight(int width) {
             PanelHeader panelHeader = (PanelHeader)getComponent();
 
-            Button.DataRenderer dataRenderer = panelHeader.getDataRenderer();
-            dataRenderer.render(panelHeader.getButtonData(), panelHeader, false);
+            Accordion accordion = (Accordion)TerraAccordionSkin.this.getComponent();
+            Button.DataRenderer headerDataRenderer = accordion.getHeaderDataRenderer();
+            headerDataRenderer.render(Accordion.getHeaderData((Component)panelHeader.getButtonData()),
+                panelHeader, false);
 
             // Include padding and border in constraint
             int contentWidth = width;
@@ -113,7 +111,7 @@ public class TerraAccordionSkin extends 
                     + buttonPadding.right + 2), 0);
             }
 
-            int preferredHeight = dataRenderer.getPreferredHeight(contentWidth)
+            int preferredHeight = headerDataRenderer.getPreferredHeight(contentWidth)
                 + buttonPadding.top + buttonPadding.bottom + 2;
 
             return preferredHeight;
@@ -123,10 +121,12 @@ public class TerraAccordionSkin extends 
         public Dimensions getPreferredSize() {
             PanelHeader panelHeader = (PanelHeader)getComponent();
 
-            Button.DataRenderer dataRenderer = panelHeader.getDataRenderer();
-            dataRenderer.render(panelHeader.getButtonData(), panelHeader, false);
+            Accordion accordion = (Accordion)TerraAccordionSkin.this.getComponent();
+            Button.DataRenderer headerDataRenderer = accordion.getHeaderDataRenderer();
+            headerDataRenderer.render(Accordion.getHeaderData((Component)panelHeader.getButtonData()),
+                panelHeader, false);
 
-            Dimensions preferredContentSize = dataRenderer.getPreferredSize();
+            Dimensions preferredContentSize = headerDataRenderer.getPreferredSize();
 
             int preferredWidth = preferredContentSize.width
                 + buttonPadding.left + buttonPadding.right + 2;
@@ -141,13 +141,15 @@ public class TerraAccordionSkin extends 
         public int getBaseline(int width, int height) {
             PanelHeader panelHeader = (PanelHeader)getComponent();
 
-            Button.DataRenderer dataRenderer = panelHeader.getDataRenderer();
-            dataRenderer.render(panelHeader.getButtonData(), panelHeader, false);
+            Accordion accordion = (Accordion)TerraAccordionSkin.this.getComponent();
+            Button.DataRenderer headerDataRenderer = accordion.getHeaderDataRenderer();
+            headerDataRenderer.render(Accordion.getHeaderData((Component)panelHeader.getButtonData()),
+                panelHeader, false);
 
             int clientWidth = Math.max(width - (buttonPadding.left + buttonPadding.right + 2), 0);
             int clientHeight = Math.max(height - (buttonPadding.top + buttonPadding.bottom + 2), 0);
 
-            int baseline = dataRenderer.getBaseline(clientWidth, clientHeight);
+            int baseline = headerDataRenderer.getBaseline(clientWidth, clientHeight);
 
             if (baseline != -1) {
                 baseline += buttonPadding.top + 1;
@@ -173,15 +175,17 @@ public class TerraAccordionSkin extends 
             GraphicsUtilities.drawRect(graphics, 0, 0, width, height);
 
             // Paint the content
-            Button.DataRenderer dataRenderer = panelHeader.getDataRenderer();
-            dataRenderer.render(panelHeader.getButtonData(), panelHeader, highlighted);
-            dataRenderer.setSize(Math.max(width - (buttonPadding.left + buttonPadding.right + 2), 0),
+            Accordion accordion = (Accordion)TerraAccordionSkin.this.getComponent();
+            Button.DataRenderer headerDataRenderer = accordion.getHeaderDataRenderer();
+            headerDataRenderer.render(Accordion.getHeaderData((Component)panelHeader.getButtonData()),
+                panelHeader, highlighted);
+            headerDataRenderer.setSize(Math.max(width - (buttonPadding.left + buttonPadding.right + 2), 0),
                 Math.max(getHeight() - (buttonPadding.top + buttonPadding.bottom + 2), 0));
 
             Graphics2D contentGraphics = (Graphics2D)graphics.create();
             contentGraphics.translate(buttonPadding.left + 1, buttonPadding.top + 1);
-            contentGraphics.clipRect(0, 0, dataRenderer.getWidth(), dataRenderer.getHeight());
-            dataRenderer.paint(contentGraphics);
+            contentGraphics.clipRect(0, 0, headerDataRenderer.getWidth(), headerDataRenderer.getHeight());
+            headerDataRenderer.paint(contentGraphics);
             contentGraphics.dispose();
         }
 
@@ -282,21 +286,6 @@ public class TerraAccordionSkin extends 
 
     public static final int GRADIENT_BEVEL_THICKNESS = 4;
 
-    private static final Button.DataRenderer DEFAULT_DATA_RENDERER = new ButtonDataRenderer() {
-        {   getStyles().put("horizontalAlignment", HorizontalAlignment.LEFT);
-        }
-
-        @Override
-        public void render(Object data, Button button, boolean highlighted) {
-            // TODO Create a custom inner renderer class that can display
-            // the close button (and also avoid the heap allocation every
-            // time we're called to render())
-            Component panel = (Component)data;
-            super.render(new ButtonData(Accordion.getIcon(panel), Accordion.getLabel(panel)),
-                button, highlighted);
-        }
-    };
-
     private static final int SELECTION_CHANGE_DURATION = 250;
     private static final int SELECTION_CHANGE_RATE = 30;
 
@@ -341,23 +330,9 @@ public class TerraAccordionSkin extends 
         super.install(component);
 
         Accordion accordion = (Accordion)component;
-
-        // Add this as a listener on the accordion
         accordion.getAccordionListeners().add(this);
         accordion.getAccordionSelectionListeners().add(this);
         accordion.getAccordionAttributeListeners().add(this);
-
-        // Add headers for all existing panels
-        for (Component panel : accordion.getPanels()) {
-            PanelHeader panelHeader = new PanelHeader(panel);
-            panelHeader.setButtonGroup(panelHeaderGroup);
-            panelHeaders.add(panelHeader);
-            accordion.add(panelHeader);
-
-            // Listen for state changes on the panel
-            panelHeader.setEnabled(panel.isEnabled());
-            panel.getComponentStateListeners().add(panelStateListener);
-        }
     }
 
     @Override
@@ -834,6 +809,11 @@ public class TerraAccordionSkin extends 
         invalidateComponent();
     }
 
+    @Override
+    public void headerDataRendererChanged(Accordion accordion, Button.DataRenderer previousHeaderDataRenderer) {
+        // No-op
+    }
+
     // Accordion selection events
     @Override
     public Vote previewSelectedIndexChange(final Accordion accordion, final int selectedIndex) {
@@ -909,12 +889,7 @@ public class TerraAccordionSkin extends 
 
     // Accordion attribute events
     @Override
-    public void labelChanged(Accordion accordion, Component component, String previousLabel) {
-        invalidateComponent();
-    }
-
-    @Override
-    public void iconChanged(Accordion accordion, Component component, Image previousIcon) {
+    public void headerDataChanged(Accordion accordion, Component component, Object previousHeaderData) {
         invalidateComponent();
     }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Accordion.java Fri Aug  6 13:43:12 2010
@@ -16,7 +16,6 @@
  */
 package org.apache.pivot.wtk;
 
-import java.net.URL;
 import java.util.Iterator;
 
 import org.apache.pivot.beans.DefaultProperty;
@@ -25,14 +24,11 @@ import org.apache.pivot.collections.Sequ
 import org.apache.pivot.util.ImmutableIterator;
 import org.apache.pivot.util.ListenerList;
 import org.apache.pivot.util.Vote;
-import org.apache.pivot.util.concurrent.TaskExecutionException;
-import org.apache.pivot.wtk.media.Image;
+import org.apache.pivot.wtk.content.AccordionHeaderDataRenderer;
 
 /**
  * Component that provides access to a set of components via selectable headers.
  * Only one component is visible at a time.
- * <p>
- * TODO Add a getPanelAt() method that delegates to the skin.
  */
 @DefaultProperty("panels")
 public class Accordion extends Container {
@@ -131,8 +127,7 @@ public class Accordion extends Container
     }
 
     private enum Attribute {
-        LABEL,
-        ICON;
+        HEADER_DATA;
     }
 
     private static class AccordionListenerList extends ListenerList<AccordionListener>
@@ -150,6 +145,13 @@ public class Accordion extends Container
                 listener.panelsRemoved(accordion, index, panels);
             }
         }
+
+        @Override
+        public void headerDataRendererChanged(Accordion accordion, Button.DataRenderer previousHeaderDataRenderer) {
+            for (AccordionListener listener : this) {
+                listener.headerDataRendererChanged(accordion, previousHeaderDataRenderer);
+            }
+        }
     }
 
     private static class AccordionSelectionListenerList extends ListenerList<AccordionSelectionListener>
@@ -183,16 +185,9 @@ public class Accordion extends Container
     private static class AccordionAttributeListenerList extends ListenerList<AccordionAttributeListener>
         implements AccordionAttributeListener {
         @Override
-        public void labelChanged(Accordion accordion, Component component, String previousLabel) {
+        public void headerDataChanged(Accordion accordion, Component component, Object previousHeaderData) {
             for (AccordionAttributeListener listener : this) {
-                listener.labelChanged(accordion, component, previousLabel);
-            }
-        }
-
-        @Override
-        public void iconChanged(Accordion accordion, Component component, Image previousIcon) {
-            for (AccordionAttributeListener listener : this) {
-                listener.iconChanged(accordion, component, previousIcon);
+                listener.headerDataChanged(accordion, component, previousHeaderData);
             }
         }
     }
@@ -201,11 +196,14 @@ public class Accordion extends Container
 
     private ArrayList<Component> panels = new ArrayList<Component>();
     private PanelSequence panelSequence = new PanelSequence();
+    private Button.DataRenderer headerDataRenderer = DEFAULT_HEADER_DATA_RENDERER;
 
     private AccordionListenerList accordionListeners = new AccordionListenerList();
     private AccordionSelectionListenerList accordionSelectionListeners = new AccordionSelectionListenerList();
     private AccordionAttributeListenerList accordionAttributeListeners = new AccordionAttributeListenerList();
 
+    private static final Button.DataRenderer DEFAULT_HEADER_DATA_RENDERER = new AccordionHeaderDataRenderer();
+
     public Accordion() {
         installThemeSkin(Accordion.class);
     }
@@ -242,6 +240,22 @@ public class Accordion extends Container
         return (selectedIndex == -1) ? null : panels.get(selectedIndex);
     }
 
+    public Button.DataRenderer getHeaderDataRenderer() {
+        return headerDataRenderer;
+    }
+
+    public void setHeaderDataRenderer(Button.DataRenderer headerDataRenderer) {
+        if (headerDataRenderer == null) {
+            throw new IllegalArgumentException();
+        }
+
+        Button.DataRenderer previousHeaderDataRenderer = this.headerDataRenderer;
+        if (previousHeaderDataRenderer != headerDataRenderer) {
+            this.headerDataRenderer = headerDataRenderer;
+            accordionListeners.headerDataRendererChanged(this, previousHeaderDataRenderer);
+        }
+    }
+
     @Override
     public Sequence<Component> remove(int index, int count) {
         for (int i = index, n = index + count; i < n; i++) {
@@ -268,68 +282,21 @@ public class Accordion extends Container
         return accordionAttributeListeners;
     }
 
-    public static String getLabel(Component component) {
-        return (String)component.getAttribute(Attribute.LABEL);
-    }
-
-    public static void setLabel(Component component, String label) {
-        String previousLabel = (String)component.setAttribute(Attribute.LABEL, label);
-
-        if (previousLabel != label) {
-            Container parent = component.getParent();
-
-            if (parent instanceof Accordion) {
-                Accordion accordion = (Accordion)parent;
-                accordion.accordionAttributeListeners.labelChanged(accordion, component,
-                    previousLabel);
-            }
-        }
-    }
-
-    public static Image getIcon(Component component) {
-        return (Image)component.getAttribute(Attribute.ICON);
+    public static Object getHeaderData(Component component) {
+        return component.getAttribute(Attribute.HEADER_DATA);
     }
 
-    public static void setIcon(Component component, Image icon) {
-        Image previousIcon = (Image)component.setAttribute(Attribute.ICON, icon);
+    public static void setHeaderData(Component component, Object headerData) {
+        String previousHeaderData = (String)component.setAttribute(Attribute.HEADER_DATA, headerData);
 
-        if (previousIcon != icon) {
+        if (previousHeaderData != headerData) {
             Container parent = component.getParent();
 
             if (parent instanceof Accordion) {
                 Accordion accordion = (Accordion)parent;
-                accordion.accordionAttributeListeners.iconChanged(accordion, component,
-                    previousIcon);
+                accordion.accordionAttributeListeners.headerDataChanged(accordion, component,
+                    previousHeaderData);
             }
         }
     }
-
-    public static final void setIcon(Component component, URL icon) {
-        if (icon == null) {
-            throw new IllegalArgumentException("icon is null.");
-        }
-
-        Image iconImage = (Image)ApplicationContext.getResourceCache().get(icon);
-
-        if (iconImage == null) {
-            try {
-                iconImage = Image.load(icon);
-            } catch (TaskExecutionException exception) {
-                throw new IllegalArgumentException(exception);
-            }
-
-            ApplicationContext.getResourceCache().put(icon, iconImage);
-        }
-
-        setIcon(component, iconImage);
-    }
-
-    public static final void setIcon(Component component, String icon) {
-        if (icon == null) {
-            throw new IllegalArgumentException("icon is null.");
-        }
-
-        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-        setIcon(component, classLoader.getResource(icon));
-    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionAttributeListener.java Fri Aug  6 13:43:12 2010
@@ -16,8 +16,6 @@
  */
 package org.apache.pivot.wtk;
 
-import org.apache.pivot.wtk.media.Image;
-
 /**
  * Accordion attribute listener interface.
  */
@@ -27,29 +25,16 @@ public interface AccordionAttributeListe
      */
     public static class Adapter implements AccordionAttributeListener {
         @Override
-        public void labelChanged(Accordion accordion, Component component, String previousLabel) {
-        }
-
-        @Override
-        public void iconChanged(Accordion accordion, Component component, Image previousIcon) {
+        public void headerDataChanged(Accordion accordion, Component component, Object previousHeaderData) {
         }
     }
 
     /**
-     * Called when a panel's label attribute has changed.
-     *
-     * @param accordion
-     * @param component
-     * @param previousLabel
-     */
-    public void labelChanged(Accordion accordion, Component component, String previousLabel);
-
-    /**
-     * Called when a panel's icon attribute has changed.
+     * Called when a panel's header data attribute has changed.
      *
      * @param accordion
      * @param component
-     * @param previousIcon
+     * @param previousHeaderData
      */
-    public void iconChanged(Accordion accordion, Component component, Image previousIcon);
+    public void headerDataChanged(Accordion accordion, Component component, Object previousHeaderData);
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java?rev=982958&r1=982957&r2=982958&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/AccordionListener.java Fri Aug  6 13:43:12 2010
@@ -33,6 +33,10 @@ public interface AccordionListener {
         @Override
         public void panelsRemoved(Accordion accordion, int index, Sequence<Component> removed) {
         }
+
+        @Override
+        public void headerDataRendererChanged(Accordion accordion, Button.DataRenderer previousHeaderDataRenderer) {
+        }
     }
 
     /**
@@ -51,4 +55,12 @@ public interface AccordionListener {
      * @param removed
      */
     public void panelsRemoved(Accordion accordion, int index, Sequence<Component> removed);
+
+    /**
+     * Called when an accordion's header data renderer has changed.
+     *
+     * @param accordion
+     * @param previousHeaderDataRenderer
+     */
+    public void headerDataRendererChanged(Accordion accordion, Button.DataRenderer previousHeaderDataRenderer);
 }

Added: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/AccordionHeaderDataRenderer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/AccordionHeaderDataRenderer.java?rev=982958&view=auto
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/AccordionHeaderDataRenderer.java (added)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/AccordionHeaderDataRenderer.java Fri Aug  6 13:43:12 2010
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pivot.wtk.content;
+
+import org.apache.pivot.wtk.HorizontalAlignment;
+
+/**
+ * Default accordion header data renderer.
+ */
+public class AccordionHeaderDataRenderer extends ButtonDataRenderer {
+    public AccordionHeaderDataRenderer() {
+        getStyles().put("horizontalAlignment", HorizontalAlignment.LEFT);
+    }
+}