Disable AND grey out an SWT composite

swt
Fredrik picture Fredrik · Jun 2, 2010 · Viewed 14.7k times · Source

I have a Composite that I want to be able to enable/disable programatically. The Control.setEnabled(boolean enabled) method works fine, but it does not give any visual information that the widget(s) are disabled.

What I would like to do is to have the disabled state mean the widgets are greyed out. Right now they just enter a weird state where the user is unable to click or perform any action on them.

Answer

Fredrik picture Fredrik · Jun 3, 2010

The problem was indeed that I was disabling the composite and not the controls inside it. What I ended up doing was something like this:

public void recursiveSetEnabled(Control ctrl, boolean enabled) {
   if (ctrl instanceof Composite) {
      Composite comp = (Composite) ctrl;
      for (Control c : comp.getChildren())
         recursiveSetEnabled(c, enabled);
   } else {
      ctrl.setEnabled(enabled);
   }
}