]> source.dussan.org Git - vaadin-framework.git/commitdiff
Communicate disabled flag in shared state (#8304).
authorHenri Sara <hesara@vaadin.com>
Thu, 23 Feb 2012 10:34:50 +0000 (12:34 +0200)
committerHenri Sara <hesara@vaadin.com>
Thu, 23 Feb 2012 10:34:50 +0000 (12:34 +0200)
23 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/VAbstractPaintableWidget.java
src/com/vaadin/terminal/gwt/client/ui/VAbstractSplitPanelPaintable.java
src/com/vaadin/terminal/gwt/client/ui/VAccordion.java
src/com/vaadin/terminal/gwt/client/ui/VDateFieldPaintable.java
src/com/vaadin/terminal/gwt/client/ui/VFilterSelectPaintable.java
src/com/vaadin/terminal/gwt/client/ui/VFormLayout.java
src/com/vaadin/terminal/gwt/client/ui/VLinkPaintable.java
src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java
src/com/vaadin/terminal/gwt/client/ui/VMenuBarPaintable.java
src/com/vaadin/terminal/gwt/client/ui/VOptionGroup.java
src/com/vaadin/terminal/gwt/client/ui/VOptionGroupBasePaintable.java
src/com/vaadin/terminal/gwt/client/ui/VProgressIndicatorPaintable.java
src/com/vaadin/terminal/gwt/client/ui/VScrollTablePaintable.java
src/com/vaadin/terminal/gwt/client/ui/VSliderPaintable.java
src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java
src/com/vaadin/terminal/gwt/client/ui/VTabsheetBasePaintable.java
src/com/vaadin/terminal/gwt/client/ui/VTreePaintable.java
src/com/vaadin/terminal/gwt/client/ui/VUploadPaintable.java
src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextAreaPaintable.java
src/com/vaadin/ui/AbstractComponent.java
src/com/vaadin/ui/TabSheet.java

index 6006086d6a3b68868993ca1d4c2fb5641dcbc66c..6a228c0564a92002f0cc3c52c71161b85a268646 100644 (file)
@@ -19,8 +19,9 @@ public class ComponentState extends SharedState {
     private boolean readOnly = false;
     private boolean immediate = false;
     private String style = "";
+    private boolean disabled = false;
 
-    // TODO more fields to move here: disabled, caption and description
+    // TODO more fields to move here: caption and description
 
     /**
      * Returns the component height as set by the server.
@@ -101,7 +102,7 @@ public class ComponentState extends SharedState {
     /**
      * Returns true if the component is in read-only mode.
      * 
-     * @see Component.isReadOnly()
+     * @see com.vaadin.ui.Component#isReadOnly()
      * 
      * @return true if the component is in read-only mode
      */
@@ -112,7 +113,7 @@ public class ComponentState extends SharedState {
     /**
      * Sets or resets the read-only mode for a component.
      * 
-     * @see Component.setReadOnly()
+     * @see com.vaadin.ui.Component#setReadOnly()
      * 
      * @param readOnly
      *            new mode for the component
@@ -124,7 +125,7 @@ public class ComponentState extends SharedState {
     /**
      * Returns true if the component is in immediate mode.
      * 
-     * @see VariableOwner.isImmediate()
+     * @see com.vaadin.terminal.VariableOwner#isImmediate()
      * 
      * @return true if the component is in immediate mode
      */
@@ -135,7 +136,7 @@ public class ComponentState extends SharedState {
     /**
      * Sets or resets the immediate mode for a component.
      * 
-     * @see VariableOwner.setImmediate()
+     * @see com.vaadin.terminal.VariableOwner#setImmediate()
      * 
      * @param immediate
      *            new mode for the component
@@ -176,4 +177,27 @@ public class ComponentState extends SharedState {
         return !"".equals(getStyle());
     }
 
+    /**
+     * Returns true if the component is disabled.
+     * 
+     * @see com.vaadin.ui.Component#isEnabled()
+     * 
+     * @return true if the component is disabled
+     */
+    public boolean isDisabled() {
+        return disabled;
+    }
+
+    /**
+     * Disables or enables the component.
+     * 
+     * @see com.vaadin.ui.Component#setEnabled(boolean)
+     * 
+     * @param disabled
+     *            new mode for the component
+     */
+    public void setDisabled(boolean disabled) {
+        this.disabled = disabled;
+    }
+
 }
index 5a15478ba6fd41f8e074bfa29b36e5ff873e06dd..d6af82ef28340afca6459b194ab9038ec8a898d5 100644 (file)
@@ -103,7 +103,7 @@ public class VCaption extends HTML {
                     style += " " + CLASSNAME + "-" + styles[i];
                 }
             }
-            if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_DISABLED)) {
+            if (owner.getState().isDisabled()) {
                 style += " " + ApplicationConnection.DISABLED_CLASSNAME;
             }
             setStyleName(style);
@@ -268,18 +268,17 @@ public class VCaption extends HTML {
     }
 
     @Deprecated
-    public void updateCaptionWithoutOwner(UIDL uidl) {
+    public void updateCaptionWithoutOwner(boolean disabled,
+            boolean hasDescription) {
         // 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)) {
+        if (disabled) {
             style += " " + ApplicationConnection.DISABLED_CLASSNAME;
         }
         setStyleName(style);
-        boolean hasDescription = uidl
-                .hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_DESCRIPTION);
         if (hasDescription) {
             if (captionText != null) {
                 addStyleDependentName("hasdescription");
index 6be193afe07044ff90259f5cdd7ebf70eb9ab568..3c331c1ad9c4f7e4c22b76d22ce25018ab5aeec8 100644 (file)
@@ -32,7 +32,6 @@ public abstract class VAbstractPaintableWidget implements VPaintableWidget {
     public static final String ATTRIBUTE_REQUIRED = "required";
     public static final String ATTRIBUTE_ERROR = "error";
     public static final String ATTRIBUTE_HIDEERRORS = "hideErrors";
-    public static final String ATTRIBUTE_DISABLED = "disabled";
 
     private Widget widget;
     private ApplicationConnection connection;
@@ -204,7 +203,7 @@ public abstract class VAbstractPaintableWidget implements VPaintableWidget {
             ((Focusable) getWidgetForPaintable()).setTabIndex(uidl
                     .getIntAttribute("tabindex"));
         }
-        setEnabled(!uidl.getBooleanAttribute(ATTRIBUTE_DISABLED));
+        setEnabled(!getState().isDisabled());
 
         // Style names
         String styleName = getStyleNameFromUIDL(getWidgetForPaintable()
@@ -318,7 +317,7 @@ public abstract class VAbstractPaintableWidget implements VPaintableWidget {
      */
     protected static String getStyleNameFromUIDL(String primaryStyleName,
             UIDL uidl, ComponentState state, boolean field) {
-        boolean enabled = !uidl.getBooleanAttribute(ATTRIBUTE_DISABLED);
+        boolean enabled = !state.isDisabled();
 
         StringBuffer styleBuf = new StringBuffer();
         styleBuf.append(primaryStyleName);
index a255fdbd5163ca1df641b3847d4181267317d1fc..cdbb895f2c8370b4195a737565d392e26f44c6b9 100644 (file)
@@ -77,8 +77,7 @@ public abstract class VAbstractSplitPanelPaintable extends
             getWidgetForPaintable().rendering = false;
             return;
         }
-        getWidgetForPaintable().setEnabled(
-                !uidl.getBooleanAttribute(ATTRIBUTE_DISABLED));
+        getWidgetForPaintable().setEnabled(!getState().isDisabled());
 
         clickEventHandler.handleEventHandlerRegistration(client);
         if (getState().hasStyles()) {
index 671f0a1c8c34c57321924c6ffc360c25f8bace10..6d93e6d6cce538a102d4958bb3b38db1a307ef3a 100644 (file)
@@ -492,7 +492,9 @@ 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);
+            caption.updateCaptionWithoutOwner(
+                    uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DISABLED),
+                    uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DESCRIPTION));
         }
 
         public int getWidgetWidth() {
index ac33712c6e6e514d432bbe1beca721b9e894ad8a..a333a44cce5b1077d1851f7c1e927951489d0799 100644 (file)
@@ -28,8 +28,7 @@ public class VDateFieldPaintable extends VAbstractPaintableWidget {
         getWidgetForPaintable().immediate = getState().isImmediate();
 
         getWidgetForPaintable().readonly = getState().isReadOnly();
-        getWidgetForPaintable().enabled = !uidl
-                .getBooleanAttribute(ATTRIBUTE_DISABLED);
+        getWidgetForPaintable().enabled = !getState().isDisabled();
 
         if (uidl.hasAttribute("locale")) {
             final String locale = uidl.getStringAttribute("locale");
index 67f380a03f75f0571a185e7a11699b497141bd83..4c5389d51f6db1d74915b75d15d3cd77ffefbe47 100644 (file)
@@ -29,8 +29,7 @@ public class VFilterSelectPaintable extends VAbstractPaintableWidget {
         getWidgetForPaintable().paintableId = uidl.getId();
 
         getWidgetForPaintable().readonly = getState().isReadOnly();
-        getWidgetForPaintable().enabled = !uidl
-                .hasAttribute(ATTRIBUTE_DISABLED);
+        getWidgetForPaintable().enabled = !getState().isDisabled();
 
         getWidgetForPaintable().tb.setEnabled(getWidgetForPaintable().enabled);
         getWidgetForPaintable().updateReadOnly();
index 440c45f90f98e255d19ebd8ab703d5da58d9e710..f916dc11057a02bc1a3339764f3459681cba74ec 100644 (file)
@@ -55,15 +55,13 @@ public class VFormLayout extends SimplePanel implements Container {
     }
 
     /**
-     * Parses the stylenames from an uidl
+     * Parses the stylenames from shared state
      * 
-     * @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, ComponentState state) {
+    private String[] getStylesFromState(ComponentState state) {
         List<String> styles = new ArrayList<String>();
         if (state.hasStyles()) {
             String[] stylesnames = state.getStyle().split(" ");
@@ -72,7 +70,7 @@ public class VFormLayout extends SimplePanel implements Container {
             }
         }
 
-        if (uidl.hasAttribute(VAbstractPaintableWidget.ATTRIBUTE_DISABLED)) {
+        if (state.isDisabled()) {
             styles.add(ApplicationConnection.DISABLED_CLASSNAME);
         }
 
@@ -345,7 +343,7 @@ public class VFormLayout extends SimplePanel implements Container {
             setVisible(!uidl.getBooleanAttribute("invisible"));
 
             // Update styles as they might have changed when the caption changed
-            setStyles(getStylesFromUIDL(uidl, state));
+            setStyles(getStylesFromState(state));
 
             boolean isEmpty = true;
 
index 938e20fb91e7956c63da938f3c3c726c61a9c1c3..37f55db621b56aa6293b2bb67b557aff40eec741 100644 (file)
@@ -29,8 +29,7 @@ public class VLinkPaintable extends VAbstractPaintableWidget {
 
         getWidgetForPaintable().client = client;
 
-        getWidgetForPaintable().enabled = uidl.hasAttribute(ATTRIBUTE_DISABLED) ? false
-                : true;
+        getWidgetForPaintable().enabled = !getState().isDisabled();
         getWidgetForPaintable().readonly = getState().isReadOnly();
 
         if (uidl.hasAttribute("name")) {
index 0d559b07c4aea46c997ef5b9db87c08bb9b44148..605fe99eb5fce07adc808954fd13247f94122aff 100644 (file)
@@ -67,7 +67,7 @@ public class VMenuBar extends SimpleFocusablePanel implements
     public static final String ATTRIBUTE_CHECKED = "checked";
     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_DISABLED = "disabled";
     public static final String ATTRIBUTE_ITEM_STYLE = "style";
 
     public static final String HTML_CONTENT_ALLOWED = "usehtml";
index 83e60a03f55e0b0cf3cfb659e5983c4639c4f892..ce0de7512eb4392902e01a1bf02e850b4570275e 100644 (file)
@@ -37,8 +37,7 @@ public class VMenuBarPaintable extends VAbstractPaintableWidget {
         getWidgetForPaintable().openRootOnHover = uidl
                 .getBooleanAttribute(VMenuBar.OPEN_ROOT_MENU_ON_HOWER);
 
-        getWidgetForPaintable().enabled = !uidl
-                .getBooleanAttribute(ATTRIBUTE_DISABLED);
+        getWidgetForPaintable().enabled = !getState().isDisabled();
 
         // For future connections
         getWidgetForPaintable().client = client;
index 413c5a40d097f74a7be95d455b4e65a5b93b1755..737e67735a3da11f119ba0d7103568d09e73d7f7 100644 (file)
@@ -37,7 +37,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
 
     public static final String CLASSNAME = "v-select-optiongroup";
 
-    public static final String ATTRIBUTE_OPTION_DISABLED = VAbstractPaintableWidget.ATTRIBUTE_DISABLED;
+    public static final String ATTRIBUTE_OPTION_DISABLED = "disabled";
 
     protected final Panel panel;
 
index 6b11c8ffe928f2a8c0c7edf8632262f689e8c212..c87d33a28e394bd28d4c5de3197955e75e513dae 100644 (file)
@@ -26,8 +26,7 @@ public abstract class VOptionGroupBasePaintable extends
                 .getStringArrayVariableAsSet("selected");
 
         getWidgetForPaintable().readonly = getState().isReadOnly();
-        getWidgetForPaintable().disabled = uidl
-                .getBooleanAttribute(ATTRIBUTE_DISABLED);
+        getWidgetForPaintable().disabled = getState().isDisabled();
         getWidgetForPaintable().multiselect = "multi".equals(uidl
                 .getStringAttribute("selectmode"));
         getWidgetForPaintable().immediate = getState().isImmediate();
index d91705abe971df81a1db96a1be09954fcb9d0751..804388d95fe2441efec9ee753822773d6c6c8d0e 100644 (file)
@@ -31,7 +31,7 @@ public class VProgressIndicatorPaintable extends VAbstractPaintableWidget {
         if (getWidgetForPaintable().indeterminate) {
             String basename = VProgressIndicator.CLASSNAME + "-indeterminate";
             getWidgetForPaintable().addStyleName(basename);
-            if (uidl.getBooleanAttribute(ATTRIBUTE_DISABLED)) {
+            if (getState().isDisabled()) {
                 getWidgetForPaintable().addStyleName(basename + "-disabled");
             } else {
                 getWidgetForPaintable().removeStyleName(basename + "-disabled");
@@ -47,7 +47,7 @@ public class VProgressIndicatorPaintable extends VAbstractPaintableWidget {
             }
         }
 
-        if (!uidl.getBooleanAttribute(ATTRIBUTE_DISABLED)) {
+        if (!getState().isDisabled()) {
             getWidgetForPaintable().interval = uidl
                     .getIntAttribute("pollinginterval");
             getWidgetForPaintable().poller
index 7bd2fae3374fa36516d8ca54c7e88b8712388f0d..63a02879e8dfffd2c22ea6a9a563a40875224502 100644 (file)
@@ -55,8 +55,7 @@ public class VScrollTablePaintable extends VAbstractPaintableWidgetContainer {
             return;
         }
 
-        getWidgetForPaintable().enabled = !uidl
-                .hasAttribute(ATTRIBUTE_DISABLED);
+        getWidgetForPaintable().enabled = !getState().isDisabled();
 
         if (BrowserInfo.get().isIE8() && !getWidgetForPaintable().enabled) {
             /*
index 42c9f55b99483160627c7d6b1f06ee1f2aff2130..d82645269ccf5fb328eb3799d57a4d4f6eb07b48 100644 (file)
@@ -25,8 +25,7 @@ public class VSliderPaintable extends VAbstractPaintableWidget {
         }
 
         getWidgetForPaintable().immediate = getState().isImmediate();
-        getWidgetForPaintable().disabled = uidl
-                .getBooleanAttribute(ATTRIBUTE_DISABLED);
+        getWidgetForPaintable().disabled = getState().isDisabled();
         getWidgetForPaintable().readonly = getState().isReadOnly();
 
         getWidgetForPaintable().vertical = uidl.hasAttribute("vertical");
index ac0b3b05eb3a34bc6f7b9de58a85dc818543ed4b..399037a8abde64adf11addc553dbb7baabe87f29 100644 (file)
@@ -217,7 +217,9 @@ public class VTabsheet extends VTabsheetBase {
             boolean ret = super.updateCaption(uidl);
 
             // TODO required because the caption does not have an owner
-            updateCaptionWithoutOwner(uidl);
+            updateCaptionWithoutOwner(
+                    uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DISABLED),
+                    uidl.hasAttribute(VTabsheetBasePaintable.ATTRIBUTE_TAB_DESCRIPTION));
 
             setClosable(uidl.hasAttribute("closable"));
 
index 2a04f5fb231e77cb57910dfb1e0a24051ee5ea8c..98f1a305cadc897aefd59ba2c121ce89d50402eb 100644 (file)
@@ -15,8 +15,10 @@ import com.vaadin.terminal.gwt.client.VPaintableWidget;
 public abstract class VTabsheetBasePaintable extends
         VAbstractPaintableWidgetContainer {
 
-    // this needs to match ATTRIBUTE_DISABLED as it is used in building captions
-    public static final String ATTRIBUTE_TAB_DISABLED = VAbstractPaintableWidget.ATTRIBUTE_DISABLED;
+    public static final String ATTRIBUTE_TAB_DISABLED = "disabled";
+    // TODO currently, this needs to match ATTRIBUTE_DESCRIPTION as also used in
+    // captions
+    public static final String ATTRIBUTE_TAB_DESCRIPTION = VAbstractPaintableWidget.ATTRIBUTE_DESCRIPTION;
 
     @Override
     public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
@@ -30,8 +32,7 @@ public abstract class VTabsheetBasePaintable extends
 
         // Update member references
         getWidgetForPaintable().id = uidl.getId();
-        getWidgetForPaintable().disabled = uidl
-                .hasAttribute(ATTRIBUTE_DISABLED);
+        getWidgetForPaintable().disabled = getState().isDisabled();
 
         // Render content
         final UIDL tabs = uidl.getChildUIDL(0);
index 05c9d4c4cd3bd630f22dde12991939231bc30ae2..ba203accc44ae0d3435337790b1463ff54cdc3e3 100644 (file)
@@ -43,8 +43,7 @@ public class VTreePaintable extends VAbstractPaintableWidget {
 
         getWidgetForPaintable().immediate = getState().isImmediate();
 
-        getWidgetForPaintable().disabled = uidl
-                .getBooleanAttribute(ATTRIBUTE_DISABLED);
+        getWidgetForPaintable().disabled = getState().isDisabled();
         getWidgetForPaintable().readonly = getState().isReadOnly();
 
         getWidgetForPaintable().dragMode = uidl.hasAttribute("dragMode") ? uidl
index ca622c35c6fc3d4566807ae34f0bb668e1111198..b44f08abb06a526ce6fc834e21e5849c64630ac8 100644 (file)
@@ -42,7 +42,7 @@ public class VUploadPaintable extends VAbstractPaintableWidget {
         getWidgetForPaintable().fu.setName(getWidgetForPaintable().paintableId
                 + "_file");
 
-        if (uidl.hasAttribute(ATTRIBUTE_DISABLED) || getState().isReadOnly()) {
+        if (getState().isDisabled() || getState().isReadOnly()) {
             getWidgetForPaintable().disableUpload();
         } else if (!uidl.getBooleanAttribute("state")) {
             // Enable the button only if an upload is not in progress
index 4a88fba9c18fa616c60cf51323ca56bee3f16613..1656ea270d36aadd220b5100eb5fe2ab3d844837 100644 (file)
@@ -31,8 +31,7 @@ public class VRichTextAreaPaintable extends VAbstractPaintableWidget implements
             }
         }
         if (isRealUpdate(uidl)) {
-            getWidgetForPaintable().setEnabled(
-                    !uidl.getBooleanAttribute(ATTRIBUTE_DISABLED));
+            getWidgetForPaintable().setEnabled(!getState().isDisabled());
         }
 
         super.updateFromUIDL(uidl, client);
index ce732cdf0a70056bc611b69f7e0cdd44ca086950..69eaa8e449b0db802f8e2008f1fd56bc1468e138 100644 (file)
@@ -773,10 +773,6 @@ public abstract class AbstractComponent implements Component, MethodEventSource
 
                 // 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);
-                }
                 if (getCaption() != null) {
                     target.addAttribute(
                             VAbstractPaintableWidget.ATTRIBUTE_CAPTION,
@@ -893,17 +889,14 @@ public abstract class AbstractComponent implements Component, MethodEventSource
 
         sharedState.setImmediate(isImmediate());
         sharedState.setReadOnly(isReadOnly());
+        sharedState.setDisabled(!isEnabled());
 
         sharedState.setStyle(getStyleName());
 
         // TODO use the rest on the client side
-        // TODO icon also in shared state - how to convert Resource?
 
         // sharedState.setCaption(getCaption());
-        // if (!isEnabled()) {
-        // state.put(ComponentState.STATE_DISABLED, true);
-        // }
-        // // TODO add icon (Resource)
+        // // TODO icon also in shared state - how to convert Resource?
         // if (getDescription() != null && getDescription().length() > 0) {
         // state.put(ComponentState.STATE_DESCRIPTION, getDescription());
         // }
index b7067fb41f572a3b399ec7ad64b0204278fb26c6..de95d13318263d562fa84f48e147a096efd06fca 100644 (file)
@@ -404,7 +404,9 @@ public class TabSheet extends AbstractComponentContainer {
 
             final String description = tab.getDescription();
             if (description != null) {
-                target.addAttribute("description", description);
+                target.addAttribute(
+                        VTabsheetBasePaintable.ATTRIBUTE_TAB_DESCRIPTION,
+                        description);
             }
 
             final ErrorMessage componentError = tab.getComponentError();