]> source.dussan.org Git - vaadin-framework.git/commitdiff
Adds mouse event details to button clicks #6605
authorJohn Alhroos <john.ahlroos@itmill.com>
Tue, 26 Apr 2011 12:18:47 +0000 (12:18 +0000)
committerJohn Alhroos <john.ahlroos@itmill.com>
Tue, 26 Apr 2011 12:18:47 +0000 (12:18 +0000)
svn changeset:18466/svn branch:6.6

src/com/vaadin/terminal/gwt/client/ui/VButton.java
src/com/vaadin/ui/Button.java

index 5a5eb0eda6ebe254b1db93e1d47600cef7844834..46492a707c3b52d239fbf66384544df6e4066890 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
 @ITMillApache2LicenseForJavaFiles@
  */
 
@@ -23,6 +23,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.BrowserInfo;
 import com.vaadin.terminal.gwt.client.EventHelper;
 import com.vaadin.terminal.gwt.client.EventId;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.Paintable;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
@@ -353,7 +354,12 @@ public class VButton extends FocusWidget implements Paintable, ClickHandler,
         if (BrowserInfo.get().isSafari()) {
             VButton.this.setFocus(true);
         }
-        client.updateVariable(id, "state", true, true);
+        client.updateVariable(id, "state", true, false);
+
+        // Add mouse details
+        MouseEventDetails details = new MouseEventDetails(
+                event.getNativeEvent(), getElement());
+        client.updateVariable(id, "mousedetails", details.serialize(), true);
 
         clickPending = false;
     }
index cf354750a8f98a042e264cdb1d22c66ed265c226..8fa9e2afb9b2286e3076ddd878bab3b0d1aebedf 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
 @ITMillApache2LicenseForJavaFiles@
  */
 
@@ -21,6 +21,7 @@ import com.vaadin.event.ShortcutAction.ModifierKey;
 import com.vaadin.event.ShortcutListener;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.ui.VButton;
 import com.vaadin.ui.ClientWidget.LoadStyle;
 import com.vaadin.ui.themes.BaseTheme;
@@ -175,13 +176,15 @@ public class Button extends AbstractField implements FieldEvents.BlurNotifier,
                 if (newValue != null && !newValue.equals(oldValue)
                         && !isReadOnly()) {
                     setValue(newValue);
-                    fireClick();
+                    fireClick(MouseEventDetails.deSerialize((String) variables
+                            .get("mousedetails")));
                 }
             } else {
 
                 // Only send click event if the button is pushed
                 if (newValue.booleanValue()) {
-                    fireClick();
+                    fireClick(MouseEventDetails.deSerialize((String) variables
+                            .get("mousedetails")));
                 }
 
                 // If the button is true for some reason, release it
@@ -300,6 +303,8 @@ public class Button extends AbstractField implements FieldEvents.BlurNotifier,
      */
     public class ClickEvent extends Component.Event {
 
+        private MouseEventDetails details;
+
         /**
          * New instance of text change event.
          * 
@@ -310,6 +315,19 @@ public class Button extends AbstractField implements FieldEvents.BlurNotifier,
             super(source);
         }
 
+        /**
+         * Constructor with mouse details
+         * 
+         * @param source
+         *            The source where the click took place
+         * @param details
+         *            Details about the mouse click
+         */
+        public ClickEvent(Component source, MouseEventDetails details) {
+            super(source);
+            this.details = details;
+        }
+
         /**
          * Gets the Button where the event occurred.
          * 
@@ -318,6 +336,87 @@ public class Button extends AbstractField implements FieldEvents.BlurNotifier,
         public Button getButton() {
             return (Button) getSource();
         }
+
+        /**
+         * Returns the mouse position (x coordinate) when the click took place.
+         * The position is relative to the browser client area.
+         * 
+         * @return The mouse cursor x position
+         */
+        public int getClientX() {
+            return details.getClientX();
+        }
+
+        /**
+         * Returns the mouse position (y coordinate) when the click took place.
+         * The position is relative to the browser client area.
+         * 
+         * @return The mouse cursor y position
+         */
+        public int getClientY() {
+            return details.getClientY();
+        }
+
+        /**
+         * Returns the relative mouse position (x coordinate) when the click
+         * took place. The position is relative to the clicked component.
+         * 
+         * @return The mouse cursor x position relative to the clicked layout
+         *         component or -1 if no x coordinate available
+         */
+        public int getRelativeX() {
+            return details.getRelativeX();
+        }
+
+        /**
+         * Returns the relative mouse position (y coordinate) when the click
+         * took place. The position is relative to the clicked component.
+         * 
+         * @return The mouse cursor y position relative to the clicked layout
+         *         component or -1 if no y coordinate available
+         */
+        public int getRelativeY() {
+            return details.getRelativeY();
+        }
+
+        /**
+         * Checks if the Alt key was down when the mouse event took place.
+         * 
+         * @return true if Alt was down when the event occured, false otherwise
+         */
+        public boolean isAltKey() {
+            return details.isAltKey();
+        }
+
+        /**
+         * Checks if the Ctrl key was down when the mouse event took place.
+         * 
+         * @return true if Ctrl was pressed when the event occured, false
+         *         otherwise
+         */
+        public boolean isCtrlKey() {
+            return details.isCtrlKey();
+        }
+
+        /**
+         * Checks if the Meta key was down when the mouse event took place.
+         * 
+         * @return true if Meta was pressed when the event occured, false
+         *         otherwise
+         */
+        public boolean isMetaKey() {
+            return details.isMetaKey();
+        }
+
+        /**
+         * Checks if the Shift key was down when the mouse event took place.
+         * 
+         * @return true if Shift was pressed when the event occured, false
+         *         otherwise
+         */
+        public boolean isShiftKey() {
+            return details.isShiftKey();
+        }
     }
 
     /**
@@ -339,6 +438,7 @@ public class Button extends AbstractField implements FieldEvents.BlurNotifier,
          *            An event containing information about the click.
          */
         public void buttonClick(ClickEvent event);
+
     }
 
     /**
@@ -368,6 +468,10 @@ public class Button extends AbstractField implements FieldEvents.BlurNotifier,
         fireEvent(new Button.ClickEvent(this));
     }
 
+    private void fireClick(MouseEventDetails details) {
+        fireEvent(new Button.ClickEvent(this, details));
+    }
+
     @Override
     protected void setInternalValue(Object newValue) {
         // Make sure only booleans get through