Java tutorial
package com.vaadin.addon.spreadsheet.client; /* * #%L * Vaadin Spreadsheet * %% * Copyright (C) 2013 - 2015 Vaadin Ltd * %% * This program is available under Commercial Vaadin Add-On License 3.0 * (CVALv3). * * See the file license.html distributed with this software for more * information about licensing. * * You should have received a copy of the CVALv3 along with this program. * If not, see <http://vaadin.com/license/cval-3>. * #L% */ import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.CloseEvent; import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.Widget; import com.vaadin.addon.spreadsheet.PopupButton; import com.vaadin.client.ComponentConnector; import com.vaadin.client.ConnectorHierarchyChangeEvent; import com.vaadin.client.communication.StateChangeEvent; import com.vaadin.client.ui.AbstractHasComponentsConnector; import com.vaadin.shared.ui.Connect; import com.vaadin.shared.ui.Connect.LoadStyle; @SuppressWarnings("serial") @Connect(value = PopupButton.class, loadStyle = LoadStyle.DEFERRED) public class PopupButtonConnector extends AbstractHasComponentsConnector implements ClickHandler, CloseHandler<PopupPanel> { public PopupButtonClientRpc rpc = new PopupButtonClientRpc() { @Override public void openPopup() { getWidget().openPopup(); } @Override public void closePopup() { getWidget().closePopup(); } }; @Override public void init() { super.init(); registerRpc(PopupButtonClientRpc.class, rpc); getWidget().addClickHandler(this); getWidget().addCloseHandler(this); } @Override protected Widget createWidget() { return GWT.create(PopupButtonWidget.class); } @Override public PopupButtonWidget getWidget() { return (PopupButtonWidget) super.getWidget(); } @Override public PopupButtonState getState() { return (PopupButtonState) super.getState(); } @Override public void onStateChanged(StateChangeEvent stateChangeEvent) { final PopupButtonWidget widget = getWidget(); final PopupButtonState state = getState(); if (stateChangeEvent.hasPropertyChanged("col") || stateChangeEvent.hasPropertyChanged("row")) { Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { widget.setRowCol(state.row, state.col); } }); } if (stateChangeEvent.hasPropertyChanged("active")) { widget.markActive(state.active); } if (stateChangeEvent.hasPropertyChanged("popupHeight")) { widget.setPopupHeight(state.popupHeight); } if (stateChangeEvent.hasPropertyChanged("popupWidth")) { widget.setPopupWidth(state.popupWidth); } if (stateChangeEvent.hasPropertyChanged("headerHidden")) { widget.setPopupHeaderHidden(state.headerHidden); } } @Override public void updateCaption(ComponentConnector connector) { } @Override public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent connectorHierarchyChangeEvent) { List<ComponentConnector> oldChildren = connectorHierarchyChangeEvent.getOldChildren(); List<ComponentConnector> newChildren = getChildComponents(); PopupButtonWidget widget = getWidget(); for (ComponentConnector old : oldChildren) { if (!newChildren.contains(old)) { widget.removePopupComponent(old.getWidget()); } } for (ComponentConnector cc : newChildren) { if (!oldChildren.contains(cc)) { widget.addPopupComponent(cc.getWidget()); } } } @Override public void onClose(CloseEvent<PopupPanel> event) { if (getWidget().isAttached()) { getRpcProxy(PopupButtonServerRpc.class).onPopupClose(); } } @Override public void onClick(ClickEvent event) { getRpcProxy(PopupButtonServerRpc.class).onPopupButtonClick(); } }