You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by no...@apache.org on 2009/11/09 14:27:12 UTC

svn commit: r834055 - in /incubator/pivot/trunk/wtk: src/org/apache/pivot/wtk/ src/org/apache/pivot/wtk/skin/terra/ test/org/apache/pivot/wtk/test/

Author: noelgrandin
Date: Mon Nov  9 13:27:11 2009
New Revision: 834055

URL: http://svn.apache.org/viewvc?rev=834055&view=rev
Log:
PIVOT-27 Add orientation to Slider component

Modified:
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Slider.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSliderSkin.java
    incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/SliderTest.java
    incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/slider_test.wtkx

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Slider.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Slider.java?rev=834055&r1=834054&r2=834055&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Slider.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Slider.java Mon Nov  9 13:27:11 2009
@@ -26,6 +26,13 @@
     private static class SliderListenerList extends ListenerList<SliderListener>
         implements SliderListener {
         @Override
+        public void orientationChanged(Slider slider) {
+            for (SliderListener listener : this) {
+                listener.orientationChanged(slider);
+            }
+        }
+
+        @Override
         public void rangeChanged(Slider slider, int previousStart, int previousEnd) {
             for (SliderListener listener : this) {
                 listener.rangeChanged(slider, previousStart, previousEnd);
@@ -46,6 +53,7 @@
     private int start = DEFAULT_START;
     private int end = DEFAULT_END;
     private int value = DEFAULT_VALUE;
+    private Orientation orientation = null;
 
     private SliderListenerList sliderListeners = new SliderListenerList();
     private SliderValueListenerList sliderValueListeners = new SliderValueListenerList();
@@ -55,9 +63,15 @@
     public static final int DEFAULT_VALUE = 0;
 
     public Slider() {
-        installThemeSkin(Slider.class);
+        this(Orientation.HORIZONTAL);
     }
 
+    public Slider(Orientation orientation) {
+        this.orientation = orientation;
+        
+        installThemeSkin(Slider.class);
+    }
+    
     public int getStart() {
         return start;
     }
@@ -149,6 +163,29 @@
         }
     }
 
+    public Orientation getOrientation() {
+        return orientation;
+    }
+
+    public void setOrientation(Orientation orientation) {
+        if (orientation == null) {
+            throw new IllegalArgumentException("orientation is null.");
+        }
+
+        if (this.orientation != orientation) {
+            this.orientation = orientation;
+            sliderListeners.orientationChanged(this);
+        }
+    }
+
+    public void setOrientation(String orientation) {
+        if (orientation == null) {
+            throw new IllegalArgumentException("orientation is null.");
+        }
+
+        setOrientation(Orientation.valueOf(orientation.toUpperCase()));
+    }
+
     public ListenerList<SliderListener> getSliderListeners() {
         return sliderListeners;
     }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java?rev=834055&r1=834054&r2=834055&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/SliderListener.java Mon Nov  9 13:27:11 2009
@@ -28,4 +28,13 @@
      * @param previousEnd
      */
     public void rangeChanged(Slider slider, int previousStart, int previousEnd);
+    
+    /**
+     * Called when a sliders's orientation has changed.
+     *
+     * @param slider
+     * The source of the event.
+     */
+    public void orientationChanged(Slider slider);
+
 }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSliderSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSliderSkin.java?rev=834055&r1=834054&r2=834055&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSliderSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSliderSkin.java Mon Nov  9 13:27:11 2009
@@ -35,7 +35,6 @@
 import org.apache.pivot.wtk.skin.ComponentSkin;
 import org.apache.pivot.wtk.skin.SliderSkin;
 
-
 /**
  * Terra slider skin.
  */
@@ -113,30 +112,56 @@
             boolean consumed = super.mouseMove(component, x, y);
 
             if (Mouse.getCapturer() == component) {
-                Slider slider = (Slider)TerraSliderSkin.this.getComponent();
-                int sliderWidth = slider.getWidth();
-                int thumbWidth = thumb.getWidth();
-
-                Point sliderLocation = thumb.mapPointToAncestor(slider, x, y);
-                int sliderX = sliderLocation.x;
-
-                int minX = dragOffset.x;
-                if (sliderX < minX) {
-                    sliderX = minX;
-                }
+                Slider slider = (Slider) TerraSliderSkin.this.getComponent();
+                if (slider.getOrientation() == Orientation.HORIZONTAL) {
+                    int sliderWidth = slider.getWidth();
+                    int thumbWidth = thumb.getWidth();
+
+                    Point sliderLocation = thumb.mapPointToAncestor(slider, x, y);
+                    int sliderX = sliderLocation.x;
+
+                    int minX = dragOffset.x;
+                    if (sliderX < minX) {
+                        sliderX = minX;
+                    }
+
+                    int maxX = (sliderWidth - thumbWidth) + dragOffset.x;
+                    if (sliderX > maxX) {
+                        sliderX = maxX;
+                    }
+
+                    float ratio = (float) (sliderX - dragOffset.x) / (sliderWidth - thumbWidth);
+
+                    int start = slider.getStart();
+                    int end = slider.getEnd();
+
+                    int value = (int) (start + (end - start) * ratio);
+                    slider.setValue(value);
+                } else {
+                    int sliderHeight = slider.getHeight();
+                    int thumbHeight = thumb.getHeight();
+
+                    Point sliderLocation = thumb.mapPointToAncestor(slider, x, y);
+                    int sliderY = sliderLocation.y;
+
+                    int minY = dragOffset.y;
+                    if (sliderY < minY) {
+                        sliderY = minY;
+                    }
+
+                    int maxY = (sliderHeight - thumbHeight) + dragOffset.y;
+                    if (sliderY > maxY) {
+                        sliderY = maxY;
+                    }
 
-                int maxX = (sliderWidth - thumbWidth) + dragOffset.x;
-                if (sliderX > maxX) {
-                    sliderX = maxX;
-                }
+                    float ratio = (float) (sliderY - dragOffset.y) / (sliderHeight - thumbHeight);
 
-                float ratio = (float)(sliderX - dragOffset.x) / (sliderWidth - thumbWidth);
+                    int start = slider.getStart();
+                    int end = slider.getEnd();
 
-                int start = slider.getStart();
-                int end = slider.getEnd();
-
-                int value = (int)(start + (end - start) * ratio);
-                slider.setValue(value);
+                    int value = (int) (start + (end - start) * ratio);
+                    slider.setValue(value);
+                }
             }
 
             return consumed;
@@ -196,7 +221,7 @@
         public boolean keyPressed(Component component, int keyCode, Keyboard.KeyLocation keyLocation) {
             boolean consumed = super.keyPressed(component, keyCode, keyLocation);
 
-            Slider slider = (Slider)TerraSliderSkin.this.getComponent();
+            Slider slider = (Slider) TerraSliderSkin.this.getComponent();
             int start = slider.getStart();
             int end = slider.getEnd();
             int length = end - start;
@@ -234,7 +259,7 @@
     public static final int MINIMUM_THUMB_HEIGHT = 4;
 
     public TerraSliderSkin() {
-        TerraTheme theme = (TerraTheme)Theme.getTheme();
+        TerraTheme theme = (TerraTheme) Theme.getTheme();
 
         trackColor = theme.getColor(6);
         trackWidth = 2;
@@ -251,18 +276,30 @@
     public void install(Component component) {
         super.install(component);
 
-        Slider slider = (Slider)component;
+        Slider slider = (Slider) component;
         slider.add(thumb);
     }
 
     @Override
     public int getPreferredWidth(int height) {
-        return DEFAULT_WIDTH;
+        Slider slider = (Slider) getComponent();
+
+        if (slider.getOrientation() == Orientation.HORIZONTAL) {
+            return DEFAULT_WIDTH;
+        } else {
+            return thumbHeight;
+        }
     }
 
     @Override
     public int getPreferredHeight(int width) {
-        return thumbHeight;
+        Slider slider = (Slider) getComponent();
+
+        if (slider.getOrientation() == Orientation.HORIZONTAL) {
+            return thumbHeight;
+        } else {
+            return DEFAULT_WIDTH;
+        }
     }
 
     @Override
@@ -272,7 +309,7 @@
 
     @Override
     public void layout() {
-        Slider slider = (Slider)getComponent();
+        Slider slider = (Slider) getComponent();
 
         int width = getWidth();
         int height = getHeight();
@@ -281,37 +318,46 @@
         int end = slider.getEnd();
         int value = slider.getValue();
 
-        float ratio = (float)(value - start) / (end - start);
+        float ratio = (float) (value - start) / (end - start);
 
-        thumb.setSize(thumbWidth, thumbHeight);
-        thumb.setLocation((int)((width - thumbWidth) * ratio),
-            (height - thumbHeight) / 2);
+        if (slider.getOrientation() == Orientation.HORIZONTAL) {
+            thumb.setSize(thumbWidth, thumbHeight);
+            thumb.setLocation((int) ((width - thumbWidth) * ratio), (height - thumbHeight) / 2);
+        } else {
+            thumb.setSize(thumbHeight, thumbWidth);
+            thumb.setLocation((width - thumbHeight) / 2, (int) ((height - thumbWidth) * ratio));
+        }
     }
 
+    private static final BasicStroke dashStroke = new BasicStroke(1.0f, BasicStroke.CAP_ROUND,
+        BasicStroke.JOIN_ROUND, 1.0f, new float[] { 0.0f, 2.0f }, 0.0f);
+
     @Override
     public void paint(Graphics2D graphics) {
         super.paint(graphics);
 
+        Slider slider = (Slider) getComponent();
+
         int width = getWidth();
         int height = getHeight();
 
         graphics.setColor(trackColor);
         graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
             RenderingHints.VALUE_ANTIALIAS_ON);
-        GraphicsUtilities.drawLine(graphics, 0, (height - trackWidth) / 2,
-            width, Orientation.HORIZONTAL, trackWidth);
+        if (slider.getOrientation() == Orientation.HORIZONTAL) {
+            graphics.fillRect(0, (height - trackWidth) / 2, width, trackWidth);
+        } else {
+            graphics.fillRect((width - trackWidth) / 2, 0, trackWidth, height);
+        }
 
         if (thumb.isFocused()) {
-            BasicStroke dashStroke = new BasicStroke(1.0f, BasicStroke.CAP_ROUND,
-                BasicStroke.JOIN_ROUND, 1.0f, new float[] {0.0f, 2.0f}, 0.0f);
-
             graphics.setStroke(dashStroke);
             graphics.setColor(buttonBorderColor);
 
             graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                 RenderingHints.VALUE_ANTIALIAS_ON);
 
-            graphics.draw(new Rectangle2D.Double(0, 0, width - 1, height - 1));
+            graphics.drawRect(0, 0, width - 1, height - 1);
         }
     }
 
@@ -455,6 +501,11 @@
     }
 
     @Override
+    public void orientationChanged(Slider slider) {
+        invalidateComponent();
+    }
+
+    @Override
     public void valueChanged(Slider slider, int previousValue) {
         layout();
     }

Modified: incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/SliderTest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/SliderTest.java?rev=834055&r1=834054&r2=834055&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/SliderTest.java (original)
+++ incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/SliderTest.java Mon Nov  9 13:27:11 2009
@@ -29,23 +29,33 @@
 
 public class SliderTest implements Application {
     private Window window = null;
-    private Slider slider = null;
-    private Label valueLabel = null;
+    private Slider slider1 = null;
+    private Slider slider2 = null;
+    private Label valueLabel1 = null;
+    private Label valueLabel2 = null;
 
     @Override
     public void startup(Display display, Map<String, String> properties)
         throws Exception {
         WTKXSerializer wtkxSerializer = new WTKXSerializer();
         window = new Window((Component)wtkxSerializer.readObject(getClass().getResource("slider_test.wtkx")));
-        slider = (Slider)wtkxSerializer.get("slider");
-        slider.getSliderValueListeners().add(new SliderValueListener() {
+        slider1 = (Slider)wtkxSerializer.get("slider1");
+        slider1.getSliderValueListeners().add(new SliderValueListener() {
             @Override
             public void valueChanged(Slider slider, int previousValue) {
-                valueLabel.setText(Integer.toString(slider.getValue()));
+                valueLabel1.setText(Integer.toString(slider.getValue()));
+            }
+        });
+        slider2 = (Slider)wtkxSerializer.get("slider2");
+        slider2.getSliderValueListeners().add(new SliderValueListener() {
+            @Override
+            public void valueChanged(Slider slider, int previousValue) {
+                valueLabel2.setText(Integer.toString(slider.getValue()));
             }
         });
 
-        valueLabel = (Label)wtkxSerializer.get("valueLabel");
+        valueLabel1 = (Label)wtkxSerializer.get("valueLabel1");
+        valueLabel2 = (Label)wtkxSerializer.get("valueLabel2");
 
         window.setTitle("Slider Test");
         window.setMaximized(true);

Modified: incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/slider_test.wtkx
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/slider_test.wtkx?rev=834055&r1=834054&r2=834055&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/slider_test.wtkx (original)
+++ incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/slider_test.wtkx Mon Nov  9 13:27:11 2009
@@ -18,6 +18,8 @@
 
 <BoxPane xmlns:wtkx="http://pivot.apache.org/wtkx"
     xmlns="org.apache.pivot.wtk">
-    <Slider wtkx:id="slider" range="{start:-100, end:100}" value="0"/>
-    <Label wtkx:id="valueLabel"/>
+    <Slider wtkx:id="slider1" range="{start:-100, end:100}" value="0"/>
+    <Label wtkx:id="valueLabel1" text="0"/>
+    <Slider wtkx:id="slider2" range="{start:-100, end:100}" value="0" orientation="vertical"/>
+    <Label wtkx:id="valueLabel2" text="0"/>
 </BoxPane>