01: package com.quantum.flatfiles.wizard;
02:
03: import org.eclipse.jface.viewers.CheckStateChangedEvent;
04: import org.eclipse.jface.viewers.CheckboxTreeViewer;
05: import org.eclipse.jface.viewers.ICheckStateListener;
06: import org.eclipse.jface.viewers.ITreeContentProvider;
07:
08: /**
09: * @author BC Holmes
10: */
11: public class SimpleCheckStateListener implements ICheckStateListener {
12:
13: private final ITreeContentProvider contentProvider;
14: private final CheckboxTreeViewer viewer;
15:
16: public SimpleCheckStateListener(CheckboxTreeViewer viewer) {
17: this .viewer = viewer;
18: this .contentProvider = (ITreeContentProvider) this .viewer
19: .getContentProvider();
20: }
21:
22: public void checkStateChanged(CheckStateChangedEvent event) {
23:
24: Object element = event.getElement();
25: this .viewer.setSubtreeChecked(element, event.getChecked());
26:
27: Object parent = this .contentProvider.getParent(element);
28: if (parent != null) {
29: Object[] siblings = this .contentProvider
30: .getChildren(parent);
31:
32: boolean someAreChecked = false;
33: boolean someAreNotChecked = false;
34:
35: for (int i = 0, length = siblings == null ? 0
36: : siblings.length; i < length; i++) {
37: someAreChecked |= viewer.getChecked(siblings[i]);
38: someAreNotChecked |= !viewer.getChecked(siblings[i]);
39: }
40:
41: this.viewer.setGrayed(parent, someAreChecked
42: && someAreNotChecked);
43: this.viewer.setChecked(parent, someAreChecked);
44: }
45:
46: }
47:
48: }
|