From 25009782651273d7ce8309b01fbaed2288a0ac74 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 25 Aug 2008 08:42:23 +0000 Subject: [PATCH] Fixed #677 disabling components inside a disabled container svn changeset:5252/svn branch:trunk --- .../ITMILL/themes/default/common/common.css | 5 +++- WebContent/ITMILL/themes/default/styles.css | 3 +++ .../toolkit/tests/tickets/Ticket677.java | 20 ++++++++++++--- .../itmill/toolkit/ui/AbstractComponent.java | 24 ++++++++++++++++-- .../ui/AbstractComponentContainer.java | 25 ++++++++++++++++++- 5 files changed, 69 insertions(+), 8 deletions(-) diff --git a/WebContent/ITMILL/themes/default/common/common.css b/WebContent/ITMILL/themes/default/common/common.css index 8ca2f3ad3f..bf5ccf7ace 100644 --- a/WebContent/ITMILL/themes/default/common/common.css +++ b/WebContent/ITMILL/themes/default/common/common.css @@ -51,7 +51,10 @@ .i-disabled { opacity: 0.3; filter: Alpha(opacity=30); -} +} +.i-disabled .i-disabled { + opacity: 1.0; +} .i-required-field-indicator { padding-left:2px; color: red; diff --git a/WebContent/ITMILL/themes/default/styles.css b/WebContent/ITMILL/themes/default/styles.css index 6db00414eb..695fad84b7 100644 --- a/WebContent/ITMILL/themes/default/styles.css +++ b/WebContent/ITMILL/themes/default/styles.css @@ -176,6 +176,9 @@ opacity: 0.3; filter: Alpha(opacity=30); } +.i-disabled .i-disabled { + opacity: 1.0; +} .i-required-field-indicator { padding-left:2px; color: red; diff --git a/src/com/itmill/toolkit/tests/tickets/Ticket677.java b/src/com/itmill/toolkit/tests/tickets/Ticket677.java index f72b42bf19..07c66cfced 100644 --- a/src/com/itmill/toolkit/tests/tickets/Ticket677.java +++ b/src/com/itmill/toolkit/tests/tickets/Ticket677.java @@ -50,16 +50,28 @@ public class Ticket677 extends Application { innerLayout1.setSpacing(true); panel.addComponent(innerLayout1); - innerLayout1.addComponent(new TextField( - "TextField inside orderedLayout")); - innerLayout1.addComponent(new Button("Button inside orderedLayout")); + TextField tf = new TextField("TextField inside orderedLayout"); + tf.setImmediate(true); + innerLayout1.addComponent(tf); + innerLayout1.addComponent(new Button("Button inside orderedLayout", + new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + System.out.println("Clicked " + + event.getButton().getCaption()); + } + + })); innerLayout1.addComponent(new Label("Label inside orderedLayout")); panel.addComponent(new Label("Label 2")); GridLayout innerLayout2 = new GridLayout(3, 3); innerLayout2.setSpacing(true); - innerLayout2.addComponent(new TextField("TextField inside gridLayout")); + tf = new TextField("TextField inside gridLayout"); + tf.setImmediate(true); + innerLayout2.addComponent(tf); innerLayout2.addComponent(new Button("Button inside gridLayout")); innerLayout2.addComponent(new Label("Label inside gridLayout")); panel.addComponent(innerLayout2); diff --git a/src/com/itmill/toolkit/ui/AbstractComponent.java b/src/com/itmill/toolkit/ui/AbstractComponent.java index 634f58dbac..0aa9d74fdf 100644 --- a/src/com/itmill/toolkit/ui/AbstractComponent.java +++ b/src/com/itmill/toolkit/ui/AbstractComponent.java @@ -58,10 +58,15 @@ public abstract class AbstractComponent implements Component, MethodEventSource private Resource icon; /** - * Is the component enable (its normal usage is allowed). + * Is the component enabled (its normal usage is allowed). */ private boolean enabled = true; + /** + * Has the component been disabled by the container + */ + private boolean disabledByContainer = false; + /** * Is the component visible (it is rendered). */ @@ -306,7 +311,7 @@ public abstract class AbstractComponent implements Component, MethodEventSource * here, we use the default documentation from implemented interface. */ public boolean isEnabled() { - return enabled && isVisible(); + return enabled && !disabledByContainer && isVisible(); } /* @@ -320,6 +325,21 @@ public abstract class AbstractComponent implements Component, MethodEventSource } } + /** + * Enable or disable the component by the container. Normally used to + * disable the component when the container is disabled without altering the + * actual enabled state of the component. + * + * @param disabledByContainer + * Should the component be disabled + */ + public void setDisabledByContainer(boolean disabledByContainer) { + if (disabledByContainer != this.disabledByContainer) { + this.disabledByContainer = disabledByContainer; + requestRepaint(); + } + } + /* * Tests if the component is in the immediate mode. Don't add a JavaDoc * comment here, we use the default documentation from implemented diff --git a/src/com/itmill/toolkit/ui/AbstractComponentContainer.java b/src/com/itmill/toolkit/ui/AbstractComponentContainer.java index 93af36d248..bce552e3d9 100644 --- a/src/com/itmill/toolkit/ui/AbstractComponentContainer.java +++ b/src/com/itmill/toolkit/ui/AbstractComponentContainer.java @@ -205,4 +205,27 @@ public abstract class AbstractComponentContainer extends AbstractComponent } } -} + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + + updateComponentDisabledState(!enabled); + } + + public void setDisabledByContainer(boolean disabledByContainer) { + super.setDisabledByContainer(disabledByContainer); + + updateComponentDisabledState(disabledByContainer); + } + + private void updateComponentDisabledState(boolean disabled) { + // Update the disabledByContainer state for all subcomponents + for (Iterator i = getComponentIterator(); i.hasNext();) { + Component c = (Component) i.next(); + if (c instanceof AbstractComponent) { + ((AbstractComponent) c).setDisabledByContainer(disabled); + } + } + + } + +} \ No newline at end of file -- 2.39.5