diff options
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,11 +58,16 @@ 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). */ private boolean visible = true; @@ -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 |