import com.vaadin.terminal.gwt.client.VPaintableMap;
import com.vaadin.terminal.gwt.client.VPaintableWidget;
import com.vaadin.terminal.gwt.client.VPaintableWidgetContainer;
+import com.vaadin.terminal.gwt.client.communication.ClientToServerRpc;
+import com.vaadin.terminal.gwt.client.communication.ClientToServerRpc.InitializableClientToServerRpc;
import com.vaadin.terminal.gwt.client.communication.SharedState;
public abstract class VAbstractPaintableWidget implements VPaintableWidget {
public final void setState(SharedState state) {
this.state = (ComponentState) state;
}
+
+ /**
+ * Initialize the given RPC proxy object so it is connected to this
+ * paintable.
+ *
+ * @param clientToServerRpc
+ * The RPC instance to initialize. Must have been created using
+ * GWT.create().
+ */
+ protected <T extends ClientToServerRpc> T initRPC(T clientToServerRpc) {
+ ((InitializableClientToServerRpc) clientToServerRpc).initRpc(getId(),
+ getConnection());
+ return clientToServerRpc;
+ }
}
package com.vaadin.terminal.gwt.client.ui;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VTooltip;
-import com.vaadin.terminal.gwt.client.communication.ClientToServerRpc;
-import com.vaadin.terminal.gwt.client.communication.ClientToServerRpc.InitializableClientToServerRpc;
+import com.vaadin.terminal.gwt.client.ui.VButtonPaintable.ButtonClientToServerRpc;
public class VButton extends FocusWidget implements ClickHandler, FocusHandler,
BlurHandler {
public static final String CLASSNAME = "v-button";
private static final String CLASSNAME_PRESSED = "v-pressed";
- /**
- * RPC interface for calls from client to server.
- *
- * @since 7.0
- */
- public interface ButtonClientToServerRpc extends ClientToServerRpc {
- /**
- * Button click event.
- *
- * @param mouseEventDetails
- * serialized mouse event details
- */
- public void click(String mouseEventDetails);
-
- /**
- * Indicate to the server that the client has disabled the button as a
- * result of a click.
- */
- public void disableOnClick();
- }
-
// mouse movement is checked before synthesizing click event on mouseout
protected static int MOVE_THRESHOLD = 3;
protected int mousedownX = 0;
protected HandlerRegistration blurHandlerRegistration;
protected int clickShortcut = 0;
- private ButtonClientToServerRpc buttonRpcProxy;
+ //TODO Move this to VButtonPaintable
+ ButtonClientToServerRpc buttonRpcProxy;
public VButton() {
super(DOM.createDiv());
}
if (disableOnClick) {
setEnabled(false);
- getButtonRpcProxy().disableOnClick();
+ buttonRpcProxy.disableOnClick();
}
// Add mouse details
MouseEventDetails details = new MouseEventDetails(
event.getNativeEvent(), getElement());
- getButtonRpcProxy().click(details.serialize());
+ buttonRpcProxy.click(details.serialize());
clickPending = false;
}
- protected ButtonClientToServerRpc getButtonRpcProxy() {
- if (null == buttonRpcProxy) {
- buttonRpcProxy = GWT.create(ButtonClientToServerRpc.class);
- ((InitializableClientToServerRpc) buttonRpcProxy).initRpc(
- paintableId, client);
- }
- return buttonRpcProxy;
- }
-
/*
* ALL BELOW COPY-PASTED FROM GWT CustomButton
*/
import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.EventHelper;
import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.communication.ClientToServerRpc;
public class VButtonPaintable extends VAbstractPaintableWidget {
+ /**
+ * RPC interface for calls from client to server.
+ *
+ * @since 7.0
+ */
+ public interface ButtonClientToServerRpc extends ClientToServerRpc {
+ /**
+ * Button click event.
+ *
+ * @param mouseEventDetails
+ * serialized mouse event details
+ */
+ public void click(String mouseEventDetails);
+
+ /**
+ * Indicate to the server that the client has disabled the button as a
+ * result of a click.
+ */
+ public void disableOnClick();
+ }
+
@Override
protected boolean delegateCaptionHandling() {
return false;
}
+ @Override
+ public void init() {
+ super.init();
+ ButtonClientToServerRpc rpcProxy = GWT
+ .create(ButtonClientToServerRpc.class);
+ getWidgetForPaintable().buttonRpcProxy = initRPC(rpcProxy);
+ }
+
@Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
package com.vaadin.terminal.gwt.client.ui;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VTooltip;
-import com.vaadin.terminal.gwt.client.communication.ClientToServerRpc.InitializableClientToServerRpc;
-import com.vaadin.terminal.gwt.client.ui.VButton.ButtonClientToServerRpc;
+import com.vaadin.terminal.gwt.client.ui.VButtonPaintable.ButtonClientToServerRpc;
public class VNativeButton extends Button implements ClickHandler,
FocusHandler, BlurHandler {
protected ApplicationConnection client;
- private ButtonClientToServerRpc buttonRpcProxy;
+ ButtonClientToServerRpc buttonRpcProxy;
protected Element errorIndicatorElement;
}
if (disableOnClick) {
setEnabled(false);
- getButtonRpcProxy().disableOnClick();
+ buttonRpcProxy.disableOnClick();
}
// Add mouse details
MouseEventDetails details = new MouseEventDetails(
event.getNativeEvent(), getElement());
- getButtonRpcProxy().click(details.serialize());
+ buttonRpcProxy.click(details.serialize());
clickPending = false;
}
- protected ButtonClientToServerRpc getButtonRpcProxy() {
- if (null == buttonRpcProxy) {
- buttonRpcProxy = GWT.create(ButtonClientToServerRpc.class);
- ((InitializableClientToServerRpc) buttonRpcProxy).initRpc(
- paintableId, client);
- }
- return buttonRpcProxy;
- }
-
public void onFocus(FocusEvent arg0) {
client.updateVariable(paintableId, EventId.FOCUS, "", true);
}
import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.EventHelper;
import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.ui.VButtonPaintable.ButtonClientToServerRpc;
public class VNativeButtonPaintable extends VAbstractPaintableWidget {
+ @Override
+ public void init() {
+ super.init();
+
+ ButtonClientToServerRpc rpcProxy = GWT
+ .create(ButtonClientToServerRpc.class);
+ getWidgetForPaintable().buttonRpcProxy = initRPC(rpcProxy);
+ }
+
@Override
protected boolean delegateCaptionHandling() {
return false;
import com.vaadin.event.ShortcutListener;
import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.VButton.ButtonClientToServerRpc;
-import com.vaadin.terminal.gwt.client.ui.VButtonPaintable;
import com.vaadin.terminal.gwt.client.ui.ButtonState;
+import com.vaadin.terminal.gwt.client.ui.VButtonPaintable;
+import com.vaadin.terminal.gwt.client.ui.VButtonPaintable.ButtonClientToServerRpc;
import com.vaadin.terminal.gwt.server.RpcTarget;
import com.vaadin.tools.ReflectTools;
import com.vaadin.ui.ClientWidget.LoadStyle;