]> source.dussan.org Git - vaadin-framework.git/commitdiff
Made sub window work again
authorArtur Signell <artur@vaadin.com>
Wed, 11 Apr 2012 18:40:36 +0000 (21:40 +0300)
committerArtur Signell <artur@vaadin.com>
Thu, 12 Apr 2012 06:58:40 +0000 (09:58 +0300)
src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java
src/com/vaadin/terminal/gwt/client/ui/button/VButton.java
src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java

index 1a93859429ecc2c8e33d19234f20ef9eb89e82b4..a04e2482e58ae933c2df41fc2c82af5b12a22c0b 100644 (file)
@@ -7,12 +7,16 @@ package com.vaadin.terminal.gwt.client.ui.button;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.BlurEvent;
 import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.FocusEvent;
 import com.google.gwt.event.dom.client.FocusHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.EventHelper;
+import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
 import com.vaadin.terminal.gwt.client.communication.FieldRpc.FocusAndBlurServerRpc;
 import com.vaadin.terminal.gwt.client.communication.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
@@ -24,7 +28,7 @@ import com.vaadin.ui.Button;
 
 @Component(value = Button.class, loadStyle = LoadStyle.EAGER)
 public class ButtonConnector extends AbstractComponentConnector implements
-        BlurHandler, FocusHandler {
+        BlurHandler, FocusHandler, ClickHandler {
 
     private ButtonServerRpc rpc = RpcProxy.create(ButtonServerRpc.class, this);
     private FocusAndBlurServerRpc focusBlurProxy = RpcProxy.create(
@@ -41,9 +45,8 @@ public class ButtonConnector extends AbstractComponentConnector implements
     @Override
     public void init() {
         super.init();
-        getWidget().buttonRpcProxy = rpc;
+        getWidget().addClickHandler(this);
         getWidget().client = getConnection();
-        getWidget().paintableId = getConnectorId();
     }
 
     @Override
@@ -56,8 +59,6 @@ public class ButtonConnector extends AbstractComponentConnector implements
         // Set text
         getWidget().setText(getState().getCaption());
 
-        getWidget().disableOnClick = getState().isDisableOnClick();
-
         // handle error
         if (null != getState().getErrorMessage()) {
             if (getWidget().errorIndicatorElement == null) {
@@ -116,4 +117,18 @@ public class ButtonConnector extends AbstractComponentConnector implements
         // there is a listener on server side
         focusBlurProxy.blur();
     }
+
+    public void onClick(ClickEvent event) {
+        if (getState().isDisableOnClick()) {
+            getWidget().setEnabled(false);
+            rpc.disableOnClick();
+        }
+
+        // Add mouse details
+        MouseEventDetails details = MouseEventDetailsBuilder
+                .buildMouseEventDetails(event.getNativeEvent(), getWidget()
+                        .getElement());
+        rpc.click(details);
+
+    }
 }
index f42e36839d7458d6f63b529cce28bcea29e32ec4..f7d73d3b5ec4face9c1cf9163b0e66c2d5ca14e1 100644 (file)
@@ -16,8 +16,6 @@ import com.google.gwt.user.client.ui.Accessibility;
 import com.google.gwt.user.client.ui.FocusWidget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.BrowserInfo;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
 import com.vaadin.terminal.gwt.client.Util;
 import com.vaadin.terminal.gwt.client.VTooltip;
 import com.vaadin.terminal.gwt.client.ui.Icon;
@@ -32,8 +30,6 @@ public class VButton extends FocusWidget implements ClickHandler {
     protected int mousedownX = 0;
     protected int mousedownY = 0;
 
-    protected String paintableId;
-
     protected ApplicationConnection client;
 
     protected final Element wrapper = DOM.createSpan();
@@ -55,8 +51,6 @@ public class VButton extends FocusWidget implements ClickHandler {
 
     private int tabIndex = 0;
 
-    protected boolean disableOnClick = false;
-
     /*
      * BELOW PRIVATE MEMBERS COPY-PASTED FROM GWT CustomButton
      */
@@ -79,8 +73,6 @@ public class VButton extends FocusWidget implements ClickHandler {
     private boolean isHovering;
 
     protected int clickShortcut = 0;
-    // TODO Move this to VButtonPaintable
-    ButtonServerRpc buttonRpcProxy;
 
     public VButton() {
         super(DOM.createDiv());
@@ -289,21 +281,9 @@ public class VButton extends FocusWidget implements ClickHandler {
      * .dom.client.ClickEvent)
      */
     public void onClick(ClickEvent event) {
-        if (paintableId == null || client == null) {
-            return;
-        }
         if (BrowserInfo.get().isSafari()) {
             VButton.this.setFocus(true);
         }
-        if (disableOnClick) {
-            setEnabled(false);
-            buttonRpcProxy.disableOnClick();
-        }
-
-        // Add mouse details
-        MouseEventDetails details = MouseEventDetailsBuilder
-                .buildMouseEventDetails(event.getNativeEvent(), getElement());
-        buttonRpcProxy.click(details);
 
         clickPending = false;
     }
index 733485381ef47524a09b5f312a6af19a70d22f47..17f56e9159fc4eb9bdc11fec0ed768548d681ee8 100644 (file)
@@ -16,6 +16,7 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.BrowserInfo;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
 import com.vaadin.terminal.gwt.client.LayoutManager;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.Paintable;
@@ -120,38 +121,17 @@ public class WindowConnector extends AbstractComponentContainerConnector
             getWidget().setPopupPosition(positionx, positiony);
         }
 
-        boolean showingUrl = false;
         int childIndex = 0;
-        UIDL childUidl = uidl.getChildUIDL(childIndex++);
-
-        final ComponentConnector lo = client.getPaintable(childUidl);
-        if (getWidget().layout != null) {
-            if (getWidget().layout != lo) {
-                // remove old
-                getWidget().contentPanel.remove(getWidget().layout.getWidget());
-                // add new
-                if (!showingUrl) {
-                    getWidget().contentPanel.setWidget(lo.getWidget());
-                }
-                getWidget().layout = lo;
-            }
-        } else if (!showingUrl) {
-            getWidget().contentPanel.setWidget(lo.getWidget());
-            getWidget().layout = lo;
-        }
 
         // we may have actions
-        if (uidl.getChildCount() > 1) {
-            final int cnt = uidl.getChildCount();
-            for (int i = 1; i < cnt; i++) {
-                childUidl = uidl.getChildUIDL(i);
-                if (childUidl.getTag().equals("actions")) {
-                    if (getWidget().shortcutHandler == null) {
-                        getWidget().shortcutHandler = new ShortcutActionHandler(
-                                getConnectorId(), client);
-                    }
-                    getWidget().shortcutHandler.updateActionMap(childUidl);
+        for (int i = 0; i < uidl.getChildCount(); i++) {
+            UIDL childUidl = uidl.getChildUIDL(i);
+            if (childUidl.getTag().equals("actions")) {
+                if (getWidget().shortcutHandler == null) {
+                    getWidget().shortcutHandler = new ShortcutActionHandler(
+                            getConnectorId(), client);
                 }
+                getWidget().shortcutHandler.updateActionMap(childUidl);
             }
 
         }
@@ -179,7 +159,7 @@ public class WindowConnector extends AbstractComponentContainerConnector
 
         if (uidl.hasAttribute("bringToFront")) {
             /*
-             * Focus as a side-efect. Will be overridden by
+             * Focus as a side-effect. Will be overridden by
              * ApplicationConnection if another component was focused by the
              * server side.
              */
@@ -209,6 +189,22 @@ public class WindowConnector extends AbstractComponentContainerConnector
         return GWT.create(VWindow.class);
     }
 
+    @Override
+    public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
+        super.onConnectorHierarchyChange(event);
+
+        // We always have 1 child, unless the child is hidden
+        Widget newChildWidget = null;
+        ComponentConnector newChild = null;
+        if (getChildren().size() == 1) {
+            newChild = getChildren().get(0);
+            newChildWidget = newChild.getWidget();
+        }
+
+        getWidget().layout = newChild;
+        getWidget().setWidget(newChildWidget);
+    }
+
     public void layout() {
         LayoutManager lm = getLayoutManager();
         VWindow window = getWidget();