Zac has posted 1 posts at DZone. View Full User Profile

A class for adding "standard" hierarchical selection behavior to your CheckboxTreeViewer

12.22.2011
| 3739 views |
  • submit to reddit

We've all seen this in numerous applications: checking a node in a checkbox tree widget selects all descendants and grays out all ancestors. Similarly, unchecking a node recursively executes the same logic in reverse. As a familiar example, the Resource Working Set dialog comes to mind (org.eclipse.ui.internal.dialogs.ResourceWorkingSetPage):



In fact, this behavior is so commonplace that if you've never used the JFace CheckboxTreeViewer class before, you might expect it to implement this behavior by default. However, this is not the case.

After reimplementing this behavior repeatedly in my applications, I finally made a simple helper class to make this process easier. To add this behavior to your CheckboxTreeViewer, simply add the following code, before setting the viewer input:

CheckboxTreeSelectionHelper.attach(checkboxTreeViewer,myContentProvider);

Make sure your content provider implements getParent(), otherwise ancestor updates won't work correctly.

I've attached the helper class along with a complete example application. Hopefully this will make it easier for you to implement this commonplace checkbox tree behavior in your applications.

A word of caution: this code is provided as-is and has not undergone extensive testing. Please post any bug fixes or enhancements here.

Helper class: CheckboxTreeSelectionHelper.java
Example app: CheckboxTreeSelectionHelperTestDialog.java
5
Your rating: None Average: 5 (3 votes)
Published at DZone with permission of its author, Zac Wolfe.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Ash Mughal replied on Fri, 2011/12/23 - 1:59pm

Hi Zac,

Very nice article on "A class for adding "standard" hierarchical selection behavior to your CheckboxTreeViewer".

It was really helpful to understand basics of CheckboxTreeViewer.

Also can you please share your experiences in rendering of these check boxes?

 

Zac Wolfe replied on Fri, 2011/12/23 - 4:10pm in response to: Ash Mughal

Thanks for the comment Ash. Actually the rendering of the checkboxes is handled by the CheckboxTreeViewer, or more specifically, by the underlying SWT Tree type.

I think you might find the example application helpful (CheckboxTreeSelectionHelperTestDialog.java) as it demonstrates some CheckboxTreeViewer basics as well as how to use the helper class.

Joshua Issac replied on Thu, 2013/12/19 - 8:36am

Similar results may be had with a CheckedTreeSelectionDialog by calling setContainerMode(true).

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.