package org.vaadin.smartgwt.client.ui;
import org.vaadin.smartgwt.client.core.PaintableListListener;
import org.vaadin.smartgwt.client.core.PaintablePropertyUpdater;
import org.vaadin.smartgwt.client.core.ServerSideEventRegistration;
import org.vaadin.smartgwt.client.ui.utils.PainterHelper;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.CloseClickEvent;
import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
public class VWindow extends Window implements Paintable {
private final PaintablePropertyUpdater propertyUpdater = new PaintablePropertyUpdater();
private final Element element = DOM.createDiv();
private String pid;
private ApplicationConnection client;
private ServerSideEventRegistration closeClickEventServerRegistration;
public VWindow() {
propertyUpdater.addPaintableListListener("members", new PaintableListListener() {
@Override
public void onAdd(Paintable[] source, Integer index, Paintable element) {
if (index == null) {
addMember((Canvas) element);
} else {
addMember((Canvas) element, index);
}
}
@Override
public void onRemove(Paintable[] source, Integer index, Paintable element) {
removeMember((Canvas) element);
}
});
propertyUpdater.addPaintableListListener("items", new PaintableListListener() {
@Override
public void onAdd(Paintable[] source, Integer index, Paintable element) {
addItem((Canvas) element);
}
@Override
public void onRemove(Paintable[] source, Integer index, Paintable element) {
removeItem((Canvas) element);
}
});
}
@Override
public Element getElement() {
return element;
}
@Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (this.pid == null) {
this.pid = uidl.getId();
this.client = client;
addCloseClickHandler(new CloseClickHandler() {
@Override
public void onCloseClick(CloseClickEvent event) {
markForDestroy();
VWindow.this.client.updateVariable(pid, "destroyed", true, true);
}
});
closeClickEventServerRegistration = new ServerSideEventRegistration("*hasCloseClickHandlers") {
@Override
protected HandlerRegistration registerHandler() {
return addCloseClickHandler(new CloseClickHandler() {
@Override
public void onCloseClick(CloseClickEvent event) {
VWindow.this.client.updateVariable(pid, "onCloseClick", true, true);
}
});
}
};
}
closeClickEventServerRegistration.updateFromUIDL(uidl);
propertyUpdater.updateFromUIDL(uidl, client);
PainterHelper.updateSmartGWTComponent(client, this, uidl);
}
}