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 2009/09/29 15:32:22 UTC

svn commit: r819942 - in /incubator/pivot/trunk/wtk: src/org/apache/pivot/wtk/Button.java src/org/apache/pivot/wtk/ButtonGroup.java src/org/apache/pivot/wtkx/WTKXSerializer.java test/org/apache/pivot/wtk/test/ButtonGroupTest.java

Author: gbrown
Date: Tue Sep 29 13:32:22 2009
New Revision: 819942

URL: http://svn.apache.org/viewvc?rev=819942&view=rev
Log:
Fix bug in Button/ButtonGroup interaction; clear WTKXSerializer location in reset() instead of readObject().

Added:
    incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/ButtonGroupTest.java
Modified:
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroup.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java?rev=819942&r1=819941&r2=819942&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Button.java Tue Sep 29 13:32:22 2009
@@ -137,11 +137,13 @@
         }
     };
 
-    private State state = null;
-    private ButtonGroup buttonGroup = null;
+    private State state = State.UNSELECTED;
 
     private boolean toggleButton = false;
     private boolean triState = false;
+
+    private ButtonGroup buttonGroup = null;
+
     private String selectedKey = null;
     private String stateKey = null;
 
@@ -315,23 +317,12 @@
         if (previousState != state) {
             this.state = state;
 
+            // Update the button group's state
             if (buttonGroup != null) {
-                // Update the group's selection
-                Button previousSelection = buttonGroup.getSelection();
-
                 if (state == State.SELECTED) {
-                    // De-select any previously selected button
-                    if (previousSelection != null) {
-                        previousSelection.setSelected(false);
-                    }
-
-                    // Set this as the new selection
                     buttonGroup.setSelection(this);
-                }
-                else {
-                    // If this button is currently selected, clear the
-                    // selection
-                    if (previousSelection == this) {
+                } else {
+                    if (buttonGroup.getSelection() == this) {
                         buttonGroup.setSelection(null);
                     }
                 }
@@ -522,4 +513,9 @@
     public ListenerList<ButtonPressListener> getButtonPressListeners() {
         return buttonPressListeners;
     }
+
+    @Override
+    public String toString() {
+        return getClass().getName() + ": " + buttonData;
+    }
 }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroup.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroup.java?rev=819942&r1=819941&r2=819942&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroup.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ButtonGroup.java Tue Sep 29 13:32:22 2009
@@ -113,18 +113,23 @@
 
     public void setSelection(Button selection) {
         if (selection != null
-            && !contains(selection)) {
+            && selection.getButtonGroup() != this) {
             throw new IllegalArgumentException();
         }
 
         Button previousSelection = this.selection;
+
         if (previousSelection != selection) {
+            this.selection = selection;
+
+            if (previousSelection != null) {
+                previousSelection.setSelected(false);
+            }
+
             if (selection != null) {
                 selection.setSelected(true);
             }
 
-            this.selection = selection;
-
             buttonGroupListeners.selectionChanged(this, previousSelection);
         }
     }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java?rev=819942&r1=819941&r2=819942&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtkx/WTKXSerializer.java Tue Sep 29 13:32:22 2009
@@ -387,6 +387,7 @@
         }
 
         this.location = location;
+
         InputStream inputStream = new BufferedInputStream(location.openStream());
         try {
             return readObject(inputStream);
@@ -454,10 +455,6 @@
             throw exception;
         }
 
-        // Clear the location so the previous value won't be re-used in a
-        // subsequent call to this method
-        location = null;
-
         return root;
     }
 
@@ -1167,8 +1164,11 @@
     }
 
     public void reset() {
+        location = null;
+
         namedObjects.clear();
         includeSerializers.clear();
+
         root = null;
         language = DEFAULT_LANGUAGE;
     }
@@ -1215,11 +1215,12 @@
     }
 
     /**
-     * Returns the location of the WTKX currently being processed.
+     * Returns the location of the WTKX most recently processed by this
+     * serializer.
      *
      * @return
-     * The location of the WTKX, or <tt>null</tt> if no WTKX is currently being
-     * processed or the location is not known.
+     * The location of the WTKX, or <tt>null</tt> if this serializer has not
+     * yet read an object from a URL.
      */
     public URL getLocation() {
         return location;

Added: incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/ButtonGroupTest.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/ButtonGroupTest.java?rev=819942&view=auto
==============================================================================
--- incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/ButtonGroupTest.java (added)
+++ incubator/pivot/trunk/wtk/test/org/apache/pivot/wtk/test/ButtonGroupTest.java Tue Sep 29 13:32:22 2009
@@ -0,0 +1,106 @@
+/*
+ * 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.test;
+
+import org.apache.pivot.collections.Map;
+import org.apache.pivot.wtk.Application;
+import org.apache.pivot.wtk.BoxPane;
+import org.apache.pivot.wtk.Button;
+import org.apache.pivot.wtk.ButtonGroup;
+import org.apache.pivot.wtk.ButtonGroupListener;
+import org.apache.pivot.wtk.DesktopApplicationContext;
+import org.apache.pivot.wtk.Display;
+import org.apache.pivot.wtk.PushButton;
+import org.apache.pivot.wtk.Window;
+
+public class ButtonGroupTest implements Application {
+    private Window window = null;
+
+    @Override
+    public void startup(Display display, Map<String, String> properties)
+        throws Exception {
+        ButtonGroup buttonGroup = new ButtonGroup();
+        buttonGroup.getButtonGroupListeners().add(new ButtonGroupListener() {
+            @Override
+            public void selectionChanged(ButtonGroup buttonGroup, Button previousSelection) {
+                System.out.println("selectionChanged(): previousSelection = " + previousSelection
+                    + ", selection = " + buttonGroup.getSelection());
+            }
+
+            @Override
+            public void buttonAdded(ButtonGroup buttonGroup, Button button) {
+                System.out.println("buttonAdded(): " + button);
+            }
+
+            @Override
+            public void buttonRemoved(ButtonGroup buttonGroup, Button button) {
+                System.out.println("buttonRemoved(): " + button);
+            }
+        });
+
+        BoxPane boxPane = new BoxPane();
+
+        PushButton button1 = new PushButton("One");
+        button1.setToggleButton(true);
+        button1.setButtonGroup(buttonGroup);
+        boxPane.add(button1);
+
+        PushButton button2 = new PushButton("Two");
+        button2.setToggleButton(true);
+        button2.setButtonGroup(buttonGroup);
+        boxPane.add(button2);
+
+        PushButton button3 = new PushButton("Three");
+        button3.setToggleButton(true);
+        button3.setButtonGroup(buttonGroup);
+        boxPane.add(button3);
+
+        PushButton button4 = new PushButton("Four");
+        button4.setToggleButton(true);
+        button4.setButtonGroup(buttonGroup);
+        boxPane.add(button4);
+
+        // button1.setSelected(true);
+        // buttonGroup.setSelection(button1);
+        // buttonGroup.setSelection(null);
+
+        window = new Window(boxPane);
+        window.setMaximized(true);
+        window.open(display);
+    }
+
+    @Override
+    public boolean shutdown(boolean optional) {
+        if (window != null) {
+            window.close();
+        }
+
+        return false;
+    }
+
+    @Override
+    public void suspend() {
+    }
+
+    @Override
+    public void resume() {
+    }
+
+    public static void main(String[] args) {
+        DesktopApplicationContext.main(ButtonGroupTest.class, args);
+    }
+}