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/02/19 01:46:20 UTC

svn commit: r911660 - in /pivot/trunk: core/src/org/apache/pivot/collections/ core/src/org/apache/pivot/serialization/ web-server/src/org/apache/pivot/web/server/ wtk-terra/src/org/apache/pivot/wtk/skin/terra/ wtk/src/org/apache/pivot/wtk/ wtk/src/org/...

Author: gbrown
Date: Fri Feb 19 00:46:19 2010
New Revision: 911660

URL: http://svn.apache.org/viewvc?rev=911660&view=rev
Log:
Fix minor bug in HashMap; add support for optionally aligning checkbox and radio button content to baseline; add support for immutable structures to JSONSerializer; scroll menu items to visible when they become active; handle Dictionary values in Component#load(Object) and Component#store(Object).

Modified:
    pivot/trunk/core/src/org/apache/pivot/collections/HashMap.java
    pivot/trunk/core/src/org/apache/pivot/serialization/JSONSerializer.java
    pivot/trunk/web-server/src/org/apache/pivot/web/server/QueryServlet.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCheckboxSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java
    pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraRadioButtonSkin.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/Component.java
    pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/MenuItemSkin.java

Modified: pivot/trunk/core/src/org/apache/pivot/collections/HashMap.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/collections/HashMap.java?rev=911660&r1=911659&r2=911660&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/collections/HashMap.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/collections/HashMap.java Fri Feb 19 00:46:19 2010
@@ -357,6 +357,8 @@
         }
 
         if (previousBuckets != null) {
+            count = 0;
+
             for (LinkedList<Pair<K, V>> bucket : previousBuckets) {
                 if (bucket != null) {
                     for (Pair<K, V> entry : bucket) {

Modified: pivot/trunk/core/src/org/apache/pivot/serialization/JSONSerializer.java
URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/serialization/JSONSerializer.java?rev=911660&r1=911659&r2=911660&view=diff
==============================================================================
--- pivot/trunk/core/src/org/apache/pivot/serialization/JSONSerializer.java (original)
+++ pivot/trunk/core/src/org/apache/pivot/serialization/JSONSerializer.java Fri Feb 19 00:46:19 2010
@@ -37,6 +37,8 @@
 import org.apache.pivot.collections.List;
 import org.apache.pivot.collections.Map;
 import org.apache.pivot.collections.Sequence;
+import org.apache.pivot.collections.immutable.ImmutableList;
+import org.apache.pivot.collections.immutable.ImmutableMap;
 
 
 /**
@@ -44,7 +46,8 @@
  * and writes data to a JavaScript Object Notation (JSON) file.
  */
 public class JSONSerializer implements Serializer<Object> {
-    private Charset charset = null;
+    private Charset charset;
+    private boolean immutable;
 
     private int c = -1;
     private boolean alwaysDelimitMapKeys = false;
@@ -55,22 +58,44 @@
     public static final int BUFFER_SIZE = 2048;
 
     public JSONSerializer() {
-        this(Charset.forName(DEFAULT_CHARSET_NAME));
+        this(Charset.forName(DEFAULT_CHARSET_NAME), false);
     }
 
     public JSONSerializer(Charset charset) {
+        this(charset, false);
+    }
+
+    public JSONSerializer(boolean immutable) {
+        this(Charset.forName(DEFAULT_CHARSET_NAME), immutable);
+    }
+
+    public JSONSerializer(Charset charset, boolean immutable) {
         if (charset == null) {
             throw new IllegalArgumentException("charset is null.");
         }
 
         this.charset = charset;
+        this.immutable = immutable;
     }
 
+    /**
+     * Returns the character set used to encode/decode the JSON data.
+     */
     public Charset getCharset() {
         return charset;
     }
 
     /**
+     * Returns the serializer's immutable flag.
+     *
+     * @return
+     * If <tt>true</tt>, all list and map values will be wrapped in an immutable equivalent.
+     */
+    public boolean isImmutable() {
+        return immutable;
+    }
+
+    /**
      * Reads data from a JSON stream.
      *
      * @param inputStream
@@ -386,6 +411,10 @@
         // Move to the next character after ']'
         c = reader.read();
 
+        if (immutable) {
+            list = new ImmutableList<Object>(list);
+        }
+
         return list;
     }
 
@@ -461,6 +490,10 @@
         // Move to the first character after '}'
         c = reader.read();
 
+        if (immutable) {
+            map = new ImmutableMap<String, Object>(map);
+        }
+
         return map;
     }
 

Modified: pivot/trunk/web-server/src/org/apache/pivot/web/server/QueryServlet.java
URL: http://svn.apache.org/viewvc/pivot/trunk/web-server/src/org/apache/pivot/web/server/QueryServlet.java?rev=911660&r1=911659&r2=911660&view=diff
==============================================================================
--- pivot/trunk/web-server/src/org/apache/pivot/web/server/QueryServlet.java (original)
+++ pivot/trunk/web-server/src/org/apache/pivot/web/server/QueryServlet.java Fri Feb 19 00:46:19 2010
@@ -299,6 +299,12 @@
 
             // Process the request
             super.service(request, response);
+        } catch (IOException exception) {
+            System.err.println(exception);
+            throw exception;
+        } catch (RuntimeException exception) {
+            System.err.println(exception);
+            throw exception;
         } finally {
             // Clean up any allocated resources
             dispose();

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCheckboxSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCheckboxSkin.java?rev=911660&r1=911659&r2=911660&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCheckboxSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraCheckboxSkin.java Fri Feb 19 00:46:19 2010
@@ -45,6 +45,7 @@
     private Color color;
     private Color disabledColor;
     private int spacing;
+    private boolean alignToBaseline;
 
     private Color buttonColor;
     private Color buttonBorderColor;
@@ -62,6 +63,7 @@
         color = theme.getColor(1);
         disabledColor = theme.getColor(7);
         spacing = 3;
+        alignToBaseline = true;
 
         buttonColor = theme.getColor(4);
         buttonBorderColor = theme.getColor(7);
@@ -154,9 +156,17 @@
         int width = getWidth();
         int height = getHeight();
 
+        int baseline = alignToBaseline ? getBaseline(width, height) : -1;
+
         // Paint the button
         Graphics2D buttonGraphics = (Graphics2D)graphics.create();
-        paintButton(buttonGraphics, checkbox, height);
+        if (baseline == -1) {
+            buttonGraphics.translate(0, (height - CHECKBOX_SIZE) / 2);
+        } else {
+            buttonGraphics.translate(0, (baseline - CHECKBOX_SIZE + 3));
+        }
+
+        paintButton(buttonGraphics, checkbox.isEnabled(), checkbox.getState());
         buttonGraphics.dispose();
 
         // Paint the content
@@ -187,12 +197,12 @@
         }
     }
 
-    private void paintButton(Graphics2D graphics, Checkbox checkbox, int height) {
+    private void paintButton(Graphics2D graphics, boolean enabled, Button.State state) {
         Paint buttonPaint;
         Color buttonBorderColor;
         Color buttonSelectionColor;
 
-        if (checkbox.isEnabled()) {
+        if (enabled) {
             buttonPaint = new GradientPaint(CHECKBOX_SIZE / 2, 0, TerraTheme.darken(buttonColor),
                 CHECKBOX_SIZE / 2, CHECKBOX_SIZE, buttonColor);
             buttonBorderColor = this.buttonBorderColor;
@@ -203,9 +213,6 @@
             buttonSelectionColor = disabledButtonSelectionColor;
         }
 
-        // Center the button vertically
-        graphics.translate(0, (height - CHECKBOX_SIZE) / 2);
-
         // Paint the background
         graphics.setPaint(buttonPaint);
         graphics.fillRect(0, 0, CHECKBOX_SIZE, CHECKBOX_SIZE);
@@ -218,13 +225,10 @@
         graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
             RenderingHints.VALUE_ANTIALIAS_ON);
 
-        Button.State state = checkbox.getState();
-
         if (state == Button.State.SELECTED) {
             graphics.setColor(buttonSelectionColor);
             graphics.setStroke(new BasicStroke(2.5f));
 
-
             // Draw a checkmark
             int n = CHECKMARK_SIZE / 2;
             int m = CHECKMARK_SIZE / 4;
@@ -343,4 +347,13 @@
 
         setSpacing(spacing.intValue());
     }
+
+    public boolean getAlignToBaseline() {
+        return alignToBaseline;
+    }
+
+    public void setAlignToBaseline(boolean alignToBaseline) {
+        this.alignToBaseline = alignToBaseline;
+        repaintComponent();
+    }
 }

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java?rev=911660&r1=911659&r2=911660&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraMenuPopupSkin.java Fri Feb 19 00:46:19 2010
@@ -210,6 +210,8 @@
             menu.requestFocus();
         }
 
+        panorama.setScrollTop(0);
+
         if (menuPopup.isContextMenu()) {
             ApplicationContext.queueCallback(new RepositionCallback());
         }

Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraRadioButtonSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraRadioButtonSkin.java?rev=911660&r1=911659&r2=911660&view=diff
==============================================================================
--- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraRadioButtonSkin.java (original)
+++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraRadioButtonSkin.java Fri Feb 19 00:46:19 2010
@@ -45,6 +45,7 @@
     private Color color;
     private Color disabledColor;
     private int spacing;
+    private boolean alignToBaseline;
 
     private Color buttonColor;
     private Color buttonBorderColor;
@@ -62,6 +63,7 @@
         color = theme.getColor(1);
         disabledColor = theme.getColor(7);
         spacing = 3;
+        alignToBaseline = true;
 
         buttonColor = theme.getColor(4);
         buttonBorderColor = theme.getColor(7);
@@ -140,9 +142,17 @@
         int width = getWidth();
         int height = getHeight();
 
+        int baseline = alignToBaseline ? getBaseline(width, height) : -1;
+
         // Paint the button
         Graphics2D buttonGraphics = (Graphics2D)graphics.create();
-        paintButton(buttonGraphics, radioButton, height);
+        if (baseline == -1) {
+            graphics.translate(0, (height - BUTTON_DIAMETER) / 2);
+        } else {
+            buttonGraphics.translate(0, (baseline - BUTTON_DIAMETER + 3));
+        }
+
+        paintButton(buttonGraphics, radioButton.isEnabled(), radioButton.isSelected());
         buttonGraphics.dispose();
 
         // Paint the content
@@ -173,7 +183,7 @@
         }
     }
 
-    private void paintButton(Graphics2D graphics, RadioButton radioButton, int height) {
+    private void paintButton(Graphics2D graphics, boolean enabled, boolean selected) {
         Paint buttonPaint;
         Color buttonBorderColor = null;
         Color buttonSelectionColor = null;
@@ -181,7 +191,7 @@
         Ellipse2D buttonBackgroundCircle = new Ellipse2D.Double(1, 1,
             BUTTON_DIAMETER - 3, BUTTON_DIAMETER - 3);
 
-        if (radioButton.isEnabled()) {
+        if (enabled) {
             buttonPaint = new RadialGradientPaint((float)buttonBackgroundCircle.getCenterX(),
                 (float)buttonBackgroundCircle.getCenterY(),
                 (float)buttonBackgroundCircle.getWidth() * 2 / 3,
@@ -198,9 +208,6 @@
         graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
             RenderingHints.VALUE_ANTIALIAS_ON);
 
-        // Center the button vertically
-        graphics.translate(0, (height - BUTTON_DIAMETER) / 2);
-
         // Paint the border
         graphics.setColor(buttonBorderColor);
         graphics.fillOval(0, 0, BUTTON_DIAMETER - 1, BUTTON_DIAMETER - 1);
@@ -210,7 +217,7 @@
         graphics.fill(buttonBackgroundCircle);
 
         // Paint the selection
-        if (radioButton.isSelected()) {
+        if (selected) {
             Ellipse2D buttonSelectionCircle = new Ellipse2D.Double((BUTTON_DIAMETER
                 - (BUTTON_SELECTION_DIAMETER - 1)) / 2,
                 (BUTTON_DIAMETER - (BUTTON_SELECTION_DIAMETER - 1)) / 2,
@@ -310,4 +317,13 @@
 
         setSpacing(spacing.intValue());
     }
+
+    public boolean getAlignToBaseline() {
+        return alignToBaseline;
+    }
+
+    public void setAlignToBaseline(boolean alignToBaseline) {
+        this.alignToBaseline = alignToBaseline;
+        repaintComponent();
+    }
 }

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Component.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Component.java?rev=911660&r1=911659&r2=911660&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/Component.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Component.java Fri Feb 19 00:46:19 2010
@@ -2362,12 +2362,14 @@
 
     /**
      * Copies bound values from the bind context to the component by converting
-     * the given context to a bean dictionary.
+     * the given context to a bean dictionary, if necessary.
      *
      * @param context
      */
+    @SuppressWarnings("unchecked")
     public final void load(Object context) {
-        load(new BeanDictionary(context));
+        load((context instanceof Dictionary<?, ?>) ?
+            (Dictionary<String, ?>)context : new BeanDictionary(context));
     }
 
     /**
@@ -2382,12 +2384,14 @@
 
     /**
      * Copies bound values from the component to the bind context by converting
-     * the given context to a bean dictionary.
+     * the given context to a bean dictionary, if necessary.
      *
      * @param context
      */
+    @SuppressWarnings("unchecked")
     public final void store(Object context) {
-        store(new BeanDictionary(context));
+        store((context instanceof Dictionary<?, ?>) ?
+            (Dictionary<String, ?>)context : new BeanDictionary(context));
     }
 
     /**

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/MenuItemSkin.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/MenuItemSkin.java?rev=911660&r1=911659&r2=911660&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/MenuItemSkin.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/MenuItemSkin.java Fri Feb 19 00:46:19 2010
@@ -183,7 +183,9 @@
 
     @Override
     public void activeChanged(Menu.Item menuItem) {
-        if (!menuItem.isActive()) {
+        if (menuItem.isActive()) {
+            menuItem.scrollAreaToVisible(0, 0, menuItem.getWidth(), menuItem.getHeight());
+        } else {
             menuPopup.close(true);
         }