From: Artur Signell Date: Tue, 28 Feb 2012 10:23:33 +0000 (+0200) Subject: Renamed Paintable component classes to Connector X-Git-Tag: 7.0.0.alpha2~425 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f603acfa301d61fd5b11bceb0a59f03d54bd372b;p=vaadin-framework.git Renamed Paintable component classes to Connector --- diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java index d98e33aca4..f7afd745d1 100644 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java @@ -17,7 +17,7 @@ import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Timer; -import com.vaadin.terminal.gwt.client.ui.VUnknownComponentPaintable; +import com.vaadin.terminal.gwt.client.ui.UnknownComponentConnector; public class ApplicationConfiguration implements EntryPoint { @@ -388,7 +388,7 @@ public class ApplicationConfiguration implements EntryPoint { return classes[parseInt]; } catch (Exception e) { // component was not present in mappings - return VUnknownComponentPaintable.class; + return UnknownComponentConnector.class; } } @@ -398,7 +398,7 @@ public class ApplicationConfiguration implements EntryPoint { String key = keyArray.get(i).intern(); int value = valueMap.getInt(key); classes[value] = widgetSet.getImplementationByClassName(key); - if (classes[value] == VUnknownComponentPaintable.class) { + if (classes[value] == UnknownComponentConnector.class) { if (unknownComponents == null) { unknownComponents = new HashMap(); } diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java index ccfab49ef8..4eadb59287 100644 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java @@ -36,16 +36,14 @@ import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; import com.vaadin.terminal.gwt.client.ApplicationConfiguration.ErrorMessage; -import com.vaadin.terminal.gwt.client.RenderInformation.FloatSize; -import com.vaadin.terminal.gwt.client.RenderInformation.Size; import com.vaadin.terminal.gwt.client.communication.JsonDecoder; import com.vaadin.terminal.gwt.client.communication.JsonEncoder; import com.vaadin.terminal.gwt.client.communication.MethodInvocation; import com.vaadin.terminal.gwt.client.communication.SharedState; +import com.vaadin.terminal.gwt.client.ui.RootConnector; import com.vaadin.terminal.gwt.client.ui.VContextMenu; import com.vaadin.terminal.gwt.client.ui.VNotification; import com.vaadin.terminal.gwt.client.ui.VNotification.HideEvent; -import com.vaadin.terminal.gwt.client.ui.VViewPaintable; import com.vaadin.terminal.gwt.client.ui.dd.VDragAndDropManager; import com.vaadin.terminal.gwt.server.AbstractCommunicationManager; @@ -56,8 +54,8 @@ import com.vaadin.terminal.gwt.server.AbstractCommunicationManager; * * Client-side widgets receive updates from the corresponding server-side * components as calls to - * {@link ComponentConnector#updateFromUIDL(UIDL, ApplicationConnection)} (not to - * be confused with the server side interface + * {@link ComponentConnector#updateFromUIDL(UIDL, ApplicationConnection)} (not + * to be confused with the server side interface * {@link com.vaadin.terminal.Paintable} ). Any client-side changes (typically * resulting from user actions) are sent back to the server as variable changes * (see {@link #updateVariable()}). @@ -137,7 +135,7 @@ public class ApplicationConnection { private Timer loadTimer3; private Element loadElement; - private final VViewPaintable view; + private final RootConnector view; protected boolean applicationRunning = false; @@ -170,7 +168,7 @@ public class ApplicationConnection { private final LayoutManager layoutManager = new LayoutManager(this); public ApplicationConnection() { - view = GWT.create(VViewPaintable.class); + view = GWT.create(RootConnector.class); view.setConnection(this); } @@ -826,8 +824,7 @@ public class ApplicationConnection { if (loadElement == null) { loadElement = DOM.createDiv(); DOM.setStyleAttribute(loadElement, "position", "absolute"); - DOM.appendChild(view.getWidget().getElement(), - loadElement); + DOM.appendChild(view.getWidget().getElement(), loadElement); VConsole.log("inserting load indicator"); } DOM.setElementProperty(loadElement, "className", "v-loading-indicator"); @@ -923,6 +920,7 @@ public class ApplicationConnection { protected void handleUIDLMessage(final Date start, final String jsonText, final ValueMap json) { + VConsole.log("Handling message from server"); // Handle redirect if (json.containsKey("redirect")) { String url = json.getValueMap("redirect").getString("url"); @@ -956,6 +954,7 @@ public class ApplicationConnection { VConsole.dirUIDL(json, configuration); if (json.containsKey("locales")) { + VConsole.log(" * Handling locales"); // Store locale data JsArray valueMapArray = json .getJSValueMapArray("locales"); @@ -965,6 +964,7 @@ public class ApplicationConnection { boolean repaintAll = false; ValueMap meta = null; if (json.containsKey("meta")) { + VConsole.log(" * Handling meta information"); meta = json.getValueMap("meta"); if (meta.containsKey("repaintAll")) { repaintAll = true; @@ -1009,6 +1009,7 @@ public class ApplicationConnection { int length = changes.length(); + VConsole.log(" * Creating connectors (if needed)"); // create paintables if necessary for (int i = 0; i < length; i++) { try { @@ -1027,6 +1028,7 @@ public class ApplicationConnection { } } + VConsole.log(" * Updating connector states"); // set states for all paintables mentioned in "state" ValueMap states = json.getValueMap("state"); JsArrayString keyArray = states.getKeyArray(); @@ -1050,6 +1052,7 @@ public class ApplicationConnection { } } + VConsole.log(" * Passing UIDL to Vaadin 6 style connectors"); // update paintables for (int i = 0; i < length; i++) { try { @@ -1869,11 +1872,11 @@ public class ApplicationConnection { } /** - * Gets the main view, a.k.a top-level window. + * Gets the main view * * @return the main view */ - public VViewPaintable getView() { + public RootConnector getView() { return view; } diff --git a/src/com/vaadin/terminal/gwt/client/LayoutManager.java b/src/com/vaadin/terminal/gwt/client/LayoutManager.java index 23c653cd0d..b362d140f2 100644 --- a/src/com/vaadin/terminal/gwt/client/LayoutManager.java +++ b/src/com/vaadin/terminal/gwt/client/LayoutManager.java @@ -78,7 +78,8 @@ public class LayoutManager { return element.vMeasuredSize || defaultSize; }-*/; - private static final MeasuredSize getMeasuredSize(ComponentConnector paintable) { + private static final MeasuredSize getMeasuredSize( + ComponentConnector paintable) { Element element = paintable.getWidget().getElement(); MeasuredSize measuredSize = getMeasuredSize(element, null); if (measuredSize == null) { @@ -101,6 +102,8 @@ public class LayoutManager { } public void doLayout() { + VConsole.log("Starting layout phase"); + ConnectorMap paintableMap = connection.getConnectorMap(); ComponentConnector[] paintableWidgets = paintableMap .getRegisteredComponentConnectors(); @@ -213,21 +216,23 @@ public class LayoutManager { } } + VConsole.log("Layout phase done"); + VConsole.log("Calling post layout listeners"); + for (ComponentConnector vPaintableWidget : paintableWidgets) { if (vPaintableWidget instanceof PostLayoutListener) { ((PostLayoutListener) vPaintableWidget).postLayout(); } } - VConsole.log("Total layout time: " + totalDuration.elapsedMillis() - + "ms"); + VConsole.log("Total layout phase time: " + + totalDuration.elapsedMillis() + "ms"); } private void measureElements(ComponentConnector[] paintableWidgets) { for (ComponentConnector paintableWidget : paintableWidgets) { - Element element = paintableWidget.getWidget() - .getElement(); + Element element = paintableWidget.getWidget().getElement(); MeasuredSize measuredSize = getMeasuredSize(paintableWidget); measuredAndUpdate(element, measuredSize); } diff --git a/src/com/vaadin/terminal/gwt/client/MeasuredSize.java b/src/com/vaadin/terminal/gwt/client/MeasuredSize.java index 9a70ff06d3..499503e7da 100644 --- a/src/com/vaadin/terminal/gwt/client/MeasuredSize.java +++ b/src/com/vaadin/terminal/gwt/client/MeasuredSize.java @@ -152,7 +152,6 @@ public class MeasuredSize { boolean wasWidthChanged = widthChanged; ComputedStyle computedStyle = new ComputedStyle(element); - int[] paddings = computedStyle.getPadding(); if (!heightChanged && hasHeightChanged(this.paddings, paddings)) { heightChanged = true; @@ -185,6 +184,7 @@ public class MeasuredSize { setOuterHeight(requiredHeight + marginHeight); int requiredWidth = Util.getRequiredWidth(element); + VConsole.log("Width of " + element.toString() + " is " + requiredWidth); int marginWidth = sumWidths(margins); setOuterWidth(requiredWidth + marginWidth); diff --git a/src/com/vaadin/terminal/gwt/client/VCaption.java b/src/com/vaadin/terminal/gwt/client/VCaption.java index 1d293ef5bf..2f2621c153 100644 --- a/src/com/vaadin/terminal/gwt/client/VCaption.java +++ b/src/com/vaadin/terminal/gwt/client/VCaption.java @@ -10,7 +10,7 @@ import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.HTML; import com.vaadin.terminal.gwt.client.ui.Icon; import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; -import com.vaadin.terminal.gwt.client.ui.VTabsheetBasePaintable; +import com.vaadin.terminal.gwt.client.ui.TabsheetBaseConnector; public class VCaption extends HTML { @@ -404,7 +404,7 @@ public class VCaption extends HTML { } else { // TODO fallback for cases where the caption has no owner (Tabsheet, // Accordion) - if (uidl.getStringAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_CAPTION) != null) { + if (uidl.getStringAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_CAPTION) != null) { return true; } } diff --git a/src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java b/src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java index 7e2df6e74d..3642d0ff2e 100644 --- a/src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java +++ b/src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java @@ -24,7 +24,7 @@ import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ui.VUnknownComponentPaintable; +import com.vaadin.terminal.gwt.client.ui.UnknownComponentConnector; import com.vaadin.terminal.gwt.client.ui.VWindow; public class VUIDLBrowser extends SimpleTree { @@ -101,7 +101,7 @@ public class VUIDLBrowser extends SimpleTree { String name) { Class widgetClassByDecodedTag = conf .getWidgetClassByEncodedTag(name); - if (widgetClassByDecodedTag == VUnknownComponentPaintable.class) { + if (widgetClassByDecodedTag == UnknownComponentConnector.class) { return conf.getUnknownServerClassNameByEncodedTagName(name) + "(NO CLIENT IMPLEMENTATION FOUND)"; } else { diff --git a/src/com/vaadin/terminal/gwt/client/WidgetSet.java b/src/com/vaadin/terminal/gwt/client/WidgetSet.java index 189487cf5a..656c92e285 100644 --- a/src/com/vaadin/terminal/gwt/client/WidgetSet.java +++ b/src/com/vaadin/terminal/gwt/client/WidgetSet.java @@ -6,7 +6,7 @@ package com.vaadin.terminal.gwt.client; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ui.VUnknownComponentPaintable; +import com.vaadin.terminal.gwt.client.ui.UnknownComponentConnector; public class WidgetSet { @@ -43,11 +43,11 @@ public class WidgetSet { Class classType = resolveWidgetType(tag, conf); - if (classType == null || classType == VUnknownComponentPaintable.class) { + if (classType == null || classType == UnknownComponentConnector.class) { String serverSideName = conf .getUnknownServerClassNameByEncodedTagName(tag); - VUnknownComponentPaintable c = GWT - .create(VUnknownComponentPaintable.class); + UnknownComponentConnector c = GWT + .create(UnknownComponentConnector.class); c.setServerSideClassName(serverSideName); return c; } else { @@ -80,7 +80,7 @@ public class WidgetSet { public Class getImplementationByClassName( String fullyqualifiedName) { if (fullyqualifiedName == null) { - return VUnknownComponentPaintable.class; + return UnknownComponentConnector.class; } Class implementationByServerSideClassName = widgetMap .getImplementationByServerSideClassName(fullyqualifiedName); diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java new file mode 100644 index 0000000000..04ecb4484a --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java @@ -0,0 +1,153 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.HashSet; +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.DirectionalManagedLayout; +import com.vaadin.terminal.gwt.client.EventId; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ui.VAbsoluteLayout.AbsoluteWrapper; + +public class AbsoluteLayoutConnector extends AbstractComponentContainerConnector + implements DirectionalManagedLayout { + + private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( + this, EventId.LAYOUT_CLICK) { + + @Override + protected ComponentConnector getChildComponent(Element element) { + return getWidget().getComponent(element); + } + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return getWidget().addDomHandler(handler, type); + } + }; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().client = client; + // TODO margin handling + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + clickEventHandler.handleEventHandlerRegistration(client); + + HashSet unrenderedPids = new HashSet( + getWidget().pidToComponentWrappper.keySet()); + + for (Iterator childIterator = uidl.getChildIterator(); childIterator + .hasNext();) { + UIDL cc = (UIDL) childIterator.next(); + if (cc.getTag().equals("cc")) { + UIDL componentUIDL = cc.getChildUIDL(0); + unrenderedPids.remove(componentUIDL.getId()); + getWidget().getWrapper(client, componentUIDL) + .updateFromUIDL(cc); + } + } + + for (String pid : unrenderedPids) { + AbsoluteWrapper absoluteWrapper = getWidget().pidToComponentWrappper + .get(pid); + getWidget().pidToComponentWrappper.remove(pid); + absoluteWrapper.destroy(); + } + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + AbsoluteWrapper parent2 = (AbsoluteWrapper) (component + .getWidget()).getParent(); + parent2.updateCaption(uidl); + } + + @Override + protected Widget createWidget() { + return GWT.create(VAbsoluteLayout.class); + } + + @Override + public VAbsoluteLayout getWidget() { + return (VAbsoluteLayout) super.getWidget(); + } + + public void layoutVertically() { + VAbsoluteLayout layout = getWidget(); + for (ComponentConnector paintable : getChildren()) { + Widget widget = paintable.getWidget(); + AbsoluteWrapper wrapper = (AbsoluteWrapper) widget.getParent(); + Style wrapperStyle = wrapper.getElement().getStyle(); + + if (paintable.isRelativeHeight()) { + int h; + if (wrapper.top != null && wrapper.bottom != null) { + h = wrapper.getOffsetHeight(); + } else if (wrapper.bottom != null) { + // top not defined, available space 0... bottom of + // wrapper + h = wrapper.getElement().getOffsetTop() + + wrapper.getOffsetHeight(); + } else { + // top defined or both undefined, available space == + // canvas - top + h = layout.canvas.getOffsetHeight() + - wrapper.getElement().getOffsetTop(); + } + wrapperStyle.setHeight(h, Unit.PX); + } else { + wrapperStyle.clearHeight(); + } + + wrapper.updateCaptionPosition(); + } + } + + public void layoutHorizontally() { + VAbsoluteLayout layout = getWidget(); + for (ComponentConnector paintable : getChildren()) { + Widget widget = paintable.getWidget(); + AbsoluteWrapper wrapper = (AbsoluteWrapper) widget.getParent(); + Style wrapperStyle = wrapper.getElement().getStyle(); + + if (paintable.isRelativeWidth()) { + int w; + if (wrapper.left != null && wrapper.right != null) { + w = wrapper.getOffsetWidth(); + } else if (wrapper.right != null) { + // left == null + // available width == right edge == offsetleft + width + w = wrapper.getOffsetWidth() + + wrapper.getElement().getOffsetLeft(); + } else { + // left != null && right == null || left == null && + // right == null + // available width == canvas width - offset left + w = layout.canvas.getOffsetWidth() + - wrapper.getElement().getOffsetLeft(); + } + wrapperStyle.setWidth(w, Unit.PX); + } else { + wrapperStyle.clearWidth(); + } + + wrapper.updateCaptionPosition(); + } + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractDateFieldConnector.java new file mode 100644 index 0000000000..1a3ce139a1 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractDateFieldConnector.java @@ -0,0 +1,110 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.Date; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.LocaleNotLoadedException; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.VConsole; + +public class AbstractDateFieldConnector extends AbstractComponentConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // Ensure correct implementation and let layout manage caption + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + // Save details + getWidget().client = client; + getWidget().paintableId = uidl.getId(); + getWidget().immediate = getState().isImmediate(); + + getWidget().readonly = getState().isReadOnly(); + getWidget().enabled = !getState().isDisabled(); + + if (uidl.hasAttribute("locale")) { + final String locale = uidl.getStringAttribute("locale"); + try { + getWidget().dts.setLocale(locale); + getWidget().currentLocale = locale; + } catch (final LocaleNotLoadedException e) { + getWidget().currentLocale = getWidget().dts + .getLocale(); + VConsole.error("Tried to use an unloaded locale \"" + locale + + "\". Using default locale (" + + getWidget().currentLocale + ")."); + VConsole.error(e); + } + } + + // We show week numbers only if the week starts with Monday, as ISO 8601 + // specifies + getWidget().showISOWeekNumbers = uidl + .getBooleanAttribute(VDateField.WEEK_NUMBERS) + && getWidget().dts.getFirstDayOfWeek() == 1; + + int newResolution; + if (uidl.hasVariable("sec")) { + newResolution = VDateField.RESOLUTION_SEC; + } else if (uidl.hasVariable("min")) { + newResolution = VDateField.RESOLUTION_MIN; + } else if (uidl.hasVariable("hour")) { + newResolution = VDateField.RESOLUTION_HOUR; + } else if (uidl.hasVariable("day")) { + newResolution = VDateField.RESOLUTION_DAY; + } else if (uidl.hasVariable("month")) { + newResolution = VDateField.RESOLUTION_MONTH; + } else { + newResolution = VDateField.RESOLUTION_YEAR; + } + + getWidget().currentResolution = newResolution; + + // Add stylename that indicates current resolution + getWidget() + .addStyleName( + VDateField.CLASSNAME + + "-" + + VDateField + .resolutionToString(getWidget().currentResolution)); + + final int year = uidl.getIntVariable("year"); + final int month = (getWidget().currentResolution >= VDateField.RESOLUTION_MONTH) ? uidl + .getIntVariable("month") : -1; + final int day = (getWidget().currentResolution >= VDateField.RESOLUTION_DAY) ? uidl + .getIntVariable("day") : -1; + final int hour = (getWidget().currentResolution >= VDateField.RESOLUTION_HOUR) ? uidl + .getIntVariable("hour") : 0; + final int min = (getWidget().currentResolution >= VDateField.RESOLUTION_MIN) ? uidl + .getIntVariable("min") : 0; + final int sec = (getWidget().currentResolution >= VDateField.RESOLUTION_SEC) ? uidl + .getIntVariable("sec") : 0; + + // Construct new date for this datefield (only if not null) + if (year > -1) { + getWidget().setCurrentDate( + new Date((long) getWidget().getTime(year, + month, day, hour, min, sec, 0))); + } else { + getWidget().setCurrentDate(null); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VDateField.class); + } + + @Override + public VDateField getWidget() { + return (VDateField) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java new file mode 100644 index 0000000000..d3cbddd57e --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java @@ -0,0 +1,283 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.HashSet; +import java.util.Iterator; + +import com.google.gwt.dom.client.Node; +import com.google.gwt.dom.client.Style; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ConnectorMap; +import com.vaadin.terminal.gwt.client.DirectionalManagedLayout; +import com.vaadin.terminal.gwt.client.LayoutManager; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.VCaption; +import com.vaadin.terminal.gwt.client.ValueMap; +import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot; +import com.vaadin.terminal.gwt.client.ui.layout.ComponentConnectorLayoutSlot; + +public abstract class AbstractOrderedLayoutConnector extends + AbstractComponentContainerConnector implements DirectionalManagedLayout { + + @Override + public void init() { + getLayoutManager().registerDependency(this, + getWidget().spacingMeasureElement); + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + VMeasuringOrderedLayout layout = getWidget(); + if (VCaption.isNeeded(uidl, component.getState())) { + VLayoutSlot layoutSlot = layout.getSlotForChild(component + .getWidget()); + VCaption caption = layoutSlot.getCaption(); + if (caption == null) { + caption = new VCaption(component, getConnection()); + + Widget widget = component.getWidget(); + + layout.setCaption(widget, caption); + } + caption.updateCaption(uidl); + } else { + layout.setCaption(component.getWidget(), null); + } + } + + @Override + public VMeasuringOrderedLayout getWidget() { + return (VMeasuringOrderedLayout) super.getWidget(); + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + HashSet previousChildren = new HashSet( + getChildren()); + + VMeasuringOrderedLayout layout = getWidget(); + + ValueMap expandRatios = uidl.getMapAttribute("expandRatios"); + ValueMap alignments = uidl.getMapAttribute("alignments"); + + int currentIndex = 0; + // TODO Support reordering elements! + for (final Iterator it = uidl.getChildIterator(); it.hasNext();) { + final UIDL childUIDL = (UIDL) it.next(); + final ComponentConnector child = client.getPaintable(childUIDL); + Widget widget = child.getWidget(); + + VLayoutSlot slot = layout.getSlotForChild(widget); + + if (widget.getParent() != layout) { + slot = new ComponentConnectorLayoutSlot(getWidget() + .getStylePrimaryName(), child); + } + layout.addOrMove(slot, currentIndex++); + + String pid = child.getId(); + + AlignmentInfo alignment; + if (alignments.containsKey(pid)) { + alignment = new AlignmentInfo(alignments.getInt(pid)); + } else { + alignment = AlignmentInfo.TOP_LEFT; + } + slot.setAlignment(alignment); + + double expandRatio; + if (expandRatios.containsKey(pid)) { + expandRatio = expandRatios.getRawNumber(pid); + } else { + expandRatio = 0; + } + slot.setExpandRatio(expandRatio); + + if (!childUIDL.getBooleanAttribute("cached")) { + child.updateFromUIDL(childUIDL, client); + } + + previousChildren.remove(child); + } + + for (ComponentConnector child : previousChildren) { + Widget widget = child.getWidget(); + + // Don't remove and unregister if it has been moved to a different + // parent. Slot element will be left behind, but that is taken care + // of later + if (widget.getParent() == getWidget()) { + layout.removeSlot(layout.getSlotForChild(widget)); + + ConnectorMap vPaintableMap = ConnectorMap.get(client); + vPaintableMap.unregisterConnector(child); + } + } + + // Remove empty layout slots left behind after children have moved to + // other paintables + while (true) { + int childCount = layout.getElement().getChildCount(); + if (childCount <= 1) { + // Stop if no more slots (spacing element is always present) + break; + } + + Node lastSlot = layout.getElement().getChild(childCount - 2); + if (lastSlot.getChildCount() == 0) { + // Remove if empty + lastSlot.removeFromParent(); + } else { + // Stop searching when last slot is not empty + break; + } + } + + int bitMask = uidl.getIntAttribute("margins"); + layout.updateMarginStyleNames(new VMarginInfo(bitMask)); + + layout.updateSpacingStyleName(uidl.getBooleanAttribute("spacing")); + + getLayoutManager().setNeedsUpdate(this); + } + + private int getSizeForInnerSize(int size, boolean isVertical) { + LayoutManager layoutManager = getLayoutManager(); + Element element = getWidget().getElement(); + if (isVertical) { + return size + layoutManager.getBorderHeight(element) + + layoutManager.getPaddingHeight(element); + } else { + return size + layoutManager.getBorderWidth(element) + + layoutManager.getPaddingWidth(element); + } + } + + private static String getSizeProperty(boolean isVertical) { + return isVertical ? "height" : "width"; + } + + private boolean isUndefinedInDirection(boolean isVertical) { + if (isVertical) { + return isUndefinedHeight(); + } else { + return isUndefinedWidth(); + } + } + + private int getInnerSizeInDirection(boolean isVertical) { + if (isVertical) { + return getLayoutManager().getInnerHeight(getWidget().getElement()); + } else { + return getLayoutManager().getInnerWidth(getWidget().getElement()); + } + } + + private void layoutPrimaryDirection() { + VMeasuringOrderedLayout layout = getWidget(); + boolean isVertical = layout.isVertical; + boolean isUndefined = isUndefinedInDirection(isVertical); + + int startPadding = getStartPadding(isVertical); + int spacingSize = getSpacingInDirection(isVertical); + int allocatedSize; + + if (isUndefined) { + allocatedSize = -1; + } else { + allocatedSize = getInnerSizeInDirection(isVertical); + } + + allocatedSize = layout.layoutPrimaryDirection(spacingSize, + allocatedSize, startPadding); + + Style ownStyle = getWidget().getElement().getStyle(); + if (isUndefined) { + ownStyle.setPropertyPx(getSizeProperty(isVertical), + getSizeForInnerSize(allocatedSize, isVertical)); + } else { + ownStyle.setProperty(getSizeProperty(isVertical), + getDefinedSize(isVertical)); + } + } + + private int getSpacingInDirection(boolean isVertical) { + if (isVertical) { + return getLayoutManager().getOuterHeight( + getWidget().spacingMeasureElement); + } else { + return getLayoutManager().getOuterWidth( + getWidget().spacingMeasureElement); + } + } + + private void layoutSecondaryDirection() { + VMeasuringOrderedLayout layout = getWidget(); + boolean isVertical = layout.isVertical; + boolean isUndefined = isUndefinedInDirection(!isVertical); + + int startPadding = getStartPadding(!isVertical); + + int allocatedSize; + if (isUndefined) { + allocatedSize = -1; + } else { + allocatedSize = getInnerSizeInDirection(!isVertical); + } + + allocatedSize = layout.layoutSecondaryDirection(allocatedSize, + startPadding); + + Style ownStyle = getWidget().getElement().getStyle(); + + if (isUndefined) { + ownStyle.setPropertyPx(getSizeProperty(!getWidget().isVertical), + getSizeForInnerSize(allocatedSize, !getWidget().isVertical)); + } else { + ownStyle.setProperty(getSizeProperty(!getWidget().isVertical), + getDefinedSize(!getWidget().isVertical)); + } + } + + private String getDefinedSize(boolean isVertical) { + if (isVertical) { + return getDeclaredHeight(); + } else { + return getDeclaredWidth(); + } + } + + private int getStartPadding(boolean isVertical) { + if (isVertical) { + return getLayoutManager().getPaddingTop(getWidget().getElement()); + } else { + return getLayoutManager().getPaddingLeft(getWidget().getElement()); + } + } + + public void layoutHorizontally() { + if (getWidget().isVertical) { + layoutSecondaryDirection(); + } else { + layoutPrimaryDirection(); + } + } + + public void layoutVertically() { + if (getWidget().isVertical) { + layoutPrimaryDirection(); + } else { + layoutSecondaryDirection(); + } + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java new file mode 100644 index 0000000000..91ee5a148a --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java @@ -0,0 +1,140 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ConnectorMap; +import com.vaadin.terminal.gwt.client.UIDL; + +public abstract class AbstractSplitPanelConnector extends + AbstractComponentContainerConnector implements SimpleManagedLayout { + + public static final String SPLITTER_CLICK_EVENT_IDENTIFIER = "sp_click"; + + public void updateCaption(ComponentConnector component, UIDL uidl) { + // TODO Implement caption handling + } + + ClickEventHandler clickEventHandler = new ClickEventHandler(this, + SPLITTER_CLICK_EVENT_IDENTIFIER) { + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + if ((Event.getEventsSunk(getWidget().splitter) & Event + .getTypeInt(type.getName())) != 0) { + // If we are already sinking the event for the splitter we do + // not want to additionally sink it for the root element + return getWidget().addHandler(handler, type); + } else { + return getWidget().addDomHandler(handler, type); + } + } + + @Override + public void onContextMenu( + com.google.gwt.event.dom.client.ContextMenuEvent event) { + Element target = event.getNativeEvent().getEventTarget().cast(); + if (getWidget().splitter.isOrHasChild(target)) { + super.onContextMenu(event); + } + }; + + @Override + protected void fireClick(NativeEvent event) { + Element target = event.getEventTarget().cast(); + if (getWidget().splitter.isOrHasChild(target)) { + super.fireClick(event); + } + } + + @Override + protected Element getRelativeToElement() { + return null; + } + + }; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().client = client; + getWidget().id = uidl.getId(); + + getWidget().immediate = getState().isImmediate(); + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + getWidget().setEnabled(!getState().isDisabled()); + + clickEventHandler.handleEventHandlerRegistration(client); + if (getState().hasStyles()) { + getWidget().componentStyleNames = getState().getStyle().split(" "); + } else { + getWidget().componentStyleNames = new String[0]; + } + + getWidget().setLocked(uidl.getBooleanAttribute("locked")); + + getWidget().setPositionReversed(uidl.getBooleanAttribute("reversed")); + + getWidget().setStylenames(); + + getWidget().position = uidl.getStringAttribute("position"); + + final ComponentConnector newFirstChildPaintable = client + .getPaintable(uidl.getChildUIDL(0)); + final ComponentConnector newSecondChildPaintable = client + .getPaintable(uidl.getChildUIDL(1)); + Widget newFirstChild = newFirstChildPaintable.getWidget(); + Widget newSecondChild = newSecondChildPaintable.getWidget(); + + if (getWidget().firstChild != newFirstChild) { + if (getWidget().firstChild != null) { + client.unregisterPaintable(ConnectorMap.get(client) + .getConnector(getWidget().firstChild)); + } + getWidget().setFirstWidget(newFirstChild); + } + if (getWidget().secondChild != newSecondChild) { + if (getWidget().secondChild != null) { + client.unregisterPaintable(ConnectorMap.get(client) + .getConnector(getWidget().secondChild)); + } + getWidget().setSecondWidget(newSecondChild); + } + newFirstChildPaintable.updateFromUIDL(uidl.getChildUIDL(0), client); + newSecondChildPaintable.updateFromUIDL(uidl.getChildUIDL(1), client); + + // This is needed at least for cases like #3458 to take + // appearing/disappearing scrollbars into account. + client.runDescendentsLayout(getWidget()); + + getLayoutManager().setNeedsUpdate(this); + } + + public void layout() { + VAbstractSplitPanel splitPanel = getWidget(); + splitPanel.setSplitPosition(splitPanel.position); + splitPanel.updateSizes(); + } + + @Override + public VAbstractSplitPanel getWidget() { + return (VAbstractSplitPanel) super.getWidget(); + } + + @Override + protected abstract VAbstractSplitPanel createWidget(); + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/AccordionConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AccordionConnector.java new file mode 100644 index 0000000000..179d5f7808 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/AccordionConnector.java @@ -0,0 +1,81 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ui.VAccordion.StackItem; + +public class AccordionConnector extends TabsheetBaseConnector implements + SimpleManagedLayout { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().selectedUIDLItemIndex = -1; + super.updateFromUIDL(uidl, client); + /* + * Render content after all tabs have been created and we know how large + * the content area is + */ + if (getWidget().selectedUIDLItemIndex >= 0) { + StackItem selectedItem = getWidget().getStackItem( + getWidget().selectedUIDLItemIndex); + UIDL selectedTabUIDL = getWidget().lazyUpdateMap + .remove(selectedItem); + getWidget().open( + getWidget().selectedUIDLItemIndex); + + selectedItem.setContent(selectedTabUIDL); + } else if (isRealUpdate(uidl) + && getWidget().openTab != null) { + getWidget().close(getWidget().openTab); + } + + getWidget().iLayout(); + // finally render possible hidden tabs + if (getWidget().lazyUpdateMap.size() > 0) { + for (Iterator iterator = getWidget().lazyUpdateMap + .keySet().iterator(); iterator.hasNext();) { + StackItem item = (StackItem) iterator.next(); + item.setContent(getWidget().lazyUpdateMap.get(item)); + } + getWidget().lazyUpdateMap.clear(); + } + + getWidget().renderInformation + .updateSize(getWidget().getElement()); + } + + @Override + public VAccordion getWidget() { + return (VAccordion) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VAccordion.class); + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + /* Accordion does not render its children's captions */ + } + + public void layout() { + VAccordion accordion = getWidget(); + + accordion.updateOpenTabSize(); + + if (isUndefinedHeight()) { + accordion.openTab.setHeightFromWidget(); + } + accordion.iLayout(); + + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/AudioConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AudioConnector.java new file mode 100644 index 0000000000..fe1993a35d --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/AudioConnector.java @@ -0,0 +1,40 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style; +import com.google.gwt.dom.client.Style.Unit; +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.UIDL; + +public class AudioConnector extends MediaBaseConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + Style style = getWidget().getElement().getStyle(); + + // Make sure that the controls are not clipped if visible. + if (shouldShowControls(uidl) + && (style.getHeight() == null || "".equals(style.getHeight()))) { + if (BrowserInfo.get().isChrome()) { + style.setHeight(32, Unit.PX); + } else { + style.setHeight(25, Unit.PX); + } + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VAudio.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java new file mode 100644 index 0000000000..f0df09458a --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java @@ -0,0 +1,136 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +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 ButtonConnector extends AbstractComponentConnector { + + /** + * 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); + getWidget().buttonRpcProxy = initRPC(rpcProxy); + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + + // Ensure correct implementation, + // but don't let container manage caption etc. + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().focusHandlerRegistration = EventHelper + .updateFocusHandler(this, client, + getWidget().focusHandlerRegistration); + getWidget().blurHandlerRegistration = EventHelper + .updateBlurHandler(this, client, + getWidget().blurHandlerRegistration); + + // Save details + getWidget().client = client; + getWidget().paintableId = uidl.getId(); + + // Set text + getWidget().setText(getState().getCaption()); + + getWidget().disableOnClick = getState().isDisableOnClick(); + + // handle error + if (uidl.hasAttribute("error")) { + if (getWidget().errorIndicatorElement == null) { + getWidget().errorIndicatorElement = DOM + .createSpan(); + getWidget().errorIndicatorElement + .setClassName("v-errorindicator"); + } + getWidget().wrapper.insertBefore( + getWidget().errorIndicatorElement, + getWidget().captionElement); + + } else if (getWidget().errorIndicatorElement != null) { + getWidget().wrapper + .removeChild(getWidget().errorIndicatorElement); + getWidget().errorIndicatorElement = null; + } + + if (uidl.hasAttribute(ATTRIBUTE_ICON)) { + if (getWidget().icon == null) { + getWidget().icon = new Icon(client); + getWidget().wrapper.insertBefore( + getWidget().icon.getElement(), + getWidget().captionElement); + } + getWidget().icon.setUri(uidl + .getStringAttribute(ATTRIBUTE_ICON)); + } else { + if (getWidget().icon != null) { + getWidget().wrapper + .removeChild(getWidget().icon.getElement()); + getWidget().icon = null; + } + } + + getWidget().clickShortcut = getState() + .getClickShortcutKeyCode(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VButton.class); + } + + @Override + public VButton getWidget() { + return (VButton) super.getWidget(); + } + + @Override + public ButtonState getState() { + return (ButtonState) super.getState(); + } + + @Override + protected ComponentState createState() { + return GWT.create(ButtonState.class); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/CheckBoxConnector.java b/src/com/vaadin/terminal/gwt/client/ui/CheckBoxConnector.java new file mode 100644 index 0000000000..f33cc35a46 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/CheckBoxConnector.java @@ -0,0 +1,105 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.EventHelper; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.VTooltip; + +public class CheckBoxConnector extends AbstractComponentConnector { + + @Override + protected boolean delegateCaptionHandling() { + return false; + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // Save details + getWidget().client = client; + getWidget().id = uidl.getId(); + + // Ensure correct implementation + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().focusHandlerRegistration = EventHelper + .updateFocusHandler(this, client, + getWidget().focusHandlerRegistration); + getWidget().blurHandlerRegistration = EventHelper + .updateBlurHandler(this, client, + getWidget().blurHandlerRegistration); + + if (uidl.hasAttribute("error")) { + if (getWidget().errorIndicatorElement == null) { + getWidget().errorIndicatorElement = DOM + .createSpan(); + getWidget().errorIndicatorElement + .setInnerHTML(" "); + DOM.setElementProperty( + getWidget().errorIndicatorElement, + "className", "v-errorindicator"); + DOM.appendChild(getWidget().getElement(), + getWidget().errorIndicatorElement); + DOM.sinkEvents(getWidget().errorIndicatorElement, + VTooltip.TOOLTIP_EVENTS | Event.ONCLICK); + } else { + DOM.setStyleAttribute( + getWidget().errorIndicatorElement, + "display", ""); + } + } else if (getWidget().errorIndicatorElement != null) { + DOM.setStyleAttribute( + getWidget().errorIndicatorElement, "display", + "none"); + } + + if (getState().isReadOnly()) { + getWidget().setEnabled(false); + } + + if (uidl.hasAttribute(ATTRIBUTE_ICON)) { + if (getWidget().icon == null) { + getWidget().icon = new Icon(client); + DOM.insertChild(getWidget().getElement(), + getWidget().icon.getElement(), 1); + getWidget().icon + .sinkEvents(VTooltip.TOOLTIP_EVENTS); + getWidget().icon.sinkEvents(Event.ONCLICK); + } + getWidget().icon.setUri(uidl + .getStringAttribute(ATTRIBUTE_ICON)); + } else if (getWidget().icon != null) { + // detach icon + DOM.removeChild(getWidget().getElement(), + getWidget().icon.getElement()); + getWidget().icon = null; + } + + // Set text + getWidget().setText(getState().getCaption()); + getWidget() + .setValue( + uidl.getBooleanVariable(getWidget().VARIABLE_STATE)); + getWidget().immediate = getState().isImmediate(); + } + + @Override + public VCheckBox getWidget() { + return (VCheckBox) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VCheckBox.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/ComboBoxConnector.java b/src/com/vaadin/terminal/gwt/client/ui/ComboBoxConnector.java new file mode 100644 index 0000000000..7de3c3ac3a --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/ComboBoxConnector.java @@ -0,0 +1,256 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.ui.VFilterSelect.FilterSelectSuggestion; + +public class ComboBoxConnector extends AbstractComponentConnector implements + SimpleManagedLayout { + + /* + * (non-Javadoc) + * + * @see + * com.vaadin.terminal.gwt.client.Paintable#updateFromUIDL(com.vaadin.terminal + * .gwt.client.UIDL, com.vaadin.terminal.gwt.client.ApplicationConnection) + */ + @Override + @SuppressWarnings("deprecation") + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // Save details + getWidget().client = client; + getWidget().paintableId = uidl.getId(); + + getWidget().readonly = getState().isReadOnly(); + getWidget().enabled = !getState().isDisabled(); + + getWidget().tb.setEnabled(getWidget().enabled); + getWidget().updateReadOnly(); + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + // Inverse logic here to make the default case (text input enabled) + // work without additional UIDL messages + boolean noTextInput = uidl + .hasAttribute(VFilterSelect.ATTR_NO_TEXT_INPUT) + && uidl.getBooleanAttribute(VFilterSelect.ATTR_NO_TEXT_INPUT); + getWidget().setTextInputEnabled(!noTextInput); + + // not a FocusWidget -> needs own tabindex handling + if (uidl.hasAttribute("tabindex")) { + getWidget().tb.setTabIndex(uidl + .getIntAttribute("tabindex")); + } + + if (uidl.hasAttribute("filteringmode")) { + getWidget().filteringmode = uidl + .getIntAttribute("filteringmode"); + } + + getWidget().immediate = getState().isImmediate(); + + getWidget().nullSelectionAllowed = uidl + .hasAttribute("nullselect"); + + getWidget().nullSelectItem = uidl + .hasAttribute("nullselectitem") + && uidl.getBooleanAttribute("nullselectitem"); + + getWidget().currentPage = uidl.getIntVariable("page"); + + if (uidl.hasAttribute("pagelength")) { + getWidget().pageLength = uidl + .getIntAttribute("pagelength"); + } + + if (uidl.hasAttribute(VFilterSelect.ATTR_INPUTPROMPT)) { + // input prompt changed from server + getWidget().inputPrompt = uidl + .getStringAttribute(VFilterSelect.ATTR_INPUTPROMPT); + } else { + getWidget().inputPrompt = ""; + } + + getWidget().suggestionPopup.updateStyleNames(uidl, + getState()); + + getWidget().allowNewItem = uidl + .hasAttribute("allownewitem"); + getWidget().lastNewItemString = null; + + getWidget().currentSuggestions.clear(); + if (!getWidget().waitingForFilteringResponse) { + /* + * Clear the current suggestions as the server response always + * includes the new ones. Exception is when filtering, then we need + * to retain the value if the user does not select any of the + * options matching the filter. + */ + getWidget().currentSuggestion = null; + /* + * Also ensure no old items in menu. Unless cleared the old values + * may cause odd effects on blur events. Suggestions in menu might + * not necessary exist in select at all anymore. + */ + getWidget().suggestionPopup.menu.clearItems(); + + } + + final UIDL options = uidl.getChildUIDL(0); + if (uidl.hasAttribute("totalMatches")) { + getWidget().totalMatches = uidl + .getIntAttribute("totalMatches"); + } else { + getWidget().totalMatches = 0; + } + + // used only to calculate minimum popup width + String captions = Util.escapeHTML(getWidget().inputPrompt); + + for (final Iterator i = options.getChildIterator(); i.hasNext();) { + final UIDL optionUidl = (UIDL) i.next(); + final FilterSelectSuggestion suggestion = getWidget().new FilterSelectSuggestion( + optionUidl); + getWidget().currentSuggestions.add(suggestion); + if (optionUidl.hasAttribute("selected")) { + if (!getWidget().waitingForFilteringResponse + || getWidget().popupOpenerClicked) { + String newSelectedOptionKey = Integer.toString(suggestion + .getOptionKey()); + if (!newSelectedOptionKey + .equals(getWidget().selectedOptionKey) + || suggestion.getReplacementString().equals( + getWidget().tb.getText())) { + // Update text field if we've got a new selection + // Also update if we've got the same text to retain old + // text selection behavior + getWidget().setPromptingOff( + suggestion.getReplacementString()); + getWidget().selectedOptionKey = newSelectedOptionKey; + } + } + getWidget().currentSuggestion = suggestion; + getWidget().setSelectedItemIcon( + suggestion.getIconUri()); + } + + // Collect captions so we can calculate minimum width for textarea + if (captions.length() > 0) { + captions += "|"; + } + captions += Util.escapeHTML(suggestion.getReplacementString()); + } + + if ((!getWidget().waitingForFilteringResponse || getWidget().popupOpenerClicked) + && uidl.hasVariable("selected") + && uidl.getStringArrayVariable("selected").length == 0) { + // select nulled + if (!getWidget().waitingForFilteringResponse + || !getWidget().popupOpenerClicked) { + if (!getWidget().focused) { + /* + * client.updateComponent overwrites all styles so we must + * ALWAYS set the prompting style at this point, even though + * we think it has been set already... + */ + getWidget().prompting = false; + getWidget().setPromptingOn(); + } else { + // we have focus in field, prompting can't be set on, + // instead just clear the input + getWidget().tb.setValue(""); + } + } + getWidget().setSelectedItemIcon(null); + getWidget().selectedOptionKey = null; + } + + if (getWidget().waitingForFilteringResponse + && getWidget().lastFilter.toLowerCase().equals( + uidl.getStringVariable("filter"))) { + getWidget().suggestionPopup.showSuggestions( + getWidget().currentSuggestions, + getWidget().currentPage, + getWidget().totalMatches); + getWidget().waitingForFilteringResponse = false; + if (!getWidget().popupOpenerClicked + && getWidget().selectPopupItemWhenResponseIsReceived != VFilterSelect.Select.NONE) { + // we're paging w/ arrows + if (getWidget().selectPopupItemWhenResponseIsReceived == VFilterSelect.Select.LAST) { + getWidget().suggestionPopup.menu + .selectLastItem(); + } else { + getWidget().suggestionPopup.menu + .selectFirstItem(); + } + + // This is used for paging so we update the keyboard selection + // variable as well. + MenuItem activeMenuItem = getWidget().suggestionPopup.menu + .getSelectedItem(); + getWidget().suggestionPopup.menu + .setKeyboardSelectedItem(activeMenuItem); + + // Update text field to contain the correct text + getWidget() + .setTextboxText(activeMenuItem.getText()); + getWidget().tb.setSelectionRange( + getWidget().lastFilter.length(), + activeMenuItem.getText().length() + - getWidget().lastFilter.length()); + + getWidget().selectPopupItemWhenResponseIsReceived = VFilterSelect.Select.NONE; // reset + } + if (getWidget().updateSelectionWhenReponseIsReceived) { + getWidget().suggestionPopup.menu + .doPostFilterSelectedItemAction(); + } + } + + // Calculate minumum textarea width + getWidget().suggestionPopupMinWidth = getWidget() + .minWidth(captions); + + getWidget().popupOpenerClicked = false; + + if (!getWidget().initDone) { + getWidget().updateRootWidth(); + } + + // Focus dependent style names are lost during the update, so we add + // them here back again + if (getWidget().focused) { + getWidget().addStyleDependentName("focus"); + } + + getWidget().initDone = true; + } + + @Override + protected Widget createWidget() { + return GWT.create(VFilterSelect.class); + } + + @Override + public VFilterSelect getWidget() { + return (VFilterSelect) super.getWidget(); + } + + public void layout() { + VFilterSelect widget = getWidget(); + if (widget.initDone) { + widget.updateRootWidth(); + } + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java new file mode 100644 index 0000000000..0cbe58b4fd --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java @@ -0,0 +1,63 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.EventId; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ComponentConnector; + +public class CssLayoutConnector extends AbstractComponentContainerConnector { + + private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( + this, EventId.LAYOUT_CLICK) { + + @Override + protected ComponentConnector getChildComponent(Element element) { + return getWidget().panel.getComponent(element); + } + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return getWidget().addDomHandler(handler, type); + } + }; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + clickEventHandler.handleEventHandlerRegistration(client); + + getWidget().setMarginAndSpacingStyles( + new VMarginInfo(uidl.getIntAttribute("margins")), + uidl.hasAttribute("spacing")); + getWidget().panel.updateFromUIDL(uidl, client); + } + + @Override + public VCssLayout getWidget() { + return (VCssLayout) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VCssLayout.class); + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + getWidget().panel.updateCaption(component, uidl); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java new file mode 100644 index 0000000000..3b84c700e3 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java @@ -0,0 +1,52 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ConnectorMap; +import com.vaadin.terminal.gwt.client.ComponentConnector; + +public class CustomComponentConnector extends + AbstractComponentContainerConnector { + + @Override + public void updateFromUIDL(UIDL uidl, final ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + final UIDL child = uidl.getChildUIDL(0); + if (child != null) { + final ComponentConnector paintable = client.getPaintable(child); + Widget widget = paintable.getWidget(); + if (widget != getWidget().getWidget()) { + if (getWidget().getWidget() != null) { + client.unregisterPaintable(ConnectorMap.get(client) + .getConnector(getWidget().getWidget())); + getWidget().clear(); + } + getWidget().setWidget(widget); + } + paintable.updateFromUIDL(child, client); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VCustomComponent.class); + } + + @Override + public VCustomComponent getWidget() { + return (VCustomComponent) super.getWidget(); + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + // NOP, custom component dont render composition roots caption + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/CustomLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/CustomLayoutConnector.java new file mode 100644 index 0000000000..1f1422415f --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/CustomLayoutConnector.java @@ -0,0 +1,97 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ComponentConnector; + +public class CustomLayoutConnector extends AbstractComponentContainerConnector + implements SimpleManagedLayout { + + /** Update the layout from UIDL */ + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().client = client; + // ApplicationConnection manages generic component features + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().pid = uidl.getId(); + if (!getWidget().hasTemplate()) { + // Update HTML template only once + getWidget().initializeHTML(uidl, client); + } + + // Evaluate scripts + VCustomLayout.eval(getWidget().scripts); + getWidget().scripts = null; + + // TODO Check if this is needed + client.runDescendentsLayout(getWidget()); + + Set oldWidgets = new HashSet(); + oldWidgets.addAll(getWidget().locationToWidget.values()); + + // For all contained widgets + for (final Iterator i = uidl.getChildIterator(); i.hasNext();) { + final UIDL uidlForChild = (UIDL) i.next(); + if (uidlForChild.getTag().equals("location")) { + final String location = uidlForChild.getStringAttribute("name"); + UIDL childUIDL = uidlForChild.getChildUIDL(0); + final ComponentConnector childPaintable = client + .getPaintable(childUIDL); + Widget childWidget = childPaintable.getWidget(); + try { + getWidget().setWidget(childWidget, location); + childPaintable.updateFromUIDL(childUIDL, client); + } catch (final IllegalArgumentException e) { + // If no location is found, this component is not visible + } + oldWidgets.remove(childWidget); + } + } + for (Iterator iterator = oldWidgets.iterator(); iterator + .hasNext();) { + Widget oldWidget = iterator.next(); + if (oldWidget.isAttached()) { + // slot of this widget is emptied, remove it + getWidget().remove(oldWidget); + } + } + + // TODO Check if this is needed + client.runDescendentsLayout(getWidget()); + + } + + @Override + public VCustomLayout getWidget() { + return (VCustomLayout) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VCustomLayout.class); + } + + public void updateCaption(ComponentConnector paintable, UIDL uidl) { + getWidget().updateCaption(paintable, uidl); + + } + + public void layout() { + getWidget().iLayoutJS( + DOM.getFirstChild(getWidget().getElement())); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/DragAndDropWrapperConnector.java b/src/com/vaadin/terminal/gwt/client/ui/DragAndDropWrapperConnector.java new file mode 100644 index 0000000000..4b44585caa --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/DragAndDropWrapperConnector.java @@ -0,0 +1,71 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.HashMap; +import java.util.Set; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class DragAndDropWrapperConnector extends CustomComponentConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().client = client; + super.updateFromUIDL(uidl, client); + if (isRealUpdate(uidl) && !uidl.hasAttribute("hidden")) { + UIDL acceptCrit = uidl.getChildByTagName("-ac"); + if (acceptCrit == null) { + getWidget().dropHandler = null; + } else { + if (getWidget().dropHandler == null) { + getWidget().dropHandler = getWidget().new CustomDropHandler(); + } + getWidget().dropHandler.updateAcceptRules(acceptCrit); + } + + Set variableNames = uidl.getVariableNames(); + for (String fileId : variableNames) { + if (fileId.startsWith("rec-")) { + String receiverUrl = uidl.getStringVariable(fileId); + fileId = fileId.substring(4); + if (getWidget().fileIdToReceiver == null) { + getWidget().fileIdToReceiver = new HashMap(); + } + if ("".equals(receiverUrl)) { + Integer id = Integer.parseInt(fileId); + int indexOf = getWidget().fileIds.indexOf(id); + if (indexOf != -1) { + getWidget().files.remove(indexOf); + getWidget().fileIds.remove(indexOf); + } + } else { + getWidget().fileIdToReceiver.put(fileId, receiverUrl); + } + } + } + getWidget().startNextUpload(); + + getWidget().dragStartMode = uidl + .getIntAttribute(VDragAndDropWrapper.DRAG_START_MODE); + getWidget().initDragStartMode(); + getWidget().html5DataFlavors = uidl + .getMapAttribute(VDragAndDropWrapper.HTML5_DATA_FLAVORS); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VDragAndDropWrapper.class); + } + + @Override + public VDragAndDropWrapper getWidget() { + return (VDragAndDropWrapper) super.getWidget(); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java b/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java new file mode 100644 index 0000000000..df7eb2528c --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java @@ -0,0 +1,192 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import java.util.Map; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Node; +import com.google.gwt.dom.client.NodeList; +import com.google.gwt.dom.client.ObjectElement; +import com.google.gwt.dom.client.Style; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.VConsole; +import com.vaadin.terminal.gwt.client.VTooltip; + +public class EmbeddedConnector extends AbstractComponentConnector { + + public static final String CLICK_EVENT_IDENTIFIER = "click"; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + // Save details + getWidget().client = client; + + boolean clearBrowserElement = true; + + clickEventHandler.handleEventHandlerRegistration(client); + + if (uidl.hasAttribute("type")) { + getWidget().type = uidl.getStringAttribute("type"); + if (getWidget().type.equals("image")) { + getWidget().addStyleName( + VEmbedded.CLASSNAME + "-image"); + Element el = null; + boolean created = false; + NodeList nodes = getWidget().getElement() + .getChildNodes(); + if (nodes != null && nodes.getLength() == 1) { + Node n = nodes.getItem(0); + if (n.getNodeType() == Node.ELEMENT_NODE) { + Element e = (Element) n; + if (e.getTagName().equals("IMG")) { + el = e; + } + } + } + if (el == null) { + getWidget().setHTML(""); + el = DOM.createImg(); + created = true; + DOM.sinkEvents(el, Event.ONLOAD); + } + + // Set attributes + Style style = el.getStyle(); + style.setProperty("width", getState().getWidth()); + style.setProperty("height", getState().getHeight()); + + DOM.setElementProperty(el, "src", getWidget() + .getSrc(uidl, client)); + + if (created) { + // insert in dom late + getWidget().getElement().appendChild(el); + } + + /* + * Sink tooltip events so tooltip is displayed when hovering the + * image. + */ + getWidget().sinkEvents(VTooltip.TOOLTIP_EVENTS); + + } else if (getWidget().type.equals("browser")) { + getWidget().addStyleName( + VEmbedded.CLASSNAME + "-browser"); + if (getWidget().browserElement == null) { + getWidget().setHTML( + ""); + getWidget().browserElement = DOM + .getFirstChild(getWidget().getElement()); + } + DOM.setElementAttribute(getWidget().browserElement, + "src", getWidget().getSrc(uidl, client)); + clearBrowserElement = false; + } else { + VConsole.log("Unknown Embedded type '" + + getWidget().type + "'"); + } + } else if (uidl.hasAttribute("mimetype")) { + final String mime = uidl.getStringAttribute("mimetype"); + if (mime.equals("application/x-shockwave-flash")) { + // Handle embedding of Flash + getWidget().addStyleName( + VEmbedded.CLASSNAME + "-flash"); + getWidget().setHTML( + getWidget().createFlashEmbed(uidl)); + + } else if (mime.equals("image/svg+xml")) { + getWidget().addStyleName( + VEmbedded.CLASSNAME + "-svg"); + String data; + Map parameters = VEmbedded.getParameters(uidl); + if (parameters.get("data") == null) { + data = getWidget().getSrc(uidl, client); + } else { + data = "data:image/svg+xml," + parameters.get("data"); + } + getWidget().setHTML(""); + ObjectElement obj = Document.get().createObjectElement(); + obj.setType(mime); + obj.setData(data); + if (!isUndefinedWidth()) { + obj.getStyle().setProperty("width", "100%"); + } + if (!isUndefinedHeight()) { + obj.getStyle().setProperty("height", "100%"); + } + if (uidl.hasAttribute("classid")) { + obj.setAttribute("classid", + uidl.getStringAttribute("classid")); + } + if (uidl.hasAttribute("codebase")) { + obj.setAttribute("codebase", + uidl.getStringAttribute("codebase")); + } + if (uidl.hasAttribute("codetype")) { + obj.setAttribute("codetype", + uidl.getStringAttribute("codetype")); + } + if (uidl.hasAttribute("archive")) { + obj.setAttribute("archive", + uidl.getStringAttribute("archive")); + } + if (uidl.hasAttribute("standby")) { + obj.setAttribute("standby", + uidl.getStringAttribute("standby")); + } + getWidget().getElement().appendChild(obj); + + } else { + VConsole.log("Unknown Embedded mimetype '" + mime + "'"); + } + } else { + VConsole.log("Unknown Embedded; no type or mimetype attribute"); + } + + if (clearBrowserElement) { + getWidget().browserElement = null; + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VEmbedded.class); + } + + @Override + public VEmbedded getWidget() { + return (VEmbedded) super.getWidget(); + } + + protected final ClickEventHandler clickEventHandler = new ClickEventHandler( + this, CLICK_EVENT_IDENTIFIER) { + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return getWidget().addDomHandler(handler, type); + } + + }; + +} \ No newline at end of file diff --git a/src/com/vaadin/terminal/gwt/client/ui/FormConnector.java b/src/com/vaadin/terminal/gwt/client/ui/FormConnector.java new file mode 100644 index 0000000000..0665ec4401 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/FormConnector.java @@ -0,0 +1,190 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ConnectorMap; +import com.vaadin.terminal.gwt.client.ComponentConnector; + +public class FormConnector extends AbstractComponentContainerConnector implements + SimpleManagedLayout { + + @Override + public void init() { + VForm form = getWidget(); + getLayoutManager().registerDependency(this, form.footerContainer); + } + + @Override + protected boolean delegateCaptionHandling() { + return false; + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().client = client; + getWidget().id = uidl.getId(); + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + boolean legendEmpty = true; + if (getState().getCaption() != null) { + getWidget().caption.setInnerText(getState() + .getCaption()); + legendEmpty = false; + } else { + getWidget().caption.setInnerText(""); + } + if (uidl.hasAttribute(ATTRIBUTE_ICON)) { + if (getWidget().icon == null) { + getWidget().icon = new Icon(client); + getWidget().legend + .insertFirst(getWidget().icon.getElement()); + } + getWidget().icon.setUri(uidl + .getStringAttribute(ATTRIBUTE_ICON)); + legendEmpty = false; + } else { + if (getWidget().icon != null) { + getWidget().legend + .removeChild(getWidget().icon.getElement()); + } + } + if (legendEmpty) { + getWidget().addStyleDependentName("nocaption"); + } else { + getWidget().removeStyleDependentName("nocaption"); + } + + if (uidl.hasAttribute("error")) { + final UIDL errorUidl = uidl.getErrors(); + getWidget().errorMessage.updateFromUIDL(errorUidl); + getWidget().errorMessage.setVisible(true); + } else { + getWidget().errorMessage.setVisible(false); + } + + if (getState().hasDescription()) { + getWidget().desc.setInnerHTML(getState() + .getDescription()); + if (getWidget().desc.getParentElement() == null) { + getWidget().fieldSet.insertAfter( + getWidget().desc, + getWidget().legend); + } + } else { + getWidget().desc.setInnerHTML(""); + if (getWidget().desc.getParentElement() != null) { + getWidget().fieldSet + .removeChild(getWidget().desc); + } + } + + // first render footer so it will be easier to handle relative height of + // main layout + if (uidl.getChildCount() > 1 + && !uidl.getChildUIDL(1).getTag().equals("actions")) { + // render footer + ComponentConnector newFooter = client.getPaintable(uidl + .getChildUIDL(1)); + Widget newFooterWidget = newFooter.getWidget(); + if (getWidget().footer == null) { + getWidget().add(newFooter.getWidget(), + getWidget().footerContainer); + getWidget().footer = newFooterWidget; + } else if (newFooter != getWidget().footer) { + getWidget().remove(getWidget().footer); + client.unregisterPaintable(ConnectorMap.get(getConnection()) + .getConnector(getWidget().footer)); + getWidget().add(newFooter.getWidget(), + getWidget().footerContainer); + } + getWidget().footer = newFooterWidget; + newFooter.updateFromUIDL(uidl.getChildUIDL(1), client); + } else { + if (getWidget().footer != null) { + getWidget().remove(getWidget().footer); + client.unregisterPaintable(ConnectorMap.get(getConnection()) + .getConnector(getWidget().footer)); + } + } + + final UIDL layoutUidl = uidl.getChildUIDL(0); + ComponentConnector newLayout = client.getPaintable(layoutUidl); + Widget newLayoutWidget = newLayout.getWidget(); + if (getWidget().lo == null) { + // Layout not rendered before + getWidget().lo = newLayoutWidget; + getWidget().add(newLayoutWidget, + getWidget().fieldContainer); + } else if (getWidget().lo != newLayoutWidget) { + // Layout has changed + client.unregisterPaintable(ConnectorMap.get(getConnection()) + .getConnector(getWidget().lo)); + getWidget().remove(getWidget().lo); + getWidget().lo = newLayoutWidget; + getWidget().add(newLayoutWidget, + getWidget().fieldContainer); + } + newLayout.updateFromUIDL(layoutUidl, client); + + // also recalculates size of the footer if undefined size form - see + // #3710 + client.runDescendentsLayout(getWidget()); + + // We may have actions attached + if (uidl.getChildCount() > 1) { + UIDL childUidl = uidl.getChildByTagName("actions"); + if (childUidl != null) { + if (getWidget().shortcutHandler == null) { + getWidget().shortcutHandler = new ShortcutActionHandler( + getId(), client); + getWidget().keyDownRegistration = getWidget() + .addDomHandler(getWidget(), + KeyDownEvent.getType()); + } + getWidget().shortcutHandler + .updateActionMap(childUidl); + } + } else if (getWidget().shortcutHandler != null) { + getWidget().keyDownRegistration.removeHandler(); + getWidget().shortcutHandler = null; + getWidget().keyDownRegistration = null; + } + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + // NOP form don't render caption for neither field layout nor footer + // layout + } + + @Override + public VForm getWidget() { + return (VForm) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VForm.class); + } + + public void layout() { + VForm form = getWidget(); + + int footerHeight = getLayoutManager().getOuterHeight( + form.footerContainer); + + form.fieldContainer.getStyle().setPaddingBottom(footerHeight, Unit.PX); + form.footerContainer.getStyle().setMarginTop(-footerHeight, Unit.PX); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/FormLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/FormLayoutConnector.java new file mode 100644 index 0000000000..df658aa2c0 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/FormLayoutConnector.java @@ -0,0 +1,39 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ComponentConnector; + +public class FormLayoutConnector extends AbstractComponentContainerConnector { + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().client = client; + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().table.updateFromUIDL(uidl, client); + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + getWidget().table.updateCaption(component, uidl); + } + + @Override + public VFormLayout getWidget() { + return (VFormLayout) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VFormLayout.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java new file mode 100644 index 0000000000..f3b4ef4d64 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java @@ -0,0 +1,164 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.HashSet; +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.DirectionalManagedLayout; +import com.vaadin.terminal.gwt.client.EventId; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.VCaption; +import com.vaadin.terminal.gwt.client.ConnectorMap; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ui.VGridLayout.Cell; +import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot; + +public class GridLayoutConnector extends AbstractComponentContainerConnector + implements DirectionalManagedLayout { + private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( + this, EventId.LAYOUT_CLICK) { + + @Override + protected ComponentConnector getChildComponent(Element element) { + return getWidget().getComponent(element); + } + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return getWidget().addDomHandler(handler, type); + } + }; + + @Override + public void init() { + getLayoutManager().registerDependency(this, + getWidget().spacingMeasureElement); + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + VGridLayout layout = getWidget(); + layout.client = client; + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + clickEventHandler.handleEventHandlerRegistration(client); + + int cols = uidl.getIntAttribute("w"); + int rows = uidl.getIntAttribute("h"); + + layout.columnWidths = new int[cols]; + layout.rowHeights = new int[rows]; + + if (layout.cells == null) { + layout.cells = new Cell[cols][rows]; + } else if (layout.cells.length != cols + || layout.cells[0].length != rows) { + Cell[][] newCells = new Cell[cols][rows]; + for (int i = 0; i < layout.cells.length; i++) { + for (int j = 0; j < layout.cells[i].length; j++) { + if (i < cols && j < rows) { + newCells[i][j] = layout.cells[i][j]; + } + } + } + layout.cells = newCells; + } + + final int[] alignments = uidl.getIntArrayAttribute("alignments"); + int alignmentIndex = 0; + + HashSet nonRenderedWidgets = new HashSet( + layout.widgetToCell.keySet()); + + for (final Iterator i = uidl.getChildIterator(); i.hasNext();) { + final UIDL r = (UIDL) i.next(); + if ("gr".equals(r.getTag())) { + for (final Iterator j = r.getChildIterator(); j.hasNext();) { + final UIDL c = (UIDL) j.next(); + if ("gc".equals(c.getTag())) { + Cell cell = layout.getCell(c); + if (cell.hasContent()) { + cell.setAlignment(new AlignmentInfo( + alignments[alignmentIndex++])); + nonRenderedWidgets.remove(cell.slot.getWidget()); + } + } + } + } + } + + layout.colExpandRatioArray = uidl.getIntArrayAttribute("colExpand"); + layout.rowExpandRatioArray = uidl.getIntArrayAttribute("rowExpand"); + + // clean non rendered components + for (Widget w : nonRenderedWidgets) { + Cell cell = layout.widgetToCell.remove(w); + cell.slot.setCaption(null); + + if (w.getParent() == layout) { + w.removeFromParent(); + ConnectorMap paintableMap = ConnectorMap.get(client); + paintableMap.unregisterConnector(paintableMap.getConnector(w)); + } + cell.slot.getWrapperElement().removeFromParent(); + } + + int bitMask = uidl.getIntAttribute("margins"); + layout.updateMarginStyleNames(new VMarginInfo(bitMask)); + + layout.updateSpacingStyleName(uidl.getBooleanAttribute("spacing")); + + getLayoutManager().setNeedsUpdate(this); + } + + public void updateCaption(ComponentConnector paintable, UIDL uidl) { + VGridLayout layout = getWidget(); + if (VCaption.isNeeded(uidl, paintable.getState())) { + Cell cell = layout.widgetToCell.get(paintable + .getWidget()); + VLayoutSlot layoutSlot = cell.slot; + VCaption caption = layoutSlot.getCaption(); + if (caption == null) { + caption = new VCaption(paintable, getConnection()); + + Widget widget = paintable.getWidget(); + + layout.setCaption(widget, caption); + } + caption.updateCaption(uidl); + } else { + layout.setCaption(paintable.getWidget(), null); + } + } + + @Override + public VGridLayout getWidget() { + return (VGridLayout) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VGridLayout.class); + } + + public void layoutVertically() { + getWidget().updateHeight(); + } + + public void layoutHorizontally() { + getWidget().updateWidth(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/HorizontalLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/HorizontalLayoutConnector.java new file mode 100644 index 0000000000..fc370fcd2d --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/HorizontalLayoutConnector.java @@ -0,0 +1,20 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; + +public class HorizontalLayoutConnector extends AbstractOrderedLayoutConnector { + + @Override + public VHorizontalLayout getWidget() { + return (VHorizontalLayout) super.getWidget(); + } + + @Override + protected VHorizontalLayout createWidget() { + return GWT.create(VHorizontalLayout.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/HorizontalSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/HorizontalSplitPanelConnector.java new file mode 100644 index 0000000000..17d264a707 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/HorizontalSplitPanelConnector.java @@ -0,0 +1,15 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; + +public class HorizontalSplitPanelConnector extends AbstractSplitPanelConnector { + + @Override + protected VAbstractSplitPanel createWidget() { + return GWT.create(VSplitPanelHorizontal.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/InlineDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/InlineDateFieldConnector.java new file mode 100644 index 0000000000..9e8dd14100 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/InlineDateFieldConnector.java @@ -0,0 +1,101 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.Date; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.DateTimeService; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusChangeListener; +import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener; + +public class InlineDateFieldConnector extends AbstractDateFieldConnector { + + @Override + @SuppressWarnings("deprecation") + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + getWidget().calendarPanel + .setShowISOWeekNumbers(getWidget() + .isShowISOWeekNumbers()); + getWidget().calendarPanel + .setDateTimeService(getWidget() + .getDateTimeService()); + getWidget().calendarPanel + .setResolution(getWidget().getCurrentResolution()); + Date currentDate = getWidget().getCurrentDate(); + if (currentDate != null) { + getWidget().calendarPanel.setDate(new Date(currentDate + .getTime())); + } else { + getWidget().calendarPanel.setDate(null); + } + + if (getWidget().currentResolution > VDateField.RESOLUTION_DAY) { + getWidget().calendarPanel + .setTimeChangeListener(new TimeChangeListener() { + public void changed(int hour, int min, int sec, int msec) { + Date d = getWidget().getDate(); + if (d == null) { + // date currently null, use the value from + // calendarPanel + // (~ client time at the init of the widget) + d = (Date) getWidget().calendarPanel + .getDate().clone(); + } + d.setHours(hour); + d.setMinutes(min); + d.setSeconds(sec); + DateTimeService.setMilliseconds(d, msec); + + // Always update time changes to the server + getWidget().calendarPanel.setDate(d); + getWidget().updateValueFromPanel(); + } + }); + } + + if (getWidget().currentResolution <= VDateField.RESOLUTION_MONTH) { + getWidget().calendarPanel + .setFocusChangeListener(new FocusChangeListener() { + public void focusChanged(Date date) { + Date date2 = new Date(); + if (getWidget().calendarPanel.getDate() != null) { + date2.setTime(getWidget().calendarPanel + .getDate().getTime()); + } + /* + * Update the value of calendarPanel + */ + date2.setYear(date.getYear()); + date2.setMonth(date.getMonth()); + getWidget().calendarPanel + .setDate(date2); + /* + * Then update the value from panel to server + */ + getWidget().updateValueFromPanel(); + } + }); + } else { + getWidget().calendarPanel.setFocusChangeListener(null); + } + + // Update possible changes + getWidget().calendarPanel.renderCalendar(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VDateFieldCalendar.class); + } + + @Override + public VDateFieldCalendar getWidget() { + return (VDateFieldCalendar) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/LinkConnector.java b/src/com/vaadin/terminal/gwt/client/ui/LinkConnector.java new file mode 100644 index 0000000000..1cd70371bb --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/LinkConnector.java @@ -0,0 +1,105 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class LinkConnector extends AbstractComponentConnector { + + @Override + protected boolean delegateCaptionHandling() { + return false; + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + + // Ensure correct implementation, + // but don't let container manage caption etc. + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().client = client; + + getWidget().enabled = !getState().isDisabled(); + getWidget().readonly = getState().isReadOnly(); + + if (uidl.hasAttribute("name")) { + getWidget().target = uidl.getStringAttribute("name"); + getWidget().anchor.setAttribute("target", + getWidget().target); + } + if (uidl.hasAttribute("src")) { + getWidget().src = client.translateVaadinUri(uidl + .getStringAttribute("src")); + getWidget().anchor.setAttribute("href", + getWidget().src); + } + + if (uidl.hasAttribute("border")) { + if ("none".equals(uidl.getStringAttribute("border"))) { + getWidget().borderStyle = VLink.BORDER_STYLE_NONE; + } else { + getWidget().borderStyle = VLink.BORDER_STYLE_MINIMAL; + } + } else { + getWidget().borderStyle = VLink.BORDER_STYLE_DEFAULT; + } + + getWidget().targetHeight = uidl + .hasAttribute("targetHeight") ? uidl + .getIntAttribute("targetHeight") : -1; + getWidget().targetWidth = uidl.hasAttribute("targetWidth") ? uidl + .getIntAttribute("targetWidth") : -1; + + // Set link caption + getWidget().captionElement.setInnerText(getState() + .getCaption()); + + // handle error + if (uidl.hasAttribute("error")) { + if (getWidget().errorIndicatorElement == null) { + getWidget().errorIndicatorElement = DOM.createDiv(); + DOM.setElementProperty( + getWidget().errorIndicatorElement, + "className", "v-errorindicator"); + } + DOM.insertChild(getWidget().getElement(), + getWidget().errorIndicatorElement, 0); + } else if (getWidget().errorIndicatorElement != null) { + DOM.setStyleAttribute( + getWidget().errorIndicatorElement, "display", + "none"); + } + + if (uidl.hasAttribute(ATTRIBUTE_ICON)) { + if (getWidget().icon == null) { + getWidget().icon = new Icon(client); + getWidget().anchor.insertBefore( + getWidget().icon.getElement(), + getWidget().captionElement); + } + getWidget().icon.setUri(uidl + .getStringAttribute(ATTRIBUTE_ICON)); + } + + } + + @Override + protected Widget createWidget() { + return GWT.create(VLink.class); + } + + @Override + public VLink getWidget() { + return (VLink) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/ListSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/ListSelectConnector.java new file mode 100644 index 0000000000..c470acbcf1 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/ListSelectConnector.java @@ -0,0 +1,21 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; + +public class ListSelectConnector extends OptionGroupBaseConnector { + + @Override + protected Widget createWidget() { + return GWT.create(VListSelect.class); + } + + @Override + public VListSelect getWidget() { + return (VListSelect) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java b/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java new file mode 100644 index 0000000000..1ba3fd6930 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java @@ -0,0 +1,114 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.Util; + +public abstract class MediaBaseConnector extends AbstractComponentConnector { + + public static final String TAG_SOURCE = "src"; + + public static final String ATTR_PAUSE = "pause"; + public static final String ATTR_PLAY = "play"; + public static final String ATTR_MUTED = "muted"; + public static final String ATTR_CONTROLS = "ctrl"; + public static final String ATTR_AUTOPLAY = "auto"; + public static final String ATTR_RESOURCE = "res"; + public static final String ATTR_RESOURCE_TYPE = "type"; + public static final String ATTR_HTML = "html"; + public static final String ATTR_ALT_TEXT = "alt"; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().setControls(shouldShowControls(uidl)); + getWidget().setAutoplay(shouldAutoplay(uidl)); + getWidget().setMuted(isMediaMuted(uidl)); + + // Add all sources + for (int ix = 0; ix < uidl.getChildCount(); ix++) { + UIDL child = uidl.getChildUIDL(ix); + if (TAG_SOURCE.equals(child.getTag())) { + getWidget() + .addSource(getSourceUrl(child), getSourceType(child)); + } + } + setAltText(uidl); + + evalPauseCommand(uidl); + evalPlayCommand(uidl); + } + + protected boolean shouldShowControls(UIDL uidl) { + return uidl.getBooleanAttribute(ATTR_CONTROLS); + } + + private boolean shouldAutoplay(UIDL uidl) { + return uidl.getBooleanAttribute(ATTR_AUTOPLAY); + } + + private boolean isMediaMuted(UIDL uidl) { + return uidl.getBooleanAttribute(ATTR_MUTED); + } + + private boolean allowHtmlContent(UIDL uidl) { + return uidl.getBooleanAttribute(ATTR_HTML); + } + + private void evalPlayCommand(UIDL uidl) { + if (uidl.hasAttribute(ATTR_PLAY)) { + getWidget().play(); + } + } + + private void evalPauseCommand(UIDL uidl) { + if (uidl.hasAttribute(ATTR_PAUSE)) { + getWidget().pause(); + } + } + + @Override + public VMediaBase getWidget() { + return (VMediaBase) super.getWidget(); + } + + /** + * @param uidl + * @return the URL of a resource to be used as a source for the media + */ + private String getSourceUrl(UIDL uidl) { + String url = getConnection().translateVaadinUri( + uidl.getStringAttribute(MediaBaseConnector.ATTR_RESOURCE)); + if (url == null) { + return ""; + } + return url; + } + + /** + * @param uidl + * @return the mime type of the media + */ + private String getSourceType(UIDL uidl) { + return uidl.getStringAttribute(MediaBaseConnector.ATTR_RESOURCE_TYPE); + } + + private void setAltText(UIDL uidl) { + String alt = uidl.getStringAttribute(MediaBaseConnector.ATTR_ALT_TEXT); + + if (alt == null || "".equals(alt)) { + alt = getWidget().getDefaultAltHtml(); + } else if (!allowHtmlContent(uidl)) { + alt = Util.escapeHTML(alt); + } + getWidget().setAltText(alt); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/MenuBarConnector.java b/src/com/vaadin/terminal/gwt/client/ui/MenuBarConnector.java new file mode 100644 index 0000000000..873f995962 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/MenuBarConnector.java @@ -0,0 +1,169 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.Iterator; +import java.util.Stack; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.ui.VMenuBar.CustomMenuItem; + +public class MenuBarConnector extends AbstractComponentConnector implements + SimpleManagedLayout { + /** + * This method must be implemented to update the client-side component from + * UIDL data received from server. + * + * This method is called when the page is loaded for the first time, and + * every time UI changes in the component are received from the server. + */ + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // This call should be made first. Ensure correct implementation, + // and let the containing layout manage caption, etc. + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().htmlContentAllowed = uidl + .hasAttribute(VMenuBar.HTML_CONTENT_ALLOWED); + + getWidget().openRootOnHover = uidl + .getBooleanAttribute(VMenuBar.OPEN_ROOT_MENU_ON_HOWER); + + getWidget().enabled = !getState().isDisabled(); + + // For future connections + getWidget().client = client; + getWidget().uidlId = uidl.getId(); + + // Empty the menu every time it receives new information + if (!getWidget().getItems().isEmpty()) { + getWidget().clearItems(); + } + + UIDL options = uidl.getChildUIDL(0); + + if (null != getState() && !getState().isUndefinedWidth()) { + UIDL moreItemUIDL = options.getChildUIDL(0); + StringBuffer itemHTML = new StringBuffer(); + + if (moreItemUIDL.hasAttribute("icon")) { + itemHTML.append("\"\""); + } + + String moreItemText = moreItemUIDL.getStringAttribute("text"); + if ("".equals(moreItemText)) { + moreItemText = "►"; + } + itemHTML.append(moreItemText); + + getWidget().moreItem = GWT.create(CustomMenuItem.class); + getWidget().moreItem.setHTML(itemHTML.toString()); + getWidget().moreItem.setCommand(VMenuBar.emptyCommand); + + getWidget().collapsedRootItems = new VMenuBar(true, + getWidget()); + getWidget().moreItem + .setSubMenu(getWidget().collapsedRootItems); + getWidget().moreItem.addStyleName(VMenuBar.CLASSNAME + + "-more-menuitem"); + } + + UIDL uidlItems = uidl.getChildUIDL(1); + Iterator itr = uidlItems.getChildIterator(); + Stack> iteratorStack = new Stack>(); + Stack menuStack = new Stack(); + VMenuBar currentMenu = getWidget(); + + while (itr.hasNext()) { + UIDL item = (UIDL) itr.next(); + CustomMenuItem currentItem = null; + + final int itemId = item.getIntAttribute("id"); + + boolean itemHasCommand = item.hasAttribute("command"); + boolean itemIsCheckable = item + .hasAttribute(VMenuBar.ATTRIBUTE_CHECKED); + + String itemHTML = getWidget().buildItemHTML(item); + + Command cmd = null; + if (!item.hasAttribute("separator")) { + if (itemHasCommand || itemIsCheckable) { + // Construct a command that fires onMenuClick(int) with the + // item's id-number + cmd = new Command() { + public void execute() { + getWidget().hostReference + .onMenuClick(itemId); + } + }; + } + } + + currentItem = currentMenu.addItem(itemHTML.toString(), cmd); + currentItem.updateFromUIDL(item, client); + + if (item.getChildCount() > 0) { + menuStack.push(currentMenu); + iteratorStack.push(itr); + itr = item.getChildIterator(); + currentMenu = new VMenuBar(true, currentMenu); + // this is the top-level style that also propagates to items - + // any item specific styles are set above in + // currentItem.updateFromUIDL(item, client) + if (getState().hasStyles()) { + for (String style : getState().getStyle().split(" ")) { + currentMenu.addStyleDependentName(style); + } + } + currentItem.setSubMenu(currentMenu); + } + + while (!itr.hasNext() && !iteratorStack.empty()) { + boolean hasCheckableItem = false; + for (CustomMenuItem menuItem : currentMenu.getItems()) { + hasCheckableItem = hasCheckableItem + || menuItem.isCheckable(); + } + if (hasCheckableItem) { + currentMenu.addStyleDependentName("check-column"); + } else { + currentMenu.removeStyleDependentName("check-column"); + } + + itr = iteratorStack.pop(); + currentMenu = menuStack.pop(); + } + }// while + + getWidget().iLayout(false); + + }// updateFromUIDL + + @Override + protected Widget createWidget() { + return GWT.create(VMenuBar.class); + } + + @Override + public VMenuBar getWidget() { + return (VMenuBar) super.getWidget(); + } + + public void layout() { + getWidget().iLayout(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java new file mode 100644 index 0000000000..87f7943773 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java @@ -0,0 +1,108 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +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.ButtonConnector.ButtonClientToServerRpc; + +public class NativeButtonConnector extends AbstractComponentConnector { + + @Override + public void init() { + super.init(); + + ButtonClientToServerRpc rpcProxy = GWT + .create(ButtonClientToServerRpc.class); + getWidget().buttonRpcProxy = initRPC(rpcProxy); + } + + @Override + protected boolean delegateCaptionHandling() { + return false; + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + + // Ensure correct implementation, + // but don't let container manage caption etc. + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().disableOnClick = getState().isDisableOnClick(); + getWidget().focusHandlerRegistration = EventHelper.updateFocusHandler( + this, client, getWidget().focusHandlerRegistration); + getWidget().blurHandlerRegistration = EventHelper.updateBlurHandler( + this, client, getWidget().blurHandlerRegistration); + + // Save details + getWidget().client = client; + getWidget().paintableId = uidl.getId(); + + // Set text + getWidget().setText(getState().getCaption()); + + // handle error + if (uidl.hasAttribute("error")) { + if (getWidget().errorIndicatorElement == null) { + getWidget().errorIndicatorElement = DOM.createSpan(); + getWidget().errorIndicatorElement + .setClassName("v-errorindicator"); + } + getWidget().getElement().insertBefore( + getWidget().errorIndicatorElement, + getWidget().captionElement); + + } else if (getWidget().errorIndicatorElement != null) { + getWidget().getElement().removeChild( + getWidget().errorIndicatorElement); + getWidget().errorIndicatorElement = null; + } + + if (uidl.hasAttribute(ATTRIBUTE_ICON)) { + if (getWidget().icon == null) { + getWidget().icon = new Icon(client); + getWidget().getElement().insertBefore( + getWidget().icon.getElement(), + getWidget().captionElement); + } + getWidget().icon.setUri(uidl.getStringAttribute(ATTRIBUTE_ICON)); + } else { + if (getWidget().icon != null) { + getWidget().getElement().removeChild( + getWidget().icon.getElement()); + getWidget().icon = null; + } + } + + } + + @Override + protected Widget createWidget() { + return GWT.create(VNativeButton.class); + } + + @Override + public VNativeButton getWidget() { + return (VNativeButton) super.getWidget(); + } + + @Override + public ButtonState getState() { + return (ButtonState) super.getState(); + } + + @Override + protected ComponentState createState() { + return GWT.create(ButtonState.class); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/NativeSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/NativeSelectConnector.java new file mode 100644 index 0000000000..c425ccb93d --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/NativeSelectConnector.java @@ -0,0 +1,21 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; + +public class NativeSelectConnector extends OptionGroupBaseConnector { + + @Override + protected Widget createWidget() { + return GWT.create(VNativeSelect.class); + } + + @Override + public VNativeSelect getWidget() { + return (VNativeSelect) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/OptionGroupBaseConnector.java b/src/com/vaadin/terminal/gwt/client/ui/OptionGroupBaseConnector.java new file mode 100644 index 0000000000..7cdb55457d --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/OptionGroupBaseConnector.java @@ -0,0 +1,91 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public abstract class OptionGroupBaseConnector extends + AbstractComponentConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + + // Save details + getWidget().client = client; + getWidget().paintableId = uidl.getId(); + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().selectedKeys = uidl.getStringArrayVariableAsSet("selected"); + + getWidget().readonly = getState().isReadOnly(); + getWidget().disabled = getState().isDisabled(); + getWidget().multiselect = "multi".equals(uidl + .getStringAttribute("selectmode")); + getWidget().immediate = getState().isImmediate(); + getWidget().nullSelectionAllowed = uidl + .getBooleanAttribute("nullselect"); + getWidget().nullSelectionItemAvailable = uidl + .getBooleanAttribute("nullselectitem"); + + if (uidl.hasAttribute("cols")) { + getWidget().cols = uidl.getIntAttribute("cols"); + } + if (uidl.hasAttribute("rows")) { + getWidget().rows = uidl.getIntAttribute("rows"); + } + + final UIDL ops = uidl.getChildUIDL(0); + + if (getWidget().getColumns() > 0) { + getWidget().container.setWidth(getWidget().getColumns() + "em"); + if (getWidget().container != getWidget().optionsContainer) { + getWidget().optionsContainer.setWidth("100%"); + } + } + + getWidget().buildOptions(ops); + + if (uidl.getBooleanAttribute("allownewitem")) { + if (getWidget().newItemField == null) { + getWidget().newItemButton = new VNativeButton(); + getWidget().newItemButton.setText("+"); + getWidget().newItemButton.addClickHandler(getWidget()); + getWidget().newItemField = new VTextField(); + getWidget().newItemField.addKeyPressHandler(getWidget()); + } + getWidget().newItemField.setEnabled(!getWidget().disabled + && !getWidget().readonly); + getWidget().newItemButton.setEnabled(!getWidget().disabled + && !getWidget().readonly); + + if (getWidget().newItemField == null + || getWidget().newItemField.getParent() != getWidget().container) { + getWidget().container.add(getWidget().newItemField); + getWidget().container.add(getWidget().newItemButton); + final int w = getWidget().container.getOffsetWidth() + - getWidget().newItemButton.getOffsetWidth(); + getWidget().newItemField.setWidth(Math.max(w, 0) + "px"); + } + } else if (getWidget().newItemField != null) { + getWidget().container.remove(getWidget().newItemField); + getWidget().container.remove(getWidget().newItemButton); + } + + getWidget().setTabIndex( + uidl.hasAttribute("tabindex") ? uidl + .getIntAttribute("tabindex") : 0); + + } + + @Override + public VOptionGroupBase getWidget() { + return (VOptionGroupBase) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/OptionGroupConnector.java b/src/com/vaadin/terminal/gwt/client/ui/OptionGroupConnector.java new file mode 100644 index 0000000000..76204bcb07 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/OptionGroupConnector.java @@ -0,0 +1,70 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import java.util.ArrayList; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.ui.CheckBox; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.EventId; +import com.vaadin.terminal.gwt.client.UIDL; + +public class OptionGroupConnector extends OptionGroupBaseConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().htmlContentAllowed = uidl + .hasAttribute(VOptionGroup.HTML_CONTENT_ALLOWED); + + super.updateFromUIDL(uidl, client); + + getWidget().sendFocusEvents = client.hasEventListeners(this, + EventId.FOCUS); + getWidget().sendBlurEvents = client.hasEventListeners(this, + EventId.BLUR); + + if (getWidget().focusHandlers != null) { + for (HandlerRegistration reg : getWidget().focusHandlers) { + reg.removeHandler(); + } + getWidget().focusHandlers.clear(); + getWidget().focusHandlers = null; + + for (HandlerRegistration reg : getWidget().blurHandlers) { + reg.removeHandler(); + } + getWidget().blurHandlers.clear(); + getWidget().blurHandlers = null; + } + + if (getWidget().sendFocusEvents || getWidget().sendBlurEvents) { + getWidget().focusHandlers = new ArrayList(); + getWidget().blurHandlers = new ArrayList(); + + // add focus and blur handlers to checkboxes / radio buttons + for (Widget wid : getWidget().panel) { + if (wid instanceof CheckBox) { + getWidget().focusHandlers.add(((CheckBox) wid) + .addFocusHandler(getWidget())); + getWidget().blurHandlers.add(((CheckBox) wid) + .addBlurHandler(getWidget())); + } + } + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VOptionGroup.class); + } + + @Override + public VOptionGroup getWidget() { + return (VOptionGroup) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java new file mode 100644 index 0000000000..27f0f5adb0 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java @@ -0,0 +1,235 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.LayoutManager; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ComponentConnector; + +public class PanelConnector extends AbstractComponentContainerConnector + implements SimpleManagedLayout, PostLayoutListener { + + public static final String CLICK_EVENT_IDENTIFIER = "click"; + + private Integer uidlScrollTop; + + private ClickEventHandler clickEventHandler = new ClickEventHandler(this, + CLICK_EVENT_IDENTIFIER) { + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return getWidget().addDomHandler(handler, type); + } + }; + + private Integer uidlScrollLeft; + + @Override + public void init() { + VPanel panel = getWidget(); + LayoutManager layoutManager = getLayoutManager(); + + layoutManager.registerDependency(this, panel.captionNode); + layoutManager.registerDependency(this, panel.bottomDecoration); + layoutManager.registerDependency(this, panel.contentNode); + } + + @Override + protected boolean delegateCaptionHandling() { + return false; + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + if (isRealUpdate(uidl)) { + + // Handle caption displaying and style names, prior generics. + // Affects size calculations + + // Restore default stylenames + getWidget().contentNode.setClassName(VPanel.CLASSNAME + + "-content"); + getWidget().bottomDecoration + .setClassName(VPanel.CLASSNAME + "-deco"); + getWidget().captionNode.setClassName(VPanel.CLASSNAME + + "-caption"); + boolean hasCaption = false; + if (getState().getCaption() != null + && !"".equals(getState().getCaption())) { + getWidget().setCaption(getState().getCaption()); + hasCaption = true; + } else { + getWidget().setCaption(""); + getWidget().captionNode + .setClassName(VPanel.CLASSNAME + "-nocaption"); + } + + // Add proper stylenames for all elements. This way we can prevent + // unwanted CSS selector inheritance. + final String captionBaseClass = VPanel.CLASSNAME + + (hasCaption ? "-caption" : "-nocaption"); + final String contentBaseClass = VPanel.CLASSNAME + "-content"; + final String decoBaseClass = VPanel.CLASSNAME + "-deco"; + String captionClass = captionBaseClass; + String contentClass = contentBaseClass; + String decoClass = decoBaseClass; + if (getState().hasStyles()) { + final String[] styles = getState().getStyle().split(" "); + for (int i = 0; i < styles.length; i++) { + captionClass += " " + captionBaseClass + "-" + styles[i]; + contentClass += " " + contentBaseClass + "-" + styles[i]; + decoClass += " " + decoBaseClass + "-" + styles[i]; + } + } + getWidget().captionNode.setClassName(captionClass); + getWidget().contentNode.setClassName(contentClass); + getWidget().bottomDecoration.setClassName(decoClass); + } + // Ensure correct implementation + super.updateFromUIDL(uidl, client); + + if (!isRealUpdate(uidl)) { + return; + } + + clickEventHandler.handleEventHandlerRegistration(client); + + getWidget().client = client; + getWidget().id = uidl.getId(); + + getWidget().setIconUri(uidl, client); + + getWidget().handleError(uidl); + + // Render content + final UIDL layoutUidl = uidl.getChildUIDL(0); + final ComponentConnector newLayout = client.getPaintable(layoutUidl); + if (newLayout != getWidget().layout) { + if (getWidget().layout != null) { + client.unregisterPaintable(getWidget().layout); + } + getWidget() + .setWidget(newLayout.getWidget()); + getWidget().layout = newLayout; + } + getWidget().layout.updateFromUIDL(layoutUidl, client); + + // We may have actions attached to this panel + if (uidl.getChildCount() > 1) { + final int cnt = uidl.getChildCount(); + for (int i = 1; i < cnt; i++) { + UIDL childUidl = uidl.getChildUIDL(i); + if (childUidl.getTag().equals("actions")) { + if (getWidget().shortcutHandler == null) { + getWidget().shortcutHandler = new ShortcutActionHandler( + getId(), client); + } + getWidget().shortcutHandler + .updateActionMap(childUidl); + } + } + } + + if (uidl.hasVariable("scrollTop") + && uidl.getIntVariable("scrollTop") != getWidget().scrollTop) { + // Sizes are not yet up to date, so changing the scroll position + // is deferred to after the layout phase + uidlScrollTop = new Integer(uidl.getIntVariable("scrollTop")); + } + + if (uidl.hasVariable("scrollLeft") + && uidl.getIntVariable("scrollLeft") != getWidget().scrollLeft) { + // Sizes are not yet up to date, so changing the scroll position + // is deferred to after the layout phase + uidlScrollLeft = new Integer(uidl.getIntVariable("scrollLeft")); + } + + // And apply tab index + if (uidl.hasVariable("tabindex")) { + getWidget().contentNode.setTabIndex(uidl + .getIntVariable("tabindex")); + } + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + // NOP: layouts caption, errors etc not rendered in Panel + } + + @Override + public VPanel getWidget() { + return (VPanel) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VPanel.class); + } + + public void layout() { + updateSizes(); + } + + void updateSizes() { + VPanel panel = getWidget(); + + Style contentStyle = panel.contentNode.getStyle(); + if (isUndefinedHeight()) { + contentStyle.clearHeight(); + } else { + contentStyle.setHeight(100, Unit.PCT); + } + + if (isUndefinedWidth()) { + contentStyle.clearWidth(); + } else { + contentStyle.setWidth(100, Unit.PCT); + } + + LayoutManager layoutManager = getLayoutManager(); + int top = layoutManager.getOuterHeight(panel.captionNode); + int bottom = layoutManager.getOuterHeight(panel.bottomDecoration); + + Style style = panel.getElement().getStyle(); + panel.captionNode.getStyle().setMarginTop(-top, Unit.PX); + panel.bottomDecoration.getStyle().setMarginBottom(-bottom, Unit.PX); + style.setPaddingTop(top, Unit.PX); + style.setPaddingBottom(bottom, Unit.PX); + + // Update scroll positions + panel.contentNode.setScrollTop(panel.scrollTop); + panel.contentNode.setScrollLeft(panel.scrollLeft); + // Read actual value back to ensure update logic is correct + panel.scrollTop = panel.contentNode.getScrollTop(); + panel.scrollLeft = panel.contentNode.getScrollLeft(); + } + + public void postLayout() { + VPanel panel = getWidget(); + if (uidlScrollTop != null) { + panel.contentNode.setScrollTop(uidlScrollTop.intValue()); + // Read actual value back to ensure update logic is correct + // TODO Does this trigger reflows? + panel.scrollTop = panel.contentNode.getScrollTop(); + uidlScrollTop = null; + } + + if (uidlScrollLeft != null) { + panel.contentNode.setScrollLeft(uidlScrollLeft.intValue()); + // Read actual value back to ensure update logic is correct + // TODO Does this trigger reflows? + panel.scrollLeft = panel.contentNode.getScrollLeft(); + uidlScrollLeft = null; + } + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/PasswordFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/PasswordFieldConnector.java new file mode 100644 index 0000000000..5086bdb416 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/PasswordFieldConnector.java @@ -0,0 +1,28 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class PasswordFieldConnector extends TextFieldConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + } + + @Override + protected Widget createWidget() { + return GWT.create(VPasswordField.class); + } + + @Override + public VPasswordField getWidget() { + return (VPasswordField) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/PopupDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/PopupDateFieldConnector.java new file mode 100644 index 0000000000..4c315046aa --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/PopupDateFieldConnector.java @@ -0,0 +1,123 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import java.util.Date; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.DateTimeService; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusChangeListener; +import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener; + +public class PopupDateFieldConnector extends TextualDateConnector { + + /* + * (non-Javadoc) + * + * @see + * com.vaadin.terminal.gwt.client.ui.VTextualDate#updateFromUIDL(com.vaadin + * .terminal.gwt.client.UIDL, + * com.vaadin.terminal.gwt.client.ApplicationConnection) + */ + @Override + @SuppressWarnings("deprecation") + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + boolean lastReadOnlyState = getWidget().readonly; + boolean lastEnabledState = getWidget().isEnabled(); + + getWidget().parsable = uidl.getBooleanAttribute("parsable"); + + super.updateFromUIDL(uidl, client); + + String popupStyleNames = getStyleNameFromUIDL( + VPopupCalendar.POPUP_PRIMARY_STYLE_NAME, uidl, getState(), + false); + popupStyleNames += " " + + VDateField.CLASSNAME + + "-" + + VPopupCalendar + .resolutionToString(getWidget().currentResolution); + getWidget().popup.setStyleName(popupStyleNames); + + getWidget().calendar.setDateTimeService(getWidget() + .getDateTimeService()); + getWidget().calendar.setShowISOWeekNumbers(getWidget() + .isShowISOWeekNumbers()); + if (getWidget().calendar.getResolution() != getWidget().currentResolution) { + getWidget().calendar.setResolution(getWidget().currentResolution); + if (getWidget().calendar.getDate() != null) { + getWidget().calendar.setDate((Date) getWidget() + .getCurrentDate().clone()); + // force re-render when changing resolution only + getWidget().calendar.renderCalendar(); + } + } + getWidget().calendarToggle.setEnabled(getWidget().enabled); + + if (getWidget().currentResolution <= VPopupCalendar.RESOLUTION_MONTH) { + getWidget().calendar + .setFocusChangeListener(new FocusChangeListener() { + public void focusChanged(Date date) { + getWidget().updateValue(date); + getWidget().buildDate(); + Date date2 = getWidget().calendar.getDate(); + date2.setYear(date.getYear()); + date2.setMonth(date.getMonth()); + } + }); + } else { + getWidget().calendar.setFocusChangeListener(null); + } + + if (getWidget().currentResolution > VPopupCalendar.RESOLUTION_DAY) { + getWidget().calendar + .setTimeChangeListener(new TimeChangeListener() { + public void changed(int hour, int min, int sec, int msec) { + Date d = getWidget().getDate(); + if (d == null) { + // date currently null, use the value from + // calendarPanel + // (~ client time at the init of the widget) + d = (Date) getWidget().calendar.getDate() + .clone(); + } + d.setHours(hour); + d.setMinutes(min); + d.setSeconds(sec); + DateTimeService.setMilliseconds(d, msec); + + // Always update time changes to the server + getWidget().updateValue(d); + + // Update text field + getWidget().buildDate(); + } + }); + } + + if (getWidget().readonly) { + getWidget().calendarToggle.addStyleName(VPopupCalendar.CLASSNAME + + "-button-readonly"); + } else { + getWidget().calendarToggle.removeStyleName(VPopupCalendar.CLASSNAME + + "-button-readonly"); + } + + getWidget().calendarToggle.setEnabled(true); + } + + @Override + protected Widget createWidget() { + return GWT.create(VPopupCalendar.class); + } + + @Override + public VPopupCalendar getWidget() { + return (VPopupCalendar) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/PopupViewConnector.java b/src/com/vaadin/terminal/gwt/client/ui/PopupViewConnector.java new file mode 100644 index 0000000000..9211f50722 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/PopupViewConnector.java @@ -0,0 +1,113 @@ +/* + @VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.VCaption; +import com.vaadin.terminal.gwt.client.VCaptionWrapper; +import com.vaadin.terminal.gwt.client.ComponentConnector; + +public class PopupViewConnector extends AbstractComponentContainerConnector { + + @Override + protected boolean delegateCaptionHandling() { + return false; + } + + /** + * + * + * @see com.vaadin.terminal.gwt.client.ComponentConnector#updateFromUIDL(com.vaadin.terminal.gwt.client.UIDL, + * com.vaadin.terminal.gwt.client.ApplicationConnection) + */ + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // This call should be made first. Ensure correct implementation, + // and don't let the containing layout manage caption. + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + // These are for future server connections + getWidget().client = client; + getWidget().uidlId = uidl.getId(); + + getWidget().hostPopupVisible = uidl + .getBooleanVariable("popupVisibility"); + + getWidget().setHTML(uidl.getStringAttribute("html")); + + if (uidl.hasAttribute("hideOnMouseOut")) { + getWidget().popup.setHideOnMouseOut(uidl + .getBooleanAttribute("hideOnMouseOut")); + } + + // Render the popup if visible and show it. + if (getWidget().hostPopupVisible) { + UIDL popupUIDL = uidl.getChildUIDL(0); + + // showPopupOnTop(popup, hostReference); + getWidget().preparePopup(getWidget().popup); + getWidget().popup.updateFromUIDL(popupUIDL, client); + if (getState().hasStyles()) { + final String[] styles = getState().getStyle().split(" "); + final StringBuffer styleBuf = new StringBuffer(); + final String primaryName = getWidget().popup + .getStylePrimaryName(); + styleBuf.append(primaryName); + for (int i = 0; i < styles.length; i++) { + styleBuf.append(" "); + styleBuf.append(primaryName); + styleBuf.append("-"); + styleBuf.append(styles[i]); + } + getWidget().popup.setStyleName(styleBuf.toString()); + } else { + getWidget().popup + .setStyleName(getWidget().popup + .getStylePrimaryName()); + } + getWidget().showPopup(getWidget().popup); + + // The popup shouldn't be visible, try to hide it. + } else { + getWidget().popup.hide(); + } + }// updateFromUIDL + + public void updateCaption(ComponentConnector component, UIDL uidl) { + if (VCaption.isNeeded(uidl, component.getState())) { + if (getWidget().popup.captionWrapper != null) { + getWidget().popup.captionWrapper + .updateCaption(uidl); + } else { + getWidget().popup.captionWrapper = new VCaptionWrapper( + component, getConnection()); + getWidget().popup + .setWidget(getWidget().popup.captionWrapper); + getWidget().popup.captionWrapper + .updateCaption(uidl); + } + } else { + if (getWidget().popup.captionWrapper != null) { + getWidget().popup + .setWidget(getWidget().popup.popupComponentWidget); + } + } + } + + @Override + public VPopupView getWidget() { + return (VPopupView) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VPopupView.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/ProgressIndicatorConnector.java b/src/com/vaadin/terminal/gwt/client/ui/ProgressIndicatorConnector.java new file mode 100644 index 0000000000..1d48bf6017 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/ProgressIndicatorConnector.java @@ -0,0 +1,67 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class ProgressIndicatorConnector extends AbstractComponentConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + + // Ensure correct implementation, + // but don't let container manage caption etc. + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + // Save details + getWidget().client = client; + + getWidget().indeterminate = uidl + .getBooleanAttribute("indeterminate"); + + if (getWidget().indeterminate) { + String basename = VProgressIndicator.CLASSNAME + "-indeterminate"; + getWidget().addStyleName(basename); + if (getState().isDisabled()) { + getWidget().addStyleName(basename + "-disabled"); + } else { + getWidget().removeStyleName(basename + "-disabled"); + } + } else { + try { + final float f = Float.parseFloat(uidl + .getStringAttribute("state")); + final int size = Math.round(100 * f); + DOM.setStyleAttribute(getWidget().indicator, + "width", size + "%"); + } catch (final Exception e) { + } + } + + if (!getState().isDisabled()) { + getWidget().interval = uidl + .getIntAttribute("pollinginterval"); + getWidget().poller + .scheduleRepeating(getWidget().interval); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VProgressIndicator.class); + } + + @Override + public VProgressIndicator getWidget() { + return (VProgressIndicator) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java new file mode 100644 index 0000000000..c495ce5a2b --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java @@ -0,0 +1,323 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.HashSet; +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.History; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.RootPanel; +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.ConnectorMap; +import com.vaadin.terminal.gwt.client.Focusable; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.VConsole; + +public class RootConnector extends AbstractComponentContainerConnector { + + private static final String CLICK_EVENT_IDENTIFIER = PanelConnector.CLICK_EVENT_IDENTIFIER; + + @Override + public void updateFromUIDL(final UIDL uidl, ApplicationConnection client) { + getWidget().rendering = true; + // As VView is not created in the same way as all other paintables we + // have to set the id here + setId(uidl.getId()); + getWidget().id = uidl.getId(); + boolean firstPaint = getWidget().connection == null; + getWidget().connection = client; + + getWidget().immediate = getState().isImmediate(); + getWidget().resizeLazy = uidl.hasAttribute(VView.RESIZE_LAZY); + String newTheme = uidl.getStringAttribute("theme"); + if (getWidget().theme != null && !newTheme.equals(getWidget().theme)) { + // Complete page refresh is needed due css can affect layout + // calculations etc + getWidget().reloadHostPage(); + } else { + getWidget().theme = newTheme; + } + // this also implicitly removes old styles + getWidget() + .setStyleName( + getWidget().getStylePrimaryName() + " " + + getState().getStyle()); + + clickEventHandler.handleEventHandlerRegistration(client); + + if (!getWidget().isEmbedded() && getState().getCaption() != null) { + // only change window title if we're in charge of the whole page + com.google.gwt.user.client.Window.setTitle(getState().getCaption()); + } + + // Process children + int childIndex = 0; + + // Open URL:s + boolean isClosed = false; // was this window closed? + while (childIndex < uidl.getChildCount() + && "open".equals(uidl.getChildUIDL(childIndex).getTag())) { + final UIDL open = uidl.getChildUIDL(childIndex); + final String url = client.translateVaadinUri(open + .getStringAttribute("src")); + final String target = open.getStringAttribute("name"); + if (target == null) { + // source will be opened to this browser window, but we may have + // to finish rendering this window in case this is a download + // (and window stays open). + Scheduler.get().scheduleDeferred(new Command() { + public void execute() { + VView.goTo(url); + } + }); + } else if ("_self".equals(target)) { + // This window is closing (for sure). Only other opens are + // relevant in this change. See #3558, #2144 + isClosed = true; + VView.goTo(url); + } else { + String options; + if (open.hasAttribute("border")) { + if (open.getStringAttribute("border").equals("minimal")) { + options = "menubar=yes,location=no,status=no"; + } else { + options = "menubar=no,location=no,status=no"; + } + + } else { + options = "resizable=yes,menubar=yes,toolbar=yes,directories=yes,location=yes,scrollbars=yes,status=yes"; + } + + if (open.hasAttribute("width")) { + int w = open.getIntAttribute("width"); + options += ",width=" + w; + } + if (open.hasAttribute("height")) { + int h = open.getIntAttribute("height"); + options += ",height=" + h; + } + + Window.open(url, target, options); + } + childIndex++; + } + if (isClosed) { + // don't render the content, something else will be opened to this + // browser view + getWidget().rendering = false; + return; + } + + // Draw this application level window + UIDL childUidl = uidl.getChildUIDL(childIndex); + final ComponentConnector lo = client.getPaintable(childUidl); + + if (getWidget().layout != null) { + if (getWidget().layout != lo) { + // remove old + client.unregisterPaintable(getWidget().layout); + // add new + getWidget().setWidget(lo.getWidget()); + getWidget().layout = lo; + } + } else { + getWidget().setWidget(lo.getWidget()); + getWidget().layout = lo; + } + + getWidget().layout.updateFromUIDL(childUidl, client); + + // Save currently open subwindows to track which will need to be closed + final HashSet removedSubWindows = new HashSet( + getWidget().subWindows); + + // Handle other UIDL children + while ((childUidl = uidl.getChildUIDL(++childIndex)) != null) { + String tag = childUidl.getTag().intern(); + if (tag == "actions") { + if (getWidget().actionHandler == null) { + getWidget().actionHandler = new ShortcutActionHandler( + getWidget().id, client); + } + getWidget().actionHandler.updateActionMap(childUidl); + } else if (tag == "execJS") { + String script = childUidl.getStringAttribute("script"); + VView.eval(script); + } else if (tag == "notifications") { + for (final Iterator it = childUidl.getChildIterator(); it + .hasNext();) { + final UIDL notification = (UIDL) it.next(); + VNotification.showNotification(client, notification); + } + } else { + // subwindows + final WindowConnector w = (WindowConnector) client + .getPaintable(childUidl); + VWindow windowWidget = w.getWidget(); + if (getWidget().subWindows.contains(windowWidget)) { + removedSubWindows.remove(windowWidget); + } else { + getWidget().subWindows.add(windowWidget); + } + w.updateFromUIDL(childUidl, client); + } + } + + // Close old windows which where not in UIDL anymore + for (final Iterator rem = removedSubWindows.iterator(); rem + .hasNext();) { + final VWindow w = rem.next(); + client.unregisterPaintable(ConnectorMap.get(getConnection()) + .getConnector(w)); + getWidget().subWindows.remove(w); + w.hide(); + } + + if (uidl.hasAttribute("focused")) { + // set focused component when render phase is finished + Scheduler.get().scheduleDeferred(new Command() { + public void execute() { + ComponentConnector paintable = (ComponentConnector) uidl + .getPaintableAttribute("focused", getConnection()); + + final Widget toBeFocused = paintable.getWidget(); + /* + * Two types of Widgets can be focused, either implementing + * GWT HasFocus of a thinner Vaadin specific Focusable + * interface. + */ + if (toBeFocused instanceof com.google.gwt.user.client.ui.Focusable) { + final com.google.gwt.user.client.ui.Focusable toBeFocusedWidget = (com.google.gwt.user.client.ui.Focusable) toBeFocused; + toBeFocusedWidget.setFocus(true); + } else if (toBeFocused instanceof Focusable) { + ((Focusable) toBeFocused).focus(); + } else { + VConsole.log("Could not focus component"); + } + } + }); + } + + // Add window listeners on first paint, to prevent premature + // variablechanges + if (firstPaint) { + Window.addWindowClosingHandler(getWidget()); + Window.addResizeHandler(getWidget()); + } + + getWidget().onResize(); + + // finally set scroll position from UIDL + if (uidl.hasVariable("scrollTop")) { + getWidget().scrollable = true; + getWidget().scrollTop = uidl.getIntVariable("scrollTop"); + DOM.setElementPropertyInt(getWidget().getElement(), "scrollTop", + getWidget().scrollTop); + getWidget().scrollLeft = uidl.getIntVariable("scrollLeft"); + DOM.setElementPropertyInt(getWidget().getElement(), "scrollLeft", + getWidget().scrollLeft); + } else { + getWidget().scrollable = false; + } + + // Safari workaround must be run after scrollTop is updated as it sets + // scrollTop using a deferred command. + if (BrowserInfo.get().isSafari()) { + Util.runWebkitOverflowAutoFix(getWidget().getElement()); + } + + getWidget().scrollIntoView(uidl); + + if (uidl.hasAttribute(VView.FRAGMENT_VARIABLE)) { + getWidget().currentFragment = uidl + .getStringAttribute(VView.FRAGMENT_VARIABLE); + if (!getWidget().currentFragment.equals(History.getToken())) { + History.newItem(getWidget().currentFragment, true); + } + } else { + // Initial request for which the server doesn't yet have a fragment + // (and haven't shown any interest in getting one) + getWidget().currentFragment = History.getToken(); + + // Include current fragment in the next request + client.updateVariable(getWidget().id, VView.FRAGMENT_VARIABLE, + getWidget().currentFragment, false); + } + + getWidget().rendering = false; + } + + public void init(String rootPanelId, + ApplicationConnection applicationConnection) { + DOM.sinkEvents(getWidget().getElement(), Event.ONKEYDOWN + | Event.ONSCROLL); + + // iview is focused when created so element needs tabIndex + // 1 due 0 is at the end of natural tabbing order + DOM.setElementProperty(getWidget().getElement(), "tabIndex", "1"); + + RootPanel root = RootPanel.get(rootPanelId); + + // Remove the v-app-loading or any splash screen added inside the div by + // the user + root.getElement().setInnerHTML(""); + // For backwards compatibility with static index pages only. + // No longer added by AbstractApplicationServlet/Portlet + root.removeStyleName("v-app-loading"); + + String themeUri = applicationConnection.getConfiguration() + .getThemeUri(); + String themeName = themeUri.substring(themeUri.lastIndexOf('/')); + themeName = themeName.replaceAll("[^a-zA-Z0-9]", ""); + root.addStyleName("v-theme-" + themeName); + + root.add(getWidget()); + + if (applicationConnection.getConfiguration().isStandalone()) { + // set focus to iview element by default to listen possible keyboard + // shortcuts. For embedded applications this is unacceptable as we + // don't want to steal focus from the main page nor we don't want + // side-effects from focusing (scrollIntoView). + getWidget().getElement().focus(); + } + } + + private ClickEventHandler clickEventHandler = new ClickEventHandler(this, + CLICK_EVENT_IDENTIFIER) { + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return getWidget().addDomHandler(handler, type); + } + }; + + public void updateCaption(ComponentConnector component, UIDL uidl) { + // NOP The main view never draws caption for its layout + } + + @Override + public VView getWidget() { + return (VView) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VView.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/SliderConnector.java b/src/com/vaadin/terminal/gwt/client/ui/SliderConnector.java new file mode 100644 index 0000000000..d1fac2ecbe --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/SliderConnector.java @@ -0,0 +1,80 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class SliderConnector extends AbstractComponentConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + + getWidget().client = client; + getWidget().id = uidl.getId(); + + // Ensure correct implementation + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().immediate = getState().isImmediate(); + getWidget().disabled = getState().isDisabled(); + getWidget().readonly = getState().isReadOnly(); + + getWidget().vertical = uidl.hasAttribute("vertical"); + + // TODO should these style names be used? + String style = getState().getStyle(); + + if (getWidget().vertical) { + getWidget().addStyleName( + VSlider.CLASSNAME + "-vertical"); + } else { + getWidget().removeStyleName( + VSlider.CLASSNAME + "-vertical"); + } + + getWidget().min = uidl.getDoubleAttribute("min"); + getWidget().max = uidl.getDoubleAttribute("max"); + getWidget().resolution = uidl.getIntAttribute("resolution"); + getWidget().value = new Double( + uidl.getDoubleVariable("value")); + + getWidget().setFeedbackValue(getWidget().value); + + getWidget().buildBase(); + + if (!getWidget().vertical) { + // Draw handle with a delay to allow base to gain maximum width + Scheduler.get().scheduleDeferred(new Command() { + public void execute() { + getWidget().buildHandle(); + getWidget().setValue( + getWidget().value, false); + } + }); + } else { + getWidget().buildHandle(); + getWidget().setValue(getWidget().value, + false); + } + } + + @Override + public VSlider getWidget() { + return (VSlider) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VSlider.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TableConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TableConnector.java new file mode 100644 index 0000000000..df762ef24e --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TableConnector.java @@ -0,0 +1,270 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.dom.client.Style.Position; +import com.google.gwt.user.client.Command; +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.DirectionalManagedLayout; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.ComponentConnector; + +public class TableConnector extends AbstractComponentContainerConnector + implements DirectionalManagedLayout { + + /* + * (non-Javadoc) + * + * @see + * com.vaadin.terminal.gwt.client.Paintable#updateFromUIDL(com.vaadin.terminal + * .gwt.client.UIDL, com.vaadin.terminal.gwt.client.ApplicationConnection) + */ + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().rendering = true; + + if (uidl.hasAttribute(VScrollTable.ATTRIBUTE_PAGEBUFFER_FIRST)) { + getWidget().serverCacheFirst = uidl + .getIntAttribute(VScrollTable.ATTRIBUTE_PAGEBUFFER_FIRST); + getWidget().serverCacheLast = uidl + .getIntAttribute(VScrollTable.ATTRIBUTE_PAGEBUFFER_LAST); + } else { + getWidget().serverCacheFirst = -1; + getWidget().serverCacheLast = -1; + } + /* + * We need to do this before updateComponent since updateComponent calls + * this.setHeight() which will calculate a new body height depending on + * the space available. + */ + if (uidl.hasAttribute("colfooters")) { + getWidget().showColFooters = uidl + .getBooleanAttribute("colfooters"); + } + + getWidget().tFoot + .setVisible(getWidget().showColFooters); + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + getWidget().rendering = false; + return; + } + + getWidget().enabled = !getState().isDisabled(); + + if (BrowserInfo.get().isIE8() && !getWidget().enabled) { + /* + * The disabled shim will not cover the table body if it is relative + * in IE8. See #7324 + */ + getWidget().scrollBodyPanel.getElement().getStyle() + .setPosition(Position.STATIC); + } else if (BrowserInfo.get().isIE8()) { + getWidget().scrollBodyPanel.getElement().getStyle() + .setPosition(Position.RELATIVE); + } + + getWidget().client = client; + getWidget().paintableId = uidl.getStringAttribute("id"); + getWidget().immediate = getState().isImmediate(); + + int previousTotalRows = getWidget().totalRows; + getWidget().updateTotalRows(uidl); + boolean totalRowsChanged = (getWidget().totalRows != previousTotalRows); + + getWidget().updateDragMode(uidl); + + getWidget().updateSelectionProperties(uidl, getState()); + + if (uidl.hasAttribute("alb")) { + getWidget().bodyActionKeys = uidl + .getStringArrayAttribute("alb"); + } else { + // Need to clear the actions if the action handlers have been + // removed + getWidget().bodyActionKeys = null; + } + + getWidget().setCacheRateFromUIDL(uidl); + + getWidget().recalcWidths = uidl + .hasAttribute("recalcWidths"); + if (getWidget().recalcWidths) { + getWidget().tHead.clear(); + getWidget().tFoot.clear(); + } + + getWidget().updatePageLength(uidl); + + getWidget().updateFirstVisibleAndScrollIfNeeded(uidl); + + getWidget().showRowHeaders = uidl + .getBooleanAttribute("rowheaders"); + getWidget().showColHeaders = uidl + .getBooleanAttribute("colheaders"); + + getWidget().updateSortingProperties(uidl); + + boolean keyboardSelectionOverRowFetchInProgress = getWidget() + .selectSelectedRows(uidl); + + getWidget().updateActionMap(uidl); + + getWidget().updateColumnProperties(uidl); + + UIDL ac = uidl.getChildByTagName("-ac"); + if (ac == null) { + if (getWidget().dropHandler != null) { + // remove dropHandler if not present anymore + getWidget().dropHandler = null; + } + } else { + if (getWidget().dropHandler == null) { + getWidget().dropHandler = getWidget().new VScrollTableDropHandler(); + } + getWidget().dropHandler.updateAcceptRules(ac); + } + + UIDL partialRowAdditions = uidl.getChildByTagName("prows"); + UIDL partialRowUpdates = uidl.getChildByTagName("urows"); + if (partialRowUpdates != null || partialRowAdditions != null) { + // we may have pending cache row fetch, cancel it. See #2136 + getWidget().rowRequestHandler.cancel(); + + getWidget().updateRowsInBody(partialRowUpdates); + getWidget().addAndRemoveRows(partialRowAdditions); + } else { + UIDL rowData = uidl.getChildByTagName("rows"); + if (rowData != null) { + // we may have pending cache row fetch, cancel it. See #2136 + getWidget().rowRequestHandler.cancel(); + + if (!getWidget().recalcWidths + && getWidget().initializedAndAttached) { + getWidget().updateBody(rowData, + uidl.getIntAttribute("firstrow"), + uidl.getIntAttribute("rows")); + if (getWidget().headerChangedDuringUpdate) { + getWidget().triggerLazyColumnAdjustment( + true); + } else if (!getWidget() + .isScrollPositionVisible() + || totalRowsChanged + || getWidget().lastRenderedHeight != getWidget().scrollBody + .getOffsetHeight()) { + // webkits may still bug with their disturbing scrollbar + // bug, see #3457 + // Run overflow fix for the scrollable area + // #6698 - If there's a scroll going on, don't abort it + // by changing overflows as the length of the contents + // *shouldn't* have changed (unless the number of rows + // or the height of the widget has also changed) + Scheduler.get().scheduleDeferred(new Command() { + public void execute() { + Util.runWebkitOverflowAutoFix(getWidget().scrollBodyPanel + .getElement()); + } + }); + } + } else { + getWidget().initializeRows(uidl, rowData); + } + } + } + + if (!getWidget().isSelectable()) { + getWidget().scrollBody + .addStyleName(VScrollTable.CLASSNAME + "-body-noselection"); + } else { + getWidget().scrollBody + .removeStyleName(VScrollTable.CLASSNAME + + "-body-noselection"); + } + + getWidget().hideScrollPositionAnnotation(); + getWidget().purgeUnregistryBag(); + + // selection is no in sync with server, avoid excessive server visits by + // clearing to flag used during the normal operation + if (!keyboardSelectionOverRowFetchInProgress) { + getWidget().selectionChanged = false; + } + + /* + * This is called when the Home or page up button has been pressed in + * selectable mode and the next selected row was not yet rendered in the + * client + */ + if (getWidget().selectFirstItemInNextRender + || getWidget().focusFirstItemInNextRender) { + getWidget().selectFirstRenderedRowInViewPort( + getWidget().focusFirstItemInNextRender); + getWidget().selectFirstItemInNextRender = getWidget().focusFirstItemInNextRender = false; + } + + /* + * This is called when the page down or end button has been pressed in + * selectable mode and the next selected row was not yet rendered in the + * client + */ + if (getWidget().selectLastItemInNextRender + || getWidget().focusLastItemInNextRender) { + getWidget().selectLastRenderedRowInViewPort( + getWidget().focusLastItemInNextRender); + getWidget().selectLastItemInNextRender = getWidget().focusLastItemInNextRender = false; + } + getWidget().multiselectPending = false; + + if (getWidget().focusedRow != null) { + if (!getWidget().focusedRow.isAttached() + && !getWidget().rowRequestHandler.isRunning()) { + // focused row has been orphaned, can't focus + getWidget().focusRowFromBody(); + } + } + + getWidget().tabIndex = uidl.hasAttribute("tabindex") ? uidl + .getIntAttribute("tabindex") : 0; + getWidget().setProperTabIndex(); + + getWidget().resizeSortedColumnForSortIndicator(); + + // Remember this to detect situations where overflow hack might be + // needed during scrolling + getWidget().lastRenderedHeight = getWidget().scrollBody + .getOffsetHeight(); + + getWidget().rendering = false; + getWidget().headerChangedDuringUpdate = false; + + } + + @Override + protected Widget createWidget() { + return GWT.create(VScrollTable.class); + } + + @Override + public VScrollTable getWidget() { + return (VScrollTable) super.getWidget(); + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + // NOP, not rendered + } + + public void layoutVertically() { + getWidget().updateHeight(); + } + + public void layoutHorizontally() { + getWidget().updateWidth(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TabsheetBaseConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TabsheetBaseConnector.java new file mode 100644 index 0000000000..3475f2d716 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TabsheetBaseConnector.java @@ -0,0 +1,103 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.ArrayList; +import java.util.Iterator; + +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ConnectorMap; +import com.vaadin.terminal.gwt.client.UIDL; + +public abstract class TabsheetBaseConnector extends + AbstractComponentContainerConnector { + + public static final String ATTRIBUTE_TAB_DISABLED = "disabled"; + public static final String ATTRIBUTE_TAB_DESCRIPTION = "description"; + public static final String ATTRIBUTE_TAB_CAPTION = "caption"; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().client = client; + + // Ensure correct implementation + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + // Update member references + getWidget().id = uidl.getId(); + getWidget().disabled = getState().isDisabled(); + + // Render content + final UIDL tabs = uidl.getChildUIDL(0); + + // Paintables in the TabSheet before update + ArrayList oldWidgets = new ArrayList(); + for (Iterator iterator = getWidget().getWidgetIterator(); iterator + .hasNext();) { + oldWidgets.add(iterator.next()); + } + + // Clear previous values + getWidget().tabKeys.clear(); + getWidget().disabledTabKeys.clear(); + + int index = 0; + for (final Iterator it = tabs.getChildIterator(); it.hasNext();) { + final UIDL tab = (UIDL) it.next(); + final String key = tab.getStringAttribute("key"); + final boolean selected = tab.getBooleanAttribute("selected"); + final boolean hidden = tab.getBooleanAttribute("hidden"); + + if (tab.getBooleanAttribute(ATTRIBUTE_TAB_DISABLED)) { + getWidget().disabledTabKeys.add(key); + } + + getWidget().tabKeys.add(key); + + if (selected) { + getWidget().activeTabIndex = index; + } + getWidget().renderTab(tab, index, selected, hidden); + index++; + } + + int tabCount = getWidget().getTabCount(); + while (tabCount-- > index) { + getWidget().removeTab(index); + } + + for (int i = 0; i < getWidget().getTabCount(); i++) { + ComponentConnector p = getWidget().getTab(i); + // During the initial rendering the paintable might be null (this is + // weird...) + if (p != null) { + oldWidgets.remove(p.getWidget()); + } + } + + // Perform unregister for any paintables removed during update + for (Iterator iterator = oldWidgets.iterator(); iterator + .hasNext();) { + Widget oldWidget = iterator.next(); + ComponentConnector oldPaintable = ConnectorMap.get(client) + .getConnector(oldWidget); + if (oldWidget.isAttached()) { + oldWidget.removeFromParent(); + } + ConnectorMap.get(client).unregisterConnector(oldPaintable); + } + + } + + @Override + public VTabsheetBase getWidget() { + return (VTabsheetBase) super.getWidget(); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TabsheetConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TabsheetConnector.java new file mode 100644 index 0000000000..ad53bae4f4 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TabsheetConnector.java @@ -0,0 +1,100 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.UIDL; + +public class TabsheetConnector extends TabsheetBaseConnector implements + SimpleManagedLayout { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + + if (isRealUpdate(uidl)) { + // Handle stylename changes before generics (might affect size + // calculations) + getWidget().handleStyleNames(uidl, getState()); + } + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + // tabs; push or not + if (!isUndefinedWidth()) { + // FIXME: This makes tab sheet tabs go to 1px width on every update + // and then back to original width + // update width later, in updateTabScroller(); + DOM.setStyleAttribute(getWidget().tabs, "width", "1px"); + DOM.setStyleAttribute(getWidget().tabs, "overflow", "hidden"); + } else { + getWidget().showAllTabs(); + DOM.setStyleAttribute(getWidget().tabs, "width", ""); + DOM.setStyleAttribute(getWidget().tabs, "overflow", "visible"); + getWidget().updateDynamicWidth(); + } + + if (!isUndefinedHeight()) { + // Must update height after the styles have been set + getWidget().updateContentNodeHeight(); + getWidget().updateOpenTabSize(); + } + + getWidget().iLayout(); + + // Re run relative size update to ensure optimal scrollbars + // TODO isolate to situation that visible tab has undefined height + try { + client.handleComponentRelativeSize(getWidget().tp + .getWidget(getWidget().tp.getVisibleWidget())); + } catch (Exception e) { + // Ignore, most likely empty tabsheet + } + + getWidget().waitingForResponse = false; + } + + @Override + protected Widget createWidget() { + return GWT.create(VTabsheet.class); + } + + @Override + public VTabsheet getWidget() { + return (VTabsheet) super.getWidget(); + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + /* Tabsheet does not render its children's captions */ + } + + public void layout() { + VTabsheet tabsheet = getWidget(); + + tabsheet.updateContentNodeHeight(); + + if (isUndefinedWidth()) { + tabsheet.contentNode.getStyle().setProperty("width", ""); + } else { + int contentWidth = tabsheet.getOffsetWidth() + - tabsheet.getContentAreaBorderWidth(); + if (contentWidth < 0) { + contentWidth = 0; + } + tabsheet.contentNode.getStyle().setProperty("width", + contentWidth + "px"); + } + + tabsheet.updateOpenTabSize(); + tabsheet.iLayout(); + + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TextAreaConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TextAreaConnector.java new file mode 100644 index 0000000000..d5dc6dea4e --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TextAreaConnector.java @@ -0,0 +1,38 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class TextAreaConnector extends TextFieldConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // Call parent renderer explicitly + super.updateFromUIDL(uidl, client); + + if (uidl.hasAttribute("rows")) { + getWidget().setRows(uidl.getIntAttribute("rows")); + } + + if (getWidget().getMaxLength() >= 0) { + getWidget().sinkEvents(Event.ONKEYUP); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VTextArea.class); + } + + @Override + public VTextArea getWidget() { + return (VTextArea) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TextFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TextFieldConnector.java new file mode 100644 index 0000000000..ae2b9253c1 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TextFieldConnector.java @@ -0,0 +1,121 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener; + +public class TextFieldConnector extends AbstractComponentConnector implements + BeforeShortcutActionListener { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // Save details + getWidget().client = client; + getWidget().paintableId = uidl.getId(); + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().setReadOnly(getState().isReadOnly()); + + getWidget().inputPrompt = uidl + .getStringAttribute(VTextField.ATTR_INPUTPROMPT); + + getWidget().setMaxLength( + uidl.hasAttribute("maxLength") ? uidl + .getIntAttribute("maxLength") : -1); + + getWidget().immediate = getState().isImmediate(); + + getWidget().listenTextChangeEvents = client + .hasEventListeners(this, "ie"); + if (getWidget().listenTextChangeEvents) { + getWidget().textChangeEventMode = uidl + .getStringAttribute(VTextField.ATTR_TEXTCHANGE_EVENTMODE); + if (getWidget().textChangeEventMode + .equals(VTextField.TEXTCHANGE_MODE_EAGER)) { + getWidget().textChangeEventTimeout = 1; + } else { + getWidget().textChangeEventTimeout = uidl + .getIntAttribute(VTextField.ATTR_TEXTCHANGE_TIMEOUT); + if (getWidget().textChangeEventTimeout < 1) { + // Sanitize and allow lazy/timeout with timeout set to 0 to + // work as eager + getWidget().textChangeEventTimeout = 1; + } + } + getWidget().sinkEvents(VTextField.TEXTCHANGE_EVENTS); + getWidget().attachCutEventListener( + getWidget().getElement()); + } + + if (uidl.hasAttribute("cols")) { + getWidget().setColumns( + new Integer(uidl.getStringAttribute("cols")).intValue()); + } + + final String text = uidl.getStringVariable("text"); + + /* + * We skip the text content update if field has been repainted, but text + * has not been changed. Additional sanity check verifies there is no + * change in the que (in which case we count more on the server side + * value). + */ + if (!(uidl + .getBooleanAttribute(VTextField.ATTR_NO_VALUE_CHANGE_BETWEEN_PAINTS) + && getWidget().valueBeforeEdit != null && text + .equals(getWidget().valueBeforeEdit))) { + getWidget().updateFieldContent(text); + } + + if (uidl.hasAttribute("selpos")) { + final int pos = uidl.getIntAttribute("selpos"); + final int length = uidl.getIntAttribute("sellen"); + /* + * Gecko defers setting the text so we need to defer the selection. + */ + Scheduler.get().scheduleDeferred(new Command() { + public void execute() { + getWidget().setSelectionRange(pos, length); + } + }); + } + + // Here for backward compatibility; to be moved to TextArea. + // Optimization: server does not send attribute for the default 'true' + // state. + if (uidl.hasAttribute("wordwrap") + && uidl.getBooleanAttribute("wordwrap") == false) { + getWidget().setWordwrap(false); + } else { + getWidget().setWordwrap(true); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VTextField.class); + } + + @Override + public VTextField getWidget() { + return (VTextField) super.getWidget(); + } + + public void onBeforeShortcutAction(Event e) { + getWidget().valueChange(false); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TextualDateConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TextualDateConnector.java new file mode 100644 index 0000000000..bb833dcaf5 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TextualDateConnector.java @@ -0,0 +1,58 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class TextualDateConnector extends AbstractDateFieldConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + int origRes = getWidget().currentResolution; + String oldLocale = getWidget().currentLocale; + super.updateFromUIDL(uidl, client); + if (origRes != getWidget().currentResolution + || oldLocale != getWidget().currentLocale) { + // force recreating format string + getWidget().formatStr = null; + } + if (uidl.hasAttribute("format")) { + getWidget().formatStr = uidl + .getStringAttribute("format"); + } + + getWidget().inputPrompt = uidl + .getStringAttribute(VTextualDate.ATTR_INPUTPROMPT); + + getWidget().lenient = !uidl.getBooleanAttribute("strict"); + + getWidget().buildDate(); + // not a FocusWidget -> needs own tabindex handling + if (uidl.hasAttribute("tabindex")) { + getWidget().text.setTabIndex(uidl + .getIntAttribute("tabindex")); + } + + if (getWidget().readonly) { + getWidget().text.addStyleDependentName("readonly"); + } else { + getWidget().text.removeStyleDependentName("readonly"); + } + + } + + @Override + protected Widget createWidget() { + return GWT.create(VTextualDate.class); + } + + @Override + public VTextualDate getWidget() { + return (VTextualDate) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TreeConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TreeConnector.java new file mode 100644 index 0000000000..1b88c63b74 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TreeConnector.java @@ -0,0 +1,242 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.TooltipInfo; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ui.VTree.TreeNode; + +public class TreeConnector extends AbstractComponentConnector { + + public static final String ATTRIBUTE_NODE_STYLE = "style"; + public static final String ATTRIBUTE_NODE_CAPTION = "caption"; + public static final String ATTRIBUTE_NODE_ICON = AbstractComponentConnector.ATTRIBUTE_ICON; + + public static final String ATTRIBUTE_ACTION_CAPTION = "caption"; + public static final String ATTRIBUTE_ACTION_ICON = AbstractComponentConnector.ATTRIBUTE_ICON; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // Ensure correct implementation and let container manage caption + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().rendering = true; + + getWidget().client = client; + + if (uidl.hasAttribute("partialUpdate")) { + handleUpdate(uidl); + getWidget().rendering = false; + return; + } + + getWidget().paintableId = uidl.getId(); + + getWidget().immediate = getState().isImmediate(); + + getWidget().disabled = getState().isDisabled(); + getWidget().readonly = getState().isReadOnly(); + + getWidget().dragMode = uidl.hasAttribute("dragMode") ? uidl + .getIntAttribute("dragMode") : 0; + + getWidget().isNullSelectionAllowed = uidl + .getBooleanAttribute("nullselect"); + + if (uidl.hasAttribute("alb")) { + getWidget().bodyActionKeys = uidl + .getStringArrayAttribute("alb"); + } + + getWidget().body.clear(); + // clear out any references to nodes that no longer are attached + getWidget().clearNodeToKeyMap(); + TreeNode childTree = null; + UIDL childUidl = null; + for (final Iterator i = uidl.getChildIterator(); i.hasNext();) { + childUidl = (UIDL) i.next(); + if ("actions".equals(childUidl.getTag())) { + updateActionMap(childUidl); + continue; + } else if ("-ac".equals(childUidl.getTag())) { + getWidget().updateDropHandler(childUidl); + continue; + } + childTree = getWidget().new TreeNode(); + updateNodeFromUIDL(childTree, childUidl); + getWidget().body.add(childTree); + childTree.addStyleDependentName("root"); + childTree.childNodeContainer.addStyleDependentName("root"); + } + if (childTree != null && childUidl != null) { + boolean leaf = !childUidl.getTag().equals("node"); + childTree.addStyleDependentName(leaf ? "leaf-last" : "last"); + childTree.childNodeContainer.addStyleDependentName("last"); + } + final String selectMode = uidl.getStringAttribute("selectmode"); + getWidget().selectable = !"none".equals(selectMode); + getWidget().isMultiselect = "multi".equals(selectMode); + + if (getWidget().isMultiselect) { + getWidget().multiSelectMode = uidl + .getIntAttribute("multiselectmode"); + } + + getWidget().selectedIds = uidl + .getStringArrayVariableAsSet("selected"); + + // Update lastSelection and focusedNode to point to *actual* nodes again + // after the old ones have been cleared from the body. This fixes focus + // and keyboard navigation issues as described in #7057 and other + // tickets. + if (getWidget().lastSelection != null) { + getWidget().lastSelection = getWidget() + .getNodeByKey(getWidget().lastSelection.key); + } + if (getWidget().focusedNode != null) { + getWidget().setFocusedNode( + getWidget().getNodeByKey( + getWidget().focusedNode.key)); + } + + if (getWidget().lastSelection == null + && getWidget().focusedNode == null + && !getWidget().selectedIds.isEmpty()) { + getWidget().setFocusedNode( + getWidget().getNodeByKey( + getWidget().selectedIds.iterator() + .next())); + getWidget().focusedNode.setFocused(false); + } + + getWidget().rendering = false; + + } + + @Override + protected Widget createWidget() { + return GWT.create(VTree.class); + } + + @Override + public VTree getWidget() { + return (VTree) super.getWidget(); + } + + private void handleUpdate(UIDL uidl) { + final TreeNode rootNode = getWidget().getNodeByKey( + uidl.getStringAttribute("rootKey")); + if (rootNode != null) { + if (!rootNode.getState()) { + // expanding node happened server side + rootNode.setState(true, false); + } + renderChildNodes(rootNode, (Iterator) uidl.getChildIterator()); + } + } + + /** + * Registers action for the root and also for individual nodes + * + * @param uidl + */ + private void updateActionMap(UIDL uidl) { + final Iterator it = uidl.getChildIterator(); + while (it.hasNext()) { + final UIDL action = (UIDL) it.next(); + final String key = action.getStringAttribute("key"); + final String caption = action + .getStringAttribute(ATTRIBUTE_ACTION_CAPTION); + String iconUrl = null; + if (action.hasAttribute(ATTRIBUTE_ACTION_ICON)) { + iconUrl = getConnection().translateVaadinUri( + action.getStringAttribute(ATTRIBUTE_ACTION_ICON)); + } + getWidget().registerAction(key, caption, iconUrl); + } + + } + + public void updateNodeFromUIDL(TreeNode treeNode, UIDL uidl) { + String nodeKey = uidl.getStringAttribute("key"); + treeNode.setText(uidl.getStringAttribute(ATTRIBUTE_NODE_CAPTION)); + treeNode.key = nodeKey; + + getWidget().registerNode(treeNode); + + if (uidl.hasAttribute("al")) { + treeNode.actionKeys = uidl.getStringArrayAttribute("al"); + } + + if (uidl.getTag().equals("node")) { + if (uidl.getChildCount() == 0) { + treeNode.childNodeContainer.setVisible(false); + } else { + renderChildNodes(treeNode, (Iterator) uidl.getChildIterator()); + treeNode.childrenLoaded = true; + } + } else { + treeNode.addStyleName(TreeNode.CLASSNAME + "-leaf"); + } + if (uidl.hasAttribute(ATTRIBUTE_NODE_STYLE)) { + treeNode.setNodeStyleName(uidl + .getStringAttribute(ATTRIBUTE_NODE_STYLE)); + } + + String description = uidl.getStringAttribute("descr"); + if (description != null && getConnection() != null) { + // Set tooltip + TooltipInfo info = new TooltipInfo(description); + getConnection().registerTooltip(this, nodeKey, info); + } else { + // Remove possible previous tooltip + getConnection().registerTooltip(this, nodeKey, null); + } + + if (uidl.getBooleanAttribute("expanded") && !treeNode.getState()) { + treeNode.setState(true, false); + } + + if (uidl.getBooleanAttribute("selected")) { + treeNode.setSelected(true); + // ensure that identifier is in selectedIds array (this may be a + // partial update) + getWidget().selectedIds.add(nodeKey); + } + + treeNode.setIcon(uidl.getStringAttribute(ATTRIBUTE_NODE_ICON)); + } + + void renderChildNodes(TreeNode containerNode, Iterator i) { + containerNode.childNodeContainer.clear(); + containerNode.childNodeContainer.setVisible(true); + while (i.hasNext()) { + final UIDL childUidl = i.next(); + // actions are in bit weird place, don't mix them with children, + // but current node's actions + if ("actions".equals(childUidl.getTag())) { + updateActionMap(childUidl); + continue; + } + final TreeNode childTree = getWidget().new TreeNode(); + updateNodeFromUIDL(childTree, childUidl); + containerNode.childNodeContainer.add(childTree); + if (!i.hasNext()) { + childTree + .addStyleDependentName(childTree.isLeaf() ? "leaf-last" + : "last"); + childTree.childNodeContainer.addStyleDependentName("last"); + } + } + containerNode.childrenLoaded = true; + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TreeTableConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TreeTableConnector.java new file mode 100644 index 0000000000..575eea0288 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TreeTableConnector.java @@ -0,0 +1,97 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ui.VScrollTable.VScrollTableBody.VScrollTableRow; +import com.vaadin.terminal.gwt.client.ui.VTreeTable.PendingNavigationEvent; + +public class TreeTableConnector extends TableConnector { + public static final String ATTRIBUTE_HIERARCHY_COLUMN_INDEX = "hci"; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + FocusableScrollPanel widget = null; + int scrollPosition = 0; + if (getWidget().collapseRequest) { + widget = (FocusableScrollPanel) getWidget().getWidget(1); + scrollPosition = widget.getScrollPosition(); + } + getWidget().animationsEnabled = uidl.getBooleanAttribute("animate"); + getWidget().colIndexOfHierarchy = uidl + .hasAttribute(ATTRIBUTE_HIERARCHY_COLUMN_INDEX) ? uidl + .getIntAttribute(ATTRIBUTE_HIERARCHY_COLUMN_INDEX) : 0; + int oldTotalRows = getWidget().getTotalRows(); + super.updateFromUIDL(uidl, client); + if (getWidget().collapseRequest) { + if (getWidget().collapsedRowKey != null + && getWidget().scrollBody != null) { + VScrollTableRow row = getWidget().getRenderedRowByKey( + getWidget().collapsedRowKey); + if (row != null) { + getWidget().setRowFocus(row); + getWidget().focus(); + } + } + + int scrollPosition2 = widget.getScrollPosition(); + if (scrollPosition != scrollPosition2) { + widget.setScrollPosition(scrollPosition); + } + + // check which rows are needed from the server and initiate a + // deferred fetch + getWidget().onScroll(null); + } + // Recalculate table size if collapse request, or if page length is zero + // (not sent by server) and row count changes (#7908). + if (getWidget().collapseRequest + || (!uidl.hasAttribute("pagelength") && getWidget() + .getTotalRows() != oldTotalRows)) { + /* + * Ensure that possibly removed/added scrollbars are considered. + * Triggers row calculations, removes cached rows etc. Basically + * cleans up state. Be careful if touching this, you will break + * pageLength=0 if you remove this. + */ + getWidget().triggerLazyColumnAdjustment(true); + + getWidget().collapseRequest = false; + } + if (uidl.hasAttribute("focusedRow")) { + String key = uidl.getStringAttribute("focusedRow"); + getWidget().setRowFocus(getWidget().getRenderedRowByKey(key)); + getWidget().focusParentResponsePending = false; + } else if (uidl.hasAttribute("clearFocusPending")) { + // Special case to detect a response to a focusParent request that + // does not return any focusedRow because the selected node has no + // parent + getWidget().focusParentResponsePending = false; + } + + while (!getWidget().collapseRequest + && !getWidget().focusParentResponsePending + && !getWidget().pendingNavigationEvents.isEmpty()) { + // Keep replaying any queued events as long as we don't have any + // potential content changes pending + PendingNavigationEvent event = getWidget().pendingNavigationEvents + .removeFirst(); + getWidget() + .handleNavigation(event.keycode, event.ctrl, event.shift); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VTreeTable.class); + } + + @Override + public VTreeTable getWidget() { + return (VTreeTable) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/TwinColSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/TwinColSelectConnector.java new file mode 100644 index 0000000000..89a526a95c --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/TwinColSelectConnector.java @@ -0,0 +1,34 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class TwinColSelectConnector extends OptionGroupBaseConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + // Captions are updated before super call to ensure the widths are set + // correctly + if (isRealUpdate(uidl)) { + getWidget().updateCaptions(uidl); + } + + super.updateFromUIDL(uidl, client); + } + + @Override + protected Widget createWidget() { + return GWT.create(VTwinColSelect.class); + } + + @Override + public VTwinColSelect getWidget() { + return (VTwinColSelect) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java new file mode 100644 index 0000000000..ae8ab78252 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java @@ -0,0 +1,59 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.VUIDLBrowser; + +public class UnknownComponentConnector extends AbstractComponentConnector { + + @Override + protected boolean delegateCaptionHandling() { + return false; + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + getWidget().setCaption( + "Widgetset does not contain implementation for " + + getWidget().serverClassName + + ". Check its @ClientWidget mapping, widgetsets " + + "GWT module description file and re-compile your" + + " widgetset. In case you have downloaded a vaadin" + + " add-on package, you might want to refer to " + + "add-on " + + "instructions. Unrendered UIDL:"); + if (getWidget().uidlTree != null) { + getWidget().uidlTree.removeFromParent(); + } + + getWidget().uidlTree = new VUIDLBrowser(uidl, + client.getConfiguration()); + getWidget().uidlTree.open(true); + getWidget().uidlTree.setText("Unrendered UIDL"); + getWidget().panel.add(getWidget().uidlTree); + } + + @Override + protected Widget createWidget() { + return GWT.create(VUnknownComponent.class); + } + + @Override + public VUnknownComponent getWidget() { + return (VUnknownComponent) super.getWidget(); + } + + public void setServerSideClassName(String serverClassName) { + getWidget().setServerSideClassName(serverClassName); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/UploadConnector.java b/src/com/vaadin/terminal/gwt/client/ui/UploadConnector.java new file mode 100644 index 0000000000..1a98c84c91 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/UploadConnector.java @@ -0,0 +1,63 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class UploadConnector extends AbstractComponentConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + if (uidl.hasAttribute("notStarted")) { + getWidget().t.schedule(400); + return; + } + if (uidl.hasAttribute("forceSubmit")) { + getWidget().submit(); + return; + } + getWidget().setImmediate(getState().isImmediate()); + getWidget().client = client; + getWidget().paintableId = uidl.getId(); + getWidget().nextUploadId = uidl.getIntAttribute("nextid"); + final String action = client.translateVaadinUri(uidl + .getStringVariable("action")); + getWidget().element.setAction(action); + if (uidl.hasAttribute("buttoncaption")) { + getWidget().submitButton.setText(uidl + .getStringAttribute("buttoncaption")); + getWidget().submitButton.setVisible(true); + } else { + getWidget().submitButton.setVisible(false); + } + getWidget().fu.setName(getWidget().paintableId + + "_file"); + + if (getState().isDisabled() || getState().isReadOnly()) { + getWidget().disableUpload(); + } else if (!uidl.getBooleanAttribute("state")) { + // Enable the button only if an upload is not in progress + getWidget().enableUpload(); + getWidget().ensureTargetFrame(); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VUpload.class); + } + + @Override + public VUpload getWidget() { + return (VUpload) super.getWidget(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAbsoluteLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VAbsoluteLayoutPaintable.java deleted file mode 100644 index 5b4821519b..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VAbsoluteLayoutPaintable.java +++ /dev/null @@ -1,153 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.HashSet; -import java.util.Iterator; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Style; -import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.Element; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.DirectionalManagedLayout; -import com.vaadin.terminal.gwt.client.EventId; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ComponentConnector; -import com.vaadin.terminal.gwt.client.ui.VAbsoluteLayout.AbsoluteWrapper; - -public class VAbsoluteLayoutPaintable extends AbstractComponentContainerConnector - implements DirectionalManagedLayout { - - private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( - this, EventId.LAYOUT_CLICK) { - - @Override - protected ComponentConnector getChildComponent(Element element) { - return getWidget().getComponent(element); - } - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - return getWidget().addDomHandler(handler, type); - } - }; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().client = client; - // TODO margin handling - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - clickEventHandler.handleEventHandlerRegistration(client); - - HashSet unrenderedPids = new HashSet( - getWidget().pidToComponentWrappper.keySet()); - - for (Iterator childIterator = uidl.getChildIterator(); childIterator - .hasNext();) { - UIDL cc = (UIDL) childIterator.next(); - if (cc.getTag().equals("cc")) { - UIDL componentUIDL = cc.getChildUIDL(0); - unrenderedPids.remove(componentUIDL.getId()); - getWidget().getWrapper(client, componentUIDL) - .updateFromUIDL(cc); - } - } - - for (String pid : unrenderedPids) { - AbsoluteWrapper absoluteWrapper = getWidget().pidToComponentWrappper - .get(pid); - getWidget().pidToComponentWrappper.remove(pid); - absoluteWrapper.destroy(); - } - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - AbsoluteWrapper parent2 = (AbsoluteWrapper) (component - .getWidget()).getParent(); - parent2.updateCaption(uidl); - } - - @Override - protected Widget createWidget() { - return GWT.create(VAbsoluteLayout.class); - } - - @Override - public VAbsoluteLayout getWidget() { - return (VAbsoluteLayout) super.getWidget(); - } - - public void layoutVertically() { - VAbsoluteLayout layout = getWidget(); - for (ComponentConnector paintable : getChildren()) { - Widget widget = paintable.getWidget(); - AbsoluteWrapper wrapper = (AbsoluteWrapper) widget.getParent(); - Style wrapperStyle = wrapper.getElement().getStyle(); - - if (paintable.isRelativeHeight()) { - int h; - if (wrapper.top != null && wrapper.bottom != null) { - h = wrapper.getOffsetHeight(); - } else if (wrapper.bottom != null) { - // top not defined, available space 0... bottom of - // wrapper - h = wrapper.getElement().getOffsetTop() - + wrapper.getOffsetHeight(); - } else { - // top defined or both undefined, available space == - // canvas - top - h = layout.canvas.getOffsetHeight() - - wrapper.getElement().getOffsetTop(); - } - wrapperStyle.setHeight(h, Unit.PX); - } else { - wrapperStyle.clearHeight(); - } - - wrapper.updateCaptionPosition(); - } - } - - public void layoutHorizontally() { - VAbsoluteLayout layout = getWidget(); - for (ComponentConnector paintable : getChildren()) { - Widget widget = paintable.getWidget(); - AbsoluteWrapper wrapper = (AbsoluteWrapper) widget.getParent(); - Style wrapperStyle = wrapper.getElement().getStyle(); - - if (paintable.isRelativeWidth()) { - int w; - if (wrapper.left != null && wrapper.right != null) { - w = wrapper.getOffsetWidth(); - } else if (wrapper.right != null) { - // left == null - // available width == right edge == offsetleft + width - w = wrapper.getOffsetWidth() - + wrapper.getElement().getOffsetLeft(); - } else { - // left != null && right == null || left == null && - // right == null - // available width == canvas width - offset left - w = layout.canvas.getOffsetWidth() - - wrapper.getElement().getOffsetLeft(); - } - wrapperStyle.setWidth(w, Unit.PX); - } else { - wrapperStyle.clearWidth(); - } - - wrapper.updateCaptionPosition(); - } - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanelPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanelPaintable.java deleted file mode 100644 index 08fc6ac26c..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanelPaintable.java +++ /dev/null @@ -1,142 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.Element; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ConnectorMap; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public abstract class VAbstractSplitPanelPaintable extends - AbstractComponentContainerConnector implements SimpleManagedLayout { - - public static final String SPLITTER_CLICK_EVENT_IDENTIFIER = "sp_click"; - - public void updateCaption(ComponentConnector component, UIDL uidl) { - // TODO Implement caption handling - } - - ClickEventHandler clickEventHandler = new ClickEventHandler(this, - SPLITTER_CLICK_EVENT_IDENTIFIER) { - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - if ((Event.getEventsSunk(getWidget().splitter) & Event - .getTypeInt(type.getName())) != 0) { - // If we are already sinking the event for the splitter we do - // not want to additionally sink it for the root element - return getWidget().addHandler(handler, type); - } else { - return getWidget().addDomHandler(handler, type); - } - } - - @Override - public void onContextMenu( - com.google.gwt.event.dom.client.ContextMenuEvent event) { - Element target = event.getNativeEvent().getEventTarget().cast(); - if (getWidget().splitter.isOrHasChild(target)) { - super.onContextMenu(event); - } - }; - - @Override - protected void fireClick(NativeEvent event) { - Element target = event.getEventTarget().cast(); - if (getWidget().splitter.isOrHasChild(target)) { - super.fireClick(event); - } - } - - @Override - protected Element getRelativeToElement() { - return null; - } - - }; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().client = client; - getWidget().id = uidl.getId(); - - getWidget().immediate = getState().isImmediate(); - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - getWidget().setEnabled(!getState().isDisabled()); - - clickEventHandler.handleEventHandlerRegistration(client); - if (getState().hasStyles()) { - getWidget().componentStyleNames = getState().getStyle() - .split(" "); - } else { - getWidget().componentStyleNames = new String[0]; - } - - getWidget().setLocked(uidl.getBooleanAttribute("locked")); - - getWidget().setPositionReversed( - uidl.getBooleanAttribute("reversed")); - - getWidget().setStylenames(); - - getWidget().position = uidl.getStringAttribute("position"); - - final ComponentConnector newFirstChildPaintable = client - .getPaintable(uidl.getChildUIDL(0)); - final ComponentConnector newSecondChildPaintable = client - .getPaintable(uidl.getChildUIDL(1)); - Widget newFirstChild = newFirstChildPaintable.getWidget(); - Widget newSecondChild = newSecondChildPaintable.getWidget(); - - if (getWidget().firstChild != newFirstChild) { - if (getWidget().firstChild != null) { - client.unregisterPaintable(ConnectorMap.get(client) - .getConnector(getWidget().firstChild)); - } - getWidget().setFirstWidget(newFirstChild); - } - if (getWidget().secondChild != newSecondChild) { - if (getWidget().secondChild != null) { - client.unregisterPaintable(ConnectorMap.get(client) - .getConnector(getWidget().secondChild)); - } - getWidget().setSecondWidget(newSecondChild); - } - newFirstChildPaintable.updateFromUIDL(uidl.getChildUIDL(0), client); - newSecondChildPaintable.updateFromUIDL(uidl.getChildUIDL(1), client); - - // This is needed at least for cases like #3458 to take - // appearing/disappearing scrollbars into account. - client.runDescendentsLayout(getWidget()); - - getLayoutManager().setNeedsUpdate(this); - } - - public void layout() { - VAbstractSplitPanel splitPanel = getWidget(); - splitPanel.setSplitPosition(splitPanel.position); - splitPanel.updateSizes(); - } - - @Override - public VAbstractSplitPanel getWidget() { - return (VAbstractSplitPanel) super.getWidget(); - } - - @Override - protected abstract VAbstractSplitPanel createWidget(); - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAccordion.java b/src/com/vaadin/terminal/gwt/client/ui/VAccordion.java index d2b601f42a..13886cd621 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VAccordion.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VAccordion.java @@ -441,9 +441,9 @@ public class VAccordion extends VTabsheetBase { // TODO need to call this because the caption does not have an owner caption.updateCaptionWithoutOwner( uidl, - uidl.getStringAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_CAPTION), - uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DISABLED), - uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DESCRIPTION)); + uidl.getStringAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_CAPTION), + uidl.hasAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DISABLED), + uidl.hasAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DESCRIPTION)); } public int getWidgetWidth() { diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAccordionPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VAccordionPaintable.java deleted file mode 100644 index ad4360642a..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VAccordionPaintable.java +++ /dev/null @@ -1,81 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.Iterator; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ComponentConnector; -import com.vaadin.terminal.gwt.client.ui.VAccordion.StackItem; - -public class VAccordionPaintable extends VTabsheetBasePaintable implements - SimpleManagedLayout { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().selectedUIDLItemIndex = -1; - super.updateFromUIDL(uidl, client); - /* - * Render content after all tabs have been created and we know how large - * the content area is - */ - if (getWidget().selectedUIDLItemIndex >= 0) { - StackItem selectedItem = getWidget().getStackItem( - getWidget().selectedUIDLItemIndex); - UIDL selectedTabUIDL = getWidget().lazyUpdateMap - .remove(selectedItem); - getWidget().open( - getWidget().selectedUIDLItemIndex); - - selectedItem.setContent(selectedTabUIDL); - } else if (isRealUpdate(uidl) - && getWidget().openTab != null) { - getWidget().close(getWidget().openTab); - } - - getWidget().iLayout(); - // finally render possible hidden tabs - if (getWidget().lazyUpdateMap.size() > 0) { - for (Iterator iterator = getWidget().lazyUpdateMap - .keySet().iterator(); iterator.hasNext();) { - StackItem item = (StackItem) iterator.next(); - item.setContent(getWidget().lazyUpdateMap.get(item)); - } - getWidget().lazyUpdateMap.clear(); - } - - getWidget().renderInformation - .updateSize(getWidget().getElement()); - } - - @Override - public VAccordion getWidget() { - return (VAccordion) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VAccordion.class); - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - /* Accordion does not render its children's captions */ - } - - public void layout() { - VAccordion accordion = getWidget(); - - accordion.updateOpenTabSize(); - - if (isUndefinedHeight()) { - accordion.openTab.setHeightFromWidget(); - } - accordion.iLayout(); - - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAudioPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VAudioPaintable.java deleted file mode 100644 index de3b7d2bca..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VAudioPaintable.java +++ /dev/null @@ -1,40 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Style; -import com.google.gwt.dom.client.Style.Unit; -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.UIDL; - -public class VAudioPaintable extends VMediaBasePaintable { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - Style style = getWidget().getElement().getStyle(); - - // Make sure that the controls are not clipped if visible. - if (shouldShowControls(uidl) - && (style.getHeight() == null || "".equals(style.getHeight()))) { - if (BrowserInfo.get().isChrome()) { - style.setHeight(32, Unit.PX); - } else { - style.setHeight(25, Unit.PX); - } - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VAudio.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VButton.java b/src/com/vaadin/terminal/gwt/client/ui/VButton.java index 60a6a895e6..bd287f048f 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VButton.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VButton.java @@ -25,7 +25,7 @@ import com.vaadin.terminal.gwt.client.EventId; 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.ui.VButtonPaintable.ButtonClientToServerRpc; +import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonClientToServerRpc; public class VButton extends FocusWidget implements ClickHandler, FocusHandler, BlurHandler { @@ -88,7 +88,7 @@ public class VButton extends FocusWidget implements ClickHandler, FocusHandler, protected HandlerRegistration blurHandlerRegistration; protected int clickShortcut = 0; - //TODO Move this to VButtonPaintable + // TODO Move this to VButtonPaintable ButtonClientToServerRpc buttonRpcProxy; public VButton() { diff --git a/src/com/vaadin/terminal/gwt/client/ui/VButtonPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VButtonPaintable.java deleted file mode 100644 index 5924d3f589..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VButtonPaintable.java +++ /dev/null @@ -1,136 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -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 AbstractComponentConnector { - - /** - * 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); - getWidget().buttonRpcProxy = initRPC(rpcProxy); - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - - // Ensure correct implementation, - // but don't let container manage caption etc. - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().focusHandlerRegistration = EventHelper - .updateFocusHandler(this, client, - getWidget().focusHandlerRegistration); - getWidget().blurHandlerRegistration = EventHelper - .updateBlurHandler(this, client, - getWidget().blurHandlerRegistration); - - // Save details - getWidget().client = client; - getWidget().paintableId = uidl.getId(); - - // Set text - getWidget().setText(getState().getCaption()); - - getWidget().disableOnClick = getState().isDisableOnClick(); - - // handle error - if (uidl.hasAttribute("error")) { - if (getWidget().errorIndicatorElement == null) { - getWidget().errorIndicatorElement = DOM - .createSpan(); - getWidget().errorIndicatorElement - .setClassName("v-errorindicator"); - } - getWidget().wrapper.insertBefore( - getWidget().errorIndicatorElement, - getWidget().captionElement); - - } else if (getWidget().errorIndicatorElement != null) { - getWidget().wrapper - .removeChild(getWidget().errorIndicatorElement); - getWidget().errorIndicatorElement = null; - } - - if (uidl.hasAttribute(ATTRIBUTE_ICON)) { - if (getWidget().icon == null) { - getWidget().icon = new Icon(client); - getWidget().wrapper.insertBefore( - getWidget().icon.getElement(), - getWidget().captionElement); - } - getWidget().icon.setUri(uidl - .getStringAttribute(ATTRIBUTE_ICON)); - } else { - if (getWidget().icon != null) { - getWidget().wrapper - .removeChild(getWidget().icon.getElement()); - getWidget().icon = null; - } - } - - getWidget().clickShortcut = getState() - .getClickShortcutKeyCode(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VButton.class); - } - - @Override - public VButton getWidget() { - return (VButton) super.getWidget(); - } - - @Override - public ButtonState getState() { - return (ButtonState) super.getState(); - } - - @Override - protected ComponentState createState() { - return GWT.create(ButtonState.class); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCheckBoxPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VCheckBoxPaintable.java deleted file mode 100644 index 72107ab658..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VCheckBoxPaintable.java +++ /dev/null @@ -1,105 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.EventHelper; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.VTooltip; - -public class VCheckBoxPaintable extends AbstractComponentConnector { - - @Override - protected boolean delegateCaptionHandling() { - return false; - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // Save details - getWidget().client = client; - getWidget().id = uidl.getId(); - - // Ensure correct implementation - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().focusHandlerRegistration = EventHelper - .updateFocusHandler(this, client, - getWidget().focusHandlerRegistration); - getWidget().blurHandlerRegistration = EventHelper - .updateBlurHandler(this, client, - getWidget().blurHandlerRegistration); - - if (uidl.hasAttribute("error")) { - if (getWidget().errorIndicatorElement == null) { - getWidget().errorIndicatorElement = DOM - .createSpan(); - getWidget().errorIndicatorElement - .setInnerHTML(" "); - DOM.setElementProperty( - getWidget().errorIndicatorElement, - "className", "v-errorindicator"); - DOM.appendChild(getWidget().getElement(), - getWidget().errorIndicatorElement); - DOM.sinkEvents(getWidget().errorIndicatorElement, - VTooltip.TOOLTIP_EVENTS | Event.ONCLICK); - } else { - DOM.setStyleAttribute( - getWidget().errorIndicatorElement, - "display", ""); - } - } else if (getWidget().errorIndicatorElement != null) { - DOM.setStyleAttribute( - getWidget().errorIndicatorElement, "display", - "none"); - } - - if (getState().isReadOnly()) { - getWidget().setEnabled(false); - } - - if (uidl.hasAttribute(ATTRIBUTE_ICON)) { - if (getWidget().icon == null) { - getWidget().icon = new Icon(client); - DOM.insertChild(getWidget().getElement(), - getWidget().icon.getElement(), 1); - getWidget().icon - .sinkEvents(VTooltip.TOOLTIP_EVENTS); - getWidget().icon.sinkEvents(Event.ONCLICK); - } - getWidget().icon.setUri(uidl - .getStringAttribute(ATTRIBUTE_ICON)); - } else if (getWidget().icon != null) { - // detach icon - DOM.removeChild(getWidget().getElement(), - getWidget().icon.getElement()); - getWidget().icon = null; - } - - // Set text - getWidget().setText(getState().getCaption()); - getWidget() - .setValue( - uidl.getBooleanVariable(getWidget().VARIABLE_STATE)); - getWidget().immediate = getState().isImmediate(); - } - - @Override - public VCheckBox getWidget() { - return (VCheckBox) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VCheckBox.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCssLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VCssLayoutPaintable.java deleted file mode 100644 index 5f074326fa..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VCssLayoutPaintable.java +++ /dev/null @@ -1,63 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.Element; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.EventId; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VCssLayoutPaintable extends AbstractComponentContainerConnector { - - private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( - this, EventId.LAYOUT_CLICK) { - - @Override - protected ComponentConnector getChildComponent(Element element) { - return getWidget().panel.getComponent(element); - } - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - return getWidget().addDomHandler(handler, type); - } - }; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - clickEventHandler.handleEventHandlerRegistration(client); - - getWidget().setMarginAndSpacingStyles( - new VMarginInfo(uidl.getIntAttribute("margins")), - uidl.hasAttribute("spacing")); - getWidget().panel.updateFromUIDL(uidl, client); - } - - @Override - public VCssLayout getWidget() { - return (VCssLayout) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VCssLayout.class); - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - getWidget().panel.updateCaption(component, uidl); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCustomComponentPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VCustomComponentPaintable.java deleted file mode 100644 index 345a059149..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VCustomComponentPaintable.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ConnectorMap; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VCustomComponentPaintable extends - AbstractComponentContainerConnector { - - @Override - public void updateFromUIDL(UIDL uidl, final ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - final UIDL child = uidl.getChildUIDL(0); - if (child != null) { - final ComponentConnector paintable = client.getPaintable(child); - Widget widget = paintable.getWidget(); - if (widget != getWidget().getWidget()) { - if (getWidget().getWidget() != null) { - client.unregisterPaintable(ConnectorMap.get(client) - .getConnector(getWidget().getWidget())); - getWidget().clear(); - } - getWidget().setWidget(widget); - } - paintable.updateFromUIDL(child, client); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VCustomComponent.class); - } - - @Override - public VCustomComponent getWidget() { - return (VCustomComponent) super.getWidget(); - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - // NOP, custom component dont render composition roots caption - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCustomLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VCustomLayoutPaintable.java deleted file mode 100644 index ab409afda2..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VCustomLayoutPaintable.java +++ /dev/null @@ -1,97 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VCustomLayoutPaintable extends AbstractComponentContainerConnector - implements SimpleManagedLayout { - - /** Update the layout from UIDL */ - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().client = client; - // ApplicationConnection manages generic component features - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().pid = uidl.getId(); - if (!getWidget().hasTemplate()) { - // Update HTML template only once - getWidget().initializeHTML(uidl, client); - } - - // Evaluate scripts - VCustomLayout.eval(getWidget().scripts); - getWidget().scripts = null; - - // TODO Check if this is needed - client.runDescendentsLayout(getWidget()); - - Set oldWidgets = new HashSet(); - oldWidgets.addAll(getWidget().locationToWidget.values()); - - // For all contained widgets - for (final Iterator i = uidl.getChildIterator(); i.hasNext();) { - final UIDL uidlForChild = (UIDL) i.next(); - if (uidlForChild.getTag().equals("location")) { - final String location = uidlForChild.getStringAttribute("name"); - UIDL childUIDL = uidlForChild.getChildUIDL(0); - final ComponentConnector childPaintable = client - .getPaintable(childUIDL); - Widget childWidget = childPaintable.getWidget(); - try { - getWidget().setWidget(childWidget, location); - childPaintable.updateFromUIDL(childUIDL, client); - } catch (final IllegalArgumentException e) { - // If no location is found, this component is not visible - } - oldWidgets.remove(childWidget); - } - } - for (Iterator iterator = oldWidgets.iterator(); iterator - .hasNext();) { - Widget oldWidget = iterator.next(); - if (oldWidget.isAttached()) { - // slot of this widget is emptied, remove it - getWidget().remove(oldWidget); - } - } - - // TODO Check if this is needed - client.runDescendentsLayout(getWidget()); - - } - - @Override - public VCustomLayout getWidget() { - return (VCustomLayout) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VCustomLayout.class); - } - - public void updateCaption(ComponentConnector paintable, UIDL uidl) { - getWidget().updateCaption(paintable, uidl); - - } - - public void layout() { - getWidget().iLayoutJS( - DOM.getFirstChild(getWidget().getElement())); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VDateFieldCalendarPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VDateFieldCalendarPaintable.java deleted file mode 100644 index 4868287f1e..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VDateFieldCalendarPaintable.java +++ /dev/null @@ -1,101 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.Date; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.DateTimeService; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusChangeListener; -import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener; - -public class VDateFieldCalendarPaintable extends VDateFieldPaintable { - - @Override - @SuppressWarnings("deprecation") - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - getWidget().calendarPanel - .setShowISOWeekNumbers(getWidget() - .isShowISOWeekNumbers()); - getWidget().calendarPanel - .setDateTimeService(getWidget() - .getDateTimeService()); - getWidget().calendarPanel - .setResolution(getWidget().getCurrentResolution()); - Date currentDate = getWidget().getCurrentDate(); - if (currentDate != null) { - getWidget().calendarPanel.setDate(new Date(currentDate - .getTime())); - } else { - getWidget().calendarPanel.setDate(null); - } - - if (getWidget().currentResolution > VDateField.RESOLUTION_DAY) { - getWidget().calendarPanel - .setTimeChangeListener(new TimeChangeListener() { - public void changed(int hour, int min, int sec, int msec) { - Date d = getWidget().getDate(); - if (d == null) { - // date currently null, use the value from - // calendarPanel - // (~ client time at the init of the widget) - d = (Date) getWidget().calendarPanel - .getDate().clone(); - } - d.setHours(hour); - d.setMinutes(min); - d.setSeconds(sec); - DateTimeService.setMilliseconds(d, msec); - - // Always update time changes to the server - getWidget().calendarPanel.setDate(d); - getWidget().updateValueFromPanel(); - } - }); - } - - if (getWidget().currentResolution <= VDateField.RESOLUTION_MONTH) { - getWidget().calendarPanel - .setFocusChangeListener(new FocusChangeListener() { - public void focusChanged(Date date) { - Date date2 = new Date(); - if (getWidget().calendarPanel.getDate() != null) { - date2.setTime(getWidget().calendarPanel - .getDate().getTime()); - } - /* - * Update the value of calendarPanel - */ - date2.setYear(date.getYear()); - date2.setMonth(date.getMonth()); - getWidget().calendarPanel - .setDate(date2); - /* - * Then update the value from panel to server - */ - getWidget().updateValueFromPanel(); - } - }); - } else { - getWidget().calendarPanel.setFocusChangeListener(null); - } - - // Update possible changes - getWidget().calendarPanel.renderCalendar(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VDateFieldCalendar.class); - } - - @Override - public VDateFieldCalendar getWidget() { - return (VDateFieldCalendar) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VDateFieldPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VDateFieldPaintable.java deleted file mode 100644 index bf747ad579..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VDateFieldPaintable.java +++ /dev/null @@ -1,110 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.Date; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.LocaleNotLoadedException; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.VConsole; - -public class VDateFieldPaintable extends AbstractComponentConnector { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // Ensure correct implementation and let layout manage caption - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - // Save details - getWidget().client = client; - getWidget().paintableId = uidl.getId(); - getWidget().immediate = getState().isImmediate(); - - getWidget().readonly = getState().isReadOnly(); - getWidget().enabled = !getState().isDisabled(); - - if (uidl.hasAttribute("locale")) { - final String locale = uidl.getStringAttribute("locale"); - try { - getWidget().dts.setLocale(locale); - getWidget().currentLocale = locale; - } catch (final LocaleNotLoadedException e) { - getWidget().currentLocale = getWidget().dts - .getLocale(); - VConsole.error("Tried to use an unloaded locale \"" + locale - + "\". Using default locale (" - + getWidget().currentLocale + ")."); - VConsole.error(e); - } - } - - // We show week numbers only if the week starts with Monday, as ISO 8601 - // specifies - getWidget().showISOWeekNumbers = uidl - .getBooleanAttribute(VDateField.WEEK_NUMBERS) - && getWidget().dts.getFirstDayOfWeek() == 1; - - int newResolution; - if (uidl.hasVariable("sec")) { - newResolution = VDateField.RESOLUTION_SEC; - } else if (uidl.hasVariable("min")) { - newResolution = VDateField.RESOLUTION_MIN; - } else if (uidl.hasVariable("hour")) { - newResolution = VDateField.RESOLUTION_HOUR; - } else if (uidl.hasVariable("day")) { - newResolution = VDateField.RESOLUTION_DAY; - } else if (uidl.hasVariable("month")) { - newResolution = VDateField.RESOLUTION_MONTH; - } else { - newResolution = VDateField.RESOLUTION_YEAR; - } - - getWidget().currentResolution = newResolution; - - // Add stylename that indicates current resolution - getWidget() - .addStyleName( - VDateField.CLASSNAME - + "-" - + VDateField - .resolutionToString(getWidget().currentResolution)); - - final int year = uidl.getIntVariable("year"); - final int month = (getWidget().currentResolution >= VDateField.RESOLUTION_MONTH) ? uidl - .getIntVariable("month") : -1; - final int day = (getWidget().currentResolution >= VDateField.RESOLUTION_DAY) ? uidl - .getIntVariable("day") : -1; - final int hour = (getWidget().currentResolution >= VDateField.RESOLUTION_HOUR) ? uidl - .getIntVariable("hour") : 0; - final int min = (getWidget().currentResolution >= VDateField.RESOLUTION_MIN) ? uidl - .getIntVariable("min") : 0; - final int sec = (getWidget().currentResolution >= VDateField.RESOLUTION_SEC) ? uidl - .getIntVariable("sec") : 0; - - // Construct new date for this datefield (only if not null) - if (year > -1) { - getWidget().setCurrentDate( - new Date((long) getWidget().getTime(year, - month, day, hour, min, sec, 0))); - } else { - getWidget().setCurrentDate(null); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VDateField.class); - } - - @Override - public VDateField getWidget() { - return (VDateField) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapperPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapperPaintable.java deleted file mode 100644 index 07749c4527..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VDragAndDropWrapperPaintable.java +++ /dev/null @@ -1,74 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.HashMap; -import java.util.Set; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VDragAndDropWrapperPaintable extends VCustomComponentPaintable { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().client = client; - super.updateFromUIDL(uidl, client); - if (isRealUpdate(uidl) && !uidl.hasAttribute("hidden")) { - UIDL acceptCrit = uidl.getChildByTagName("-ac"); - if (acceptCrit == null) { - getWidget().dropHandler = null; - } else { - if (getWidget().dropHandler == null) { - getWidget().dropHandler = getWidget().new CustomDropHandler(); - } - getWidget().dropHandler - .updateAcceptRules(acceptCrit); - } - - Set variableNames = uidl.getVariableNames(); - for (String fileId : variableNames) { - if (fileId.startsWith("rec-")) { - String receiverUrl = uidl.getStringVariable(fileId); - fileId = fileId.substring(4); - if (getWidget().fileIdToReceiver == null) { - getWidget().fileIdToReceiver = new HashMap(); - } - if ("".equals(receiverUrl)) { - Integer id = Integer.parseInt(fileId); - int indexOf = getWidget().fileIds - .indexOf(id); - if (indexOf != -1) { - getWidget().files.remove(indexOf); - getWidget().fileIds.remove(indexOf); - } - } else { - getWidget().fileIdToReceiver.put(fileId, - receiverUrl); - } - } - } - getWidget().startNextUpload(); - - getWidget().dragStartMode = uidl - .getIntAttribute(VDragAndDropWrapper.DRAG_START_MODE); - getWidget().initDragStartMode(); - getWidget().html5DataFlavors = uidl - .getMapAttribute(VDragAndDropWrapper.HTML5_DATA_FLAVORS); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VDragAndDropWrapper.class); - } - - @Override - public VDragAndDropWrapper getWidget() { - return (VDragAndDropWrapper) super.getWidget(); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VEmbeddedPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VEmbeddedPaintable.java deleted file mode 100644 index 822800aed9..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VEmbeddedPaintable.java +++ /dev/null @@ -1,192 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import java.util.Map; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Document; -import com.google.gwt.dom.client.Node; -import com.google.gwt.dom.client.NodeList; -import com.google.gwt.dom.client.ObjectElement; -import com.google.gwt.dom.client.Style; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Element; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.VConsole; -import com.vaadin.terminal.gwt.client.VTooltip; - -public class VEmbeddedPaintable extends AbstractComponentConnector { - - public static final String CLICK_EVENT_IDENTIFIER = "click"; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - // Save details - getWidget().client = client; - - boolean clearBrowserElement = true; - - clickEventHandler.handleEventHandlerRegistration(client); - - if (uidl.hasAttribute("type")) { - getWidget().type = uidl.getStringAttribute("type"); - if (getWidget().type.equals("image")) { - getWidget().addStyleName( - VEmbedded.CLASSNAME + "-image"); - Element el = null; - boolean created = false; - NodeList nodes = getWidget().getElement() - .getChildNodes(); - if (nodes != null && nodes.getLength() == 1) { - Node n = nodes.getItem(0); - if (n.getNodeType() == Node.ELEMENT_NODE) { - Element e = (Element) n; - if (e.getTagName().equals("IMG")) { - el = e; - } - } - } - if (el == null) { - getWidget().setHTML(""); - el = DOM.createImg(); - created = true; - DOM.sinkEvents(el, Event.ONLOAD); - } - - // Set attributes - Style style = el.getStyle(); - style.setProperty("width", getState().getWidth()); - style.setProperty("height", getState().getHeight()); - - DOM.setElementProperty(el, "src", getWidget() - .getSrc(uidl, client)); - - if (created) { - // insert in dom late - getWidget().getElement().appendChild(el); - } - - /* - * Sink tooltip events so tooltip is displayed when hovering the - * image. - */ - getWidget().sinkEvents(VTooltip.TOOLTIP_EVENTS); - - } else if (getWidget().type.equals("browser")) { - getWidget().addStyleName( - VEmbedded.CLASSNAME + "-browser"); - if (getWidget().browserElement == null) { - getWidget().setHTML( - ""); - getWidget().browserElement = DOM - .getFirstChild(getWidget().getElement()); - } - DOM.setElementAttribute(getWidget().browserElement, - "src", getWidget().getSrc(uidl, client)); - clearBrowserElement = false; - } else { - VConsole.log("Unknown Embedded type '" - + getWidget().type + "'"); - } - } else if (uidl.hasAttribute("mimetype")) { - final String mime = uidl.getStringAttribute("mimetype"); - if (mime.equals("application/x-shockwave-flash")) { - // Handle embedding of Flash - getWidget().addStyleName( - VEmbedded.CLASSNAME + "-flash"); - getWidget().setHTML( - getWidget().createFlashEmbed(uidl)); - - } else if (mime.equals("image/svg+xml")) { - getWidget().addStyleName( - VEmbedded.CLASSNAME + "-svg"); - String data; - Map parameters = VEmbedded.getParameters(uidl); - if (parameters.get("data") == null) { - data = getWidget().getSrc(uidl, client); - } else { - data = "data:image/svg+xml," + parameters.get("data"); - } - getWidget().setHTML(""); - ObjectElement obj = Document.get().createObjectElement(); - obj.setType(mime); - obj.setData(data); - if (!isUndefinedWidth()) { - obj.getStyle().setProperty("width", "100%"); - } - if (!isUndefinedHeight()) { - obj.getStyle().setProperty("height", "100%"); - } - if (uidl.hasAttribute("classid")) { - obj.setAttribute("classid", - uidl.getStringAttribute("classid")); - } - if (uidl.hasAttribute("codebase")) { - obj.setAttribute("codebase", - uidl.getStringAttribute("codebase")); - } - if (uidl.hasAttribute("codetype")) { - obj.setAttribute("codetype", - uidl.getStringAttribute("codetype")); - } - if (uidl.hasAttribute("archive")) { - obj.setAttribute("archive", - uidl.getStringAttribute("archive")); - } - if (uidl.hasAttribute("standby")) { - obj.setAttribute("standby", - uidl.getStringAttribute("standby")); - } - getWidget().getElement().appendChild(obj); - - } else { - VConsole.log("Unknown Embedded mimetype '" + mime + "'"); - } - } else { - VConsole.log("Unknown Embedded; no type or mimetype attribute"); - } - - if (clearBrowserElement) { - getWidget().browserElement = null; - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VEmbedded.class); - } - - @Override - public VEmbedded getWidget() { - return (VEmbedded) super.getWidget(); - } - - protected final ClickEventHandler clickEventHandler = new ClickEventHandler( - this, CLICK_EVENT_IDENTIFIER) { - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - return getWidget().addDomHandler(handler, type); - } - - }; - -} \ No newline at end of file diff --git a/src/com/vaadin/terminal/gwt/client/ui/VFilterSelectPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VFilterSelectPaintable.java deleted file mode 100644 index b164081a2e..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VFilterSelectPaintable.java +++ /dev/null @@ -1,256 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.Iterator; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.Util; -import com.vaadin.terminal.gwt.client.ui.VFilterSelect.FilterSelectSuggestion; - -public class VFilterSelectPaintable extends AbstractComponentConnector implements - SimpleManagedLayout { - - /* - * (non-Javadoc) - * - * @see - * com.vaadin.terminal.gwt.client.Paintable#updateFromUIDL(com.vaadin.terminal - * .gwt.client.UIDL, com.vaadin.terminal.gwt.client.ApplicationConnection) - */ - @Override - @SuppressWarnings("deprecation") - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // Save details - getWidget().client = client; - getWidget().paintableId = uidl.getId(); - - getWidget().readonly = getState().isReadOnly(); - getWidget().enabled = !getState().isDisabled(); - - getWidget().tb.setEnabled(getWidget().enabled); - getWidget().updateReadOnly(); - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - // Inverse logic here to make the default case (text input enabled) - // work without additional UIDL messages - boolean noTextInput = uidl - .hasAttribute(VFilterSelect.ATTR_NO_TEXT_INPUT) - && uidl.getBooleanAttribute(VFilterSelect.ATTR_NO_TEXT_INPUT); - getWidget().setTextInputEnabled(!noTextInput); - - // not a FocusWidget -> needs own tabindex handling - if (uidl.hasAttribute("tabindex")) { - getWidget().tb.setTabIndex(uidl - .getIntAttribute("tabindex")); - } - - if (uidl.hasAttribute("filteringmode")) { - getWidget().filteringmode = uidl - .getIntAttribute("filteringmode"); - } - - getWidget().immediate = getState().isImmediate(); - - getWidget().nullSelectionAllowed = uidl - .hasAttribute("nullselect"); - - getWidget().nullSelectItem = uidl - .hasAttribute("nullselectitem") - && uidl.getBooleanAttribute("nullselectitem"); - - getWidget().currentPage = uidl.getIntVariable("page"); - - if (uidl.hasAttribute("pagelength")) { - getWidget().pageLength = uidl - .getIntAttribute("pagelength"); - } - - if (uidl.hasAttribute(VFilterSelect.ATTR_INPUTPROMPT)) { - // input prompt changed from server - getWidget().inputPrompt = uidl - .getStringAttribute(VFilterSelect.ATTR_INPUTPROMPT); - } else { - getWidget().inputPrompt = ""; - } - - getWidget().suggestionPopup.updateStyleNames(uidl, - getState()); - - getWidget().allowNewItem = uidl - .hasAttribute("allownewitem"); - getWidget().lastNewItemString = null; - - getWidget().currentSuggestions.clear(); - if (!getWidget().waitingForFilteringResponse) { - /* - * Clear the current suggestions as the server response always - * includes the new ones. Exception is when filtering, then we need - * to retain the value if the user does not select any of the - * options matching the filter. - */ - getWidget().currentSuggestion = null; - /* - * Also ensure no old items in menu. Unless cleared the old values - * may cause odd effects on blur events. Suggestions in menu might - * not necessary exist in select at all anymore. - */ - getWidget().suggestionPopup.menu.clearItems(); - - } - - final UIDL options = uidl.getChildUIDL(0); - if (uidl.hasAttribute("totalMatches")) { - getWidget().totalMatches = uidl - .getIntAttribute("totalMatches"); - } else { - getWidget().totalMatches = 0; - } - - // used only to calculate minimum popup width - String captions = Util.escapeHTML(getWidget().inputPrompt); - - for (final Iterator i = options.getChildIterator(); i.hasNext();) { - final UIDL optionUidl = (UIDL) i.next(); - final FilterSelectSuggestion suggestion = getWidget().new FilterSelectSuggestion( - optionUidl); - getWidget().currentSuggestions.add(suggestion); - if (optionUidl.hasAttribute("selected")) { - if (!getWidget().waitingForFilteringResponse - || getWidget().popupOpenerClicked) { - String newSelectedOptionKey = Integer.toString(suggestion - .getOptionKey()); - if (!newSelectedOptionKey - .equals(getWidget().selectedOptionKey) - || suggestion.getReplacementString().equals( - getWidget().tb.getText())) { - // Update text field if we've got a new selection - // Also update if we've got the same text to retain old - // text selection behavior - getWidget().setPromptingOff( - suggestion.getReplacementString()); - getWidget().selectedOptionKey = newSelectedOptionKey; - } - } - getWidget().currentSuggestion = suggestion; - getWidget().setSelectedItemIcon( - suggestion.getIconUri()); - } - - // Collect captions so we can calculate minimum width for textarea - if (captions.length() > 0) { - captions += "|"; - } - captions += Util.escapeHTML(suggestion.getReplacementString()); - } - - if ((!getWidget().waitingForFilteringResponse || getWidget().popupOpenerClicked) - && uidl.hasVariable("selected") - && uidl.getStringArrayVariable("selected").length == 0) { - // select nulled - if (!getWidget().waitingForFilteringResponse - || !getWidget().popupOpenerClicked) { - if (!getWidget().focused) { - /* - * client.updateComponent overwrites all styles so we must - * ALWAYS set the prompting style at this point, even though - * we think it has been set already... - */ - getWidget().prompting = false; - getWidget().setPromptingOn(); - } else { - // we have focus in field, prompting can't be set on, - // instead just clear the input - getWidget().tb.setValue(""); - } - } - getWidget().setSelectedItemIcon(null); - getWidget().selectedOptionKey = null; - } - - if (getWidget().waitingForFilteringResponse - && getWidget().lastFilter.toLowerCase().equals( - uidl.getStringVariable("filter"))) { - getWidget().suggestionPopup.showSuggestions( - getWidget().currentSuggestions, - getWidget().currentPage, - getWidget().totalMatches); - getWidget().waitingForFilteringResponse = false; - if (!getWidget().popupOpenerClicked - && getWidget().selectPopupItemWhenResponseIsReceived != VFilterSelect.Select.NONE) { - // we're paging w/ arrows - if (getWidget().selectPopupItemWhenResponseIsReceived == VFilterSelect.Select.LAST) { - getWidget().suggestionPopup.menu - .selectLastItem(); - } else { - getWidget().suggestionPopup.menu - .selectFirstItem(); - } - - // This is used for paging so we update the keyboard selection - // variable as well. - MenuItem activeMenuItem = getWidget().suggestionPopup.menu - .getSelectedItem(); - getWidget().suggestionPopup.menu - .setKeyboardSelectedItem(activeMenuItem); - - // Update text field to contain the correct text - getWidget() - .setTextboxText(activeMenuItem.getText()); - getWidget().tb.setSelectionRange( - getWidget().lastFilter.length(), - activeMenuItem.getText().length() - - getWidget().lastFilter.length()); - - getWidget().selectPopupItemWhenResponseIsReceived = VFilterSelect.Select.NONE; // reset - } - if (getWidget().updateSelectionWhenReponseIsReceived) { - getWidget().suggestionPopup.menu - .doPostFilterSelectedItemAction(); - } - } - - // Calculate minumum textarea width - getWidget().suggestionPopupMinWidth = getWidget() - .minWidth(captions); - - getWidget().popupOpenerClicked = false; - - if (!getWidget().initDone) { - getWidget().updateRootWidth(); - } - - // Focus dependent style names are lost during the update, so we add - // them here back again - if (getWidget().focused) { - getWidget().addStyleDependentName("focus"); - } - - getWidget().initDone = true; - } - - @Override - protected Widget createWidget() { - return GWT.create(VFilterSelect.class); - } - - @Override - public VFilterSelect getWidget() { - return (VFilterSelect) super.getWidget(); - } - - public void layout() { - VFilterSelect widget = getWidget(); - if (widget.initDone) { - widget.updateRootWidth(); - } - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VFormLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VFormLayoutPaintable.java deleted file mode 100644 index 5991163ef0..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VFormLayoutPaintable.java +++ /dev/null @@ -1,39 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VFormLayoutPaintable extends AbstractComponentContainerConnector { - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().client = client; - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().table.updateFromUIDL(uidl, client); - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - getWidget().table.updateCaption(component, uidl); - } - - @Override - public VFormLayout getWidget() { - return (VFormLayout) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VFormLayout.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VFormPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VFormPaintable.java deleted file mode 100644 index 2d0b5cea25..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VFormPaintable.java +++ /dev/null @@ -1,190 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.event.dom.client.KeyDownEvent; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ConnectorMap; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VFormPaintable extends AbstractComponentContainerConnector implements - SimpleManagedLayout { - - @Override - public void init() { - VForm form = getWidget(); - getLayoutManager().registerDependency(this, form.footerContainer); - } - - @Override - protected boolean delegateCaptionHandling() { - return false; - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().client = client; - getWidget().id = uidl.getId(); - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - boolean legendEmpty = true; - if (getState().getCaption() != null) { - getWidget().caption.setInnerText(getState() - .getCaption()); - legendEmpty = false; - } else { - getWidget().caption.setInnerText(""); - } - if (uidl.hasAttribute(ATTRIBUTE_ICON)) { - if (getWidget().icon == null) { - getWidget().icon = new Icon(client); - getWidget().legend - .insertFirst(getWidget().icon.getElement()); - } - getWidget().icon.setUri(uidl - .getStringAttribute(ATTRIBUTE_ICON)); - legendEmpty = false; - } else { - if (getWidget().icon != null) { - getWidget().legend - .removeChild(getWidget().icon.getElement()); - } - } - if (legendEmpty) { - getWidget().addStyleDependentName("nocaption"); - } else { - getWidget().removeStyleDependentName("nocaption"); - } - - if (uidl.hasAttribute("error")) { - final UIDL errorUidl = uidl.getErrors(); - getWidget().errorMessage.updateFromUIDL(errorUidl); - getWidget().errorMessage.setVisible(true); - } else { - getWidget().errorMessage.setVisible(false); - } - - if (getState().hasDescription()) { - getWidget().desc.setInnerHTML(getState() - .getDescription()); - if (getWidget().desc.getParentElement() == null) { - getWidget().fieldSet.insertAfter( - getWidget().desc, - getWidget().legend); - } - } else { - getWidget().desc.setInnerHTML(""); - if (getWidget().desc.getParentElement() != null) { - getWidget().fieldSet - .removeChild(getWidget().desc); - } - } - - // first render footer so it will be easier to handle relative height of - // main layout - if (uidl.getChildCount() > 1 - && !uidl.getChildUIDL(1).getTag().equals("actions")) { - // render footer - ComponentConnector newFooter = client.getPaintable(uidl - .getChildUIDL(1)); - Widget newFooterWidget = newFooter.getWidget(); - if (getWidget().footer == null) { - getWidget().add(newFooter.getWidget(), - getWidget().footerContainer); - getWidget().footer = newFooterWidget; - } else if (newFooter != getWidget().footer) { - getWidget().remove(getWidget().footer); - client.unregisterPaintable(ConnectorMap.get(getConnection()) - .getConnector(getWidget().footer)); - getWidget().add(newFooter.getWidget(), - getWidget().footerContainer); - } - getWidget().footer = newFooterWidget; - newFooter.updateFromUIDL(uidl.getChildUIDL(1), client); - } else { - if (getWidget().footer != null) { - getWidget().remove(getWidget().footer); - client.unregisterPaintable(ConnectorMap.get(getConnection()) - .getConnector(getWidget().footer)); - } - } - - final UIDL layoutUidl = uidl.getChildUIDL(0); - ComponentConnector newLayout = client.getPaintable(layoutUidl); - Widget newLayoutWidget = newLayout.getWidget(); - if (getWidget().lo == null) { - // Layout not rendered before - getWidget().lo = newLayoutWidget; - getWidget().add(newLayoutWidget, - getWidget().fieldContainer); - } else if (getWidget().lo != newLayoutWidget) { - // Layout has changed - client.unregisterPaintable(ConnectorMap.get(getConnection()) - .getConnector(getWidget().lo)); - getWidget().remove(getWidget().lo); - getWidget().lo = newLayoutWidget; - getWidget().add(newLayoutWidget, - getWidget().fieldContainer); - } - newLayout.updateFromUIDL(layoutUidl, client); - - // also recalculates size of the footer if undefined size form - see - // #3710 - client.runDescendentsLayout(getWidget()); - - // We may have actions attached - if (uidl.getChildCount() > 1) { - UIDL childUidl = uidl.getChildByTagName("actions"); - if (childUidl != null) { - if (getWidget().shortcutHandler == null) { - getWidget().shortcutHandler = new ShortcutActionHandler( - getId(), client); - getWidget().keyDownRegistration = getWidget() - .addDomHandler(getWidget(), - KeyDownEvent.getType()); - } - getWidget().shortcutHandler - .updateActionMap(childUidl); - } - } else if (getWidget().shortcutHandler != null) { - getWidget().keyDownRegistration.removeHandler(); - getWidget().shortcutHandler = null; - getWidget().keyDownRegistration = null; - } - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - // NOP form don't render caption for neither field layout nor footer - // layout - } - - @Override - public VForm getWidget() { - return (VForm) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VForm.class); - } - - public void layout() { - VForm form = getWidget(); - - int footerHeight = getLayoutManager().getOuterHeight( - form.footerContainer); - - form.fieldContainer.getStyle().setPaddingBottom(footerHeight, Unit.PX); - form.footerContainer.getStyle().setMarginTop(-footerHeight, Unit.PX); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java b/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java index 2b466aec77..dbffcc1f0b 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java @@ -24,7 +24,7 @@ import com.vaadin.terminal.gwt.client.VCaption; import com.vaadin.terminal.gwt.client.ConnectorMap; import com.vaadin.terminal.gwt.client.ComponentConnector; import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot; -import com.vaadin.terminal.gwt.client.ui.layout.VPaintableLayoutSlot; +import com.vaadin.terminal.gwt.client.ui.layout.ComponentConnectorLayoutSlot; public class VGridLayout extends ComplexPanel { @@ -528,7 +528,7 @@ public class VGridLayout extends ComplexPanel { private AlignmentInfo alignment; - VPaintableLayoutSlot slot; + ComponentConnectorLayoutSlot slot; public void updateFromUidl(UIDL cellUidl) { // Set cell width @@ -554,7 +554,7 @@ public class VGridLayout extends ComplexPanel { ComponentConnector paintable = client.getPaintable(childUidl); if (slot == null || slot.getPaintable() != paintable) { - slot = new VPaintableLayoutSlot(CLASSNAME, paintable); + slot = new ComponentConnectorLayoutSlot(CLASSNAME, paintable); Element slotWrapper = slot.getWrapperElement(); getElement().appendChild(slotWrapper); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VGridLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VGridLayoutPaintable.java deleted file mode 100644 index ee02bf5e94..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VGridLayoutPaintable.java +++ /dev/null @@ -1,164 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.HashSet; -import java.util.Iterator; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.Element; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.DirectionalManagedLayout; -import com.vaadin.terminal.gwt.client.EventId; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.VCaption; -import com.vaadin.terminal.gwt.client.ConnectorMap; -import com.vaadin.terminal.gwt.client.ComponentConnector; -import com.vaadin.terminal.gwt.client.ui.VGridLayout.Cell; -import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot; - -public class VGridLayoutPaintable extends AbstractComponentContainerConnector - implements DirectionalManagedLayout { - private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( - this, EventId.LAYOUT_CLICK) { - - @Override - protected ComponentConnector getChildComponent(Element element) { - return getWidget().getComponent(element); - } - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - return getWidget().addDomHandler(handler, type); - } - }; - - @Override - public void init() { - getLayoutManager().registerDependency(this, - getWidget().spacingMeasureElement); - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - VGridLayout layout = getWidget(); - layout.client = client; - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - clickEventHandler.handleEventHandlerRegistration(client); - - int cols = uidl.getIntAttribute("w"); - int rows = uidl.getIntAttribute("h"); - - layout.columnWidths = new int[cols]; - layout.rowHeights = new int[rows]; - - if (layout.cells == null) { - layout.cells = new Cell[cols][rows]; - } else if (layout.cells.length != cols - || layout.cells[0].length != rows) { - Cell[][] newCells = new Cell[cols][rows]; - for (int i = 0; i < layout.cells.length; i++) { - for (int j = 0; j < layout.cells[i].length; j++) { - if (i < cols && j < rows) { - newCells[i][j] = layout.cells[i][j]; - } - } - } - layout.cells = newCells; - } - - final int[] alignments = uidl.getIntArrayAttribute("alignments"); - int alignmentIndex = 0; - - HashSet nonRenderedWidgets = new HashSet( - layout.widgetToCell.keySet()); - - for (final Iterator i = uidl.getChildIterator(); i.hasNext();) { - final UIDL r = (UIDL) i.next(); - if ("gr".equals(r.getTag())) { - for (final Iterator j = r.getChildIterator(); j.hasNext();) { - final UIDL c = (UIDL) j.next(); - if ("gc".equals(c.getTag())) { - Cell cell = layout.getCell(c); - if (cell.hasContent()) { - cell.setAlignment(new AlignmentInfo( - alignments[alignmentIndex++])); - nonRenderedWidgets.remove(cell.slot.getWidget()); - } - } - } - } - } - - layout.colExpandRatioArray = uidl.getIntArrayAttribute("colExpand"); - layout.rowExpandRatioArray = uidl.getIntArrayAttribute("rowExpand"); - - // clean non rendered components - for (Widget w : nonRenderedWidgets) { - Cell cell = layout.widgetToCell.remove(w); - cell.slot.setCaption(null); - - if (w.getParent() == layout) { - w.removeFromParent(); - ConnectorMap paintableMap = ConnectorMap.get(client); - paintableMap.unregisterConnector(paintableMap.getConnector(w)); - } - cell.slot.getWrapperElement().removeFromParent(); - } - - int bitMask = uidl.getIntAttribute("margins"); - layout.updateMarginStyleNames(new VMarginInfo(bitMask)); - - layout.updateSpacingStyleName(uidl.getBooleanAttribute("spacing")); - - getLayoutManager().setNeedsUpdate(this); - } - - public void updateCaption(ComponentConnector paintable, UIDL uidl) { - VGridLayout layout = getWidget(); - if (VCaption.isNeeded(uidl, paintable.getState())) { - Cell cell = layout.widgetToCell.get(paintable - .getWidget()); - VLayoutSlot layoutSlot = cell.slot; - VCaption caption = layoutSlot.getCaption(); - if (caption == null) { - caption = new VCaption(paintable, getConnection()); - - Widget widget = paintable.getWidget(); - - layout.setCaption(widget, caption); - } - caption.updateCaption(uidl); - } else { - layout.setCaption(paintable.getWidget(), null); - } - } - - @Override - public VGridLayout getWidget() { - return (VGridLayout) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VGridLayout.class); - } - - public void layoutVertically() { - getWidget().updateHeight(); - } - - public void layoutHorizontally() { - getWidget().updateWidth(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VHorizontalLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VHorizontalLayoutPaintable.java deleted file mode 100644 index e62ac8b430..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VHorizontalLayoutPaintable.java +++ /dev/null @@ -1,21 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; - -public class VHorizontalLayoutPaintable extends - VMeasuringOrderedLayoutPaintable { - - @Override - public VHorizontalLayout getWidget() { - return (VHorizontalLayout) super.getWidget(); - } - - @Override - protected VHorizontalLayout createWidget() { - return GWT.create(VHorizontalLayout.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VHorizontalSplitPanelPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VHorizontalSplitPanelPaintable.java deleted file mode 100644 index 44141107aa..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VHorizontalSplitPanelPaintable.java +++ /dev/null @@ -1,16 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; - -public class VHorizontalSplitPanelPaintable extends - VAbstractSplitPanelPaintable { - - @Override - protected VAbstractSplitPanel createWidget() { - return GWT.create(VSplitPanelHorizontal.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VLinkPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VLinkPaintable.java deleted file mode 100644 index 79ea801376..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VLinkPaintable.java +++ /dev/null @@ -1,105 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VLinkPaintable extends AbstractComponentConnector { - - @Override - protected boolean delegateCaptionHandling() { - return false; - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - - // Ensure correct implementation, - // but don't let container manage caption etc. - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().client = client; - - getWidget().enabled = !getState().isDisabled(); - getWidget().readonly = getState().isReadOnly(); - - if (uidl.hasAttribute("name")) { - getWidget().target = uidl.getStringAttribute("name"); - getWidget().anchor.setAttribute("target", - getWidget().target); - } - if (uidl.hasAttribute("src")) { - getWidget().src = client.translateVaadinUri(uidl - .getStringAttribute("src")); - getWidget().anchor.setAttribute("href", - getWidget().src); - } - - if (uidl.hasAttribute("border")) { - if ("none".equals(uidl.getStringAttribute("border"))) { - getWidget().borderStyle = VLink.BORDER_STYLE_NONE; - } else { - getWidget().borderStyle = VLink.BORDER_STYLE_MINIMAL; - } - } else { - getWidget().borderStyle = VLink.BORDER_STYLE_DEFAULT; - } - - getWidget().targetHeight = uidl - .hasAttribute("targetHeight") ? uidl - .getIntAttribute("targetHeight") : -1; - getWidget().targetWidth = uidl.hasAttribute("targetWidth") ? uidl - .getIntAttribute("targetWidth") : -1; - - // Set link caption - getWidget().captionElement.setInnerText(getState() - .getCaption()); - - // handle error - if (uidl.hasAttribute("error")) { - if (getWidget().errorIndicatorElement == null) { - getWidget().errorIndicatorElement = DOM.createDiv(); - DOM.setElementProperty( - getWidget().errorIndicatorElement, - "className", "v-errorindicator"); - } - DOM.insertChild(getWidget().getElement(), - getWidget().errorIndicatorElement, 0); - } else if (getWidget().errorIndicatorElement != null) { - DOM.setStyleAttribute( - getWidget().errorIndicatorElement, "display", - "none"); - } - - if (uidl.hasAttribute(ATTRIBUTE_ICON)) { - if (getWidget().icon == null) { - getWidget().icon = new Icon(client); - getWidget().anchor.insertBefore( - getWidget().icon.getElement(), - getWidget().captionElement); - } - getWidget().icon.setUri(uidl - .getStringAttribute(ATTRIBUTE_ICON)); - } - - } - - @Override - protected Widget createWidget() { - return GWT.create(VLink.class); - } - - @Override - public VLink getWidget() { - return (VLink) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VListSelectPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VListSelectPaintable.java deleted file mode 100644 index 0e4d19da61..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VListSelectPaintable.java +++ /dev/null @@ -1,21 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; - -public class VListSelectPaintable extends VOptionGroupBasePaintable { - - @Override - protected Widget createWidget() { - return GWT.create(VListSelect.class); - } - - @Override - public VListSelect getWidget() { - return (VListSelect) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VMeasuringOrderedLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VMeasuringOrderedLayoutPaintable.java deleted file mode 100644 index 3d3bc60d2b..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VMeasuringOrderedLayoutPaintable.java +++ /dev/null @@ -1,290 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.HashSet; -import java.util.Iterator; - -import com.google.gwt.dom.client.Node; -import com.google.gwt.dom.client.Style; -import com.google.gwt.user.client.Element; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.DirectionalManagedLayout; -import com.vaadin.terminal.gwt.client.LayoutManager; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.VCaption; -import com.vaadin.terminal.gwt.client.ConnectorMap; -import com.vaadin.terminal.gwt.client.ComponentConnector; -import com.vaadin.terminal.gwt.client.ValueMap; -import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot; -import com.vaadin.terminal.gwt.client.ui.layout.VPaintableLayoutSlot; - -public abstract class VMeasuringOrderedLayoutPaintable extends - AbstractComponentContainerConnector implements DirectionalManagedLayout { - - @Override - public void init() { - getLayoutManager().registerDependency(this, - getWidget().spacingMeasureElement); - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - VMeasuringOrderedLayout layout = getWidget(); - if (VCaption.isNeeded(uidl, component.getState())) { - VLayoutSlot layoutSlot = layout.getSlotForChild(component - .getWidget()); - VCaption caption = layoutSlot.getCaption(); - if (caption == null) { - caption = new VCaption(component, getConnection()); - - Widget widget = component.getWidget(); - - layout.setCaption(widget, caption); - } - caption.updateCaption(uidl); - } else { - layout.setCaption(component.getWidget(), null); - } - } - - @Override - public VMeasuringOrderedLayout getWidget() { - return (VMeasuringOrderedLayout) super.getWidget(); - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - HashSet previousChildren = new HashSet( - getChildren()); - - VMeasuringOrderedLayout layout = getWidget(); - - ValueMap expandRatios = uidl.getMapAttribute("expandRatios"); - ValueMap alignments = uidl.getMapAttribute("alignments"); - - int currentIndex = 0; - // TODO Support reordering elements! - for (final Iterator it = uidl.getChildIterator(); it.hasNext();) { - final UIDL childUIDL = (UIDL) it.next(); - final ComponentConnector child = client.getPaintable(childUIDL); - Widget widget = child.getWidget(); - - VLayoutSlot slot = layout.getSlotForChild(widget); - - if (widget.getParent() != layout) { - slot = new VPaintableLayoutSlot(getWidget() - .getStylePrimaryName(), child); - } - layout.addOrMove(slot, currentIndex++); - - String pid = child.getId(); - - AlignmentInfo alignment; - if (alignments.containsKey(pid)) { - alignment = new AlignmentInfo(alignments.getInt(pid)); - } else { - alignment = AlignmentInfo.TOP_LEFT; - } - slot.setAlignment(alignment); - - double expandRatio; - if (expandRatios.containsKey(pid)) { - expandRatio = expandRatios.getRawNumber(pid); - } else { - expandRatio = 0; - } - slot.setExpandRatio(expandRatio); - - if (!childUIDL.getBooleanAttribute("cached")) { - child.updateFromUIDL(childUIDL, client); - } - - previousChildren.remove(child); - } - - for (ComponentConnector child : previousChildren) { - Widget widget = child.getWidget(); - - // Don't remove and unregister if it has been moved to a different - // parent. Slot element will be left behind, but that is taken care - // of later - if (widget.getParent() == getWidget()) { - layout.removeSlot(layout.getSlotForChild(widget)); - - ConnectorMap vPaintableMap = ConnectorMap.get(client); - vPaintableMap.unregisterConnector(child); - } - } - - // Remove empty layout slots left behind after children have moved to - // other paintables - while (true) { - int childCount = layout.getElement().getChildCount(); - if (childCount <= 1) { - // Stop if no more slots (spacing element is always present) - break; - } - - Node lastSlot = layout.getElement().getChild(childCount - 2); - if (lastSlot.getChildCount() == 0) { - // Remove if empty - lastSlot.removeFromParent(); - } else { - // Stop searching when last slot is not empty - break; - } - } - - int bitMask = uidl.getIntAttribute("margins"); - layout.updateMarginStyleNames(new VMarginInfo(bitMask)); - - layout.updateSpacingStyleName(uidl.getBooleanAttribute("spacing")); - - getLayoutManager().setNeedsUpdate(this); - } - - private int getSizeForInnerSize(int size, boolean isVertical) { - LayoutManager layoutManager = getLayoutManager(); - Element element = getWidget().getElement(); - if (isVertical) { - return size + layoutManager.getBorderHeight(element) - + layoutManager.getPaddingHeight(element); - } else { - return size + layoutManager.getBorderWidth(element) - + layoutManager.getPaddingWidth(element); - } - } - - private static String getSizeProperty(boolean isVertical) { - return isVertical ? "height" : "width"; - } - - private boolean isUndefinedInDirection(boolean isVertical) { - if (isVertical) { - return isUndefinedHeight(); - } else { - return isUndefinedWidth(); - } - } - - private int getInnerSizeInDirection(boolean isVertical) { - if (isVertical) { - return getLayoutManager().getInnerHeight( - getWidget().getElement()); - } else { - return getLayoutManager().getInnerWidth( - getWidget().getElement()); - } - } - - private void layoutPrimaryDirection() { - VMeasuringOrderedLayout layout = getWidget(); - boolean isVertical = layout.isVertical; - boolean isUndefined = isUndefinedInDirection(isVertical); - - int startPadding = getStartPadding(isVertical); - int spacingSize = getSpacingInDirection(isVertical); - int allocatedSize; - - if (isUndefined) { - allocatedSize = -1; - } else { - allocatedSize = getInnerSizeInDirection(isVertical); - } - - allocatedSize = layout.layoutPrimaryDirection(spacingSize, - allocatedSize, startPadding); - - Style ownStyle = getWidget().getElement().getStyle(); - if (isUndefined) { - ownStyle.setPropertyPx(getSizeProperty(isVertical), - getSizeForInnerSize(allocatedSize, isVertical)); - } else { - ownStyle.setProperty(getSizeProperty(isVertical), - getDefinedSize(isVertical)); - } - } - - private int getSpacingInDirection(boolean isVertical) { - if (isVertical) { - return getLayoutManager().getOuterHeight( - getWidget().spacingMeasureElement); - } else { - return getLayoutManager().getOuterWidth( - getWidget().spacingMeasureElement); - } - } - - private void layoutSecondaryDirection() { - VMeasuringOrderedLayout layout = getWidget(); - boolean isVertical = layout.isVertical; - boolean isUndefined = isUndefinedInDirection(!isVertical); - - int startPadding = getStartPadding(!isVertical); - - int allocatedSize; - if (isUndefined) { - allocatedSize = -1; - } else { - allocatedSize = getInnerSizeInDirection(!isVertical); - } - - allocatedSize = layout.layoutSecondaryDirection(allocatedSize, - startPadding); - - Style ownStyle = getWidget().getElement().getStyle(); - - if (isUndefined) { - ownStyle.setPropertyPx( - getSizeProperty(!getWidget().isVertical), - getSizeForInnerSize(allocatedSize, - !getWidget().isVertical)); - } else { - ownStyle.setProperty( - getSizeProperty(!getWidget().isVertical), - getDefinedSize(!getWidget().isVertical)); - } - } - - private String getDefinedSize(boolean isVertical) { - if (isVertical) { - return getDeclaredHeight(); - } else { - return getDeclaredWidth(); - } - } - - private int getStartPadding(boolean isVertical) { - if (isVertical) { - return getLayoutManager().getPaddingTop( - getWidget().getElement()); - } else { - return getLayoutManager().getPaddingLeft( - getWidget().getElement()); - } - } - - public void layoutHorizontally() { - if (getWidget().isVertical) { - layoutSecondaryDirection(); - } else { - layoutPrimaryDirection(); - } - } - - public void layoutVertically() { - if (getWidget().isVertical) { - layoutPrimaryDirection(); - } else { - layoutSecondaryDirection(); - } - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VMediaBasePaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VMediaBasePaintable.java deleted file mode 100644 index 22e14b8b7f..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VMediaBasePaintable.java +++ /dev/null @@ -1,114 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.Util; - -public abstract class VMediaBasePaintable extends AbstractComponentConnector { - - public static final String TAG_SOURCE = "src"; - - public static final String ATTR_PAUSE = "pause"; - public static final String ATTR_PLAY = "play"; - public static final String ATTR_MUTED = "muted"; - public static final String ATTR_CONTROLS = "ctrl"; - public static final String ATTR_AUTOPLAY = "auto"; - public static final String ATTR_RESOURCE = "res"; - public static final String ATTR_RESOURCE_TYPE = "type"; - public static final String ATTR_HTML = "html"; - public static final String ATTR_ALT_TEXT = "alt"; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().setControls(shouldShowControls(uidl)); - getWidget().setAutoplay(shouldAutoplay(uidl)); - getWidget().setMuted(isMediaMuted(uidl)); - - // Add all sources - for (int ix = 0; ix < uidl.getChildCount(); ix++) { - UIDL child = uidl.getChildUIDL(ix); - if (TAG_SOURCE.equals(child.getTag())) { - getWidget().addSource(getSourceUrl(child), - getSourceType(child)); - } - } - setAltText(uidl); - - evalPauseCommand(uidl); - evalPlayCommand(uidl); - } - - protected boolean shouldShowControls(UIDL uidl) { - return uidl.getBooleanAttribute(ATTR_CONTROLS); - } - - private boolean shouldAutoplay(UIDL uidl) { - return uidl.getBooleanAttribute(ATTR_AUTOPLAY); - } - - private boolean isMediaMuted(UIDL uidl) { - return uidl.getBooleanAttribute(ATTR_MUTED); - } - - private boolean allowHtmlContent(UIDL uidl) { - return uidl.getBooleanAttribute(ATTR_HTML); - } - - private void evalPlayCommand(UIDL uidl) { - if (uidl.hasAttribute(ATTR_PLAY)) { - getWidget().play(); - } - } - - private void evalPauseCommand(UIDL uidl) { - if (uidl.hasAttribute(ATTR_PAUSE)) { - getWidget().pause(); - } - } - - @Override - public VMediaBase getWidget() { - return (VMediaBase) super.getWidget(); - } - - /** - * @param uidl - * @return the URL of a resource to be used as a source for the media - */ - private String getSourceUrl(UIDL uidl) { - String url = getConnection().translateVaadinUri( - uidl.getStringAttribute(VMediaBasePaintable.ATTR_RESOURCE)); - if (url == null) { - return ""; - } - return url; - } - - /** - * @param uidl - * @return the mime type of the media - */ - private String getSourceType(UIDL uidl) { - return uidl.getStringAttribute(VMediaBasePaintable.ATTR_RESOURCE_TYPE); - } - - private void setAltText(UIDL uidl) { - String alt = uidl.getStringAttribute(VMediaBasePaintable.ATTR_ALT_TEXT); - - if (alt == null || "".equals(alt)) { - alt = getWidget().getDefaultAltHtml(); - } else if (!allowHtmlContent(uidl)) { - alt = Util.escapeHTML(alt); - } - getWidget().setAltText(alt); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VMenuBarPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VMenuBarPaintable.java deleted file mode 100644 index 6606493a86..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VMenuBarPaintable.java +++ /dev/null @@ -1,169 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.Iterator; -import java.util.Stack; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.Util; -import com.vaadin.terminal.gwt.client.ui.VMenuBar.CustomMenuItem; - -public class VMenuBarPaintable extends AbstractComponentConnector implements - SimpleManagedLayout { - /** - * This method must be implemented to update the client-side component from - * UIDL data received from server. - * - * This method is called when the page is loaded for the first time, and - * every time UI changes in the component are received from the server. - */ - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // This call should be made first. Ensure correct implementation, - // and let the containing layout manage caption, etc. - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().htmlContentAllowed = uidl - .hasAttribute(VMenuBar.HTML_CONTENT_ALLOWED); - - getWidget().openRootOnHover = uidl - .getBooleanAttribute(VMenuBar.OPEN_ROOT_MENU_ON_HOWER); - - getWidget().enabled = !getState().isDisabled(); - - // For future connections - getWidget().client = client; - getWidget().uidlId = uidl.getId(); - - // Empty the menu every time it receives new information - if (!getWidget().getItems().isEmpty()) { - getWidget().clearItems(); - } - - UIDL options = uidl.getChildUIDL(0); - - if (null != getState() && !getState().isUndefinedWidth()) { - UIDL moreItemUIDL = options.getChildUIDL(0); - StringBuffer itemHTML = new StringBuffer(); - - if (moreItemUIDL.hasAttribute("icon")) { - itemHTML.append("\"\""); - } - - String moreItemText = moreItemUIDL.getStringAttribute("text"); - if ("".equals(moreItemText)) { - moreItemText = "►"; - } - itemHTML.append(moreItemText); - - getWidget().moreItem = GWT.create(CustomMenuItem.class); - getWidget().moreItem.setHTML(itemHTML.toString()); - getWidget().moreItem.setCommand(VMenuBar.emptyCommand); - - getWidget().collapsedRootItems = new VMenuBar(true, - getWidget()); - getWidget().moreItem - .setSubMenu(getWidget().collapsedRootItems); - getWidget().moreItem.addStyleName(VMenuBar.CLASSNAME - + "-more-menuitem"); - } - - UIDL uidlItems = uidl.getChildUIDL(1); - Iterator itr = uidlItems.getChildIterator(); - Stack> iteratorStack = new Stack>(); - Stack menuStack = new Stack(); - VMenuBar currentMenu = getWidget(); - - while (itr.hasNext()) { - UIDL item = (UIDL) itr.next(); - CustomMenuItem currentItem = null; - - final int itemId = item.getIntAttribute("id"); - - boolean itemHasCommand = item.hasAttribute("command"); - boolean itemIsCheckable = item - .hasAttribute(VMenuBar.ATTRIBUTE_CHECKED); - - String itemHTML = getWidget().buildItemHTML(item); - - Command cmd = null; - if (!item.hasAttribute("separator")) { - if (itemHasCommand || itemIsCheckable) { - // Construct a command that fires onMenuClick(int) with the - // item's id-number - cmd = new Command() { - public void execute() { - getWidget().hostReference - .onMenuClick(itemId); - } - }; - } - } - - currentItem = currentMenu.addItem(itemHTML.toString(), cmd); - currentItem.updateFromUIDL(item, client); - - if (item.getChildCount() > 0) { - menuStack.push(currentMenu); - iteratorStack.push(itr); - itr = item.getChildIterator(); - currentMenu = new VMenuBar(true, currentMenu); - // this is the top-level style that also propagates to items - - // any item specific styles are set above in - // currentItem.updateFromUIDL(item, client) - if (getState().hasStyles()) { - for (String style : getState().getStyle().split(" ")) { - currentMenu.addStyleDependentName(style); - } - } - currentItem.setSubMenu(currentMenu); - } - - while (!itr.hasNext() && !iteratorStack.empty()) { - boolean hasCheckableItem = false; - for (CustomMenuItem menuItem : currentMenu.getItems()) { - hasCheckableItem = hasCheckableItem - || menuItem.isCheckable(); - } - if (hasCheckableItem) { - currentMenu.addStyleDependentName("check-column"); - } else { - currentMenu.removeStyleDependentName("check-column"); - } - - itr = iteratorStack.pop(); - currentMenu = menuStack.pop(); - } - }// while - - getWidget().iLayout(false); - - }// updateFromUIDL - - @Override - protected Widget createWidget() { - return GWT.create(VMenuBar.class); - } - - @Override - public VMenuBar getWidget() { - return (VMenuBar) super.getWidget(); - } - - public void layout() { - getWidget().iLayout(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java b/src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java index 039acbd342..e9bbcc6984 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VNativeButton.java @@ -21,7 +21,7 @@ import com.vaadin.terminal.gwt.client.EventId; 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.ui.VButtonPaintable.ButtonClientToServerRpc; +import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonClientToServerRpc; public class VNativeButton extends Button implements ClickHandler, FocusHandler, BlurHandler { diff --git a/src/com/vaadin/terminal/gwt/client/ui/VNativeButtonPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VNativeButtonPaintable.java deleted file mode 100644 index 33afcf38f8..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VNativeButtonPaintable.java +++ /dev/null @@ -1,112 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -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 AbstractComponentConnector { - - @Override - public void init() { - super.init(); - - ButtonClientToServerRpc rpcProxy = GWT - .create(ButtonClientToServerRpc.class); - getWidget().buttonRpcProxy = initRPC(rpcProxy); - } - - @Override - protected boolean delegateCaptionHandling() { - return false; - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - - // Ensure correct implementation, - // but don't let container manage caption etc. - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().disableOnClick = getState().isDisableOnClick(); - getWidget().focusHandlerRegistration = EventHelper - .updateFocusHandler(this, client, - getWidget().focusHandlerRegistration); - getWidget().blurHandlerRegistration = EventHelper - .updateBlurHandler(this, client, - getWidget().blurHandlerRegistration); - - // Save details - getWidget().client = client; - getWidget().paintableId = uidl.getId(); - - // Set text - getWidget().setText(getState().getCaption()); - - // handle error - if (uidl.hasAttribute("error")) { - if (getWidget().errorIndicatorElement == null) { - getWidget().errorIndicatorElement = DOM - .createSpan(); - getWidget().errorIndicatorElement - .setClassName("v-errorindicator"); - } - getWidget().getElement().insertBefore( - getWidget().errorIndicatorElement, - getWidget().captionElement); - - } else if (getWidget().errorIndicatorElement != null) { - getWidget().getElement().removeChild( - getWidget().errorIndicatorElement); - getWidget().errorIndicatorElement = null; - } - - if (uidl.hasAttribute(ATTRIBUTE_ICON)) { - if (getWidget().icon == null) { - getWidget().icon = new Icon(client); - getWidget().getElement().insertBefore( - getWidget().icon.getElement(), - getWidget().captionElement); - } - getWidget().icon.setUri(uidl - .getStringAttribute(ATTRIBUTE_ICON)); - } else { - if (getWidget().icon != null) { - getWidget().getElement().removeChild( - getWidget().icon.getElement()); - getWidget().icon = null; - } - } - - } - - @Override - protected Widget createWidget() { - return GWT.create(VNativeButton.class); - } - - @Override - public VNativeButton getWidget() { - return (VNativeButton) super.getWidget(); - } - - @Override - public ButtonState getState() { - return (ButtonState) super.getState(); - } - - @Override - protected ComponentState createState() { - return GWT.create(ButtonState.class); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VNativeSelectPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VNativeSelectPaintable.java deleted file mode 100644 index 5175369045..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VNativeSelectPaintable.java +++ /dev/null @@ -1,21 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; - -public class VNativeSelectPaintable extends VOptionGroupBasePaintable { - - @Override - protected Widget createWidget() { - return GWT.create(VNativeSelect.class); - } - - @Override - public VNativeSelect getWidget() { - return (VNativeSelect) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VOptionGroupBasePaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VOptionGroupBasePaintable.java deleted file mode 100644 index d730d50365..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VOptionGroupBasePaintable.java +++ /dev/null @@ -1,104 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public abstract class VOptionGroupBasePaintable extends - AbstractComponentConnector { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - - // Save details - getWidget().client = client; - getWidget().paintableId = uidl.getId(); - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().selectedKeys = uidl - .getStringArrayVariableAsSet("selected"); - - getWidget().readonly = getState().isReadOnly(); - getWidget().disabled = getState().isDisabled(); - getWidget().multiselect = "multi".equals(uidl - .getStringAttribute("selectmode")); - getWidget().immediate = getState().isImmediate(); - getWidget().nullSelectionAllowed = uidl - .getBooleanAttribute("nullselect"); - getWidget().nullSelectionItemAvailable = uidl - .getBooleanAttribute("nullselectitem"); - - if (uidl.hasAttribute("cols")) { - getWidget().cols = uidl.getIntAttribute("cols"); - } - if (uidl.hasAttribute("rows")) { - getWidget().rows = uidl.getIntAttribute("rows"); - } - - final UIDL ops = uidl.getChildUIDL(0); - - if (getWidget().getColumns() > 0) { - getWidget().container.setWidth(getWidget() - .getColumns() + "em"); - if (getWidget().container != getWidget().optionsContainer) { - getWidget().optionsContainer.setWidth("100%"); - } - } - - getWidget().buildOptions(ops); - - if (uidl.getBooleanAttribute("allownewitem")) { - if (getWidget().newItemField == null) { - getWidget().newItemButton = new VNativeButton(); - getWidget().newItemButton.setText("+"); - getWidget().newItemButton - .addClickHandler(getWidget()); - getWidget().newItemField = new VTextField(); - getWidget().newItemField - .addKeyPressHandler(getWidget()); - } - getWidget().newItemField - .setEnabled(!getWidget().disabled - && !getWidget().readonly); - getWidget().newItemButton - .setEnabled(!getWidget().disabled - && !getWidget().readonly); - - if (getWidget().newItemField == null - || getWidget().newItemField.getParent() != getWidget().container) { - getWidget().container - .add(getWidget().newItemField); - getWidget().container - .add(getWidget().newItemButton); - final int w = getWidget().container - .getOffsetWidth() - - getWidget().newItemButton - .getOffsetWidth(); - getWidget().newItemField.setWidth(Math.max(w, 0) - + "px"); - } - } else if (getWidget().newItemField != null) { - getWidget().container - .remove(getWidget().newItemField); - getWidget().container - .remove(getWidget().newItemButton); - } - - getWidget().setTabIndex( - uidl.hasAttribute("tabindex") ? uidl - .getIntAttribute("tabindex") : 0); - - } - - @Override - public VOptionGroupBase getWidget() { - return (VOptionGroupBase) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VOptionGroupPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VOptionGroupPaintable.java deleted file mode 100644 index 5def912491..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VOptionGroupPaintable.java +++ /dev/null @@ -1,71 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import java.util.ArrayList; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.EventId; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VOptionGroupPaintable extends VOptionGroupBasePaintable { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().htmlContentAllowed = uidl - .hasAttribute(VOptionGroup.HTML_CONTENT_ALLOWED); - - super.updateFromUIDL(uidl, client); - - getWidget().sendFocusEvents = client.hasEventListeners( - this, EventId.FOCUS); - getWidget().sendBlurEvents = client.hasEventListeners(this, - EventId.BLUR); - - if (getWidget().focusHandlers != null) { - for (HandlerRegistration reg : getWidget().focusHandlers) { - reg.removeHandler(); - } - getWidget().focusHandlers.clear(); - getWidget().focusHandlers = null; - - for (HandlerRegistration reg : getWidget().blurHandlers) { - reg.removeHandler(); - } - getWidget().blurHandlers.clear(); - getWidget().blurHandlers = null; - } - - if (getWidget().sendFocusEvents - || getWidget().sendBlurEvents) { - getWidget().focusHandlers = new ArrayList(); - getWidget().blurHandlers = new ArrayList(); - - // add focus and blur handlers to checkboxes / radio buttons - for (Widget wid : getWidget().panel) { - if (wid instanceof CheckBox) { - getWidget().focusHandlers.add(((CheckBox) wid) - .addFocusHandler(getWidget())); - getWidget().blurHandlers.add(((CheckBox) wid) - .addBlurHandler(getWidget())); - } - } - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VOptionGroup.class); - } - - @Override - public VOptionGroup getWidget() { - return (VOptionGroup) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VPanelPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VPanelPaintable.java deleted file mode 100644 index 0cf7d7fef8..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VPanelPaintable.java +++ /dev/null @@ -1,235 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Style; -import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.LayoutManager; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VPanelPaintable extends AbstractComponentContainerConnector - implements SimpleManagedLayout, PostLayoutListener { - - public static final String CLICK_EVENT_IDENTIFIER = "click"; - - private Integer uidlScrollTop; - - private ClickEventHandler clickEventHandler = new ClickEventHandler(this, - CLICK_EVENT_IDENTIFIER) { - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - return getWidget().addDomHandler(handler, type); - } - }; - - private Integer uidlScrollLeft; - - @Override - public void init() { - VPanel panel = getWidget(); - LayoutManager layoutManager = getLayoutManager(); - - layoutManager.registerDependency(this, panel.captionNode); - layoutManager.registerDependency(this, panel.bottomDecoration); - layoutManager.registerDependency(this, panel.contentNode); - } - - @Override - protected boolean delegateCaptionHandling() { - return false; - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - if (isRealUpdate(uidl)) { - - // Handle caption displaying and style names, prior generics. - // Affects size calculations - - // Restore default stylenames - getWidget().contentNode.setClassName(VPanel.CLASSNAME - + "-content"); - getWidget().bottomDecoration - .setClassName(VPanel.CLASSNAME + "-deco"); - getWidget().captionNode.setClassName(VPanel.CLASSNAME - + "-caption"); - boolean hasCaption = false; - if (getState().getCaption() != null - && !"".equals(getState().getCaption())) { - getWidget().setCaption(getState().getCaption()); - hasCaption = true; - } else { - getWidget().setCaption(""); - getWidget().captionNode - .setClassName(VPanel.CLASSNAME + "-nocaption"); - } - - // Add proper stylenames for all elements. This way we can prevent - // unwanted CSS selector inheritance. - final String captionBaseClass = VPanel.CLASSNAME - + (hasCaption ? "-caption" : "-nocaption"); - final String contentBaseClass = VPanel.CLASSNAME + "-content"; - final String decoBaseClass = VPanel.CLASSNAME + "-deco"; - String captionClass = captionBaseClass; - String contentClass = contentBaseClass; - String decoClass = decoBaseClass; - if (getState().hasStyles()) { - final String[] styles = getState().getStyle().split(" "); - for (int i = 0; i < styles.length; i++) { - captionClass += " " + captionBaseClass + "-" + styles[i]; - contentClass += " " + contentBaseClass + "-" + styles[i]; - decoClass += " " + decoBaseClass + "-" + styles[i]; - } - } - getWidget().captionNode.setClassName(captionClass); - getWidget().contentNode.setClassName(contentClass); - getWidget().bottomDecoration.setClassName(decoClass); - } - // Ensure correct implementation - super.updateFromUIDL(uidl, client); - - if (!isRealUpdate(uidl)) { - return; - } - - clickEventHandler.handleEventHandlerRegistration(client); - - getWidget().client = client; - getWidget().id = uidl.getId(); - - getWidget().setIconUri(uidl, client); - - getWidget().handleError(uidl); - - // Render content - final UIDL layoutUidl = uidl.getChildUIDL(0); - final ComponentConnector newLayout = client.getPaintable(layoutUidl); - if (newLayout != getWidget().layout) { - if (getWidget().layout != null) { - client.unregisterPaintable(getWidget().layout); - } - getWidget() - .setWidget(newLayout.getWidget()); - getWidget().layout = newLayout; - } - getWidget().layout.updateFromUIDL(layoutUidl, client); - - // We may have actions attached to this panel - if (uidl.getChildCount() > 1) { - final int cnt = uidl.getChildCount(); - for (int i = 1; i < cnt; i++) { - UIDL childUidl = uidl.getChildUIDL(i); - if (childUidl.getTag().equals("actions")) { - if (getWidget().shortcutHandler == null) { - getWidget().shortcutHandler = new ShortcutActionHandler( - getId(), client); - } - getWidget().shortcutHandler - .updateActionMap(childUidl); - } - } - } - - if (uidl.hasVariable("scrollTop") - && uidl.getIntVariable("scrollTop") != getWidget().scrollTop) { - // Sizes are not yet up to date, so changing the scroll position - // is deferred to after the layout phase - uidlScrollTop = new Integer(uidl.getIntVariable("scrollTop")); - } - - if (uidl.hasVariable("scrollLeft") - && uidl.getIntVariable("scrollLeft") != getWidget().scrollLeft) { - // Sizes are not yet up to date, so changing the scroll position - // is deferred to after the layout phase - uidlScrollLeft = new Integer(uidl.getIntVariable("scrollLeft")); - } - - // And apply tab index - if (uidl.hasVariable("tabindex")) { - getWidget().contentNode.setTabIndex(uidl - .getIntVariable("tabindex")); - } - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - // NOP: layouts caption, errors etc not rendered in Panel - } - - @Override - public VPanel getWidget() { - return (VPanel) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VPanel.class); - } - - public void layout() { - updateSizes(); - } - - void updateSizes() { - VPanel panel = getWidget(); - - Style contentStyle = panel.contentNode.getStyle(); - if (isUndefinedHeight()) { - contentStyle.clearHeight(); - } else { - contentStyle.setHeight(100, Unit.PCT); - } - - if (isUndefinedWidth()) { - contentStyle.clearWidth(); - } else { - contentStyle.setWidth(100, Unit.PCT); - } - - LayoutManager layoutManager = getLayoutManager(); - int top = layoutManager.getOuterHeight(panel.captionNode); - int bottom = layoutManager.getOuterHeight(panel.bottomDecoration); - - Style style = panel.getElement().getStyle(); - panel.captionNode.getStyle().setMarginTop(-top, Unit.PX); - panel.bottomDecoration.getStyle().setMarginBottom(-bottom, Unit.PX); - style.setPaddingTop(top, Unit.PX); - style.setPaddingBottom(bottom, Unit.PX); - - // Update scroll positions - panel.contentNode.setScrollTop(panel.scrollTop); - panel.contentNode.setScrollLeft(panel.scrollLeft); - // Read actual value back to ensure update logic is correct - panel.scrollTop = panel.contentNode.getScrollTop(); - panel.scrollLeft = panel.contentNode.getScrollLeft(); - } - - public void postLayout() { - VPanel panel = getWidget(); - if (uidlScrollTop != null) { - panel.contentNode.setScrollTop(uidlScrollTop.intValue()); - // Read actual value back to ensure update logic is correct - // TODO Does this trigger reflows? - panel.scrollTop = panel.contentNode.getScrollTop(); - uidlScrollTop = null; - } - - if (uidlScrollLeft != null) { - panel.contentNode.setScrollLeft(uidlScrollLeft.intValue()); - // Read actual value back to ensure update logic is correct - // TODO Does this trigger reflows? - panel.scrollLeft = panel.contentNode.getScrollLeft(); - uidlScrollLeft = null; - } - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VPasswordFieldPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VPasswordFieldPaintable.java deleted file mode 100644 index 085df27702..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VPasswordFieldPaintable.java +++ /dev/null @@ -1,28 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VPasswordFieldPaintable extends VTextFieldPaintable { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - } - - @Override - protected Widget createWidget() { - return GWT.create(VPasswordField.class); - } - - @Override - public VPasswordField getWidget() { - return (VPasswordField) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VPopupCalendarPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VPopupCalendarPaintable.java deleted file mode 100644 index 3ff85cccfe..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VPopupCalendarPaintable.java +++ /dev/null @@ -1,130 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import java.util.Date; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.DateTimeService; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusChangeListener; -import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener; - -public class VPopupCalendarPaintable extends VTextualDatePaintable { - - /* - * (non-Javadoc) - * - * @see - * com.vaadin.terminal.gwt.client.ui.VTextualDate#updateFromUIDL(com.vaadin - * .terminal.gwt.client.UIDL, - * com.vaadin.terminal.gwt.client.ApplicationConnection) - */ - @Override - @SuppressWarnings("deprecation") - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - boolean lastReadOnlyState = getWidget().readonly; - boolean lastEnabledState = getWidget().isEnabled(); - - getWidget().parsable = uidl.getBooleanAttribute("parsable"); - - super.updateFromUIDL(uidl, client); - - String popupStyleNames = getStyleNameFromUIDL( - VPopupCalendar.POPUP_PRIMARY_STYLE_NAME, uidl, getState(), - false); - popupStyleNames += " " - + VDateField.CLASSNAME - + "-" - + VPopupCalendar - .resolutionToString(getWidget().currentResolution); - getWidget().popup.setStyleName(popupStyleNames); - - getWidget().calendar - .setDateTimeService(getWidget() - .getDateTimeService()); - getWidget().calendar - .setShowISOWeekNumbers(getWidget() - .isShowISOWeekNumbers()); - if (getWidget().calendar.getResolution() != getWidget().currentResolution) { - getWidget().calendar - .setResolution(getWidget().currentResolution); - if (getWidget().calendar.getDate() != null) { - getWidget().calendar - .setDate((Date) getWidget() - .getCurrentDate().clone()); - // force re-render when changing resolution only - getWidget().calendar.renderCalendar(); - } - } - getWidget().calendarToggle - .setEnabled(getWidget().enabled); - - if (getWidget().currentResolution <= VPopupCalendar.RESOLUTION_MONTH) { - getWidget().calendar - .setFocusChangeListener(new FocusChangeListener() { - public void focusChanged(Date date) { - getWidget().updateValue(date); - getWidget().buildDate(); - Date date2 = getWidget().calendar - .getDate(); - date2.setYear(date.getYear()); - date2.setMonth(date.getMonth()); - } - }); - } else { - getWidget().calendar.setFocusChangeListener(null); - } - - if (getWidget().currentResolution > VPopupCalendar.RESOLUTION_DAY) { - getWidget().calendar - .setTimeChangeListener(new TimeChangeListener() { - public void changed(int hour, int min, int sec, int msec) { - Date d = getWidget().getDate(); - if (d == null) { - // date currently null, use the value from - // calendarPanel - // (~ client time at the init of the widget) - d = (Date) getWidget().calendar - .getDate().clone(); - } - d.setHours(hour); - d.setMinutes(min); - d.setSeconds(sec); - DateTimeService.setMilliseconds(d, msec); - - // Always update time changes to the server - getWidget().updateValue(d); - - // Update text field - getWidget().buildDate(); - } - }); - } - - if (getWidget().readonly) { - getWidget().calendarToggle - .addStyleName(VPopupCalendar.CLASSNAME + "-button-readonly"); - } else { - getWidget().calendarToggle - .removeStyleName(VPopupCalendar.CLASSNAME - + "-button-readonly"); - } - - getWidget().calendarToggle.setEnabled(true); - } - - @Override - protected Widget createWidget() { - return GWT.create(VPopupCalendar.class); - } - - @Override - public VPopupCalendar getWidget() { - return (VPopupCalendar) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VPopupViewPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VPopupViewPaintable.java deleted file mode 100644 index 0950d31806..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VPopupViewPaintable.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - @VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.VCaption; -import com.vaadin.terminal.gwt.client.VCaptionWrapper; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VPopupViewPaintable extends AbstractComponentContainerConnector { - - @Override - protected boolean delegateCaptionHandling() { - return false; - } - - /** - * - * - * @see com.vaadin.terminal.gwt.client.ComponentConnector#updateFromUIDL(com.vaadin.terminal.gwt.client.UIDL, - * com.vaadin.terminal.gwt.client.ApplicationConnection) - */ - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // This call should be made first. Ensure correct implementation, - // and don't let the containing layout manage caption. - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - // These are for future server connections - getWidget().client = client; - getWidget().uidlId = uidl.getId(); - - getWidget().hostPopupVisible = uidl - .getBooleanVariable("popupVisibility"); - - getWidget().setHTML(uidl.getStringAttribute("html")); - - if (uidl.hasAttribute("hideOnMouseOut")) { - getWidget().popup.setHideOnMouseOut(uidl - .getBooleanAttribute("hideOnMouseOut")); - } - - // Render the popup if visible and show it. - if (getWidget().hostPopupVisible) { - UIDL popupUIDL = uidl.getChildUIDL(0); - - // showPopupOnTop(popup, hostReference); - getWidget().preparePopup(getWidget().popup); - getWidget().popup.updateFromUIDL(popupUIDL, client); - if (getState().hasStyles()) { - final String[] styles = getState().getStyle().split(" "); - final StringBuffer styleBuf = new StringBuffer(); - final String primaryName = getWidget().popup - .getStylePrimaryName(); - styleBuf.append(primaryName); - for (int i = 0; i < styles.length; i++) { - styleBuf.append(" "); - styleBuf.append(primaryName); - styleBuf.append("-"); - styleBuf.append(styles[i]); - } - getWidget().popup.setStyleName(styleBuf.toString()); - } else { - getWidget().popup - .setStyleName(getWidget().popup - .getStylePrimaryName()); - } - getWidget().showPopup(getWidget().popup); - - // The popup shouldn't be visible, try to hide it. - } else { - getWidget().popup.hide(); - } - }// updateFromUIDL - - public void updateCaption(ComponentConnector component, UIDL uidl) { - if (VCaption.isNeeded(uidl, component.getState())) { - if (getWidget().popup.captionWrapper != null) { - getWidget().popup.captionWrapper - .updateCaption(uidl); - } else { - getWidget().popup.captionWrapper = new VCaptionWrapper( - component, getConnection()); - getWidget().popup - .setWidget(getWidget().popup.captionWrapper); - getWidget().popup.captionWrapper - .updateCaption(uidl); - } - } else { - if (getWidget().popup.captionWrapper != null) { - getWidget().popup - .setWidget(getWidget().popup.popupComponentWidget); - } - } - } - - @Override - public VPopupView getWidget() { - return (VPopupView) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VPopupView.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VProgressIndicatorPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VProgressIndicatorPaintable.java deleted file mode 100644 index 93fe850430..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VProgressIndicatorPaintable.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VProgressIndicatorPaintable extends AbstractComponentConnector { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - - // Ensure correct implementation, - // but don't let container manage caption etc. - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - // Save details - getWidget().client = client; - - getWidget().indeterminate = uidl - .getBooleanAttribute("indeterminate"); - - if (getWidget().indeterminate) { - String basename = VProgressIndicator.CLASSNAME + "-indeterminate"; - getWidget().addStyleName(basename); - if (getState().isDisabled()) { - getWidget().addStyleName(basename + "-disabled"); - } else { - getWidget().removeStyleName(basename + "-disabled"); - } - } else { - try { - final float f = Float.parseFloat(uidl - .getStringAttribute("state")); - final int size = Math.round(100 * f); - DOM.setStyleAttribute(getWidget().indicator, - "width", size + "%"); - } catch (final Exception e) { - } - } - - if (!getState().isDisabled()) { - getWidget().interval = uidl - .getIntAttribute("pollinginterval"); - getWidget().poller - .scheduleRepeating(getWidget().interval); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VProgressIndicator.class); - } - - @Override - public VProgressIndicator getWidget() { - return (VProgressIndicator) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTablePaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTablePaintable.java deleted file mode 100644 index 80df4e41b0..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTablePaintable.java +++ /dev/null @@ -1,270 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.dom.client.Style.Position; -import com.google.gwt.user.client.Command; -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.DirectionalManagedLayout; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.Util; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VScrollTablePaintable extends AbstractComponentContainerConnector - implements DirectionalManagedLayout { - - /* - * (non-Javadoc) - * - * @see - * com.vaadin.terminal.gwt.client.Paintable#updateFromUIDL(com.vaadin.terminal - * .gwt.client.UIDL, com.vaadin.terminal.gwt.client.ApplicationConnection) - */ - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().rendering = true; - - if (uidl.hasAttribute(VScrollTable.ATTRIBUTE_PAGEBUFFER_FIRST)) { - getWidget().serverCacheFirst = uidl - .getIntAttribute(VScrollTable.ATTRIBUTE_PAGEBUFFER_FIRST); - getWidget().serverCacheLast = uidl - .getIntAttribute(VScrollTable.ATTRIBUTE_PAGEBUFFER_LAST); - } else { - getWidget().serverCacheFirst = -1; - getWidget().serverCacheLast = -1; - } - /* - * We need to do this before updateComponent since updateComponent calls - * this.setHeight() which will calculate a new body height depending on - * the space available. - */ - if (uidl.hasAttribute("colfooters")) { - getWidget().showColFooters = uidl - .getBooleanAttribute("colfooters"); - } - - getWidget().tFoot - .setVisible(getWidget().showColFooters); - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - getWidget().rendering = false; - return; - } - - getWidget().enabled = !getState().isDisabled(); - - if (BrowserInfo.get().isIE8() && !getWidget().enabled) { - /* - * The disabled shim will not cover the table body if it is relative - * in IE8. See #7324 - */ - getWidget().scrollBodyPanel.getElement().getStyle() - .setPosition(Position.STATIC); - } else if (BrowserInfo.get().isIE8()) { - getWidget().scrollBodyPanel.getElement().getStyle() - .setPosition(Position.RELATIVE); - } - - getWidget().client = client; - getWidget().paintableId = uidl.getStringAttribute("id"); - getWidget().immediate = getState().isImmediate(); - - int previousTotalRows = getWidget().totalRows; - getWidget().updateTotalRows(uidl); - boolean totalRowsChanged = (getWidget().totalRows != previousTotalRows); - - getWidget().updateDragMode(uidl); - - getWidget().updateSelectionProperties(uidl, getState()); - - if (uidl.hasAttribute("alb")) { - getWidget().bodyActionKeys = uidl - .getStringArrayAttribute("alb"); - } else { - // Need to clear the actions if the action handlers have been - // removed - getWidget().bodyActionKeys = null; - } - - getWidget().setCacheRateFromUIDL(uidl); - - getWidget().recalcWidths = uidl - .hasAttribute("recalcWidths"); - if (getWidget().recalcWidths) { - getWidget().tHead.clear(); - getWidget().tFoot.clear(); - } - - getWidget().updatePageLength(uidl); - - getWidget().updateFirstVisibleAndScrollIfNeeded(uidl); - - getWidget().showRowHeaders = uidl - .getBooleanAttribute("rowheaders"); - getWidget().showColHeaders = uidl - .getBooleanAttribute("colheaders"); - - getWidget().updateSortingProperties(uidl); - - boolean keyboardSelectionOverRowFetchInProgress = getWidget() - .selectSelectedRows(uidl); - - getWidget().updateActionMap(uidl); - - getWidget().updateColumnProperties(uidl); - - UIDL ac = uidl.getChildByTagName("-ac"); - if (ac == null) { - if (getWidget().dropHandler != null) { - // remove dropHandler if not present anymore - getWidget().dropHandler = null; - } - } else { - if (getWidget().dropHandler == null) { - getWidget().dropHandler = getWidget().new VScrollTableDropHandler(); - } - getWidget().dropHandler.updateAcceptRules(ac); - } - - UIDL partialRowAdditions = uidl.getChildByTagName("prows"); - UIDL partialRowUpdates = uidl.getChildByTagName("urows"); - if (partialRowUpdates != null || partialRowAdditions != null) { - // we may have pending cache row fetch, cancel it. See #2136 - getWidget().rowRequestHandler.cancel(); - - getWidget().updateRowsInBody(partialRowUpdates); - getWidget().addAndRemoveRows(partialRowAdditions); - } else { - UIDL rowData = uidl.getChildByTagName("rows"); - if (rowData != null) { - // we may have pending cache row fetch, cancel it. See #2136 - getWidget().rowRequestHandler.cancel(); - - if (!getWidget().recalcWidths - && getWidget().initializedAndAttached) { - getWidget().updateBody(rowData, - uidl.getIntAttribute("firstrow"), - uidl.getIntAttribute("rows")); - if (getWidget().headerChangedDuringUpdate) { - getWidget().triggerLazyColumnAdjustment( - true); - } else if (!getWidget() - .isScrollPositionVisible() - || totalRowsChanged - || getWidget().lastRenderedHeight != getWidget().scrollBody - .getOffsetHeight()) { - // webkits may still bug with their disturbing scrollbar - // bug, see #3457 - // Run overflow fix for the scrollable area - // #6698 - If there's a scroll going on, don't abort it - // by changing overflows as the length of the contents - // *shouldn't* have changed (unless the number of rows - // or the height of the widget has also changed) - Scheduler.get().scheduleDeferred(new Command() { - public void execute() { - Util.runWebkitOverflowAutoFix(getWidget().scrollBodyPanel - .getElement()); - } - }); - } - } else { - getWidget().initializeRows(uidl, rowData); - } - } - } - - if (!getWidget().isSelectable()) { - getWidget().scrollBody - .addStyleName(VScrollTable.CLASSNAME + "-body-noselection"); - } else { - getWidget().scrollBody - .removeStyleName(VScrollTable.CLASSNAME - + "-body-noselection"); - } - - getWidget().hideScrollPositionAnnotation(); - getWidget().purgeUnregistryBag(); - - // selection is no in sync with server, avoid excessive server visits by - // clearing to flag used during the normal operation - if (!keyboardSelectionOverRowFetchInProgress) { - getWidget().selectionChanged = false; - } - - /* - * This is called when the Home or page up button has been pressed in - * selectable mode and the next selected row was not yet rendered in the - * client - */ - if (getWidget().selectFirstItemInNextRender - || getWidget().focusFirstItemInNextRender) { - getWidget().selectFirstRenderedRowInViewPort( - getWidget().focusFirstItemInNextRender); - getWidget().selectFirstItemInNextRender = getWidget().focusFirstItemInNextRender = false; - } - - /* - * This is called when the page down or end button has been pressed in - * selectable mode and the next selected row was not yet rendered in the - * client - */ - if (getWidget().selectLastItemInNextRender - || getWidget().focusLastItemInNextRender) { - getWidget().selectLastRenderedRowInViewPort( - getWidget().focusLastItemInNextRender); - getWidget().selectLastItemInNextRender = getWidget().focusLastItemInNextRender = false; - } - getWidget().multiselectPending = false; - - if (getWidget().focusedRow != null) { - if (!getWidget().focusedRow.isAttached() - && !getWidget().rowRequestHandler.isRunning()) { - // focused row has been orphaned, can't focus - getWidget().focusRowFromBody(); - } - } - - getWidget().tabIndex = uidl.hasAttribute("tabindex") ? uidl - .getIntAttribute("tabindex") : 0; - getWidget().setProperTabIndex(); - - getWidget().resizeSortedColumnForSortIndicator(); - - // Remember this to detect situations where overflow hack might be - // needed during scrolling - getWidget().lastRenderedHeight = getWidget().scrollBody - .getOffsetHeight(); - - getWidget().rendering = false; - getWidget().headerChangedDuringUpdate = false; - - } - - @Override - protected Widget createWidget() { - return GWT.create(VScrollTable.class); - } - - @Override - public VScrollTable getWidget() { - return (VScrollTable) super.getWidget(); - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - // NOP, not rendered - } - - public void layoutVertically() { - getWidget().updateHeight(); - } - - public void layoutHorizontally() { - getWidget().updateWidth(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VSliderPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VSliderPaintable.java deleted file mode 100644 index 96df1a81a5..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VSliderPaintable.java +++ /dev/null @@ -1,80 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VSliderPaintable extends AbstractComponentConnector { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - - getWidget().client = client; - getWidget().id = uidl.getId(); - - // Ensure correct implementation - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().immediate = getState().isImmediate(); - getWidget().disabled = getState().isDisabled(); - getWidget().readonly = getState().isReadOnly(); - - getWidget().vertical = uidl.hasAttribute("vertical"); - - // TODO should these style names be used? - String style = getState().getStyle(); - - if (getWidget().vertical) { - getWidget().addStyleName( - VSlider.CLASSNAME + "-vertical"); - } else { - getWidget().removeStyleName( - VSlider.CLASSNAME + "-vertical"); - } - - getWidget().min = uidl.getDoubleAttribute("min"); - getWidget().max = uidl.getDoubleAttribute("max"); - getWidget().resolution = uidl.getIntAttribute("resolution"); - getWidget().value = new Double( - uidl.getDoubleVariable("value")); - - getWidget().setFeedbackValue(getWidget().value); - - getWidget().buildBase(); - - if (!getWidget().vertical) { - // Draw handle with a delay to allow base to gain maximum width - Scheduler.get().scheduleDeferred(new Command() { - public void execute() { - getWidget().buildHandle(); - getWidget().setValue( - getWidget().value, false); - } - }); - } else { - getWidget().buildHandle(); - getWidget().setValue(getWidget().value, - false); - } - } - - @Override - public VSlider getWidget() { - return (VSlider) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VSlider.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java index fcca633cef..3b3f581a51 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java @@ -196,12 +196,12 @@ public class VTabsheet extends VTabsheetBase { @Override public boolean updateCaption(UIDL uidl) { - if (uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DESCRIPTION) + if (uidl.hasAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DESCRIPTION) || uidl.hasAttribute(AbstractComponentConnector.ATTRIBUTE_ERROR)) { TooltipInfo tooltipInfo = new TooltipInfo(); tooltipInfo .setTitle(uidl - .getStringAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DESCRIPTION)); + .getStringAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DESCRIPTION)); if (uidl.hasAttribute(AbstractComponentConnector.ATTRIBUTE_ERROR)) { tooltipInfo.setErrorUidl(uidl.getErrors()); } @@ -215,9 +215,9 @@ public class VTabsheet extends VTabsheetBase { // not have an owner boolean ret = updateCaptionWithoutOwner( uidl, - uidl.getStringAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_CAPTION), - uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DISABLED), - uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DESCRIPTION)); + uidl.getStringAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_CAPTION), + uidl.hasAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DISABLED), + uidl.hasAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DESCRIPTION)); setClosable(uidl.hasAttribute("closable")); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTabsheetBasePaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTabsheetBasePaintable.java deleted file mode 100644 index 389b347e37..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VTabsheetBasePaintable.java +++ /dev/null @@ -1,103 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.ArrayList; -import java.util.Iterator; - -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ConnectorMap; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public abstract class VTabsheetBasePaintable extends - AbstractComponentContainerConnector { - - public static final String ATTRIBUTE_TAB_DISABLED = "disabled"; - public static final String ATTRIBUTE_TAB_DESCRIPTION = "description"; - public static final String ATTRIBUTE_TAB_CAPTION = "caption"; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().client = client; - - // Ensure correct implementation - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - // Update member references - getWidget().id = uidl.getId(); - getWidget().disabled = getState().isDisabled(); - - // Render content - final UIDL tabs = uidl.getChildUIDL(0); - - // Paintables in the TabSheet before update - ArrayList oldWidgets = new ArrayList(); - for (Iterator iterator = getWidget() - .getWidgetIterator(); iterator.hasNext();) { - oldWidgets.add(iterator.next()); - } - - // Clear previous values - getWidget().tabKeys.clear(); - getWidget().disabledTabKeys.clear(); - - int index = 0; - for (final Iterator it = tabs.getChildIterator(); it.hasNext();) { - final UIDL tab = (UIDL) it.next(); - final String key = tab.getStringAttribute("key"); - final boolean selected = tab.getBooleanAttribute("selected"); - final boolean hidden = tab.getBooleanAttribute("hidden"); - - if (tab.getBooleanAttribute(ATTRIBUTE_TAB_DISABLED)) { - getWidget().disabledTabKeys.add(key); - } - - getWidget().tabKeys.add(key); - - if (selected) { - getWidget().activeTabIndex = index; - } - getWidget().renderTab(tab, index, selected, hidden); - index++; - } - - int tabCount = getWidget().getTabCount(); - while (tabCount-- > index) { - getWidget().removeTab(index); - } - - for (int i = 0; i < getWidget().getTabCount(); i++) { - ComponentConnector p = getWidget().getTab(i); - // During the initial rendering the paintable might be null (this is - // weird...) - if (p != null) { - oldWidgets.remove(p.getWidget()); - } - } - - // Perform unregister for any paintables removed during update - for (Iterator iterator = oldWidgets.iterator(); iterator - .hasNext();) { - Widget oldWidget = iterator.next(); - ComponentConnector oldPaintable = ConnectorMap.get(client) - .getConnector(oldWidget); - if (oldWidget.isAttached()) { - oldWidget.removeFromParent(); - } - ConnectorMap.get(client).unregisterConnector(oldPaintable); - } - - } - - @Override - public VTabsheetBase getWidget() { - return (VTabsheetBase) super.getWidget(); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTabsheetPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTabsheetPaintable.java deleted file mode 100644 index c4b3a6065f..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VTabsheetPaintable.java +++ /dev/null @@ -1,102 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VTabsheetPaintable extends VTabsheetBasePaintable implements - SimpleManagedLayout { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - - if (isRealUpdate(uidl)) { - // Handle stylename changes before generics (might affect size - // calculations) - getWidget().handleStyleNames(uidl, getState()); - } - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - // tabs; push or not - if (!isUndefinedWidth()) { - // FIXME: This makes tab sheet tabs go to 1px width on every update - // and then back to original width - // update width later, in updateTabScroller(); - DOM.setStyleAttribute(getWidget().tabs, "width", "1px"); - DOM.setStyleAttribute(getWidget().tabs, "overflow", - "hidden"); - } else { - getWidget().showAllTabs(); - DOM.setStyleAttribute(getWidget().tabs, "width", ""); - DOM.setStyleAttribute(getWidget().tabs, "overflow", - "visible"); - getWidget().updateDynamicWidth(); - } - - if (!isUndefinedHeight()) { - // Must update height after the styles have been set - getWidget().updateContentNodeHeight(); - getWidget().updateOpenTabSize(); - } - - getWidget().iLayout(); - - // Re run relative size update to ensure optimal scrollbars - // TODO isolate to situation that visible tab has undefined height - try { - client.handleComponentRelativeSize(getWidget().tp - .getWidget(getWidget().tp.getVisibleWidget())); - } catch (Exception e) { - // Ignore, most likely empty tabsheet - } - - getWidget().waitingForResponse = false; - } - - @Override - protected Widget createWidget() { - return GWT.create(VTabsheet.class); - } - - @Override - public VTabsheet getWidget() { - return (VTabsheet) super.getWidget(); - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - /* Tabsheet does not render its children's captions */ - } - - public void layout() { - VTabsheet tabsheet = getWidget(); - - tabsheet.updateContentNodeHeight(); - - if (isUndefinedWidth()) { - tabsheet.contentNode.getStyle().setProperty("width", ""); - } else { - int contentWidth = tabsheet.getOffsetWidth() - - tabsheet.getContentAreaBorderWidth(); - if (contentWidth < 0) { - contentWidth = 0; - } - tabsheet.contentNode.getStyle().setProperty("width", - contentWidth + "px"); - } - - tabsheet.updateOpenTabSize(); - tabsheet.iLayout(); - - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTextAreaPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTextAreaPaintable.java deleted file mode 100644 index c9e573c659..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VTextAreaPaintable.java +++ /dev/null @@ -1,38 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VTextAreaPaintable extends VTextFieldPaintable { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // Call parent renderer explicitly - super.updateFromUIDL(uidl, client); - - if (uidl.hasAttribute("rows")) { - getWidget().setRows(uidl.getIntAttribute("rows")); - } - - if (getWidget().getMaxLength() >= 0) { - getWidget().sinkEvents(Event.ONKEYUP); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VTextArea.class); - } - - @Override - public VTextArea getWidget() { - return (VTextArea) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTextFieldPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTextFieldPaintable.java deleted file mode 100644 index a2908c4ab2..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VTextFieldPaintable.java +++ /dev/null @@ -1,121 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener; - -public class VTextFieldPaintable extends AbstractComponentConnector implements - BeforeShortcutActionListener { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // Save details - getWidget().client = client; - getWidget().paintableId = uidl.getId(); - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().setReadOnly(getState().isReadOnly()); - - getWidget().inputPrompt = uidl - .getStringAttribute(VTextField.ATTR_INPUTPROMPT); - - getWidget().setMaxLength( - uidl.hasAttribute("maxLength") ? uidl - .getIntAttribute("maxLength") : -1); - - getWidget().immediate = getState().isImmediate(); - - getWidget().listenTextChangeEvents = client - .hasEventListeners(this, "ie"); - if (getWidget().listenTextChangeEvents) { - getWidget().textChangeEventMode = uidl - .getStringAttribute(VTextField.ATTR_TEXTCHANGE_EVENTMODE); - if (getWidget().textChangeEventMode - .equals(VTextField.TEXTCHANGE_MODE_EAGER)) { - getWidget().textChangeEventTimeout = 1; - } else { - getWidget().textChangeEventTimeout = uidl - .getIntAttribute(VTextField.ATTR_TEXTCHANGE_TIMEOUT); - if (getWidget().textChangeEventTimeout < 1) { - // Sanitize and allow lazy/timeout with timeout set to 0 to - // work as eager - getWidget().textChangeEventTimeout = 1; - } - } - getWidget().sinkEvents(VTextField.TEXTCHANGE_EVENTS); - getWidget().attachCutEventListener( - getWidget().getElement()); - } - - if (uidl.hasAttribute("cols")) { - getWidget().setColumns( - new Integer(uidl.getStringAttribute("cols")).intValue()); - } - - final String text = uidl.getStringVariable("text"); - - /* - * We skip the text content update if field has been repainted, but text - * has not been changed. Additional sanity check verifies there is no - * change in the que (in which case we count more on the server side - * value). - */ - if (!(uidl - .getBooleanAttribute(VTextField.ATTR_NO_VALUE_CHANGE_BETWEEN_PAINTS) - && getWidget().valueBeforeEdit != null && text - .equals(getWidget().valueBeforeEdit))) { - getWidget().updateFieldContent(text); - } - - if (uidl.hasAttribute("selpos")) { - final int pos = uidl.getIntAttribute("selpos"); - final int length = uidl.getIntAttribute("sellen"); - /* - * Gecko defers setting the text so we need to defer the selection. - */ - Scheduler.get().scheduleDeferred(new Command() { - public void execute() { - getWidget().setSelectionRange(pos, length); - } - }); - } - - // Here for backward compatibility; to be moved to TextArea. - // Optimization: server does not send attribute for the default 'true' - // state. - if (uidl.hasAttribute("wordwrap") - && uidl.getBooleanAttribute("wordwrap") == false) { - getWidget().setWordwrap(false); - } else { - getWidget().setWordwrap(true); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VTextField.class); - } - - @Override - public VTextField getWidget() { - return (VTextField) super.getWidget(); - } - - public void onBeforeShortcutAction(Event e) { - getWidget().valueChange(false); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTextualDatePaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTextualDatePaintable.java deleted file mode 100644 index eb5e503903..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VTextualDatePaintable.java +++ /dev/null @@ -1,58 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VTextualDatePaintable extends VDateFieldPaintable { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - int origRes = getWidget().currentResolution; - String oldLocale = getWidget().currentLocale; - super.updateFromUIDL(uidl, client); - if (origRes != getWidget().currentResolution - || oldLocale != getWidget().currentLocale) { - // force recreating format string - getWidget().formatStr = null; - } - if (uidl.hasAttribute("format")) { - getWidget().formatStr = uidl - .getStringAttribute("format"); - } - - getWidget().inputPrompt = uidl - .getStringAttribute(VTextualDate.ATTR_INPUTPROMPT); - - getWidget().lenient = !uidl.getBooleanAttribute("strict"); - - getWidget().buildDate(); - // not a FocusWidget -> needs own tabindex handling - if (uidl.hasAttribute("tabindex")) { - getWidget().text.setTabIndex(uidl - .getIntAttribute("tabindex")); - } - - if (getWidget().readonly) { - getWidget().text.addStyleDependentName("readonly"); - } else { - getWidget().text.removeStyleDependentName("readonly"); - } - - } - - @Override - protected Widget createWidget() { - return GWT.create(VTextualDate.class); - } - - @Override - public VTextualDate getWidget() { - return (VTextualDate) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTreePaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTreePaintable.java deleted file mode 100644 index 4cbcc666b6..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VTreePaintable.java +++ /dev/null @@ -1,242 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.Iterator; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.TooltipInfo; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ui.VTree.TreeNode; - -public class VTreePaintable extends AbstractComponentConnector { - - public static final String ATTRIBUTE_NODE_STYLE = "style"; - public static final String ATTRIBUTE_NODE_CAPTION = "caption"; - public static final String ATTRIBUTE_NODE_ICON = AbstractComponentConnector.ATTRIBUTE_ICON; - - public static final String ATTRIBUTE_ACTION_CAPTION = "caption"; - public static final String ATTRIBUTE_ACTION_ICON = AbstractComponentConnector.ATTRIBUTE_ICON; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // Ensure correct implementation and let container manage caption - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().rendering = true; - - getWidget().client = client; - - if (uidl.hasAttribute("partialUpdate")) { - handleUpdate(uidl); - getWidget().rendering = false; - return; - } - - getWidget().paintableId = uidl.getId(); - - getWidget().immediate = getState().isImmediate(); - - getWidget().disabled = getState().isDisabled(); - getWidget().readonly = getState().isReadOnly(); - - getWidget().dragMode = uidl.hasAttribute("dragMode") ? uidl - .getIntAttribute("dragMode") : 0; - - getWidget().isNullSelectionAllowed = uidl - .getBooleanAttribute("nullselect"); - - if (uidl.hasAttribute("alb")) { - getWidget().bodyActionKeys = uidl - .getStringArrayAttribute("alb"); - } - - getWidget().body.clear(); - // clear out any references to nodes that no longer are attached - getWidget().clearNodeToKeyMap(); - TreeNode childTree = null; - UIDL childUidl = null; - for (final Iterator i = uidl.getChildIterator(); i.hasNext();) { - childUidl = (UIDL) i.next(); - if ("actions".equals(childUidl.getTag())) { - updateActionMap(childUidl); - continue; - } else if ("-ac".equals(childUidl.getTag())) { - getWidget().updateDropHandler(childUidl); - continue; - } - childTree = getWidget().new TreeNode(); - updateNodeFromUIDL(childTree, childUidl); - getWidget().body.add(childTree); - childTree.addStyleDependentName("root"); - childTree.childNodeContainer.addStyleDependentName("root"); - } - if (childTree != null && childUidl != null) { - boolean leaf = !childUidl.getTag().equals("node"); - childTree.addStyleDependentName(leaf ? "leaf-last" : "last"); - childTree.childNodeContainer.addStyleDependentName("last"); - } - final String selectMode = uidl.getStringAttribute("selectmode"); - getWidget().selectable = !"none".equals(selectMode); - getWidget().isMultiselect = "multi".equals(selectMode); - - if (getWidget().isMultiselect) { - getWidget().multiSelectMode = uidl - .getIntAttribute("multiselectmode"); - } - - getWidget().selectedIds = uidl - .getStringArrayVariableAsSet("selected"); - - // Update lastSelection and focusedNode to point to *actual* nodes again - // after the old ones have been cleared from the body. This fixes focus - // and keyboard navigation issues as described in #7057 and other - // tickets. - if (getWidget().lastSelection != null) { - getWidget().lastSelection = getWidget() - .getNodeByKey(getWidget().lastSelection.key); - } - if (getWidget().focusedNode != null) { - getWidget().setFocusedNode( - getWidget().getNodeByKey( - getWidget().focusedNode.key)); - } - - if (getWidget().lastSelection == null - && getWidget().focusedNode == null - && !getWidget().selectedIds.isEmpty()) { - getWidget().setFocusedNode( - getWidget().getNodeByKey( - getWidget().selectedIds.iterator() - .next())); - getWidget().focusedNode.setFocused(false); - } - - getWidget().rendering = false; - - } - - @Override - protected Widget createWidget() { - return GWT.create(VTree.class); - } - - @Override - public VTree getWidget() { - return (VTree) super.getWidget(); - } - - private void handleUpdate(UIDL uidl) { - final TreeNode rootNode = getWidget().getNodeByKey( - uidl.getStringAttribute("rootKey")); - if (rootNode != null) { - if (!rootNode.getState()) { - // expanding node happened server side - rootNode.setState(true, false); - } - renderChildNodes(rootNode, (Iterator) uidl.getChildIterator()); - } - } - - /** - * Registers action for the root and also for individual nodes - * - * @param uidl - */ - private void updateActionMap(UIDL uidl) { - final Iterator it = uidl.getChildIterator(); - while (it.hasNext()) { - final UIDL action = (UIDL) it.next(); - final String key = action.getStringAttribute("key"); - final String caption = action - .getStringAttribute(ATTRIBUTE_ACTION_CAPTION); - String iconUrl = null; - if (action.hasAttribute(ATTRIBUTE_ACTION_ICON)) { - iconUrl = getConnection().translateVaadinUri( - action.getStringAttribute(ATTRIBUTE_ACTION_ICON)); - } - getWidget().registerAction(key, caption, iconUrl); - } - - } - - public void updateNodeFromUIDL(TreeNode treeNode, UIDL uidl) { - String nodeKey = uidl.getStringAttribute("key"); - treeNode.setText(uidl.getStringAttribute(ATTRIBUTE_NODE_CAPTION)); - treeNode.key = nodeKey; - - getWidget().registerNode(treeNode); - - if (uidl.hasAttribute("al")) { - treeNode.actionKeys = uidl.getStringArrayAttribute("al"); - } - - if (uidl.getTag().equals("node")) { - if (uidl.getChildCount() == 0) { - treeNode.childNodeContainer.setVisible(false); - } else { - renderChildNodes(treeNode, (Iterator) uidl.getChildIterator()); - treeNode.childrenLoaded = true; - } - } else { - treeNode.addStyleName(TreeNode.CLASSNAME + "-leaf"); - } - if (uidl.hasAttribute(ATTRIBUTE_NODE_STYLE)) { - treeNode.setNodeStyleName(uidl - .getStringAttribute(ATTRIBUTE_NODE_STYLE)); - } - - String description = uidl.getStringAttribute("descr"); - if (description != null && getConnection() != null) { - // Set tooltip - TooltipInfo info = new TooltipInfo(description); - getConnection().registerTooltip(this, nodeKey, info); - } else { - // Remove possible previous tooltip - getConnection().registerTooltip(this, nodeKey, null); - } - - if (uidl.getBooleanAttribute("expanded") && !treeNode.getState()) { - treeNode.setState(true, false); - } - - if (uidl.getBooleanAttribute("selected")) { - treeNode.setSelected(true); - // ensure that identifier is in selectedIds array (this may be a - // partial update) - getWidget().selectedIds.add(nodeKey); - } - - treeNode.setIcon(uidl.getStringAttribute(ATTRIBUTE_NODE_ICON)); - } - - void renderChildNodes(TreeNode containerNode, Iterator i) { - containerNode.childNodeContainer.clear(); - containerNode.childNodeContainer.setVisible(true); - while (i.hasNext()) { - final UIDL childUidl = i.next(); - // actions are in bit weird place, don't mix them with children, - // but current node's actions - if ("actions".equals(childUidl.getTag())) { - updateActionMap(childUidl); - continue; - } - final TreeNode childTree = getWidget().new TreeNode(); - updateNodeFromUIDL(childTree, childUidl); - containerNode.childNodeContainer.add(childTree); - if (!i.hasNext()) { - childTree - .addStyleDependentName(childTree.isLeaf() ? "leaf-last" - : "last"); - childTree.childNodeContainer.addStyleDependentName("last"); - } - } - containerNode.childrenLoaded = true; - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTreeTablePaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTreeTablePaintable.java deleted file mode 100644 index f597d89b19..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VTreeTablePaintable.java +++ /dev/null @@ -1,101 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ui.VScrollTable.VScrollTableBody.VScrollTableRow; -import com.vaadin.terminal.gwt.client.ui.VTreeTable.PendingNavigationEvent; - -public class VTreeTablePaintable extends VScrollTablePaintable { - public static final String ATTRIBUTE_HIERARCHY_COLUMN_INDEX = "hci"; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - FocusableScrollPanel widget = null; - int scrollPosition = 0; - if (getWidget().collapseRequest) { - widget = (FocusableScrollPanel) getWidget() - .getWidget(1); - scrollPosition = widget.getScrollPosition(); - } - getWidget().animationsEnabled = uidl - .getBooleanAttribute("animate"); - getWidget().colIndexOfHierarchy = uidl - .hasAttribute(ATTRIBUTE_HIERARCHY_COLUMN_INDEX) ? uidl - .getIntAttribute(ATTRIBUTE_HIERARCHY_COLUMN_INDEX) : 0; - int oldTotalRows = getWidget().getTotalRows(); - super.updateFromUIDL(uidl, client); - if (getWidget().collapseRequest) { - if (getWidget().collapsedRowKey != null - && getWidget().scrollBody != null) { - VScrollTableRow row = getWidget() - .getRenderedRowByKey( - getWidget().collapsedRowKey); - if (row != null) { - getWidget().setRowFocus(row); - getWidget().focus(); - } - } - - int scrollPosition2 = widget.getScrollPosition(); - if (scrollPosition != scrollPosition2) { - widget.setScrollPosition(scrollPosition); - } - - // check which rows are needed from the server and initiate a - // deferred fetch - getWidget().onScroll(null); - } - // Recalculate table size if collapse request, or if page length is zero - // (not sent by server) and row count changes (#7908). - if (getWidget().collapseRequest - || (!uidl.hasAttribute("pagelength") && getWidget() - .getTotalRows() != oldTotalRows)) { - /* - * Ensure that possibly removed/added scrollbars are considered. - * Triggers row calculations, removes cached rows etc. Basically - * cleans up state. Be careful if touching this, you will break - * pageLength=0 if you remove this. - */ - getWidget().triggerLazyColumnAdjustment(true); - - getWidget().collapseRequest = false; - } - if (uidl.hasAttribute("focusedRow")) { - String key = uidl.getStringAttribute("focusedRow"); - getWidget().setRowFocus( - getWidget().getRenderedRowByKey(key)); - getWidget().focusParentResponsePending = false; - } else if (uidl.hasAttribute("clearFocusPending")) { - // Special case to detect a response to a focusParent request that - // does not return any focusedRow because the selected node has no - // parent - getWidget().focusParentResponsePending = false; - } - - while (!getWidget().collapseRequest - && !getWidget().focusParentResponsePending - && !getWidget().pendingNavigationEvents.isEmpty()) { - // Keep replaying any queued events as long as we don't have any - // potential content changes pending - PendingNavigationEvent event = getWidget().pendingNavigationEvents - .removeFirst(); - getWidget().handleNavigation(event.keycode, event.ctrl, - event.shift); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VTreeTable.class); - } - - @Override - public VTreeTable getWidget() { - return (VTreeTable) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTwinColSelectPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTwinColSelectPaintable.java deleted file mode 100644 index 663861c376..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VTwinColSelectPaintable.java +++ /dev/null @@ -1,34 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VTwinColSelectPaintable extends VOptionGroupBasePaintable { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - // Captions are updated before super call to ensure the widths are set - // correctly - if (isRealUpdate(uidl)) { - getWidget().updateCaptions(uidl); - } - - super.updateFromUIDL(uidl, client); - } - - @Override - protected Widget createWidget() { - return GWT.create(VTwinColSelect.class); - } - - @Override - public VTwinColSelect getWidget() { - return (VTwinColSelect) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VUnknownComponentPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VUnknownComponentPaintable.java deleted file mode 100644 index 289e4c7668..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VUnknownComponentPaintable.java +++ /dev/null @@ -1,59 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.VUIDLBrowser; - -public class VUnknownComponentPaintable extends AbstractComponentConnector { - - @Override - protected boolean delegateCaptionHandling() { - return false; - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - getWidget().setCaption( - "Widgetset does not contain implementation for " - + getWidget().serverClassName - + ". Check its @ClientWidget mapping, widgetsets " - + "GWT module description file and re-compile your" - + " widgetset. In case you have downloaded a vaadin" - + " add-on package, you might want to refer to " - + "add-on " - + "instructions. Unrendered UIDL:"); - if (getWidget().uidlTree != null) { - getWidget().uidlTree.removeFromParent(); - } - - getWidget().uidlTree = new VUIDLBrowser(uidl, - client.getConfiguration()); - getWidget().uidlTree.open(true); - getWidget().uidlTree.setText("Unrendered UIDL"); - getWidget().panel.add(getWidget().uidlTree); - } - - @Override - protected Widget createWidget() { - return GWT.create(VUnknownComponent.class); - } - - @Override - public VUnknownComponent getWidget() { - return (VUnknownComponent) super.getWidget(); - } - - public void setServerSideClassName(String serverClassName) { - getWidget().setServerSideClassName(serverClassName); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VUploadPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VUploadPaintable.java deleted file mode 100644 index 92ab5b071a..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VUploadPaintable.java +++ /dev/null @@ -1,63 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ - -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VUploadPaintable extends AbstractComponentConnector { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - if (uidl.hasAttribute("notStarted")) { - getWidget().t.schedule(400); - return; - } - if (uidl.hasAttribute("forceSubmit")) { - getWidget().submit(); - return; - } - getWidget().setImmediate(getState().isImmediate()); - getWidget().client = client; - getWidget().paintableId = uidl.getId(); - getWidget().nextUploadId = uidl.getIntAttribute("nextid"); - final String action = client.translateVaadinUri(uidl - .getStringVariable("action")); - getWidget().element.setAction(action); - if (uidl.hasAttribute("buttoncaption")) { - getWidget().submitButton.setText(uidl - .getStringAttribute("buttoncaption")); - getWidget().submitButton.setVisible(true); - } else { - getWidget().submitButton.setVisible(false); - } - getWidget().fu.setName(getWidget().paintableId - + "_file"); - - if (getState().isDisabled() || getState().isReadOnly()) { - getWidget().disableUpload(); - } else if (!uidl.getBooleanAttribute("state")) { - // Enable the button only if an upload is not in progress - getWidget().enableUpload(); - getWidget().ensureTargetFrame(); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VUpload.class); - } - - @Override - public VUpload getWidget() { - return (VUpload) super.getWidget(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VVerticalLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VVerticalLayoutPaintable.java deleted file mode 100644 index a65d1ec777..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VVerticalLayoutPaintable.java +++ /dev/null @@ -1,20 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; - -public class VVerticalLayoutPaintable extends VMeasuringOrderedLayoutPaintable { - - @Override - public VVerticalLayout getWidget() { - return (VVerticalLayout) super.getWidget(); - } - - @Override - protected VVerticalLayout createWidget() { - return GWT.create(VVerticalLayout.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VVerticalSplitPanelPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VVerticalSplitPanelPaintable.java deleted file mode 100644 index a2dc1fbbb2..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VVerticalSplitPanelPaintable.java +++ /dev/null @@ -1,15 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; - -public class VVerticalSplitPanelPaintable extends VAbstractSplitPanelPaintable { - - @Override - protected VAbstractSplitPanel createWidget() { - return GWT.create(VSplitPanelVertical.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VVideoPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VVideoPaintable.java deleted file mode 100644 index 647fd7d87d..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VVideoPaintable.java +++ /dev/null @@ -1,42 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; - -public class VVideoPaintable extends VMediaBasePaintable { - public static final String ATTR_POSTER = "poster"; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - super.updateFromUIDL(uidl, client); - setPosterFromUIDL(uidl); - } - - private void setPosterFromUIDL(UIDL uidl) { - if (uidl.hasAttribute(ATTR_POSTER)) { - getWidget().setPoster( - getConnection().translateVaadinUri( - uidl.getStringAttribute(ATTR_POSTER))); - } - } - - @Override - public VVideo getWidget() { - return (VVideo) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VVideo.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VViewPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VViewPaintable.java deleted file mode 100644 index d26c5b71f5..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VViewPaintable.java +++ /dev/null @@ -1,332 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import java.util.HashSet; -import java.util.Iterator; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.History; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.RootPanel; -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.Focusable; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.Util; -import com.vaadin.terminal.gwt.client.VConsole; -import com.vaadin.terminal.gwt.client.ConnectorMap; -import com.vaadin.terminal.gwt.client.ComponentConnector; - -public class VViewPaintable extends AbstractComponentContainerConnector { - - private static final String CLICK_EVENT_IDENTIFIER = VPanelPaintable.CLICK_EVENT_IDENTIFIER; - - @Override - public void updateFromUIDL(final UIDL uidl, ApplicationConnection client) { - getWidget().rendering = true; - // As VView is not created in the same way as all other paintables we - // have to set the id here - setId(uidl.getId()); - getWidget().id = uidl.getId(); - boolean firstPaint = getWidget().connection == null; - getWidget().connection = client; - - getWidget().immediate = getState().isImmediate(); - getWidget().resizeLazy = uidl - .hasAttribute(VView.RESIZE_LAZY); - String newTheme = uidl.getStringAttribute("theme"); - if (getWidget().theme != null - && !newTheme.equals(getWidget().theme)) { - // Complete page refresh is needed due css can affect layout - // calculations etc - getWidget().reloadHostPage(); - } else { - getWidget().theme = newTheme; - } - // this also implicitly removes old styles - getWidget().setStyleName( - getWidget().getStylePrimaryName() + " " - + getState().getStyle()); - - clickEventHandler.handleEventHandlerRegistration(client); - - if (!getWidget().isEmbedded() - && getState().getCaption() != null) { - // only change window title if we're in charge of the whole page - com.google.gwt.user.client.Window.setTitle(getState().getCaption()); - } - - // Process children - int childIndex = 0; - - // Open URL:s - boolean isClosed = false; // was this window closed? - while (childIndex < uidl.getChildCount() - && "open".equals(uidl.getChildUIDL(childIndex).getTag())) { - final UIDL open = uidl.getChildUIDL(childIndex); - final String url = client.translateVaadinUri(open - .getStringAttribute("src")); - final String target = open.getStringAttribute("name"); - if (target == null) { - // source will be opened to this browser window, but we may have - // to finish rendering this window in case this is a download - // (and window stays open). - Scheduler.get().scheduleDeferred(new Command() { - public void execute() { - VView.goTo(url); - } - }); - } else if ("_self".equals(target)) { - // This window is closing (for sure). Only other opens are - // relevant in this change. See #3558, #2144 - isClosed = true; - VView.goTo(url); - } else { - String options; - if (open.hasAttribute("border")) { - if (open.getStringAttribute("border").equals("minimal")) { - options = "menubar=yes,location=no,status=no"; - } else { - options = "menubar=no,location=no,status=no"; - } - - } else { - options = "resizable=yes,menubar=yes,toolbar=yes,directories=yes,location=yes,scrollbars=yes,status=yes"; - } - - if (open.hasAttribute("width")) { - int w = open.getIntAttribute("width"); - options += ",width=" + w; - } - if (open.hasAttribute("height")) { - int h = open.getIntAttribute("height"); - options += ",height=" + h; - } - - Window.open(url, target, options); - } - childIndex++; - } - if (isClosed) { - // don't render the content, something else will be opened to this - // browser view - getWidget().rendering = false; - return; - } - - // Draw this application level window - UIDL childUidl = uidl.getChildUIDL(childIndex); - final ComponentConnector lo = client.getPaintable(childUidl); - - if (getWidget().layout != null) { - if (getWidget().layout != lo) { - // remove old - client.unregisterPaintable(getWidget().layout); - // add new - getWidget().setWidget(lo.getWidget()); - getWidget().layout = lo; - } - } else { - getWidget().setWidget(lo.getWidget()); - getWidget().layout = lo; - } - - getWidget().layout.updateFromUIDL(childUidl, client); - - // Save currently open subwindows to track which will need to be closed - final HashSet removedSubWindows = new HashSet( - getWidget().subWindows); - - // Handle other UIDL children - while ((childUidl = uidl.getChildUIDL(++childIndex)) != null) { - String tag = childUidl.getTag().intern(); - if (tag == "actions") { - if (getWidget().actionHandler == null) { - getWidget().actionHandler = new ShortcutActionHandler( - getWidget().id, client); - } - getWidget().actionHandler - .updateActionMap(childUidl); - } else if (tag == "execJS") { - String script = childUidl.getStringAttribute("script"); - VView.eval(script); - } else if (tag == "notifications") { - for (final Iterator it = childUidl.getChildIterator(); it - .hasNext();) { - final UIDL notification = (UIDL) it.next(); - VNotification.showNotification(client, notification); - } - } else { - // subwindows - final VWindowPaintable w = (VWindowPaintable) client - .getPaintable(childUidl); - VWindow windowWidget = w.getWidget(); - if (getWidget().subWindows.contains(windowWidget)) { - removedSubWindows.remove(windowWidget); - } else { - getWidget().subWindows.add(windowWidget); - } - w.updateFromUIDL(childUidl, client); - } - } - - // Close old windows which where not in UIDL anymore - for (final Iterator rem = removedSubWindows.iterator(); rem - .hasNext();) { - final VWindow w = rem.next(); - client.unregisterPaintable(ConnectorMap.get(getConnection()) - .getConnector(w)); - getWidget().subWindows.remove(w); - w.hide(); - } - - if (uidl.hasAttribute("focused")) { - // set focused component when render phase is finished - Scheduler.get().scheduleDeferred(new Command() { - public void execute() { - ComponentConnector paintable = (ComponentConnector) uidl - .getPaintableAttribute("focused", getConnection()); - - final Widget toBeFocused = paintable - .getWidget(); - /* - * Two types of Widgets can be focused, either implementing - * GWT HasFocus of a thinner Vaadin specific Focusable - * interface. - */ - if (toBeFocused instanceof com.google.gwt.user.client.ui.Focusable) { - final com.google.gwt.user.client.ui.Focusable toBeFocusedWidget = (com.google.gwt.user.client.ui.Focusable) toBeFocused; - toBeFocusedWidget.setFocus(true); - } else if (toBeFocused instanceof Focusable) { - ((Focusable) toBeFocused).focus(); - } else { - VConsole.log("Could not focus component"); - } - } - }); - } - - // Add window listeners on first paint, to prevent premature - // variablechanges - if (firstPaint) { - Window.addWindowClosingHandler(getWidget()); - Window.addResizeHandler(getWidget()); - } - - getWidget().onResize(); - - // finally set scroll position from UIDL - if (uidl.hasVariable("scrollTop")) { - getWidget().scrollable = true; - getWidget().scrollTop = uidl - .getIntVariable("scrollTop"); - DOM.setElementPropertyInt(getWidget().getElement(), - "scrollTop", getWidget().scrollTop); - getWidget().scrollLeft = uidl - .getIntVariable("scrollLeft"); - DOM.setElementPropertyInt(getWidget().getElement(), - "scrollLeft", getWidget().scrollLeft); - } else { - getWidget().scrollable = false; - } - - // Safari workaround must be run after scrollTop is updated as it sets - // scrollTop using a deferred command. - if (BrowserInfo.get().isSafari()) { - Util.runWebkitOverflowAutoFix(getWidget().getElement()); - } - - getWidget().scrollIntoView(uidl); - - if (uidl.hasAttribute(VView.FRAGMENT_VARIABLE)) { - getWidget().currentFragment = uidl - .getStringAttribute(VView.FRAGMENT_VARIABLE); - if (!getWidget().currentFragment.equals(History - .getToken())) { - History.newItem(getWidget().currentFragment, true); - } - } else { - // Initial request for which the server doesn't yet have a fragment - // (and haven't shown any interest in getting one) - getWidget().currentFragment = History.getToken(); - - // Include current fragment in the next request - client.updateVariable(getWidget().id, - VView.FRAGMENT_VARIABLE, - getWidget().currentFragment, false); - } - - getWidget().rendering = false; - } - - public void init(String rootPanelId, - ApplicationConnection applicationConnection) { - DOM.sinkEvents(getWidget().getElement(), Event.ONKEYDOWN - | Event.ONSCROLL); - - // iview is focused when created so element needs tabIndex - // 1 due 0 is at the end of natural tabbing order - DOM.setElementProperty(getWidget().getElement(), - "tabIndex", "1"); - - RootPanel root = RootPanel.get(rootPanelId); - - // Remove the v-app-loading or any splash screen added inside the div by - // the user - root.getElement().setInnerHTML(""); - // For backwards compatibility with static index pages only. - // No longer added by AbstractApplicationServlet/Portlet - root.removeStyleName("v-app-loading"); - - String themeUri = applicationConnection.getConfiguration() - .getThemeUri(); - String themeName = themeUri.substring(themeUri.lastIndexOf('/')); - themeName = themeName.replaceAll("[^a-zA-Z0-9]", ""); - root.addStyleName("v-theme-" + themeName); - - root.add(getWidget()); - - if (applicationConnection.getConfiguration().isStandalone()) { - // set focus to iview element by default to listen possible keyboard - // shortcuts. For embedded applications this is unacceptable as we - // don't want to steal focus from the main page nor we don't want - // side-effects from focusing (scrollIntoView). - getWidget().getElement().focus(); - } - } - - private ClickEventHandler clickEventHandler = new ClickEventHandler(this, - CLICK_EVENT_IDENTIFIER) { - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - return getWidget().addDomHandler(handler, type); - } - }; - - public void updateCaption(ComponentConnector component, UIDL uidl) { - // NOP The main view never draws caption for its layout - } - - @Override - public VView getWidget() { - return (VView) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VView.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VWindowPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VWindowPaintable.java deleted file mode 100644 index b27114aef8..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/VWindowPaintable.java +++ /dev/null @@ -1,319 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Frame; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.Util; -import com.vaadin.terminal.gwt.client.ComponentConnector; -import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener; - -public class VWindowPaintable extends AbstractComponentContainerConnector - implements BeforeShortcutActionListener, SimpleManagedLayout, - PostLayoutListener { - - private static final String CLICK_EVENT_IDENTIFIER = VPanelPaintable.CLICK_EVENT_IDENTIFIER; - - private ClickEventHandler clickEventHandler = new ClickEventHandler(this, - CLICK_EVENT_IDENTIFIER) { - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - return getWidget().addDomHandler(handler, type); - } - }; - - @Override - protected boolean delegateCaptionHandling() { - return false; - }; - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - getWidget().id = uidl.getId(); - getWidget().client = client; - - // Workaround needed for Testing Tools (GWT generates window DOM - // slightly different in different browsers). - DOM.setElementProperty(getWidget().closeBox, "id", - getWidget().id + "_window_close"); - - if (uidl.hasAttribute("invisible")) { - getWidget().hide(); - return; - } - - if (isRealUpdate(uidl)) { - if (uidl.getBooleanAttribute("modal") != getWidget().vaadinModality) { - getWidget().setVaadinModality( - !getWidget().vaadinModality); - } - if (!getWidget().isAttached()) { - getWidget().setVisible(false); // hide until - // possible centering - getWidget().show(); - } - if (uidl.getBooleanAttribute("resizable") != getWidget().resizable) { - getWidget().setResizable( - !getWidget().resizable); - } - getWidget().resizeLazy = uidl - .hasAttribute(VView.RESIZE_LAZY); - - getWidget().setDraggable( - !uidl.hasAttribute("fixedposition")); - - // Caption must be set before required header size is measured. If - // the caption attribute is missing the caption should be cleared. - getWidget() - .setCaption( - getState().getCaption(), - uidl.getStringAttribute(AbstractComponentConnector.ATTRIBUTE_ICON)); - } - - getWidget().visibilityChangesDisabled = true; - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - getWidget().visibilityChangesDisabled = false; - - clickEventHandler.handleEventHandlerRegistration(client); - - getWidget().immediate = getState().isImmediate(); - - getWidget().setClosable(!getState().isReadOnly()); - - // Initialize the position form UIDL - int positionx = uidl.getIntVariable("positionx"); - int positiony = uidl.getIntVariable("positiony"); - if (positionx >= 0 || positiony >= 0) { - if (positionx < 0) { - positionx = 0; - } - if (positiony < 0) { - positiony = 0; - } - getWidget().setPopupPosition(positionx, positiony); - } - - boolean showingUrl = false; - int childIndex = 0; - UIDL childUidl = uidl.getChildUIDL(childIndex++); - while ("open".equals(childUidl.getTag())) { - // TODO multiple opens with the same target will in practice just - // open the last one - should we fix that somehow? - final String parsedUri = client.translateVaadinUri(childUidl - .getStringAttribute("src")); - if (!childUidl.hasAttribute("name")) { - final Frame frame = new Frame(); - DOM.setStyleAttribute(frame.getElement(), "width", "100%"); - DOM.setStyleAttribute(frame.getElement(), "height", "100%"); - DOM.setStyleAttribute(frame.getElement(), "border", "0px"); - frame.setUrl(parsedUri); - getWidget().contentPanel.setWidget(frame); - showingUrl = true; - } else { - final String target = childUidl.getStringAttribute("name"); - Window.open(parsedUri, target, ""); - } - childUidl = uidl.getChildUIDL(childIndex++); - } - - final ComponentConnector lo = client.getPaintable(childUidl); - if (getWidget().layout != null) { - if (getWidget().layout != lo) { - // remove old - client.unregisterPaintable(getWidget().layout); - 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; - } - - getWidget().dynamicWidth = getState().isUndefinedWidth(); - getWidget().dynamicHeight = getState().isUndefinedHeight(); - - getWidget().layoutRelativeWidth = uidl - .hasAttribute("layoutRelativeWidth"); - getWidget().layoutRelativeHeight = uidl - .hasAttribute("layoutRelativeHeight"); - - if (getWidget().dynamicWidth - && getWidget().layoutRelativeWidth) { - /* - * Relative layout width, fix window width before rendering (width - * according to caption) - */ - getWidget().setNaturalWidth(); - } - - getWidget().layout.updateFromUIDL(childUidl, client); - if (!getWidget().dynamicHeight - && getWidget().layoutRelativeWidth) { - /* - * Relative layout width, and fixed height. Must update the size to - * be able to take scrollbars into account (layout gets narrower - * space if it is higher than the window) -> only vertical scrollbar - */ - client.runDescendentsLayout(getWidget()); - } - - /* - * No explicit width is set and the layout does not have relative width - * so fix the size according to the layout. - */ - if (getWidget().dynamicWidth - && !getWidget().layoutRelativeWidth) { - getWidget().setNaturalWidth(); - } - - if (getWidget().dynamicHeight - && getWidget().layoutRelativeHeight) { - // Prevent resizing until height has been fixed - getWidget().resizable = false; - } - - // we may have actions and notifications - 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( - getId(), client); - } - getWidget().shortcutHandler - .updateActionMap(childUidl); - } - } - - } - - // setting scrollposition must happen after children is rendered - getWidget().contentPanel.setScrollPosition(uidl - .getIntVariable("scrollTop")); - getWidget().contentPanel.setHorizontalScrollPosition(uidl - .getIntVariable("scrollLeft")); - - // Center this window on screen if requested - // This has to be here because we might not know the content size before - // everything is painted into the window - if (uidl.getBooleanAttribute("center")) { - // mark as centered - this is unset on move/resize - getWidget().centered = true; - getWidget().center(); - } else { - // don't try to center the window anymore - getWidget().centered = false; - } - getWidget().updateShadowSizeAndPosition(); - getWidget().setVisible(true); - - boolean sizeReduced = false; - // ensure window is not larger than browser window - if (getWidget().getOffsetWidth() > Window.getClientWidth()) { - getWidget().setWidth(Window.getClientWidth() + "px"); - sizeReduced = true; - } - if (getWidget().getOffsetHeight() > Window - .getClientHeight()) { - getWidget().setHeight(Window.getClientHeight() + "px"); - sizeReduced = true; - } - - if (getWidget().dynamicHeight - && getWidget().layoutRelativeHeight) { - /* - * Window height is undefined, layout is 100% high so the layout - * should define the initial window height but on resize the layout - * should be as high as the window. We fix the height to deal with - * this. - */ - - int h = getWidget().contents.getOffsetHeight() - + getWidget().getExtraHeight(); - int w = getWidget().getElement().getOffsetWidth(); - - client.updateVariable(getId(), "height", h, false); - client.updateVariable(getId(), "width", w, true); - } - - if (sizeReduced) { - // If we changed the size we need to update the size of the child - // component if it is relative (#3407) - client.runDescendentsLayout(getWidget()); - } - - Util.runWebkitOverflowAutoFix(getWidget().contentPanel - .getElement()); - - client.getView().getWidget().scrollIntoView(uidl); - - if (uidl.hasAttribute("bringToFront")) { - /* - * Focus as a side-efect. Will be overridden by - * ApplicationConnection if another component was focused by the - * server side. - */ - getWidget().contentPanel.focus(); - getWidget().bringToFrontSequence = uidl - .getIntAttribute("bringToFront"); - VWindow.deferOrdering(); - } - } - - public void updateCaption(ComponentConnector component, UIDL uidl) { - // NOP, window has own caption, layout captio not rendered - } - - public void onBeforeShortcutAction(Event e) { - // NOP, nothing to update just avoid workaround ( causes excess - // blur/focus ) - } - - @Override - public VWindow getWidget() { - return (VWindow) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VWindow.class); - } - - public void layout() { - getWidget().requestLayout(); - } - - public void postLayout() { - VWindow window = getWidget(); - if (window.centered) { - window.center(); - window.updateShadowSizeAndPosition(); - } - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VerticalLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/VerticalLayoutConnector.java new file mode 100644 index 0000000000..0d17186786 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/VerticalLayoutConnector.java @@ -0,0 +1,20 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; + +public class VerticalLayoutConnector extends AbstractOrderedLayoutConnector { + + @Override + public VVerticalLayout getWidget() { + return (VVerticalLayout) super.getWidget(); + } + + @Override + protected VVerticalLayout createWidget() { + return GWT.create(VVerticalLayout.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VerticalSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/VerticalSplitPanelConnector.java new file mode 100644 index 0000000000..26e393f5d6 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/VerticalSplitPanelConnector.java @@ -0,0 +1,15 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; + +public class VerticalSplitPanelConnector extends AbstractSplitPanelConnector { + + @Override + protected VAbstractSplitPanel createWidget() { + return GWT.create(VSplitPanelVertical.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VideoConnector.java b/src/com/vaadin/terminal/gwt/client/ui/VideoConnector.java new file mode 100644 index 0000000000..c4e3555b07 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/VideoConnector.java @@ -0,0 +1,42 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; + +public class VideoConnector extends MediaBaseConnector { + public static final String ATTR_POSTER = "poster"; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + super.updateFromUIDL(uidl, client); + setPosterFromUIDL(uidl); + } + + private void setPosterFromUIDL(UIDL uidl) { + if (uidl.hasAttribute(ATTR_POSTER)) { + getWidget().setPoster( + getConnection().translateVaadinUri( + uidl.getStringAttribute(ATTR_POSTER))); + } + } + + @Override + public VVideo getWidget() { + return (VVideo) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VVideo.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java new file mode 100644 index 0000000000..4af4c0fc77 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java @@ -0,0 +1,319 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Frame; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener; + +public class WindowConnector extends AbstractComponentContainerConnector + implements BeforeShortcutActionListener, SimpleManagedLayout, + PostLayoutListener { + + private static final String CLICK_EVENT_IDENTIFIER = PanelConnector.CLICK_EVENT_IDENTIFIER; + + private ClickEventHandler clickEventHandler = new ClickEventHandler(this, + CLICK_EVENT_IDENTIFIER) { + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return getWidget().addDomHandler(handler, type); + } + }; + + @Override + protected boolean delegateCaptionHandling() { + return false; + }; + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidget().id = uidl.getId(); + getWidget().client = client; + + // Workaround needed for Testing Tools (GWT generates window DOM + // slightly different in different browsers). + DOM.setElementProperty(getWidget().closeBox, "id", + getWidget().id + "_window_close"); + + if (uidl.hasAttribute("invisible")) { + getWidget().hide(); + return; + } + + if (isRealUpdate(uidl)) { + if (uidl.getBooleanAttribute("modal") != getWidget().vaadinModality) { + getWidget().setVaadinModality( + !getWidget().vaadinModality); + } + if (!getWidget().isAttached()) { + getWidget().setVisible(false); // hide until + // possible centering + getWidget().show(); + } + if (uidl.getBooleanAttribute("resizable") != getWidget().resizable) { + getWidget().setResizable( + !getWidget().resizable); + } + getWidget().resizeLazy = uidl + .hasAttribute(VView.RESIZE_LAZY); + + getWidget().setDraggable( + !uidl.hasAttribute("fixedposition")); + + // Caption must be set before required header size is measured. If + // the caption attribute is missing the caption should be cleared. + getWidget() + .setCaption( + getState().getCaption(), + uidl.getStringAttribute(AbstractComponentConnector.ATTRIBUTE_ICON)); + } + + getWidget().visibilityChangesDisabled = true; + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + getWidget().visibilityChangesDisabled = false; + + clickEventHandler.handleEventHandlerRegistration(client); + + getWidget().immediate = getState().isImmediate(); + + getWidget().setClosable(!getState().isReadOnly()); + + // Initialize the position form UIDL + int positionx = uidl.getIntVariable("positionx"); + int positiony = uidl.getIntVariable("positiony"); + if (positionx >= 0 || positiony >= 0) { + if (positionx < 0) { + positionx = 0; + } + if (positiony < 0) { + positiony = 0; + } + getWidget().setPopupPosition(positionx, positiony); + } + + boolean showingUrl = false; + int childIndex = 0; + UIDL childUidl = uidl.getChildUIDL(childIndex++); + while ("open".equals(childUidl.getTag())) { + // TODO multiple opens with the same target will in practice just + // open the last one - should we fix that somehow? + final String parsedUri = client.translateVaadinUri(childUidl + .getStringAttribute("src")); + if (!childUidl.hasAttribute("name")) { + final Frame frame = new Frame(); + DOM.setStyleAttribute(frame.getElement(), "width", "100%"); + DOM.setStyleAttribute(frame.getElement(), "height", "100%"); + DOM.setStyleAttribute(frame.getElement(), "border", "0px"); + frame.setUrl(parsedUri); + getWidget().contentPanel.setWidget(frame); + showingUrl = true; + } else { + final String target = childUidl.getStringAttribute("name"); + Window.open(parsedUri, target, ""); + } + childUidl = uidl.getChildUIDL(childIndex++); + } + + final ComponentConnector lo = client.getPaintable(childUidl); + if (getWidget().layout != null) { + if (getWidget().layout != lo) { + // remove old + client.unregisterPaintable(getWidget().layout); + 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; + } + + getWidget().dynamicWidth = getState().isUndefinedWidth(); + getWidget().dynamicHeight = getState().isUndefinedHeight(); + + getWidget().layoutRelativeWidth = uidl + .hasAttribute("layoutRelativeWidth"); + getWidget().layoutRelativeHeight = uidl + .hasAttribute("layoutRelativeHeight"); + + if (getWidget().dynamicWidth + && getWidget().layoutRelativeWidth) { + /* + * Relative layout width, fix window width before rendering (width + * according to caption) + */ + getWidget().setNaturalWidth(); + } + + getWidget().layout.updateFromUIDL(childUidl, client); + if (!getWidget().dynamicHeight + && getWidget().layoutRelativeWidth) { + /* + * Relative layout width, and fixed height. Must update the size to + * be able to take scrollbars into account (layout gets narrower + * space if it is higher than the window) -> only vertical scrollbar + */ + client.runDescendentsLayout(getWidget()); + } + + /* + * No explicit width is set and the layout does not have relative width + * so fix the size according to the layout. + */ + if (getWidget().dynamicWidth + && !getWidget().layoutRelativeWidth) { + getWidget().setNaturalWidth(); + } + + if (getWidget().dynamicHeight + && getWidget().layoutRelativeHeight) { + // Prevent resizing until height has been fixed + getWidget().resizable = false; + } + + // we may have actions and notifications + 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( + getId(), client); + } + getWidget().shortcutHandler + .updateActionMap(childUidl); + } + } + + } + + // setting scrollposition must happen after children is rendered + getWidget().contentPanel.setScrollPosition(uidl + .getIntVariable("scrollTop")); + getWidget().contentPanel.setHorizontalScrollPosition(uidl + .getIntVariable("scrollLeft")); + + // Center this window on screen if requested + // This has to be here because we might not know the content size before + // everything is painted into the window + if (uidl.getBooleanAttribute("center")) { + // mark as centered - this is unset on move/resize + getWidget().centered = true; + getWidget().center(); + } else { + // don't try to center the window anymore + getWidget().centered = false; + } + getWidget().updateShadowSizeAndPosition(); + getWidget().setVisible(true); + + boolean sizeReduced = false; + // ensure window is not larger than browser window + if (getWidget().getOffsetWidth() > Window.getClientWidth()) { + getWidget().setWidth(Window.getClientWidth() + "px"); + sizeReduced = true; + } + if (getWidget().getOffsetHeight() > Window + .getClientHeight()) { + getWidget().setHeight(Window.getClientHeight() + "px"); + sizeReduced = true; + } + + if (getWidget().dynamicHeight + && getWidget().layoutRelativeHeight) { + /* + * Window height is undefined, layout is 100% high so the layout + * should define the initial window height but on resize the layout + * should be as high as the window. We fix the height to deal with + * this. + */ + + int h = getWidget().contents.getOffsetHeight() + + getWidget().getExtraHeight(); + int w = getWidget().getElement().getOffsetWidth(); + + client.updateVariable(getId(), "height", h, false); + client.updateVariable(getId(), "width", w, true); + } + + if (sizeReduced) { + // If we changed the size we need to update the size of the child + // component if it is relative (#3407) + client.runDescendentsLayout(getWidget()); + } + + Util.runWebkitOverflowAutoFix(getWidget().contentPanel + .getElement()); + + client.getView().getWidget().scrollIntoView(uidl); + + if (uidl.hasAttribute("bringToFront")) { + /* + * Focus as a side-efect. Will be overridden by + * ApplicationConnection if another component was focused by the + * server side. + */ + getWidget().contentPanel.focus(); + getWidget().bringToFrontSequence = uidl + .getIntAttribute("bringToFront"); + VWindow.deferOrdering(); + } + } + + public void updateCaption(ComponentConnector component, UIDL uidl) { + // NOP, window has own caption, layout captio not rendered + } + + public void onBeforeShortcutAction(Event e) { + // NOP, nothing to update just avoid workaround ( causes excess + // blur/focus ) + } + + @Override + public VWindow getWidget() { + return (VWindow) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VWindow.class); + } + + public void layout() { + getWidget().requestLayout(); + } + + public void postLayout() { + VWindow window = getWidget(); + if (window.centered) { + window.center(); + window.updateShadowSizeAndPosition(); + } + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java new file mode 100644 index 0000000000..d76afaf962 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java @@ -0,0 +1,72 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui.label; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.PreElement; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; + +public class LabelConnector extends AbstractComponentConnector { + public LabelConnector() { + } + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + getWidget().setConnection(client); + if (!isRealUpdate(uidl)) { + return; + } + + boolean sinkOnloads = false; + + final String mode = uidl.getStringAttribute("mode"); + if (mode == null || "text".equals(mode)) { + getWidget().setText(uidl.getChildString(0)); + } else if ("pre".equals(mode)) { + PreElement preElement = Document.get().createPreElement(); + preElement.setInnerText(uidl.getChildUIDL(0).getChildString(0)); + // clear existing content + getWidget().setHTML(""); + // add preformatted text to dom + getWidget().getElement().appendChild(preElement); + } else if ("uidl".equals(mode)) { + getWidget().setHTML(uidl.getChildrenAsXML()); + } else if ("xhtml".equals(mode)) { + UIDL content = uidl.getChildUIDL(0).getChildUIDL(0); + if (content.getChildCount() > 0) { + getWidget().setHTML(content.getChildString(0)); + } else { + getWidget().setHTML(""); + } + sinkOnloads = true; + } else if ("xml".equals(mode)) { + getWidget().setHTML(uidl.getChildUIDL(0).getChildString(0)); + } else if ("raw".equals(mode)) { + getWidget().setHTML(uidl.getChildUIDL(0).getChildString(0)); + sinkOnloads = true; + } else { + getWidget().setText(""); + } + if (sinkOnloads) { + Util.sinkOnloadForImages(getWidget().getElement()); + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VLabel.class); + } + + @Override + public VLabel getWidget() { + return (VLabel) super.getWidget(); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/VLabelPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/label/VLabelPaintable.java deleted file mode 100644 index 5b7ce96cab..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/label/VLabelPaintable.java +++ /dev/null @@ -1,74 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui.label; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Document; -import com.google.gwt.dom.client.PreElement; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.Util; -import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; - -public class VLabelPaintable extends AbstractComponentConnector { - public VLabelPaintable() { - } - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - getWidget().setConnection(client); - if (!isRealUpdate(uidl)) { - return; - } - - boolean sinkOnloads = false; - - final String mode = uidl.getStringAttribute("mode"); - if (mode == null || "text".equals(mode)) { - getWidget().setText(uidl.getChildString(0)); - } else if ("pre".equals(mode)) { - PreElement preElement = Document.get().createPreElement(); - preElement.setInnerText(uidl.getChildUIDL(0).getChildString(0)); - // clear existing content - getWidget().setHTML(""); - // add preformatted text to dom - getWidget().getElement().appendChild(preElement); - } else if ("uidl".equals(mode)) { - getWidget().setHTML(uidl.getChildrenAsXML()); - } else if ("xhtml".equals(mode)) { - UIDL content = uidl.getChildUIDL(0).getChildUIDL(0); - if (content.getChildCount() > 0) { - getWidget().setHTML(content.getChildString(0)); - } else { - getWidget().setHTML(""); - } - sinkOnloads = true; - } else if ("xml".equals(mode)) { - getWidget().setHTML( - uidl.getChildUIDL(0).getChildString(0)); - } else if ("raw".equals(mode)) { - getWidget().setHTML( - uidl.getChildUIDL(0).getChildString(0)); - sinkOnloads = true; - } else { - getWidget().setText(""); - } - if (sinkOnloads) { - Util.sinkOnloadForImages(getWidget().getElement()); - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VLabel.class); - } - - @Override - public VLabel getWidget() { - return (VLabel) super.getWidget(); - } - -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/layout/ComponentConnectorLayoutSlot.java b/src/com/vaadin/terminal/gwt/client/ui/layout/ComponentConnectorLayoutSlot.java new file mode 100644 index 0000000000..33210b69f8 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/layout/ComponentConnectorLayoutSlot.java @@ -0,0 +1,87 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui.layout; + +import com.vaadin.terminal.gwt.client.LayoutManager; +import com.vaadin.terminal.gwt.client.VCaption; +import com.vaadin.terminal.gwt.client.ComponentConnector; +import com.vaadin.terminal.gwt.client.ui.ManagedLayout; + +public class ComponentConnectorLayoutSlot extends VLayoutSlot { + + final ComponentConnector paintable; + private LayoutManager layoutManager; + + public ComponentConnectorLayoutSlot(String baseClassName, ComponentConnector paintable) { + super(baseClassName, paintable.getWidget()); + this.paintable = paintable; + layoutManager = paintable.getLayoutManager(); + } + + public ComponentConnector getPaintable() { + return paintable; + } + + @Override + protected int getCaptionHeight() { + VCaption caption = getCaption(); + return caption != null ? layoutManager.getOuterHeight(caption + .getElement()) : 0; + } + + @Override + protected int getCaptionWidth() { + VCaption caption = getCaption(); + return caption != null ? layoutManager.getOuterWidth(caption + .getElement()) : 0; + } + + @Override + public void setCaption(VCaption caption) { + VCaption oldCaption = getCaption(); + if (oldCaption != null) { + layoutManager.unregisterDependency( + (ManagedLayout) paintable.getParent(), + oldCaption.getElement()); + } + super.setCaption(caption); + if (caption != null) { + layoutManager + .registerDependency((ManagedLayout) paintable.getParent(), + caption.getElement()); + } + } + + @Override + public int getWidgetHeight() { + return layoutManager.getOuterHeight(paintable.getWidget() + .getElement()); + } + + @Override + public int getWidgetWidth() { + return layoutManager.getOuterWidth(paintable.getWidget() + .getElement()); + } + + @Override + public boolean isUndefinedHeight() { + return paintable.isUndefinedHeight(); + } + + @Override + public boolean isUndefinedWidth() { + return paintable.isUndefinedWidth(); + } + + @Override + public boolean isRelativeHeight() { + return paintable.isRelativeHeight(); + } + + @Override + public boolean isRelativeWidth() { + return paintable.isRelativeWidth(); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/layout/VPaintableLayoutSlot.java b/src/com/vaadin/terminal/gwt/client/ui/layout/VPaintableLayoutSlot.java deleted file mode 100644 index 4d1b607460..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/layout/VPaintableLayoutSlot.java +++ /dev/null @@ -1,87 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui.layout; - -import com.vaadin.terminal.gwt.client.LayoutManager; -import com.vaadin.terminal.gwt.client.VCaption; -import com.vaadin.terminal.gwt.client.ComponentConnector; -import com.vaadin.terminal.gwt.client.ui.ManagedLayout; - -public class VPaintableLayoutSlot extends VLayoutSlot { - - final ComponentConnector paintable; - private LayoutManager layoutManager; - - public VPaintableLayoutSlot(String baseClassName, ComponentConnector paintable) { - super(baseClassName, paintable.getWidget()); - this.paintable = paintable; - layoutManager = paintable.getLayoutManager(); - } - - public ComponentConnector getPaintable() { - return paintable; - } - - @Override - protected int getCaptionHeight() { - VCaption caption = getCaption(); - return caption != null ? layoutManager.getOuterHeight(caption - .getElement()) : 0; - } - - @Override - protected int getCaptionWidth() { - VCaption caption = getCaption(); - return caption != null ? layoutManager.getOuterWidth(caption - .getElement()) : 0; - } - - @Override - public void setCaption(VCaption caption) { - VCaption oldCaption = getCaption(); - if (oldCaption != null) { - layoutManager.unregisterDependency( - (ManagedLayout) paintable.getParent(), - oldCaption.getElement()); - } - super.setCaption(caption); - if (caption != null) { - layoutManager - .registerDependency((ManagedLayout) paintable.getParent(), - caption.getElement()); - } - } - - @Override - public int getWidgetHeight() { - return layoutManager.getOuterHeight(paintable.getWidget() - .getElement()); - } - - @Override - public int getWidgetWidth() { - return layoutManager.getOuterWidth(paintable.getWidget() - .getElement()); - } - - @Override - public boolean isUndefinedHeight() { - return paintable.isUndefinedHeight(); - } - - @Override - public boolean isUndefinedWidth() { - return paintable.isUndefinedWidth(); - } - - @Override - public boolean isRelativeHeight() { - return paintable.isRelativeHeight(); - } - - @Override - public boolean isRelativeWidth() { - return paintable.isRelativeWidth(); - } -} diff --git a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java new file mode 100644 index 0000000000..da32c1730e --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java @@ -0,0 +1,75 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui.richtextarea; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; +import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener; + +public class RichTextAreaConnector extends AbstractComponentConnector implements + BeforeShortcutActionListener { + + @Override + public void updateFromUIDL(final UIDL uidl, ApplicationConnection client) { + getWidget().client = client; + getWidget().id = uidl.getId(); + + if (uidl.hasVariable("text")) { + getWidget().currentValue = uidl.getStringVariable("text"); + if (getWidget().rta.isAttached()) { + getWidget().rta.setHTML(getWidget().currentValue); + } else { + getWidget().html.setHTML(getWidget().currentValue); + } + } + if (isRealUpdate(uidl)) { + getWidget().setEnabled(!getState().isDisabled()); + } + + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + + getWidget().setReadOnly(getState().isReadOnly()); + getWidget().immediate = getState().isImmediate(); + int newMaxLength = uidl.hasAttribute("maxLength") ? uidl + .getIntAttribute("maxLength") : -1; + if (newMaxLength >= 0) { + if (getWidget().maxLength == -1) { + getWidget().keyPressHandler = getWidget().rta + .addKeyPressHandler(getWidget()); + } + getWidget().maxLength = newMaxLength; + } else if (getWidget().maxLength != -1) { + getWidget().getElement().setAttribute("maxlength", ""); + getWidget().maxLength = -1; + getWidget().keyPressHandler.removeHandler(); + } + + if (uidl.hasAttribute("selectAll")) { + getWidget().selectAll(); + } + + } + + public void onBeforeShortcutAction(Event e) { + getWidget().synchronizeContentToServer(); + } + + @Override + public VRichTextArea getWidget() { + return (VRichTextArea) super.getWidget(); + }; + + @Override + protected Widget createWidget() { + return GWT.create(VRichTextArea.class); + } + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextAreaPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextAreaPaintable.java deleted file mode 100644 index c4ef733662..0000000000 --- a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextAreaPaintable.java +++ /dev/null @@ -1,78 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.terminal.gwt.client.ui.richtextarea; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener; -import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; - -public class VRichTextAreaPaintable extends AbstractComponentConnector implements - BeforeShortcutActionListener { - - @Override - public void updateFromUIDL(final UIDL uidl, ApplicationConnection client) { - getWidget().client = client; - getWidget().id = uidl.getId(); - - if (uidl.hasVariable("text")) { - getWidget().currentValue = uidl - .getStringVariable("text"); - if (getWidget().rta.isAttached()) { - getWidget().rta - .setHTML(getWidget().currentValue); - } else { - getWidget().html - .setHTML(getWidget().currentValue); - } - } - if (isRealUpdate(uidl)) { - getWidget().setEnabled(!getState().isDisabled()); - } - - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - - getWidget().setReadOnly(getState().isReadOnly()); - getWidget().immediate = getState().isImmediate(); - int newMaxLength = uidl.hasAttribute("maxLength") ? uidl - .getIntAttribute("maxLength") : -1; - if (newMaxLength >= 0) { - if (getWidget().maxLength == -1) { - getWidget().keyPressHandler = getWidget().rta - .addKeyPressHandler(getWidget()); - } - getWidget().maxLength = newMaxLength; - } else if (getWidget().maxLength != -1) { - getWidget().getElement().setAttribute("maxlength", ""); - getWidget().maxLength = -1; - getWidget().keyPressHandler.removeHandler(); - } - - if (uidl.hasAttribute("selectAll")) { - getWidget().selectAll(); - } - - } - - public void onBeforeShortcutAction(Event e) { - getWidget().synchronizeContentToServer(); - } - - @Override - public VRichTextArea getWidget() { - return (VRichTextArea) super.getWidget(); - }; - - @Override - protected Widget createWidget() { - return GWT.create(VRichTextArea.class); - } - -} diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java index 0ae8e47df3..266b919c86 100644 --- a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java +++ b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java @@ -24,7 +24,8 @@ import com.google.gwt.user.rebind.ClassSourceFileComposerFactory; import com.google.gwt.user.rebind.SourceWriter; import com.vaadin.terminal.Paintable; import com.vaadin.terminal.gwt.client.ComponentConnector; -import com.vaadin.terminal.gwt.client.ui.VViewPaintable; +import com.vaadin.terminal.gwt.client.ui.RootConnector; +import com.vaadin.terminal.gwt.client.ui.UnknownComponentConnector; import com.vaadin.ui.ClientWidget; import com.vaadin.ui.ClientWidget.LoadStyle; import com.vaadin.ui.Root; @@ -71,7 +72,8 @@ import com.vaadin.ui.Root; */ public class WidgetMapGenerator extends Generator { - private static String paintableClassName = ComponentConnector.class.getName(); + private static String paintableClassName = ComponentConnector.class + .getName(); private String packageName; private String className; @@ -258,8 +260,8 @@ public class WidgetMapGenerator extends Generator { if (widgetsWithInstantiator.contains(clientClass)) { continue; } - if (clientClass == VViewPaintable.class) { - // VView's are not instantiated by widgetset + if (clientClass == RootConnector.class) { + // Roots are not instantiated by widgetset continue; } if (!first) { @@ -373,8 +375,8 @@ public class WidgetMapGenerator extends Generator { sourceWriter.println(".class;}"); sourceWriter.print("else "); } - sourceWriter - .println("return com.vaadin.terminal.gwt.client.ui.VUnknownComponentPaintable.class;"); + sourceWriter.println("return " + + UnknownComponentConnector.class.getName() + ".class;"); sourceWriter.outdent(); sourceWriter.println("}"); @@ -384,7 +386,7 @@ public class WidgetMapGenerator extends Generator { Class class1) { Class clientClass; if (Root.class == class1) { - clientClass = VViewPaintable.class; + clientClass = RootConnector.class; } else { ClientWidget annotation = class1.getAnnotation(ClientWidget.class); clientClass = annotation.value(); diff --git a/src/com/vaadin/ui/AbsoluteLayout.java b/src/com/vaadin/ui/AbsoluteLayout.java index c75073c02b..ca9f8405b9 100644 --- a/src/com/vaadin/ui/AbsoluteLayout.java +++ b/src/com/vaadin/ui/AbsoluteLayout.java @@ -17,7 +17,7 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Sizeable; import com.vaadin.terminal.gwt.client.EventId; -import com.vaadin.terminal.gwt.client.ui.VAbsoluteLayoutPaintable; +import com.vaadin.terminal.gwt.client.ui.AbsoluteLayoutConnector; /** * AbsoluteLayout is a layout implementation that mimics html absolute @@ -25,7 +25,7 @@ import com.vaadin.terminal.gwt.client.ui.VAbsoluteLayoutPaintable; * */ @SuppressWarnings("serial") -@ClientWidget(VAbsoluteLayoutPaintable.class) +@ClientWidget(AbsoluteLayoutConnector.class) public class AbsoluteLayout extends AbstractLayout implements LayoutClickNotifier { diff --git a/src/com/vaadin/ui/AbstractMedia.java b/src/com/vaadin/ui/AbstractMedia.java index 369ef773b9..3c02d73858 100644 --- a/src/com/vaadin/ui/AbstractMedia.java +++ b/src/com/vaadin/ui/AbstractMedia.java @@ -12,7 +12,7 @@ import java.util.List; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; -import com.vaadin.terminal.gwt.client.ui.VMediaBasePaintable; +import com.vaadin.terminal.gwt.client.ui.MediaBaseConnector; /** * Abstract base class for the HTML5 media components. @@ -203,27 +203,27 @@ public class AbstractMedia extends AbstractComponent { @Override public void paintContent(PaintTarget target) throws PaintException { super.paintContent(target); - target.addAttribute(VMediaBasePaintable.ATTR_CONTROLS, isShowControls()); + target.addAttribute(MediaBaseConnector.ATTR_CONTROLS, isShowControls()); if (getAltText() != null) { - target.addAttribute(VMediaBasePaintable.ATTR_ALT_TEXT, getAltText()); + target.addAttribute(MediaBaseConnector.ATTR_ALT_TEXT, getAltText()); } - target.addAttribute(VMediaBasePaintable.ATTR_HTML, + target.addAttribute(MediaBaseConnector.ATTR_HTML, isHtmlContentAllowed()); - target.addAttribute(VMediaBasePaintable.ATTR_AUTOPLAY, isAutoplay()); + target.addAttribute(MediaBaseConnector.ATTR_AUTOPLAY, isAutoplay()); for (Resource r : getSources()) { - target.startTag(VMediaBasePaintable.TAG_SOURCE); - target.addAttribute(VMediaBasePaintable.ATTR_RESOURCE, r); - target.addAttribute(VMediaBasePaintable.ATTR_RESOURCE_TYPE, + target.startTag(MediaBaseConnector.TAG_SOURCE); + target.addAttribute(MediaBaseConnector.ATTR_RESOURCE, r); + target.addAttribute(MediaBaseConnector.ATTR_RESOURCE_TYPE, r.getMIMEType()); - target.endTag(VMediaBasePaintable.TAG_SOURCE); + target.endTag(MediaBaseConnector.TAG_SOURCE); } - target.addAttribute(VMediaBasePaintable.ATTR_MUTED, isMuted()); + target.addAttribute(MediaBaseConnector.ATTR_MUTED, isMuted()); if (play) { - target.addAttribute(VMediaBasePaintable.ATTR_PLAY, true); + target.addAttribute(MediaBaseConnector.ATTR_PLAY, true); play = false; } if (pause) { - target.addAttribute(VMediaBasePaintable.ATTR_PAUSE, true); + target.addAttribute(MediaBaseConnector.ATTR_PAUSE, true); pause = false; } } diff --git a/src/com/vaadin/ui/AbstractSelect.java b/src/com/vaadin/ui/AbstractSelect.java index 47f132aa77..f069954869 100644 --- a/src/com/vaadin/ui/AbstractSelect.java +++ b/src/com/vaadin/ui/AbstractSelect.java @@ -35,6 +35,7 @@ import com.vaadin.terminal.Resource; import com.vaadin.terminal.gwt.client.ui.dd.VIsOverId; import com.vaadin.terminal.gwt.client.ui.dd.VItemIdIs; import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation; +import com.vaadin.ui.AbstractSelect.ItemCaptionMode; /** *

diff --git a/src/com/vaadin/ui/AbstractSplitPanel.java b/src/com/vaadin/ui/AbstractSplitPanel.java index e03e73a781..6cbbcaf2e4 100644 --- a/src/com/vaadin/ui/AbstractSplitPanel.java +++ b/src/com/vaadin/ui/AbstractSplitPanel.java @@ -15,7 +15,7 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Sizeable; import com.vaadin.terminal.gwt.client.MouseEventDetails; -import com.vaadin.terminal.gwt.client.ui.VAbstractSplitPanelPaintable; +import com.vaadin.terminal.gwt.client.ui.AbstractSplitPanelConnector; import com.vaadin.tools.ReflectTools; /** @@ -43,7 +43,7 @@ public abstract class AbstractSplitPanel extends AbstractLayout { private boolean locked = false; - private static final String SPLITTER_CLICK_EVENT = VAbstractSplitPanelPaintable.SPLITTER_CLICK_EVENT_IDENTIFIER; + private static final String SPLITTER_CLICK_EVENT = AbstractSplitPanelConnector.SPLITTER_CLICK_EVENT_IDENTIFIER; /** * Modifiable and Serializable Iterator for the components, used by diff --git a/src/com/vaadin/ui/Accordion.java b/src/com/vaadin/ui/Accordion.java index 4ee75326ff..7efc2d47ec 100644 --- a/src/com/vaadin/ui/Accordion.java +++ b/src/com/vaadin/ui/Accordion.java @@ -3,7 +3,7 @@ */ package com.vaadin.ui; -import com.vaadin.terminal.gwt.client.ui.VAccordionPaintable; +import com.vaadin.terminal.gwt.client.ui.AccordionConnector; /** * An accordion is a component similar to a {@link TabSheet}, but with a @@ -16,7 +16,7 @@ import com.vaadin.terminal.gwt.client.ui.VAccordionPaintable; * * @see TabSheet */ -@ClientWidget(VAccordionPaintable.class) +@ClientWidget(AccordionConnector.class) public class Accordion extends TabSheet { } diff --git a/src/com/vaadin/ui/Audio.java b/src/com/vaadin/ui/Audio.java index 048ef81c10..9759b130f6 100644 --- a/src/com/vaadin/ui/Audio.java +++ b/src/com/vaadin/ui/Audio.java @@ -5,7 +5,7 @@ package com.vaadin.ui; import com.vaadin.terminal.Resource; -import com.vaadin.terminal.gwt.client.ui.VAudioPaintable; +import com.vaadin.terminal.gwt.client.ui.AudioConnector; /** * The Audio component translates into an HTML5 <audio> element and as @@ -28,7 +28,7 @@ import com.vaadin.terminal.gwt.client.ui.VAudioPaintable; * @author Vaadin Ltd * @since 6.7.0 */ -@ClientWidget(VAudioPaintable.class) +@ClientWidget(AudioConnector.class) public class Audio extends AbstractMedia { public Audio() { diff --git a/src/com/vaadin/ui/Button.java b/src/com/vaadin/ui/Button.java index 61f3002bcc..eb84d852dd 100644 --- a/src/com/vaadin/ui/Button.java +++ b/src/com/vaadin/ui/Button.java @@ -20,9 +20,9 @@ import com.vaadin.event.ShortcutAction.ModifierKey; 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.ButtonConnector; +import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonClientToServerRpc; 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; @@ -37,7 +37,7 @@ import com.vaadin.ui.Component.Focusable; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(value = VButtonPaintable.class, loadStyle = LoadStyle.EAGER) +@ClientWidget(value = ButtonConnector.class, loadStyle = LoadStyle.EAGER) public class Button extends AbstractComponent implements FieldEvents.BlurNotifier, FieldEvents.FocusNotifier, Focusable, Action.ShortcutNotifier, RpcTarget { diff --git a/src/com/vaadin/ui/CheckBox.java b/src/com/vaadin/ui/CheckBox.java index 9dc96bb55d..8cc4a7f1eb 100644 --- a/src/com/vaadin/ui/CheckBox.java +++ b/src/com/vaadin/ui/CheckBox.java @@ -13,9 +13,10 @@ import com.vaadin.event.FieldEvents.FocusEvent; import com.vaadin.event.FieldEvents.FocusListener; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; +import com.vaadin.terminal.gwt.client.ui.CheckBoxConnector; import com.vaadin.terminal.gwt.client.ui.VCheckBox; -@ClientWidget(com.vaadin.terminal.gwt.client.ui.VCheckBoxPaintable.class) +@ClientWidget(CheckBoxConnector.class) public class CheckBox extends AbstractField { /** * Creates a new checkbox. diff --git a/src/com/vaadin/ui/ComboBox.java b/src/com/vaadin/ui/ComboBox.java index 12db8c18af..60349b0a43 100644 --- a/src/com/vaadin/ui/ComboBox.java +++ b/src/com/vaadin/ui/ComboBox.java @@ -9,8 +9,8 @@ import java.util.Collection; import com.vaadin.data.Container; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; +import com.vaadin.terminal.gwt.client.ui.ComboBoxConnector; import com.vaadin.terminal.gwt.client.ui.VFilterSelect; -import com.vaadin.terminal.gwt.client.ui.VFilterSelectPaintable; /** * A filtering dropdown single-select. Suitable for newItemsAllowed, but it's @@ -21,7 +21,7 @@ import com.vaadin.terminal.gwt.client.ui.VFilterSelectPaintable; * */ @SuppressWarnings("serial") -@ClientWidget(VFilterSelectPaintable.class) +@ClientWidget(ComboBoxConnector.class) public class ComboBox extends Select { private String inputPrompt = null; diff --git a/src/com/vaadin/ui/CssLayout.java b/src/com/vaadin/ui/CssLayout.java index ebfee5a787..e3a081e23e 100644 --- a/src/com/vaadin/ui/CssLayout.java +++ b/src/com/vaadin/ui/CssLayout.java @@ -14,7 +14,7 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Paintable; import com.vaadin.terminal.gwt.client.EventId; -import com.vaadin.terminal.gwt.client.ui.VCssLayoutPaintable; +import com.vaadin.terminal.gwt.client.ui.CssLayoutConnector; /** * CssLayout is a layout component that can be used in browser environment only. @@ -57,7 +57,7 @@ import com.vaadin.terminal.gwt.client.ui.VCssLayoutPaintable; * @since 6.1 brought in from "FastLayouts" incubator project * */ -@ClientWidget(VCssLayoutPaintable.class) +@ClientWidget(CssLayoutConnector.class) public class CssLayout extends AbstractLayout implements LayoutClickNotifier { private static final String CLICK_EVENT = EventId.LAYOUT_CLICK; diff --git a/src/com/vaadin/ui/CustomComponent.java b/src/com/vaadin/ui/CustomComponent.java index 7aba34b6bb..c11a96101a 100644 --- a/src/com/vaadin/ui/CustomComponent.java +++ b/src/com/vaadin/ui/CustomComponent.java @@ -9,7 +9,7 @@ import java.util.Iterator; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VCustomComponentPaintable; +import com.vaadin.terminal.gwt.client.ui.CustomComponentConnector; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -27,7 +27,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(value = VCustomComponentPaintable.class, loadStyle = LoadStyle.EAGER) +@ClientWidget(value = CustomComponentConnector.class, loadStyle = LoadStyle.EAGER) public class CustomComponent extends AbstractComponentContainer { /** diff --git a/src/com/vaadin/ui/CustomField.java b/src/com/vaadin/ui/CustomField.java index 73f9050363..5804c847af 100644 --- a/src/com/vaadin/ui/CustomField.java +++ b/src/com/vaadin/ui/CustomField.java @@ -11,7 +11,7 @@ import java.util.Iterator; import com.vaadin.data.Property; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VCustomComponentPaintable; +import com.vaadin.terminal.gwt.client.ui.CustomComponentConnector; /** * A {@link Field} whose UI content can be constructed by the user, enabling the @@ -35,7 +35,7 @@ import com.vaadin.terminal.gwt.client.ui.VCustomComponentPaintable; * * @since 7.0 */ -@ClientWidget(VCustomComponentPaintable.class) +@ClientWidget(CustomComponentConnector.class) public abstract class CustomField extends AbstractField implements ComponentContainer { diff --git a/src/com/vaadin/ui/CustomLayout.java b/src/com/vaadin/ui/CustomLayout.java index fb0c369969..a97a317b9d 100644 --- a/src/com/vaadin/ui/CustomLayout.java +++ b/src/com/vaadin/ui/CustomLayout.java @@ -12,7 +12,7 @@ import java.util.Iterator; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VCustomLayoutPaintable; +import com.vaadin.terminal.gwt.client.ui.CustomLayoutConnector; /** *

@@ -44,7 +44,7 @@ import com.vaadin.terminal.gwt.client.ui.VCustomLayoutPaintable; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(VCustomLayoutPaintable.class) +@ClientWidget(CustomLayoutConnector.class) public class CustomLayout extends AbstractLayout { private static final int BUFFER_SIZE = 10000; diff --git a/src/com/vaadin/ui/DateField.java b/src/com/vaadin/ui/DateField.java index 9589414f4d..4e6be98f7a 100644 --- a/src/com/vaadin/ui/DateField.java +++ b/src/com/vaadin/ui/DateField.java @@ -26,8 +26,8 @@ import com.vaadin.event.FieldEvents.FocusEvent; import com.vaadin.event.FieldEvents.FocusListener; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; +import com.vaadin.terminal.gwt.client.ui.PopupDateFieldConnector; import com.vaadin.terminal.gwt.client.ui.VDateField; -import com.vaadin.terminal.gwt.client.ui.VPopupCalendarPaintable; /** *

@@ -50,7 +50,7 @@ import com.vaadin.terminal.gwt.client.ui.VPopupCalendarPaintable; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(VPopupCalendarPaintable.class) +@ClientWidget(PopupDateFieldConnector.class) public class DateField extends AbstractField implements FieldEvents.BlurNotifier, FieldEvents.FocusNotifier { diff --git a/src/com/vaadin/ui/DragAndDropWrapper.java b/src/com/vaadin/ui/DragAndDropWrapper.java index 512b70e118..dcefc545d9 100644 --- a/src/com/vaadin/ui/DragAndDropWrapper.java +++ b/src/com/vaadin/ui/DragAndDropWrapper.java @@ -21,13 +21,13 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.StreamVariable; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.ui.DragAndDropWrapperConnector; import com.vaadin.terminal.gwt.client.ui.VDragAndDropWrapper; -import com.vaadin.terminal.gwt.client.ui.VDragAndDropWrapperPaintable; import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation; import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation; @SuppressWarnings("serial") -@ClientWidget(VDragAndDropWrapperPaintable.class) +@ClientWidget(DragAndDropWrapperConnector.class) public class DragAndDropWrapper extends CustomComponent implements DropTarget, DragSource { diff --git a/src/com/vaadin/ui/Embedded.java b/src/com/vaadin/ui/Embedded.java index f655b55711..bc4c2a3ff4 100644 --- a/src/com/vaadin/ui/Embedded.java +++ b/src/com/vaadin/ui/Embedded.java @@ -14,7 +14,7 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; import com.vaadin.terminal.gwt.client.MouseEventDetails; -import com.vaadin.terminal.gwt.client.ui.VEmbeddedPaintable; +import com.vaadin.terminal.gwt.client.ui.EmbeddedConnector; /** * Component for embedding external objects. @@ -25,10 +25,10 @@ import com.vaadin.terminal.gwt.client.ui.VEmbeddedPaintable; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(VEmbeddedPaintable.class) +@ClientWidget(EmbeddedConnector.class) public class Embedded extends AbstractComponent { - private static final String CLICK_EVENT = VEmbeddedPaintable.CLICK_EVENT_IDENTIFIER; + private static final String CLICK_EVENT = EmbeddedConnector.CLICK_EVENT_IDENTIFIER; /** * General object type. diff --git a/src/com/vaadin/ui/Form.java b/src/com/vaadin/ui/Form.java index dd3710cd2c..1e30eb94bf 100644 --- a/src/com/vaadin/ui/Form.java +++ b/src/com/vaadin/ui/Form.java @@ -27,7 +27,7 @@ import com.vaadin.terminal.CompositeErrorMessage; import com.vaadin.terminal.ErrorMessage; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VFormPaintable; +import com.vaadin.terminal.gwt.client.ui.FormConnector; /** * Form component provides easy way of creating and managing sets fields. @@ -62,7 +62,7 @@ import com.vaadin.terminal.gwt.client.ui.VFormPaintable; * @deprecated Use {@link FieldGroup} instead of {@link Form} for more * flexibility. */ -@ClientWidget(VFormPaintable.class) +@ClientWidget(FormConnector.class) @Deprecated public class Form extends AbstractField implements Item.Editor, Buffered, Item, Validatable, Action.Notifier { diff --git a/src/com/vaadin/ui/FormLayout.java b/src/com/vaadin/ui/FormLayout.java index c5c211924e..756c79a4b1 100644 --- a/src/com/vaadin/ui/FormLayout.java +++ b/src/com/vaadin/ui/FormLayout.java @@ -4,7 +4,7 @@ package com.vaadin.ui; -import com.vaadin.terminal.gwt.client.ui.VFormLayoutPaintable; +import com.vaadin.terminal.gwt.client.ui.FormLayoutConnector; /** * FormLayout is used by {@link Form} to layout fields. It may also be used @@ -21,7 +21,7 @@ import com.vaadin.terminal.gwt.client.ui.VFormLayoutPaintable; * bottom are by default on. * */ -@ClientWidget(VFormLayoutPaintable.class) +@ClientWidget(FormLayoutConnector.class) public class FormLayout extends AbstractOrderedLayout { public FormLayout() { diff --git a/src/com/vaadin/ui/GridLayout.java b/src/com/vaadin/ui/GridLayout.java index 4588328345..596773b870 100644 --- a/src/com/vaadin/ui/GridLayout.java +++ b/src/com/vaadin/ui/GridLayout.java @@ -18,7 +18,7 @@ import com.vaadin.event.LayoutEvents.LayoutClickNotifier; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.gwt.client.EventId; -import com.vaadin.terminal.gwt.client.ui.VGridLayoutPaintable; +import com.vaadin.terminal.gwt.client.ui.GridLayoutConnector; /** *

@@ -41,7 +41,7 @@ import com.vaadin.terminal.gwt.client.ui.VGridLayoutPaintable; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(VGridLayoutPaintable.class) +@ClientWidget(GridLayoutConnector.class) public class GridLayout extends AbstractLayout implements Layout.AlignmentHandler, Layout.SpacingHandler, LayoutClickNotifier { diff --git a/src/com/vaadin/ui/HorizontalLayout.java b/src/com/vaadin/ui/HorizontalLayout.java index ba685ec410..c053d711e2 100644 --- a/src/com/vaadin/ui/HorizontalLayout.java +++ b/src/com/vaadin/ui/HorizontalLayout.java @@ -3,7 +3,7 @@ */ package com.vaadin.ui; -import com.vaadin.terminal.gwt.client.ui.VHorizontalLayoutPaintable; +import com.vaadin.terminal.gwt.client.ui.HorizontalLayoutConnector; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -18,7 +18,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * @since 5.3 */ @SuppressWarnings("serial") -@ClientWidget(value = VHorizontalLayoutPaintable.class, loadStyle = LoadStyle.EAGER) +@ClientWidget(value = HorizontalLayoutConnector.class, loadStyle = LoadStyle.EAGER) public class HorizontalLayout extends AbstractOrderedLayout { public HorizontalLayout() { diff --git a/src/com/vaadin/ui/HorizontalSplitPanel.java b/src/com/vaadin/ui/HorizontalSplitPanel.java index d4a1e7cc0e..db3223aa88 100644 --- a/src/com/vaadin/ui/HorizontalSplitPanel.java +++ b/src/com/vaadin/ui/HorizontalSplitPanel.java @@ -3,7 +3,7 @@ */ package com.vaadin.ui; -import com.vaadin.terminal.gwt.client.ui.VHorizontalSplitPanelPaintable; +import com.vaadin.terminal.gwt.client.ui.HorizontalSplitPanelConnector; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -29,7 +29,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * @VERSION@ * @since 6.5 */ -@ClientWidget(value = VHorizontalSplitPanelPaintable.class, loadStyle = LoadStyle.EAGER) +@ClientWidget(value = HorizontalSplitPanelConnector.class, loadStyle = LoadStyle.EAGER) public class HorizontalSplitPanel extends AbstractSplitPanel { public HorizontalSplitPanel() { super(); diff --git a/src/com/vaadin/ui/InlineDateField.java b/src/com/vaadin/ui/InlineDateField.java index b4160604ff..3ae77dd856 100644 --- a/src/com/vaadin/ui/InlineDateField.java +++ b/src/com/vaadin/ui/InlineDateField.java @@ -7,7 +7,7 @@ package com.vaadin.ui; import java.util.Date; import com.vaadin.data.Property; -import com.vaadin.terminal.gwt.client.ui.VDateFieldCalendarPaintable; +import com.vaadin.terminal.gwt.client.ui.InlineDateFieldConnector; /** *

@@ -22,7 +22,7 @@ import com.vaadin.terminal.gwt.client.ui.VDateFieldCalendarPaintable; * @VERSION@ * @since 5.0 */ -@ClientWidget(VDateFieldCalendarPaintable.class) +@ClientWidget(InlineDateFieldConnector.class) public class InlineDateField extends DateField { public InlineDateField() { diff --git a/src/com/vaadin/ui/Label.java b/src/com/vaadin/ui/Label.java index 576bbd967f..3092faa251 100644 --- a/src/com/vaadin/ui/Label.java +++ b/src/com/vaadin/ui/Label.java @@ -10,7 +10,7 @@ import com.vaadin.data.Property; import com.vaadin.data.util.ObjectProperty; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.label.VLabelPaintable; +import com.vaadin.terminal.gwt.client.ui.label.LabelConnector; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -38,7 +38,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(value = VLabelPaintable.class, loadStyle = LoadStyle.EAGER) +@ClientWidget(value = LabelConnector.class, loadStyle = LoadStyle.EAGER) // TODO generics for interface Property public class Label extends AbstractComponent implements Property, Property.Viewer, Property.ValueChangeListener, diff --git a/src/com/vaadin/ui/Link.java b/src/com/vaadin/ui/Link.java index 0b11151be7..3be5265bf3 100644 --- a/src/com/vaadin/ui/Link.java +++ b/src/com/vaadin/ui/Link.java @@ -7,7 +7,7 @@ package com.vaadin.ui; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; -import com.vaadin.terminal.gwt.client.ui.VLinkPaintable; +import com.vaadin.terminal.gwt.client.ui.LinkConnector; /** * Link is used to create external or internal URL links. @@ -18,7 +18,7 @@ import com.vaadin.terminal.gwt.client.ui.VLinkPaintable; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(VLinkPaintable.class) +@ClientWidget(LinkConnector.class) public class Link extends AbstractComponent { /* Target window border type constant: No window border */ diff --git a/src/com/vaadin/ui/ListSelect.java b/src/com/vaadin/ui/ListSelect.java index cf0e6773f2..cf76babaca 100644 --- a/src/com/vaadin/ui/ListSelect.java +++ b/src/com/vaadin/ui/ListSelect.java @@ -9,14 +9,14 @@ import java.util.Collection; import com.vaadin.data.Container; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VListSelectPaintable; +import com.vaadin.terminal.gwt.client.ui.ListSelectConnector; /** * This is a simple list select without, for instance, support for new items, * lazyloading, and other advanced features. */ @SuppressWarnings("serial") -@ClientWidget(VListSelectPaintable.class) +@ClientWidget(ListSelectConnector.class) public class ListSelect extends AbstractSelect { private int columns = 0; diff --git a/src/com/vaadin/ui/MenuBar.java b/src/com/vaadin/ui/MenuBar.java index c9de432d7e..7d0d307daa 100644 --- a/src/com/vaadin/ui/MenuBar.java +++ b/src/com/vaadin/ui/MenuBar.java @@ -13,8 +13,8 @@ import java.util.Stack; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; +import com.vaadin.terminal.gwt.client.ui.MenuBarConnector; import com.vaadin.terminal.gwt.client.ui.VMenuBar; -import com.vaadin.terminal.gwt.client.ui.VMenuBarPaintable; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -25,7 +25,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; *

*/ @SuppressWarnings("serial") -@ClientWidget(value = VMenuBarPaintable.class, loadStyle = LoadStyle.LAZY) +@ClientWidget(value = MenuBarConnector.class, loadStyle = LoadStyle.LAZY) public class MenuBar extends AbstractComponent { // Items of the top-level menu diff --git a/src/com/vaadin/ui/NativeButton.java b/src/com/vaadin/ui/NativeButton.java index b7b7fcb38c..ede63f6d78 100644 --- a/src/com/vaadin/ui/NativeButton.java +++ b/src/com/vaadin/ui/NativeButton.java @@ -3,10 +3,10 @@ */ package com.vaadin.ui; -import com.vaadin.terminal.gwt.client.ui.VNativeButtonPaintable; +import com.vaadin.terminal.gwt.client.ui.NativeButtonConnector; @SuppressWarnings("serial") -@ClientWidget(VNativeButtonPaintable.class) +@ClientWidget(NativeButtonConnector.class) public class NativeButton extends Button { public NativeButton() { diff --git a/src/com/vaadin/ui/NativeSelect.java b/src/com/vaadin/ui/NativeSelect.java index b0070426ad..e7db9aa3ec 100644 --- a/src/com/vaadin/ui/NativeSelect.java +++ b/src/com/vaadin/ui/NativeSelect.java @@ -9,7 +9,7 @@ import java.util.Collection; import com.vaadin.data.Container; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VNativeSelectPaintable; +import com.vaadin.terminal.gwt.client.ui.NativeSelectConnector; /** * This is a simple drop-down select without, for instance, support for @@ -18,7 +18,7 @@ import com.vaadin.terminal.gwt.client.ui.VNativeSelectPaintable; * better choice. */ @SuppressWarnings("serial") -@ClientWidget(VNativeSelectPaintable.class) +@ClientWidget(NativeSelectConnector.class) public class NativeSelect extends AbstractSelect { // width in characters, mimics TextField diff --git a/src/com/vaadin/ui/OptionGroup.java b/src/com/vaadin/ui/OptionGroup.java index ae6636a33c..789c16202d 100644 --- a/src/com/vaadin/ui/OptionGroup.java +++ b/src/com/vaadin/ui/OptionGroup.java @@ -17,14 +17,14 @@ import com.vaadin.event.FieldEvents.FocusEvent; import com.vaadin.event.FieldEvents.FocusListener; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; +import com.vaadin.terminal.gwt.client.ui.OptionGroupConnector; import com.vaadin.terminal.gwt.client.ui.VOptionGroup; -import com.vaadin.terminal.gwt.client.ui.VOptionGroupPaintable; /** * Configures select to be used as an option group. */ @SuppressWarnings("serial") -@ClientWidget(VOptionGroupPaintable.class) +@ClientWidget(OptionGroupConnector.class) public class OptionGroup extends AbstractSelect implements FieldEvents.BlurNotifier, FieldEvents.FocusNotifier { diff --git a/src/com/vaadin/ui/Panel.java b/src/com/vaadin/ui/Panel.java index 390279a62f..63b57866c7 100644 --- a/src/com/vaadin/ui/Panel.java +++ b/src/com/vaadin/ui/Panel.java @@ -16,7 +16,7 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Scrollable; import com.vaadin.terminal.gwt.client.MouseEventDetails; -import com.vaadin.terminal.gwt.client.ui.VPanelPaintable; +import com.vaadin.terminal.gwt.client.ui.PanelConnector; import com.vaadin.ui.Component.Focusable; import com.vaadin.ui.themes.Reindeer; import com.vaadin.ui.themes.Runo; @@ -30,12 +30,12 @@ import com.vaadin.ui.themes.Runo; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(VPanelPaintable.class) +@ClientWidget(PanelConnector.class) public class Panel extends AbstractComponentContainer implements Scrollable, ComponentContainer.ComponentAttachListener, ComponentContainer.ComponentDetachListener, Action.Notifier, Focusable { - private static final String CLICK_EVENT = VPanelPaintable.CLICK_EVENT_IDENTIFIER; + private static final String CLICK_EVENT = PanelConnector.CLICK_EVENT_IDENTIFIER; /** * Removes extra decorations from the Panel. diff --git a/src/com/vaadin/ui/PasswordField.java b/src/com/vaadin/ui/PasswordField.java index d5be4f378d..725376d617 100644 --- a/src/com/vaadin/ui/PasswordField.java +++ b/src/com/vaadin/ui/PasswordField.java @@ -4,13 +4,13 @@ package com.vaadin.ui; import com.vaadin.data.Property; -import com.vaadin.terminal.gwt.client.ui.VPasswordFieldPaintable; +import com.vaadin.terminal.gwt.client.ui.PasswordFieldConnector; /** * A field that is used to enter secret text information like passwords. The * entered text is not displayed on the screen. */ -@ClientWidget(VPasswordFieldPaintable.class) +@ClientWidget(PasswordFieldConnector.class) public class PasswordField extends AbstractTextField { /** diff --git a/src/com/vaadin/ui/PopupView.java b/src/com/vaadin/ui/PopupView.java index 5637ef69d7..ef17b9135f 100644 --- a/src/com/vaadin/ui/PopupView.java +++ b/src/com/vaadin/ui/PopupView.java @@ -10,7 +10,7 @@ import java.util.Map; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VPopupViewPaintable; +import com.vaadin.terminal.gwt.client.ui.PopupViewConnector; /** * @@ -22,7 +22,7 @@ import com.vaadin.terminal.gwt.client.ui.VPopupViewPaintable; * @author Vaadin Ltd. */ @SuppressWarnings("serial") -@ClientWidget(VPopupViewPaintable.class) +@ClientWidget(PopupViewConnector.class) public class PopupView extends AbstractComponentContainer { private Content content; diff --git a/src/com/vaadin/ui/ProgressIndicator.java b/src/com/vaadin/ui/ProgressIndicator.java index 9152a3adab..334727e449 100644 --- a/src/com/vaadin/ui/ProgressIndicator.java +++ b/src/com/vaadin/ui/ProgressIndicator.java @@ -8,7 +8,7 @@ import com.vaadin.data.Property; import com.vaadin.data.util.ObjectProperty; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VProgressIndicatorPaintable; +import com.vaadin.terminal.gwt.client.ui.ProgressIndicatorConnector; /** * ProgressIndicator is component that shows user state of a @@ -25,7 +25,7 @@ import com.vaadin.terminal.gwt.client.ui.VProgressIndicatorPaintable; * @since 4 */ @SuppressWarnings("serial") -@ClientWidget(VProgressIndicatorPaintable.class) +@ClientWidget(ProgressIndicatorConnector.class) public class ProgressIndicator extends AbstractField implements Property.Viewer, Property.ValueChangeListener { diff --git a/src/com/vaadin/ui/RichTextArea.java b/src/com/vaadin/ui/RichTextArea.java index 240063caf3..8646f84c99 100644 --- a/src/com/vaadin/ui/RichTextArea.java +++ b/src/com/vaadin/ui/RichTextArea.java @@ -10,7 +10,7 @@ import java.util.Map; import com.vaadin.data.Property; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.richtextarea.VRichTextAreaPaintable; +import com.vaadin.terminal.gwt.client.ui.richtextarea.RichTextAreaConnector; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -20,7 +20,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * {@link RichTextArea} may produce unexpected results as formatting is counted * into length of field. */ -@ClientWidget(value = VRichTextAreaPaintable.class, loadStyle = LoadStyle.LAZY) +@ClientWidget(value = RichTextAreaConnector.class, loadStyle = LoadStyle.LAZY) public class RichTextArea extends AbstractField { /** diff --git a/src/com/vaadin/ui/Root.java b/src/com/vaadin/ui/Root.java index 47dcedd12a..3d9f734a2c 100644 --- a/src/com/vaadin/ui/Root.java +++ b/src/com/vaadin/ui/Root.java @@ -72,7 +72,7 @@ import com.vaadin.ui.Window.CloseListener; * * @since 7.0 */ -// @ClientWidget(VView.class) - Can't have annotation because of eager +// @ClientWidget(View.class) - Can't have annotation because of eager // classloaders in application servers and hard coded logic in client side code public abstract class Root extends AbstractComponentContainer implements Action.Container, Action.Notifier { diff --git a/src/com/vaadin/ui/Select.java b/src/com/vaadin/ui/Select.java index 5519750e89..e4eb2e68b3 100644 --- a/src/com/vaadin/ui/Select.java +++ b/src/com/vaadin/ui/Select.java @@ -24,7 +24,7 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; -import com.vaadin.terminal.gwt.client.ui.VFilterSelectPaintable; +import com.vaadin.terminal.gwt.client.ui.ComboBoxConnector; /** *

@@ -45,7 +45,7 @@ import com.vaadin.terminal.gwt.client.ui.VFilterSelectPaintable; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(VFilterSelectPaintable.class) +@ClientWidget(ComboBoxConnector.class) public class Select extends AbstractSelect implements AbstractSelect.Filtering, FieldEvents.BlurNotifier, FieldEvents.FocusNotifier { @@ -276,8 +276,8 @@ public class Select extends AbstractSelect implements AbstractSelect.Filtering, // Hide the error indicator if needed if (shouldHideErrors()) { - target.addAttribute(AbstractComponentConnector.ATTRIBUTE_HIDEERRORS, - true); + target.addAttribute( + AbstractComponentConnector.ATTRIBUTE_HIDEERRORS, true); } } diff --git a/src/com/vaadin/ui/Slider.java b/src/com/vaadin/ui/Slider.java index aad1b60f87..59aa5cd214 100644 --- a/src/com/vaadin/ui/Slider.java +++ b/src/com/vaadin/ui/Slider.java @@ -8,7 +8,7 @@ import java.util.Map; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VSliderPaintable; +import com.vaadin.terminal.gwt.client.ui.SliderConnector; /** * A component for selecting a numerical value within a range. @@ -46,7 +46,7 @@ import com.vaadin.terminal.gwt.client.ui.VSliderPaintable; * * @author Vaadin Ltd. */ -@ClientWidget(VSliderPaintable.class) +@ClientWidget(SliderConnector.class) public class Slider extends AbstractField { public static final int ORIENTATION_HORIZONTAL = 0; diff --git a/src/com/vaadin/ui/TabSheet.java b/src/com/vaadin/ui/TabSheet.java index 398ded3212..a651f05cc3 100644 --- a/src/com/vaadin/ui/TabSheet.java +++ b/src/com/vaadin/ui/TabSheet.java @@ -20,9 +20,9 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; +import com.vaadin.terminal.gwt.client.ui.TabsheetBaseConnector; +import com.vaadin.terminal.gwt.client.ui.TabsheetConnector; import com.vaadin.terminal.gwt.client.ui.VTabsheet; -import com.vaadin.terminal.gwt.client.ui.VTabsheetBasePaintable; -import com.vaadin.terminal.gwt.client.ui.VTabsheetPaintable; import com.vaadin.terminal.gwt.server.CommunicationManager; import com.vaadin.ui.themes.Reindeer; import com.vaadin.ui.themes.Runo; @@ -56,7 +56,7 @@ import com.vaadin.ui.themes.Runo; * @VERSION@ * @since 3.0 */ -@ClientWidget(VTabsheetPaintable.class) +@ClientWidget(TabsheetConnector.class) public class TabSheet extends AbstractComponentContainer { /** @@ -379,7 +379,7 @@ public class TabSheet extends AbstractComponentContainer { target.startTag("tab"); if (!tab.isEnabled() && tab.isVisible()) { target.addAttribute( - VTabsheetBasePaintable.ATTRIBUTE_TAB_DISABLED, true); + TabsheetBaseConnector.ATTRIBUTE_TAB_DISABLED, true); } if (!tab.isVisible()) { @@ -400,13 +400,13 @@ public class TabSheet extends AbstractComponentContainer { final String caption = tab.getCaption(); if (caption != null && caption.length() > 0) { target.addAttribute( - VTabsheetBasePaintable.ATTRIBUTE_TAB_CAPTION, caption); + TabsheetBaseConnector.ATTRIBUTE_TAB_CAPTION, caption); } final String description = tab.getDescription(); if (description != null) { target.addAttribute( - VTabsheetBasePaintable.ATTRIBUTE_TAB_DESCRIPTION, + TabsheetBaseConnector.ATTRIBUTE_TAB_DESCRIPTION, description); } diff --git a/src/com/vaadin/ui/Table.java b/src/com/vaadin/ui/Table.java index 003ef6978c..1190bb3df3 100644 --- a/src/com/vaadin/ui/Table.java +++ b/src/com/vaadin/ui/Table.java @@ -46,8 +46,8 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.ui.TableConnector; import com.vaadin.terminal.gwt.client.ui.VScrollTable; -import com.vaadin.terminal.gwt.client.ui.VScrollTablePaintable; import com.vaadin.terminal.gwt.client.ui.dd.VLazyInitItemIdentifiers; /** @@ -74,7 +74,7 @@ import com.vaadin.terminal.gwt.client.ui.dd.VLazyInitItemIdentifiers; * @since 3.0 */ @SuppressWarnings({ "deprecation" }) -@ClientWidget(VScrollTablePaintable.class) +@ClientWidget(TableConnector.class) public class Table extends AbstractSelect implements Action.Container, Container.Ordered, Container.Sortable, ItemClickSource, ItemClickNotifier, DragSource, DropTarget { diff --git a/src/com/vaadin/ui/TextArea.java b/src/com/vaadin/ui/TextArea.java index a5e6bb5630..dafeb8afa7 100644 --- a/src/com/vaadin/ui/TextArea.java +++ b/src/com/vaadin/ui/TextArea.java @@ -7,12 +7,12 @@ package com.vaadin.ui; import com.vaadin.data.Property; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; -import com.vaadin.terminal.gwt.client.ui.VTextAreaPaintable; +import com.vaadin.terminal.gwt.client.ui.TextAreaConnector; /** * A text field that supports multi line editing. */ -@ClientWidget(VTextAreaPaintable.class) +@ClientWidget(TextAreaConnector.class) public class TextArea extends AbstractTextField { private static final int DEFAULT_ROWS = 5; diff --git a/src/com/vaadin/ui/TextField.java b/src/com/vaadin/ui/TextField.java index a3d873336c..9b6fd6ada1 100644 --- a/src/com/vaadin/ui/TextField.java +++ b/src/com/vaadin/ui/TextField.java @@ -5,7 +5,7 @@ package com.vaadin.ui; import com.vaadin.data.Property; -import com.vaadin.terminal.gwt.client.ui.VTextFieldPaintable; +import com.vaadin.terminal.gwt.client.ui.TextFieldConnector; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -29,7 +29,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(value = VTextFieldPaintable.class, loadStyle = LoadStyle.EAGER) +@ClientWidget(value = TextFieldConnector.class, loadStyle = LoadStyle.EAGER) public class TextField extends AbstractTextField { /** diff --git a/src/com/vaadin/ui/Tree.java b/src/com/vaadin/ui/Tree.java index 562e1ac533..619f722e23 100644 --- a/src/com/vaadin/ui/Tree.java +++ b/src/com/vaadin/ui/Tree.java @@ -44,8 +44,8 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.ui.TreeConnector; import com.vaadin.terminal.gwt.client.ui.VTree; -import com.vaadin.terminal.gwt.client.ui.VTreePaintable; import com.vaadin.terminal.gwt.client.ui.dd.VLazyInitItemIdentifiers; import com.vaadin.terminal.gwt.client.ui.dd.VTargetInSubtree; import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation; @@ -61,7 +61,7 @@ import com.vaadin.tools.ReflectTools; * @since 3.0 */ @SuppressWarnings({ "serial", "deprecation" }) -@ClientWidget(VTreePaintable.class) +@ClientWidget(TreeConnector.class) public class Tree extends AbstractSelect implements Container.Hierarchical, Action.Container, ItemClickSource, ItemClickNotifier, DragSource, DropTarget { @@ -610,8 +610,8 @@ public class Tree extends AbstractSelect implements Container.Hierarchical, if (itemStyleGenerator != null) { String stylename = itemStyleGenerator.getStyle(itemId); if (stylename != null) { - target.addAttribute( - VTreePaintable.ATTRIBUTE_NODE_STYLE, stylename); + target.addAttribute(TreeConnector.ATTRIBUTE_NODE_STYLE, + stylename); } } @@ -624,11 +624,11 @@ public class Tree extends AbstractSelect implements Container.Hierarchical, } // Adds the attributes - target.addAttribute(VTreePaintable.ATTRIBUTE_NODE_CAPTION, + target.addAttribute(TreeConnector.ATTRIBUTE_NODE_CAPTION, getItemCaption(itemId)); final Resource icon = getItemIcon(itemId); if (icon != null) { - target.addAttribute(VTreePaintable.ATTRIBUTE_NODE_ICON, + target.addAttribute(TreeConnector.ATTRIBUTE_NODE_ICON, getItemIcon(itemId)); } final String key = itemIdMapper.key(itemId); @@ -686,12 +686,11 @@ public class Tree extends AbstractSelect implements Container.Hierarchical, final Action a = i.next(); target.startTag("action"); if (a.getCaption() != null) { - target.addAttribute( - VTreePaintable.ATTRIBUTE_ACTION_CAPTION, + target.addAttribute(TreeConnector.ATTRIBUTE_ACTION_CAPTION, a.getCaption()); } if (a.getIcon() != null) { - target.addAttribute(VTreePaintable.ATTRIBUTE_ACTION_ICON, + target.addAttribute(TreeConnector.ATTRIBUTE_ACTION_ICON, a.getIcon()); } target.addAttribute("key", actionMapper.key(a)); diff --git a/src/com/vaadin/ui/TreeTable.java b/src/com/vaadin/ui/TreeTable.java index 09417e1e16..3dce3d8645 100644 --- a/src/com/vaadin/ui/TreeTable.java +++ b/src/com/vaadin/ui/TreeTable.java @@ -22,7 +22,7 @@ import com.vaadin.data.util.HierarchicalContainer; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; -import com.vaadin.terminal.gwt.client.ui.VTreeTablePaintable; +import com.vaadin.terminal.gwt.client.ui.TreeTableConnector; import com.vaadin.ui.Tree.CollapseEvent; import com.vaadin.ui.Tree.CollapseListener; import com.vaadin.ui.Tree.ExpandEvent; @@ -48,7 +48,7 @@ import com.vaadin.ui.treetable.HierarchicalContainerOrderedWrapper; * share UI state in the container. */ @SuppressWarnings({ "serial" }) -@ClientWidget(VTreeTablePaintable.class) +@ClientWidget(TreeTableConnector.class) public class TreeTable extends Table implements Hierarchical { private static final Logger logger = Logger.getLogger(TreeTable.class @@ -454,7 +454,7 @@ public class TreeTable extends Table implements Hierarchical { Object object = visibleColumns2[i]; if (hierarchyColumnId.equals(object)) { target.addAttribute( - VTreeTablePaintable.ATTRIBUTE_HIERARCHY_COLUMN_INDEX, + TreeTableConnector.ATTRIBUTE_HIERARCHY_COLUMN_INDEX, i); break; } diff --git a/src/com/vaadin/ui/TwinColSelect.java b/src/com/vaadin/ui/TwinColSelect.java index fbdd825a66..2e2fbb53fc 100644 --- a/src/com/vaadin/ui/TwinColSelect.java +++ b/src/com/vaadin/ui/TwinColSelect.java @@ -9,15 +9,15 @@ import java.util.Collection; import com.vaadin.data.Container; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; +import com.vaadin.terminal.gwt.client.ui.TwinColSelectConnector; import com.vaadin.terminal.gwt.client.ui.VTwinColSelect; -import com.vaadin.terminal.gwt.client.ui.VTwinColSelectPaintable; /** * Multiselect component with two lists: left side for available items and right * side for selected items. */ @SuppressWarnings("serial") -@ClientWidget(VTwinColSelectPaintable.class) +@ClientWidget(TwinColSelectConnector.class) public class TwinColSelect extends AbstractSelect { private int columns = 0; diff --git a/src/com/vaadin/ui/Upload.java b/src/com/vaadin/ui/Upload.java index 08a8023ad5..3498eaa794 100644 --- a/src/com/vaadin/ui/Upload.java +++ b/src/com/vaadin/ui/Upload.java @@ -15,7 +15,7 @@ import java.util.Map; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.StreamVariable.StreamingProgressEvent; -import com.vaadin.terminal.gwt.client.ui.VUploadPaintable; +import com.vaadin.terminal.gwt.client.ui.UploadConnector; import com.vaadin.terminal.gwt.server.NoInputStreamException; import com.vaadin.terminal.gwt.server.NoOutputStreamException; import com.vaadin.ui.ClientWidget.LoadStyle; @@ -61,7 +61,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(value = VUploadPaintable.class, loadStyle = LoadStyle.LAZY) +@ClientWidget(value = UploadConnector.class, loadStyle = LoadStyle.LAZY) public class Upload extends AbstractComponent implements Component.Focusable { /** diff --git a/src/com/vaadin/ui/VerticalLayout.java b/src/com/vaadin/ui/VerticalLayout.java index 0c5de43bbd..b067490406 100644 --- a/src/com/vaadin/ui/VerticalLayout.java +++ b/src/com/vaadin/ui/VerticalLayout.java @@ -3,7 +3,7 @@ */ package com.vaadin.ui; -import com.vaadin.terminal.gwt.client.ui.VVerticalLayoutPaintable; +import com.vaadin.terminal.gwt.client.ui.VerticalLayoutConnector; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -19,7 +19,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * @since 5.3 */ @SuppressWarnings("serial") -@ClientWidget(value = VVerticalLayoutPaintable.class, loadStyle = LoadStyle.EAGER) +@ClientWidget(value = VerticalLayoutConnector.class, loadStyle = LoadStyle.EAGER) public class VerticalLayout extends AbstractOrderedLayout { public VerticalLayout() { diff --git a/src/com/vaadin/ui/VerticalSplitPanel.java b/src/com/vaadin/ui/VerticalSplitPanel.java index 46e9d681e8..6cfde788b0 100644 --- a/src/com/vaadin/ui/VerticalSplitPanel.java +++ b/src/com/vaadin/ui/VerticalSplitPanel.java @@ -3,7 +3,7 @@ */ package com.vaadin.ui; -import com.vaadin.terminal.gwt.client.ui.VVerticalSplitPanelPaintable; +import com.vaadin.terminal.gwt.client.ui.VerticalSplitPanelConnector; import com.vaadin.ui.ClientWidget.LoadStyle; /** @@ -23,7 +23,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle; * * */ -@ClientWidget(value = VVerticalSplitPanelPaintable.class, loadStyle = LoadStyle.EAGER) +@ClientWidget(value = VerticalSplitPanelConnector.class, loadStyle = LoadStyle.EAGER) public class VerticalSplitPanel extends AbstractSplitPanel { public VerticalSplitPanel() { diff --git a/src/com/vaadin/ui/Video.java b/src/com/vaadin/ui/Video.java index a2e71b1120..2fc7cbc870 100644 --- a/src/com/vaadin/ui/Video.java +++ b/src/com/vaadin/ui/Video.java @@ -7,7 +7,7 @@ package com.vaadin.ui; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Resource; -import com.vaadin.terminal.gwt.client.ui.VVideoPaintable; +import com.vaadin.terminal.gwt.client.ui.VideoConnector; /** * The Video component translates into an HTML5 <video> element and as @@ -30,7 +30,7 @@ import com.vaadin.terminal.gwt.client.ui.VVideoPaintable; * @author Vaadin Ltd * @since 6.7.0 */ -@ClientWidget(VVideoPaintable.class) +@ClientWidget(VideoConnector.class) public class Video extends AbstractMedia { private Resource poster; @@ -80,7 +80,7 @@ public class Video extends AbstractMedia { public void paintContent(PaintTarget target) throws PaintException { super.paintContent(target); if (getPoster() != null) { - target.addAttribute(VVideoPaintable.ATTR_POSTER, getPoster()); + target.addAttribute(VideoConnector.ATTR_POSTER, getPoster()); } } } diff --git a/src/com/vaadin/ui/Window.java b/src/com/vaadin/ui/Window.java index e6c8642b84..886a14d1c7 100644 --- a/src/com/vaadin/ui/Window.java +++ b/src/com/vaadin/ui/Window.java @@ -23,7 +23,7 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Sizeable; import com.vaadin.terminal.gwt.client.ui.VView; -import com.vaadin.terminal.gwt.client.ui.VWindowPaintable; +import com.vaadin.terminal.gwt.client.ui.WindowConnector; /** * A component that represents an application (browser native) window or a sub @@ -71,7 +71,7 @@ import com.vaadin.terminal.gwt.client.ui.VWindowPaintable; * @since 3.0 */ @SuppressWarnings("serial") -@ClientWidget(VWindowPaintable.class) +@ClientWidget(WindowConnector.class) public class Window extends Panel implements FocusNotifier, BlurNotifier { /** diff --git a/tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java b/tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java index de3312d1a8..685a71ad2a 100644 --- a/tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java +++ b/tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java @@ -38,7 +38,7 @@ public class CustomDDImplementation extends CustomComponent { * Check the @ClientWidget * */ - @ClientWidget(VMyDropTargetPaintable.class) + @ClientWidget(MyDropTargetConnector.class) class MyDropTarget extends AbstractComponent implements DropTarget { public DropHandler getDropHandler() { return new DropHandler() { @@ -76,7 +76,7 @@ public class CustomDDImplementation extends CustomComponent { * operations that are controlled via server side api. * */ - @ClientWidget(VMyDragSourcePaintable.class) + @ClientWidget(MyDragSourceConnector.class) public class MyDragSource extends AbstractComponent implements Component { } diff --git a/tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java b/tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java new file mode 100644 index 0000000000..025a226f72 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java @@ -0,0 +1,27 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.tests.dd; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; + +public class MyDragSourceConnector extends AbstractComponentConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + } + + @Override + protected Widget createWidget() { + return GWT.create(VMyDragSource.class); + } + +} diff --git a/tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java b/tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java new file mode 100644 index 0000000000..dac08039ba --- /dev/null +++ b/tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java @@ -0,0 +1,33 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.tests.dd; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; + +public class MyDropTargetConnector extends AbstractComponentConnector { + + @Override + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + super.updateFromUIDL(uidl, client); + if (!isRealUpdate(uidl)) { + return; + } + getWidget().client = client; + } + + @Override + public VMyDropTarget getWidget() { + return (VMyDropTarget) super.getWidget(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VMyDropTarget.class); + } + +} diff --git a/tests/testbench/com/vaadin/tests/dd/VMyDragSourcePaintable.java b/tests/testbench/com/vaadin/tests/dd/VMyDragSourcePaintable.java deleted file mode 100644 index b17c2230f6..0000000000 --- a/tests/testbench/com/vaadin/tests/dd/VMyDragSourcePaintable.java +++ /dev/null @@ -1,27 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.tests.dd; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; - -public class VMyDragSourcePaintable extends AbstractComponentConnector { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - } - - @Override - protected Widget createWidget() { - return GWT.create(VMyDragSource.class); - } - -} diff --git a/tests/testbench/com/vaadin/tests/dd/VMyDropTargetPaintable.java b/tests/testbench/com/vaadin/tests/dd/VMyDropTargetPaintable.java deleted file mode 100644 index 03ba0e4cb1..0000000000 --- a/tests/testbench/com/vaadin/tests/dd/VMyDropTargetPaintable.java +++ /dev/null @@ -1,33 +0,0 @@ -/* -@VaadinApache2LicenseForJavaFiles@ - */ -package com.vaadin.tests.dd; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.ui.Widget; -import com.vaadin.terminal.gwt.client.ApplicationConnection; -import com.vaadin.terminal.gwt.client.UIDL; -import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector; - -public class VMyDropTargetPaintable extends AbstractComponentConnector { - - @Override - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - super.updateFromUIDL(uidl, client); - if (!isRealUpdate(uidl)) { - return; - } - getWidget().client = client; - } - - @Override - public VMyDropTarget getWidget() { - return (VMyDropTarget) super.getWidget(); - } - - @Override - protected Widget createWidget() { - return GWT.create(VMyDropTarget.class); - } - -}