aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/ITMILL/themes/default/common/common.css5
-rw-r--r--WebContent/ITMILL/themes/default/styles.css3
-rw-r--r--src/com/itmill/toolkit/tests/tickets/Ticket677.java20
-rw-r--r--src/com/itmill/toolkit/ui/AbstractComponent.java24
-rw-r--r--src/com/itmill/toolkit/ui/AbstractComponentContainer.java25
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