From c5b9762e794c7f013e33f639b976159bfb284a2e Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Thu, 23 Feb 2012 11:21:42 +0200 Subject: [PATCH] Communicate component style names in shared state (#8304). --- .../terminal/gwt/client/ComponentState.java | 65 +++++++++++++++- .../vaadin/terminal/gwt/client/VCaption.java | 76 +++++++++++++++---- .../terminal/gwt/client/VCaptionWrapper.java | 8 ++ .../client/ui/VAbstractPaintableWidget.java | 6 +- .../ui/VAbstractSplitPanelPaintable.java | 6 +- .../terminal/gwt/client/ui/VAccordion.java | 4 +- .../terminal/gwt/client/ui/VFilterSelect.java | 17 +++-- .../gwt/client/ui/VFilterSelectPaintable.java | 3 +- .../terminal/gwt/client/ui/VFormLayout.java | 16 ++-- .../terminal/gwt/client/ui/VMenuBar.java | 2 +- .../gwt/client/ui/VMenuBarPaintable.java | 6 +- .../terminal/gwt/client/ui/VNotification.java | 2 +- .../gwt/client/ui/VPanelPaintable.java | 27 +++---- .../gwt/client/ui/VPopupViewPaintable.java | 5 +- .../gwt/client/ui/VSliderPaintable.java | 5 +- .../terminal/gwt/client/ui/VTabsheet.java | 13 ++-- .../gwt/client/ui/VTabsheetPaintable.java | 2 +- .../gwt/client/ui/VTreePaintable.java | 2 +- .../gwt/client/ui/VViewPaintable.java | 9 +-- src/com/vaadin/ui/AbstractComponent.java | 16 ++-- 20 files changed, 200 insertions(+), 90 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ComponentState.java b/src/com/vaadin/terminal/gwt/client/ComponentState.java index ac478cd1d3..6006086d6a 100644 --- a/src/com/vaadin/terminal/gwt/client/ComponentState.java +++ b/src/com/vaadin/terminal/gwt/client/ComponentState.java @@ -18,6 +18,9 @@ public class ComponentState extends SharedState { private String width = ""; private boolean readOnly = false; private boolean immediate = false; + private String style = ""; + + // TODO more fields to move here: disabled, caption and description /** * Returns the component height as set by the server. @@ -95,22 +98,82 @@ public class ComponentState extends SharedState { return "".equals(getWidth()); } + /** + * Returns true if the component is in read-only mode. + * + * @see Component.isReadOnly() + * + * @return true if the component is in read-only mode + */ public boolean isReadOnly() { return readOnly; } + /** + * Sets or resets the read-only mode for a component. + * + * @see Component.setReadOnly() + * + * @param readOnly + * new mode for the component + */ public void setReadOnly(boolean readOnly) { this.readOnly = readOnly; } + /** + * Returns true if the component is in immediate mode. + * + * @see VariableOwner.isImmediate() + * + * @return true if the component is in immediate mode + */ public boolean isImmediate() { return immediate; } + /** + * Sets or resets the immediate mode for a component. + * + * @see VariableOwner.setImmediate() + * + * @param immediate + * new mode for the component + */ public void setImmediate(boolean immediate) { this.immediate = immediate; } - // TODO more fields to move here: style, disabled, caption and description + /** + * Returns the component styles as set by the server, as a space separated + * string. + * + * @return component styles as defined by the server, not null + */ + public String getStyle() { + if (style == null) { + return ""; + } + return style; + } + + /** + * Sets the component styles as a space separated string. + * + * @param style + * component styles as a space separated string, not null + */ + public void setStyle(String style) { + this.style = style; + } + + /** + * Returns true if the component has user-defined styles. + * + * @return true if the component has user-defined styles + */ + public boolean hasStyles() { + return !"".equals(getStyle()); + } } diff --git a/src/com/vaadin/terminal/gwt/client/VCaption.java b/src/com/vaadin/terminal/gwt/client/VCaption.java index 756fa71b6a..5a15478ba6 100644 --- a/src/com/vaadin/terminal/gwt/client/VCaption.java +++ b/src/com/vaadin/terminal/gwt/client/VCaption.java @@ -36,11 +36,33 @@ public class VCaption extends HTML { private static final String CLASSNAME_CLEAR = CLASSNAME + "-clearelem"; /** + * Creates a caption that is not linked to a {@link VPaintableWidget}. + * + * When using this constructor, {@link #getOwner()} returns null. + * + * @param client + * ApplicationConnection + * @deprecated all captions should be associated with a paintable widget and + * be updated from shared state, not UIDL + */ + @Deprecated + public VCaption(ApplicationConnection client) { + super(); + this.client = client; + owner = null; + + setStyleName(CLASSNAME); + sinkEvents(VTooltip.TOOLTIP_EVENTS); + + } + + /** + * Creates a caption for a {@link VPaintableWidget}. * * @param component - * optional owner of caption. If not set, getOwner will return - * null + * owner of caption, not null * @param client + * ApplicationConnection */ public VCaption(VPaintableWidget component, ApplicationConnection client) { super(); @@ -72,21 +94,21 @@ public class VCaption extends HTML { // moves it above. placedAfterComponent = true; - String style = CLASSNAME; - if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_STYLE)) { - final String[] styles = uidl.getStringAttribute( - VAbstractPaintableWidget.ATTRIBUTE_STYLE).split(" "); - for (int i = 0; i < styles.length; i++) { - style += " " + CLASSNAME + "-" + styles[i]; + // TODO otherwise, the user should also call updateCaptionWithoutOwner() + if (null != owner) { + String style = CLASSNAME; + if (owner.getState().hasStyles()) { + final String[] styles = owner.getState().getStyle().split(" "); + for (int i = 0; i < styles.length; i++) { + style += " " + CLASSNAME + "-" + styles[i]; + } } + if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_DISABLED)) { + style += " " + ApplicationConnection.DISABLED_CLASSNAME; + } + setStyleName(style); } - if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_DISABLED)) { - style += " " + ApplicationConnection.DISABLED_CLASSNAME; - } - - setStyleName(style); - boolean hasIcon = uidl .hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_ICON); boolean hasText = uidl @@ -162,8 +184,8 @@ public class VCaption extends HTML { captionText = null; } - if (hasDescription) { - if (captionText != null) { + if (null != owner) { + if (hasDescription && captionText != null) { addStyleDependentName("hasdescription"); } else { removeStyleDependentName("hasdescription"); @@ -245,6 +267,28 @@ public class VCaption extends HTML { } + @Deprecated + public void updateCaptionWithoutOwner(UIDL uidl) { + // TODO temporary method, needed because some tabsheet and accordion + // internal captions do not have an owner or shared state. + // Remaining such cases do not use the "style" attribute - see + // Tabsheet.paintContent(). + String style = VCaption.CLASSNAME; + if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_DISABLED)) { + style += " " + ApplicationConnection.DISABLED_CLASSNAME; + } + setStyleName(style); + boolean hasDescription = uidl + .hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_DESCRIPTION); + if (hasDescription) { + if (captionText != null) { + addStyleDependentName("hasdescription"); + } else { + removeStyleDependentName("hasdescription"); + } + } + } + @Override public void onBrowserEvent(Event event) { super.onBrowserEvent(event); diff --git a/src/com/vaadin/terminal/gwt/client/VCaptionWrapper.java b/src/com/vaadin/terminal/gwt/client/VCaptionWrapper.java index bc1a240aa9..90e1d65b0a 100644 --- a/src/com/vaadin/terminal/gwt/client/VCaptionWrapper.java +++ b/src/com/vaadin/terminal/gwt/client/VCaptionWrapper.java @@ -12,6 +12,14 @@ public class VCaptionWrapper extends FlowPanel { VCaption caption; VPaintableWidget paintable; + /** + * Creates a new caption wrapper panel. + * + * @param toBeWrapped + * paintable that the caption is associated with, not null + * @param client + * ApplicationConnection + */ public VCaptionWrapper(VPaintableWidget toBeWrapped, ApplicationConnection client) { caption = new VCaption(toBeWrapped, client); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java b/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java index d6404b03fc..6be193afe0 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java @@ -33,7 +33,6 @@ public abstract class VAbstractPaintableWidget implements VPaintableWidget { public static final String ATTRIBUTE_ERROR = "error"; public static final String ATTRIBUTE_HIDEERRORS = "hideErrors"; public static final String ATTRIBUTE_DISABLED = "disabled"; - public static final String ATTRIBUTE_STYLE = "style"; private Widget widget; private ApplicationConnection connection; @@ -336,9 +335,8 @@ public abstract class VAbstractPaintableWidget implements VPaintableWidget { // add additional styles as css classes, prefixed with component default // stylename - if (uidl.hasAttribute(ATTRIBUTE_STYLE)) { - final String[] styles = uidl.getStringAttribute(ATTRIBUTE_STYLE) - .split(" "); + if (state.hasStyles()) { + final String[] styles = state.getStyle().split(" "); for (int i = 0; i < styles.length; i++) { styleBuf.append(" "); styleBuf.append(primaryStyleName); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanelPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanelPaintable.java index 1e8349b4ad..a255fdbd51 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanelPaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanelPaintable.java @@ -81,9 +81,9 @@ public abstract class VAbstractSplitPanelPaintable extends !uidl.getBooleanAttribute(ATTRIBUTE_DISABLED)); clickEventHandler.handleEventHandlerRegistration(client); - if (uidl.hasAttribute(ATTRIBUTE_STYLE)) { - getWidgetForPaintable().componentStyleNames = uidl - .getStringAttribute(ATTRIBUTE_STYLE).split(" "); + if (getState().hasStyles()) { + getWidgetForPaintable().componentStyleNames = getState().getStyle() + .split(" "); } else { getWidgetForPaintable().componentStyleNames = new String[0]; } diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAccordion.java b/src/com/vaadin/terminal/gwt/client/ui/VAccordion.java index 3e4f21477b..671f0a1c8c 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VAccordion.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VAccordion.java @@ -392,7 +392,7 @@ public class VAccordion extends VTabsheetBase implements public StackItem(UIDL tabUidl) { setElement(DOM.createDiv()); - caption = new VCaption(null, client); + caption = new VCaption(client); caption.addClickHandler(this); super.add(caption, captionNode); DOM.appendChild(captionNode, caption.getElement()); @@ -491,6 +491,8 @@ public class VAccordion extends VTabsheetBase implements public void updateCaption(UIDL uidl) { caption.updateCaption(uidl); + // TODO required because the caption does not have an owner + caption.updateCaptionWithoutOwner(uidl); } public int getWidgetWidth() { diff --git a/src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java b/src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java index f205162769..08d8a39e6e 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java @@ -44,6 +44,7 @@ import com.google.gwt.user.client.ui.SuggestOracle.Suggestion; import com.google.gwt.user.client.ui.TextBox; import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.BrowserInfo; +import com.vaadin.terminal.gwt.client.ComponentState; import com.vaadin.terminal.gwt.client.EventId; import com.vaadin.terminal.gwt.client.Focusable; import com.vaadin.terminal.gwt.client.UIDL; @@ -539,13 +540,17 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, /** * Updates style names in suggestion popup to help theme building. + * + * @param uidl + * UIDL for the whole combo box + * @param componentState + * shared state of the combo box */ - public void updateStyleNames(UIDL uidl) { - if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_STYLE)) { - setStyleName(CLASSNAME + "-suggestpopup"); - final String[] styles = uidl.getStringAttribute( - VAbstractPaintableWidget.ATTRIBUTE_STYLE).split(" "); - for (int i = 0; i < styles.length; i++) { + public void updateStyleNames(UIDL uidl, ComponentState componentState) { + setStyleName(CLASSNAME + "-suggestpopup"); + final String[] styles = componentState.getStyle().split(" "); + for (int i = 0; i < styles.length; i++) { + if (!"".equals(styles[i])) { addStyleDependentName(styles[i]); } } diff --git a/src/com/vaadin/terminal/gwt/client/ui/VFilterSelectPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VFilterSelectPaintable.java index 581baad8f9..67f380a03f 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VFilterSelectPaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VFilterSelectPaintable.java @@ -82,7 +82,8 @@ public class VFilterSelectPaintable extends VAbstractPaintableWidget { getWidgetForPaintable().inputPrompt = ""; } - getWidgetForPaintable().suggestionPopup.updateStyleNames(uidl); + getWidgetForPaintable().suggestionPopup.updateStyleNames(uidl, + getState()); getWidgetForPaintable().allowNewItem = uidl .hasAttribute("allownewitem"); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VFormLayout.java b/src/com/vaadin/terminal/gwt/client/ui/VFormLayout.java index 3e5600e4e6..440c45f90f 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VFormLayout.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VFormLayout.java @@ -21,6 +21,7 @@ import com.google.gwt.user.client.ui.SimplePanel; 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.ComponentState; import com.vaadin.terminal.gwt.client.Container; import com.vaadin.terminal.gwt.client.Focusable; import com.vaadin.terminal.gwt.client.RenderSpace; @@ -58,13 +59,14 @@ public class VFormLayout extends SimplePanel implements Container { * * @param uidl * The uidl to get the stylenames from + * @param state + * shared state of the component * @return An array of stylenames */ - private String[] getStylesFromUIDL(UIDL uidl) { + private String[] getStylesFromUIDL(UIDL uidl, ComponentState state) { List styles = new ArrayList(); - if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_STYLE)) { - String[] stylesnames = uidl.getStringAttribute( - VAbstractPaintableWidget.ATTRIBUTE_STYLE).split(" "); + if (state.hasStyles()) { + String[] stylesnames = state.getStyle().split(" "); for (String name : stylesnames) { styles.add(name); } @@ -235,7 +237,7 @@ public class VFormLayout extends SimplePanel implements Container { final Caption c = widgetToCaption.get(paintable .getWidgetForPaintable()); if (c != null) { - c.updateCaption(uidl); + c.updateCaption(uidl, paintable.getState()); } final ErrorFlag e = widgetToError.get(paintable .getWidgetForPaintable()); @@ -339,11 +341,11 @@ public class VFormLayout extends SimplePanel implements Container { setStyleName(styleName); } - public void updateCaption(UIDL uidl) { + public void updateCaption(UIDL uidl, ComponentState state) { setVisible(!uidl.getBooleanAttribute("invisible")); // Update styles as they might have changed when the caption changed - setStyles(getStylesFromUIDL(uidl)); + setStyles(getStylesFromUIDL(uidl, state)); boolean isEmpty = true; diff --git a/src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java b/src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java index a6bc1f2c4e..0d559b07c4 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java @@ -68,7 +68,7 @@ public class VMenuBar extends SimpleFocusablePanel implements public static final String ATTRIBUTE_ITEM_DESCRIPTION = VAbstractPaintableWidget.ATTRIBUTE_DESCRIPTION; public static final String ATTRIBUTE_ITEM_ICON = VAbstractPaintableWidget.ATTRIBUTE_ICON; public static final String ATTRIBUTE_ITEM_DISABLED = VAbstractPaintableWidget.ATTRIBUTE_DISABLED; - public static final String ATTRIBUTE_ITEM_STYLE = VAbstractPaintableWidget.ATTRIBUTE_STYLE; + public static final String ATTRIBUTE_ITEM_STYLE = "style"; public static final String HTML_CONTENT_ALLOWED = "usehtml"; diff --git a/src/com/vaadin/terminal/gwt/client/ui/VMenuBarPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VMenuBarPaintable.java index ee86ef4e52..83e60a03f5 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VMenuBarPaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VMenuBarPaintable.java @@ -124,10 +124,8 @@ public class VMenuBarPaintable extends VAbstractPaintableWidget { // this is the top-level style that also propagates to items - // any item specific styles are set above in // currentItem.updateFromUIDL(item, client) - if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_STYLE)) { - for (String style : uidl.getStringAttribute( - VAbstractPaintableWidget.ATTRIBUTE_STYLE) - .split(" ")) { + if (getState().hasStyles()) { + for (String style : getState().getStyle().split(" ")) { currentMenu.addStyleDependentName(style); } } diff --git a/src/com/vaadin/terminal/gwt/client/ui/VNotification.java b/src/com/vaadin/terminal/gwt/client/ui/VNotification.java index 1276c1612c..8f8bdb09f6 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VNotification.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VNotification.java @@ -56,7 +56,7 @@ public class VNotification extends VOverlay { private ArrayList listeners; private static final int TOUCH_DEVICE_IDLE_DELAY = 1000; - public static final String ATTRIBUTE_NOTIFICATION_STYLE = VAbstractPaintableWidget.ATTRIBUTE_STYLE; + public static final String ATTRIBUTE_NOTIFICATION_STYLE = "style"; public static final String ATTRIBUTE_NOTIFICATION_CAPTION = VAbstractPaintableWidget.ATTRIBUTE_CAPTION; public static final String ATTRIBUTE_NOTIFICATION_MESSAGE = "message"; public static final String ATTRIBUTE_NOTIFICATION_ICON = VAbstractPaintableWidget.ATTRIBUTE_ICON; diff --git a/src/com/vaadin/terminal/gwt/client/ui/VPanelPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VPanelPaintable.java index ce1c1f2482..24e3c32c24 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VPanelPaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VPanelPaintable.java @@ -60,27 +60,24 @@ public class VPanelPaintable extends VAbstractPaintableWidgetContainer { // Add proper stylenames for all elements. This way we can prevent // unwanted CSS selector inheritance. - if (uidl.hasAttribute(ATTRIBUTE_STYLE)) { - final String[] styles = uidl - .getStringAttribute(ATTRIBUTE_STYLE).split(" "); - 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; + 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]; } - getWidgetForPaintable().captionNode.setClassName(captionClass); - getWidgetForPaintable().contentNode.setClassName(contentClass); - getWidgetForPaintable().bottomDecoration - .setClassName(decoClass); - } + getWidgetForPaintable().captionNode.setClassName(captionClass); + getWidgetForPaintable().contentNode.setClassName(contentClass); + getWidgetForPaintable().bottomDecoration.setClassName(decoClass); } // Ensure correct implementation super.updateFromUIDL(uidl, client); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VPopupViewPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VPopupViewPaintable.java index 366e49cd75..7b76b78786 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VPopupViewPaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VPopupViewPaintable.java @@ -53,9 +53,8 @@ public class VPopupViewPaintable extends VAbstractPaintableWidgetContainer { // showPopupOnTop(popup, hostReference); getWidgetForPaintable().preparePopup(getWidgetForPaintable().popup); getWidgetForPaintable().popup.updateFromUIDL(popupUIDL, client); - if (uidl.hasAttribute(ATTRIBUTE_STYLE)) { - final String[] styles = uidl - .getStringAttribute(ATTRIBUTE_STYLE).split(" "); + if (getState().hasStyles()) { + final String[] styles = getState().getStyle().split(" "); final StringBuffer styleBuf = new StringBuffer(); final String primaryName = getWidgetForPaintable().popup .getStylePrimaryName(); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VSliderPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VSliderPaintable.java index e119bfec5c..42c9f55b99 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VSliderPaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VSliderPaintable.java @@ -32,10 +32,7 @@ public class VSliderPaintable extends VAbstractPaintableWidget { getWidgetForPaintable().vertical = uidl.hasAttribute("vertical"); // TODO should these style names be used? - String style = ""; - if (uidl.hasAttribute(ATTRIBUTE_STYLE)) { - style = uidl.getStringAttribute(ATTRIBUTE_STYLE); - } + String style = getState().getStyle(); if (getWidgetForPaintable().vertical) { getWidgetForPaintable().addStyleName( diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java index ccd2b287a4..ac0b3b05eb 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java @@ -23,6 +23,7 @@ import com.google.gwt.user.client.ui.SimplePanel; 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.ComponentState; import com.vaadin.terminal.gwt.client.RenderInformation; import com.vaadin.terminal.gwt.client.RenderSpace; import com.vaadin.terminal.gwt.client.TooltipInfo; @@ -191,7 +192,7 @@ public class VTabsheet extends VTabsheetBase { private ApplicationConnection client; TabCaption(Tab tab, ApplicationConnection client) { - super(null, client); + super(client); this.client = client; this.tab = tab; } @@ -215,6 +216,9 @@ public class VTabsheet extends VTabsheetBase { boolean ret = super.updateCaption(uidl); + // TODO required because the caption does not have an owner + updateCaptionWithoutOwner(uidl); + setClosable(uidl.hasAttribute("closable")); return ret; @@ -635,12 +639,11 @@ public class VTabsheet extends VTabsheetBase { return scrollerIndex > index; } - void handleStyleNames(UIDL uidl) { + void handleStyleNames(UIDL uidl, ComponentState state) { // Add proper stylenames for all elements (easier to prevent unwanted // style inheritance) - if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_STYLE)) { - final String style = uidl - .getStringAttribute(VAbstractPaintableWidget.ATTRIBUTE_STYLE); + if (state.hasStyles()) { + final String style = state.getStyle(); if (currentStyle != style) { currentStyle = style; final String[] styles = style.split(" "); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTabsheetPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTabsheetPaintable.java index 29e3e3d95c..2b3e38576b 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTabsheetPaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTabsheetPaintable.java @@ -19,7 +19,7 @@ public class VTabsheetPaintable extends VTabsheetBasePaintable { if (isRealUpdate(uidl)) { // Handle stylename changes before generics (might affect size // calculations) - getWidgetForPaintable().handleStyleNames(uidl); + getWidgetForPaintable().handleStyleNames(uidl, getState()); } super.updateFromUIDL(uidl, client); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTreePaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VTreePaintable.java index 7ee67df69c..05c9d4c4cd 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTreePaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTreePaintable.java @@ -14,7 +14,7 @@ import com.vaadin.terminal.gwt.client.ui.VTree.TreeNode; public class VTreePaintable extends VAbstractPaintableWidget { - public static final String ATTRIBUTE_NODE_STYLE = VAbstractPaintableWidget.ATTRIBUTE_STYLE; + public static final String ATTRIBUTE_NODE_STYLE = "style"; public static final String ATTRIBUTE_NODE_CAPTION = VAbstractPaintableWidget.ATTRIBUTE_CAPTION; public static final String ATTRIBUTE_NODE_ICON = VAbstractPaintableWidget.ATTRIBUTE_ICON; diff --git a/src/com/vaadin/terminal/gwt/client/ui/VViewPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VViewPaintable.java index 65c7bd2635..a994d1dc50 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VViewPaintable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VViewPaintable.java @@ -53,11 +53,10 @@ public class VViewPaintable extends VAbstractPaintableWidgetContainer { } else { getWidgetForPaintable().theme = newTheme; } - if (uidl.hasAttribute(ATTRIBUTE_STYLE)) { - getWidgetForPaintable().setStyleName( - getWidgetForPaintable().getStylePrimaryName() + " " - + uidl.getStringAttribute(ATTRIBUTE_STYLE)); - } + // this also implicitly removes old styles + getWidgetForPaintable().setStyleName( + getWidgetForPaintable().getStylePrimaryName() + " " + + getState().getStyle()); clickEventHandler.handleEventHandlerRegistration(client); diff --git a/src/com/vaadin/ui/AbstractComponent.java b/src/com/vaadin/ui/AbstractComponent.java index 0a2914b8aa..ce732cdf0a 100644 --- a/src/com/vaadin/ui/AbstractComponent.java +++ b/src/com/vaadin/ui/AbstractComponent.java @@ -771,11 +771,8 @@ public abstract class AbstractComponent implements Component, MethodEventSource if (isVisible()) { // width and height are only in shared state - if (styles != null && styles.size() > 0) { - target.addAttribute( - VAbstractPaintableWidget.ATTRIBUTE_STYLE, - getStyle()); - } + // TODO probably can remove some of these (caption, icon, ...) + // once all the VCaption related code has been updated if (!isEnabled()) { target.addAttribute( VAbstractPaintableWidget.ATTRIBUTE_DISABLED, true); @@ -897,15 +894,12 @@ public abstract class AbstractComponent implements Component, MethodEventSource sharedState.setImmediate(isImmediate()); sharedState.setReadOnly(isReadOnly()); - // if (getCaption() != null) { - // state.put(ComponentState.STATE_CAPTION, getCaption()); - // } + sharedState.setStyle(getStyleName()); // TODO use the rest on the client side + // TODO icon also in shared state - how to convert Resource? - // if (styles != null && styles.size() > 0) { - // state.put(ComponentState.STATE_STYLE, getStyle()); - // } + // sharedState.setCaption(getCaption()); // if (!isEnabled()) { // state.put(ComponentState.STATE_DISABLED, true); // } -- 2.39.5