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/11 12:51:28 UTC

svn commit: r834844 - in /incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk: Meter.java MeterListener.java skin/terra/TerraMeterSkin.java

Author: noelgrandin
Date: Wed Nov 11 11:51:28 2009
New Revision: 834844

URL: http://svn.apache.org/viewvc?rev=834844&view=rev
Log:
PIVOT-26: Add orientation to Meter component

Modified:
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java?rev=834844&r1=834843&r2=834844&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Meter.java Wed Nov 11 11:51:28 2009
@@ -25,6 +25,13 @@
     private static class MeterListenerList extends ListenerList<MeterListener>
     implements MeterListener {
         @Override
+        public void orientationChanged(Meter meter) {
+            for (MeterListener listener : this) {
+                listener.orientationChanged(meter);
+            }
+        }
+        
+        @Override
         public void percentageChanged(Meter meter, double oldPercentage) {
             for (MeterListener listener : this) {
                 listener.percentageChanged(meter, oldPercentage);
@@ -41,9 +48,15 @@
 
     private double percentage = 0.0;
     private String text = null;
+    private Orientation orientation = null;
     private MeterListenerList meterListeners = new MeterListenerList();
 
     public Meter() {
+        this(Orientation.HORIZONTAL);
+    }
+    
+    public Meter(Orientation orientation) {
+        this.orientation = orientation;
         installThemeSkin(Meter.class);
     }
 
@@ -75,6 +88,29 @@
         meterListeners.textChanged(this, previousText);
     }
 
+    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;
+            meterListeners.orientationChanged(this);
+        }
+    }
+
+    public void setOrientation(String orientation) {
+        if (orientation == null) {
+            throw new IllegalArgumentException("orientation is null.");
+        }
+
+        setOrientation(Orientation.valueOf(orientation.toUpperCase()));
+    }
+    
     public ListenerList<MeterListener> getMeterListeners() {
         return meterListeners;
     }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java?rev=834844&r1=834843&r2=834844&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/MeterListener.java Wed Nov 11 11:51:28 2009
@@ -20,6 +20,19 @@
  * Meter listener interface.
  */
 public interface MeterListener {
+    
+    public static class Adapter implements MeterListener {
+        @Override
+        public void percentageChanged(Meter meter, double previousPercentage) {
+        }
+        @Override
+        public void textChanged(Meter meter, String previousText) {
+        }
+        @Override
+        public void orientationChanged(Meter meter) {
+        }
+    }
+    
     /**
      * Called when a meter's percentage value has changed.
      *
@@ -35,4 +48,12 @@
      * @param previousText
      */
     public void textChanged(Meter meter, String previousText);
+    
+    /**
+     * Called when a sliders's orientation has changed.
+     *
+     * @param meter
+     * The source of the event.
+     */
+    public void orientationChanged(Meter meter);
 }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java?rev=834844&r1=834843&r2=834844&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraMeterSkin.java Wed Nov 11 11:51:28 2009
@@ -24,6 +24,7 @@
 import java.awt.Shape;
 import java.awt.font.FontRenderContext;
 import java.awt.font.LineMetrics;
+import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 
 import org.apache.pivot.collections.Dictionary;
@@ -80,6 +81,25 @@
     @Override
     public int getPreferredWidth(int height) {
         Meter meter = (Meter)getComponent();
+        if (meter.getOrientation()==Orientation.HORIZONTAL) {
+            return internalGetPreferredWidth();
+        } else {
+            return internalGetPreferredHeight();
+        }
+    }
+    
+    @Override
+    public int getPreferredHeight(int width) {
+        Meter meter = (Meter)getComponent();
+        if (meter.getOrientation()==Orientation.HORIZONTAL) {
+            return internalGetPreferredHeight();
+        } else {
+            return internalGetPreferredWidth();
+        }
+    }
+    
+    private int internalGetPreferredWidth() {
+        Meter meter = (Meter)getComponent();
         String text = meter.getText();
 
         int preferredWidth;
@@ -98,8 +118,7 @@
         return preferredWidth;
     }
 
-    @Override
-    public int getPreferredHeight(int width) {
+    private int internalGetPreferredHeight() {
         Meter meter = (Meter)getComponent();
         String text = meter.getText();
 
@@ -137,7 +156,11 @@
         preferredWidth = Math.max(preferredWidth, DEFAULT_WIDTH);
         preferredHeight = Math.max(preferredHeight, DEFAULT_HEIGHT);
 
-        return new Dimensions(preferredWidth, preferredHeight);
+        if (meter.getOrientation()==Orientation.HORIZONTAL) {
+            return new Dimensions(preferredWidth, preferredHeight);
+        } else {
+            return new Dimensions(preferredHeight, preferredWidth);
+        }
     }
 
     @Override
@@ -145,6 +168,11 @@
         int baseline = -1;
 
         Meter meter = (Meter)getComponent();
+        
+        if (meter.getOrientation()==Orientation.VERTICAL) {
+            return -1;
+        }
+        
         String text = meter.getText();
 
         if (text != null
@@ -170,7 +198,6 @@
 
         int width = getWidth();
         int height = getHeight();
-        int meterStop = (int)(meter.getPercentage() * width);
 
         graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
             RenderingHints.VALUE_ANTIALIAS_ON);
@@ -185,6 +212,19 @@
                 RenderingHints.VALUE_FRACTIONALMETRICS_ON);
         }
 
+        if (meter.getOrientation() == Orientation.HORIZONTAL) {
+            drawMeter(meter, graphics, width, height);
+        } else {
+            AffineTransform oldTransform = graphics.getTransform();
+            graphics.rotate(Math.PI / 2d);
+            graphics.translate(0, -width);
+            drawMeter(meter, graphics, height, width);
+            graphics.setTransform(oldTransform);
+        }
+    }
+    
+    private void drawMeter(Meter meter, Graphics2D graphics, int width, int height) {
+        int meterStop = (int)(meter.getPercentage() * width);
         // Paint the interior fill
         graphics.setPaint(new GradientPaint(0, 0, TerraTheme.brighten(fillColor),
             0, height, TerraTheme.darken(fillColor)));
@@ -372,4 +412,15 @@
     public void textChanged(Meter meter, String previousText) {
         invalidateComponent();
     }
+    
+    /**
+     * Listener for meter orientation changes.
+     *
+     * @param meter
+     *     The source of the event.
+     */
+    @Override
+    public void orientationChanged(Meter meter) {
+        invalidateComponent();
+    }
 }