]> source.dussan.org Git - vaadin-framework.git/commitdiff
Moved styles list to shared state, replacing the previous String hack.
authorArtur Signell <artur@vaadin.com>
Fri, 9 Mar 2012 14:12:08 +0000 (16:12 +0200)
committerArtur Signell <artur@vaadin.com>
Wed, 14 Mar 2012 13:59:11 +0000 (15:59 +0200)
14 files changed:
src/com/vaadin/terminal/gwt/client/ComponentState.java
src/com/vaadin/terminal/gwt/client/VCaption.java
src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/MenuBarConnector.java
src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/PopupViewConnector.java
src/com/vaadin/terminal/gwt/client/ui/RootConnector.java
src/com/vaadin/terminal/gwt/client/ui/SliderConnector.java
src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanel.java
src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java
src/com/vaadin/terminal/gwt/client/ui/VFormLayout.java
src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java
src/com/vaadin/ui/AbstractComponent.java

index 9a72f7cd80e91bbb1af8222997168e16872e0f51..371b8dc358d44d9a582be81c6ad1534c2ca1b9fc 100644 (file)
@@ -4,6 +4,8 @@
 
 package com.vaadin.terminal.gwt.client;
 
+import java.util.List;
+
 import com.vaadin.terminal.gwt.client.communication.SharedState;
 import com.vaadin.terminal.gwt.client.communication.URLReference;
 import com.vaadin.ui.Component;
@@ -20,7 +22,6 @@ public class ComponentState extends SharedState {
     private String width = "";
     private boolean readOnly = false;
     private boolean immediate = false;
-    private String style = "";
     private boolean enabled = true;
     private String description = "";
     // Note: for the caption, there is a difference between null and an empty
@@ -28,6 +29,7 @@ public class ComponentState extends SharedState {
     private String caption = null;
     private boolean visible = true;
     private URLReference icon = null;
+    private List<String> styles = null;
 
     /**
      * Returns the component height as set by the server.
@@ -151,36 +153,13 @@ public class ComponentState extends SharedState {
         this.immediate = immediate;
     }
 
-    /**
-     * 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());
+        return styles != null && !styles.isEmpty();
     }
 
     /**
@@ -298,4 +277,23 @@ public class ComponentState extends SharedState {
         this.icon = icon;
     }
 
+    /**
+     * Gets the style names for the component.
+     * 
+     * @return A List of style names or null if no styles have been set.
+     */
+    public List<String> getStyles() {
+        return styles;
+    }
+
+    /**
+     * Sets the style names for the component.
+     * 
+     * @param styles
+     *            A list containing style names
+     */
+    public void setStyles(List<String> styles) {
+        this.styles = styles;
+    }
+
 }
index 086a2c7de36a96862aaf3c78ff5326f84c143546..09f26fe8b36bf76c536f485aae68d74f53ac23c1 100644 (file)
@@ -108,9 +108,8 @@ public class VCaption extends HTML {
 
         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];
+            for (String customStyle : owner.getState().getStyles()) {
+                style += " " + CLASSNAME + "-" + customStyle;
             }
         }
         if (!owner.isEnabled()) {
index d5a27d7abfb43115e2b2478cfbba1179cd40d50a..5f0b22261a07542934f371e3d81cae23f5337775 100644 (file)
@@ -362,14 +362,13 @@ public abstract class AbstractComponentConnector extends AbstractConnector
         // add additional styles as css classes, prefixed with component default
         // stylename
         if (state.hasStyles()) {
-            final String[] styles = state.getStyle().split(" ");
-            for (int i = 0; i < styles.length; i++) {
+            for (String style : state.getStyles()) {
                 styleBuf.append(" ");
                 styleBuf.append(primaryStyleName);
                 styleBuf.append("-");
-                styleBuf.append(styles[i]);
+                styleBuf.append(style);
                 styleBuf.append(" ");
-                styleBuf.append(styles[i]);
+                styleBuf.append(style);
             }
         }
 
index ce2820b56debe69803d425f1c50cae186a0a6655..54e9763650339cc44fa0b11cb527613c810a4fa4 100644 (file)
@@ -3,6 +3,8 @@
  */
 package com.vaadin.terminal.gwt.client.ui;
 
+import java.util.LinkedList;
+
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.dom.client.DomEvent.Type;
 import com.google.gwt.event.shared.EventHandler;
@@ -79,9 +81,9 @@ public abstract class AbstractSplitPanelConnector extends
 
         clickEventHandler.handleEventHandlerRegistration(client);
         if (getState().hasStyles()) {
-            getWidget().componentStyleNames = getState().getStyle().split(" ");
+            getWidget().componentStyleNames = getState().getStyles();
         } else {
-            getWidget().componentStyleNames = new String[0];
+            getWidget().componentStyleNames = new LinkedList<String>();
         }
 
         getWidget().setLocked(uidl.getBooleanAttribute("locked"));
index 60d25c5509a045bca9147dbb20a406a9a740be86..da7ad0265b65be6ecf40859e9bc01bb669a2e6cb 100644 (file)
@@ -122,7 +122,7 @@ public class MenuBarConnector extends AbstractComponentConnector implements
                 // any item specific styles are set above in
                 // currentItem.updateFromUIDL(item, client)
                 if (getState().hasStyles()) {
-                    for (String style : getState().getStyle().split(" ")) {
+                    for (String style : getState().getStyles()) {
                         currentMenu.addStyleDependentName(style);
                     }
                 }
index c54b9fbf60d37ea40586d1a082a1814adffadd3c..92c504da97d7cba7c251aea0bdb9eca8ae0f4dae 100644 (file)
@@ -82,11 +82,10 @@ public class PanelConnector extends AbstractComponentContainerConnector
             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];
+                for (String style : getState().getStyles()) {
+                    captionClass += " " + captionBaseClass + "-" + style;
+                    contentClass += " " + contentBaseClass + "-" + style;
+                    decoClass += " " + decoBaseClass + "-" + style;
                 }
             }
             getWidget().captionNode.setClassName(captionClass);
index 328aa0aa6ddc5252ef3f3fd0325aa319766f2f02..f1b6c4bbfa9424c504136b2db3979de064e39504 100644 (file)
@@ -54,16 +54,15 @@ public class PopupViewConnector extends AbstractComponentContainerConnector {
             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++) {
+                for (String style : getState().getStyles()) {
                     styleBuf.append(" ");
                     styleBuf.append(primaryName);
                     styleBuf.append("-");
-                    styleBuf.append(styles[i]);
+                    styleBuf.append(style);
                 }
                 getWidget().popup.setStyleName(styleBuf.toString());
             } else {
index a42b797af835a8595a6c31dedc0f6f1a490c1d71..37afeafce7f92439c52ba7bd604283c22e93cf6b 100644 (file)
@@ -57,10 +57,14 @@ public class RootConnector extends AbstractComponentContainerConnector
             getWidget().theme = newTheme;
         }
         // this also implicitly removes old styles
-        getWidget()
-                .setStyleName(
-                        getWidget().getStylePrimaryName() + " "
-                                + getState().getStyle());
+        String styles = "";
+        styles += getWidget().getStylePrimaryName() + " ";
+        if (getState().hasStyles()) {
+            for (String style : getState().getStyles()) {
+                styles += style + " ";
+            }
+        }
+        getWidget().setStyleName(styles.trim());
 
         clickEventHandler.handleEventHandlerRegistration(client);
 
index dcea66ca948c9a71ff24b3d6b62481e4d688191f..4e299c947fa4c09d4ef4c0f3269450cc59b30ca4 100644 (file)
@@ -30,8 +30,7 @@ public class SliderConnector extends AbstractFieldConnector {
 
         getWidget().vertical = uidl.hasAttribute("vertical");
 
-        // TODO should these style names be used?
-        String style = getState().getStyle();
+        // TODO should style names be used?
 
         if (getWidget().vertical) {
             getWidget().addStyleName(VSlider.CLASSNAME + "-vertical");
index da5cef252b3df2442f683b35d148105f7e3dd03a..046b2fff915d388836f63dcfcb38af3965fa5d64 100644 (file)
@@ -4,6 +4,8 @@
 
 package com.vaadin.terminal.gwt.client.ui;
 
+import java.util.List;
+
 import com.google.gwt.dom.client.Node;
 import com.google.gwt.dom.client.Style;
 import com.google.gwt.event.dom.client.TouchCancelEvent;
@@ -66,7 +68,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
 
     private boolean positionReversed = false;
 
-    String[] componentStyleNames;
+    List<String> componentStyleNames;
 
     private Element draggingCurtain;
 
@@ -603,13 +605,12 @@ public class VAbstractSplitPanel extends ComplexPanel {
             splitterStyle = CLASSNAME + splitterSuffix + "-locked";
             lockedSuffix = "-locked";
         }
-        for (int i = 0; i < componentStyleNames.length; i++) {
-            splitterStyle += " " + CLASSNAME + splitterSuffix + "-"
-                    + componentStyleNames[i] + lockedSuffix;
-            firstStyle += " " + CLASSNAME + firstContainerSuffix + "-"
-                    + componentStyleNames[i];
+        for (String style : componentStyleNames) {
+            splitterStyle += " " + CLASSNAME + splitterSuffix + "-" + style
+                    + lockedSuffix;
+            firstStyle += " " + CLASSNAME + firstContainerSuffix + "-" + style;
             secondStyle += " " + CLASSNAME + secondContainerSuffix + "-"
-                    + componentStyleNames[i];
+                    + style;
         }
         DOM.setElementProperty(splitter, "className", splitterStyle);
         DOM.setElementProperty(firstContainer, "className", firstStyle);
index 303b29fe8f2c6b27c91a7982026c1eeec27c7c99..7fdcaff47ced67bed8745d953ac154d89210a78a 100644 (file)
@@ -552,10 +552,11 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
          */
         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]);
+            if (componentState.hasStyles()) {
+                for (String style : componentState.getStyles()) {
+                    if (!"".equals(style)) {
+                        addStyleDependentName(style);
+                    }
                 }
             }
         }
index 9beef5d2dfd9542e6ebe0fcfbf7d8889b9657e53..10413684dd63d029be0a751266b96a4b3e7c1fb7 100644 (file)
@@ -56,8 +56,7 @@ public class VFormLayout extends SimplePanel {
     private String[] getStylesFromState(ComponentState state, boolean enabled) {
         List<String> styles = new ArrayList<String>();
         if (state.hasStyles()) {
-            String[] stylesnames = state.getStyle().split(" ");
-            for (String name : stylesnames) {
+            for (String name : state.getStyles()) {
                 styles.add(name);
             }
         }
index 7b166ee25fa7455633a56a8eda0e092ff5ba3450..b30483c2cdb09c4e9ec5a4567f109856fea27bda 100644 (file)
@@ -5,6 +5,7 @@
 package com.vaadin.terminal.gwt.client.ui;
 
 import java.util.Iterator;
+import java.util.List;
 
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.dom.client.DivElement;
@@ -713,21 +714,20 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
         // Add proper stylenames for all elements (easier to prevent unwanted
         // style inheritance)
         if (state.hasStyles()) {
-            final String style = state.getStyle();
-            if (currentStyle != style) {
-                currentStyle = style;
-                final String[] styles = style.split(" ");
+            final List<String> styles = state.getStyles();
+            if (!currentStyle.equals(styles.toString())) {
+                currentStyle = styles.toString();
                 final String tabsBaseClass = TABS_CLASSNAME;
                 String tabsClass = tabsBaseClass;
                 final String contentBaseClass = CLASSNAME + "-content";
                 String contentClass = contentBaseClass;
                 final String decoBaseClass = CLASSNAME + "-deco";
                 String decoClass = decoBaseClass;
-                for (int i = 0; i < styles.length; i++) {
-                    tb.addStyleDependentName(styles[i]);
-                    tabsClass += " " + tabsBaseClass + "-" + styles[i];
-                    contentClass += " " + contentBaseClass + "-" + styles[i];
-                    decoClass += " " + decoBaseClass + "-" + styles[i];
+                for (String style : styles) {
+                    tb.addStyleDependentName(style);
+                    tabsClass += " " + tabsBaseClass + "-" + style;
+                    contentClass += " " + contentBaseClass + "-" + style;
+                    decoClass += " " + decoBaseClass + "-" + style;
                 }
                 DOM.setElementProperty(tabs, "className", tabsClass);
                 DOM.setElementProperty(contentNode, "className", contentClass);
index 06a15fabf8c1da938fa89d904d98a6d17d779b63..7e8ee0a068a77c5ca70e7866a370dbe0bdfad144 100644 (file)
@@ -59,11 +59,6 @@ public abstract class AbstractComponent implements Component, MethodEventSource
 
     /* Private members */
 
-    /**
-     * Style names.
-     */
-    private ArrayList<String> styles;
-
     /**
      * Application specific data object. The component does not use or modify
      * this.
@@ -206,8 +201,9 @@ public abstract class AbstractComponent implements Component, MethodEventSource
      */
     public String getStyleName() {
         String s = "";
-        if (styles != null) {
-            for (final Iterator<String> it = styles.iterator(); it.hasNext();) {
+        if (getState().getStyles() != null) {
+            for (final Iterator<String> it = getState().getStyles().iterator(); it
+                    .hasNext();) {
                 s += it.next();
                 if (it.hasNext()) {
                     s += " ";
@@ -223,13 +219,14 @@ public abstract class AbstractComponent implements Component, MethodEventSource
      */
     public void setStyleName(String style) {
         if (style == null || "".equals(style)) {
-            styles = null;
+            getState().setStyles(null);
             requestRepaint();
             return;
         }
-        if (styles == null) {
-            styles = new ArrayList<String>();
+        if (getState().getStyles() == null) {
+            getState().setStyles(new ArrayList<String>());
         }
+        List<String> styles = getState().getStyles();
         styles.clear();
         String[] styleParts = style.split(" +");
         for (String part : styleParts) {
@@ -244,9 +241,10 @@ public abstract class AbstractComponent implements Component, MethodEventSource
         if (style == null || "".equals(style)) {
             return;
         }
-        if (styles == null) {
-            styles = new ArrayList<String>();
+        if (getState().getStyles() == null) {
+            getState().setStyles(new ArrayList<String>());
         }
+        List<String> styles = getState().getStyles();
         if (!styles.contains(style)) {
             styles.add(style);
             requestRepaint();
@@ -254,11 +252,11 @@ public abstract class AbstractComponent implements Component, MethodEventSource
     }
 
     public void removeStyleName(String style) {
-        if (styles != null) {
+        if (getState().getStyles() != null) {
             String[] styleParts = style.split(" +");
             for (String part : styleParts) {
                 if (part.length() > 0) {
-                    styles.remove(part);
+                    getState().getStyles().remove(part);
                 }
             }
             requestRepaint();
@@ -813,8 +811,6 @@ public abstract class AbstractComponent implements Component, MethodEventSource
         if (null == sharedState) {
             sharedState = createState();
         }
-        // basic state: caption, size, enabled, ...
-
         // TODO This logic should be on the client side and the state should
         // simply be a data object with "width" and "height".
         if (getHeight() >= 0
@@ -833,12 +829,6 @@ public abstract class AbstractComponent implements Component, MethodEventSource
             sharedState.setWidth("");
         }
 
-        // TODO This should be an array in state and the logic for converting
-        // array -> class name should be on the client side
-        sharedState.setStyle(getStyleName());
-
-        // TODO icon also in shared state - how to convert Resource?
-
         return sharedState;
     }