*/
package eu.etaxonomy.taxeditor.preference.wizard;
+import java.util.Arrays;
+import java.util.List;
+
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.widgets.Widget;
private Button btnCollapse;
private Button btnExpand;
private Button btnSelectAllChildren;
+ private Button btnSelectDirectChildren;
public CheckBoxTreeComposite(Composite parent, ITreeContentProvider contentProvider, IBaseLabelProvider labelProvider, int style) {
super(parent, style);
Composite toolbar = new Composite(composite, SWT.NONE);
toolbar.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
GridLayout gl_toolbar = new GridLayout(4, false);
+ gl_toolbar.horizontalSpacing = 4;
gl_toolbar.marginHeight = 0;
gl_toolbar.verticalSpacing = 0;
toolbar.setLayout(gl_toolbar);
btnExpand.setImage(ImageResources.getImage(ImageResources.EXPAND));
btnExpand.setToolTipText(Messages.CheckBoxTreeComposite_EXPAND);
- btnSelectAllChildren = new Button(toolbar, SWT.NONE);
- btnSelectAllChildren.addSelectionListener(this);
- btnSelectAllChildren.setImage(ImageResources.getImage(ImageResources.HIERARCHICAL));
- btnSelectAllChildren.setToolTipText(Messages.CheckBoxTreeComposite_TOGGLE_TREE_SELECTION);
- new Label(toolbar, SWT.NONE);
+ btnSelectDirectChildren = new Button(toolbar, SWT.NONE);
+ btnSelectDirectChildren.addSelectionListener(this);
+ btnSelectDirectChildren.setImage(ImageResources.getImage(ImageResources.FLAT));
+ btnSelectDirectChildren.setToolTipText("Select direct children");
+
+ btnSelectAllChildren = new Button(toolbar, SWT.NONE);
+ btnSelectAllChildren.addSelectionListener(this);
+ btnSelectAllChildren.setImage(ImageResources.getImage(ImageResources.HIERARCHICAL));
+ btnSelectAllChildren.setToolTipText(Messages.CheckBoxTreeComposite_TOGGLE_TREE_SELECTION);
Tree tree = new Tree(composite, SWT.BORDER | SWT.CHECK);
tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
else if(e.widget == btnExpand){
viewer.expandToLevel(firstElement, AbstractTreeViewer.ALL_LEVELS);
}
+ else if(e.widget == btnSelectDirectChildren){
+ Widget item = viewer.testFindItem(firstElement);
+ if(item instanceof TreeItem){
+ viewer.expandToLevel(firstElement, 1);
+ TreeItem treeItem = (TreeItem) item;
+ TreeItem[] childItems = treeItem.getItems();
+ List<TreeItem> childItemList = Arrays.asList(childItems);
+ boolean allChecked = childItemList.stream().allMatch(childItem->childItem.getChecked());
+ childItemList.stream().forEach(childItem->childItem.setChecked(!allChecked));
+ TreeItem parent = getRoot(treeItem);
+ updateItem(parent);
+ }
+ }
else if(e.widget == btnSelectAllChildren){
Widget item = viewer.testFindItem(firstElement);
boolean checked = false;
break;
}
}
- if(item!=null){
+ if(item instanceof TreeItem){
viewer.expandToLevel(firstElement, AbstractTreeViewer.ALL_LEVELS);
viewer.setSubtreeChecked(firstElement, !checked);
- TreeItem[] rootItems = viewer.getTree().getItems();
- for (TreeItem rootItem : rootItems) {
- updateItem(rootItem);
- }
+ TreeItem parent = getRoot((TreeItem) item);
+ updateItem(parent);
}
}
}
+
+ /**
+ * @param treeItem
+ * @return
+ */
+ private TreeItem getRoot(TreeItem treeItem) {
+ TreeItem parent = treeItem;
+ while(parent.getParentItem()!=null){
+ parent = parent.getParentItem();
+ }
+ return parent;
+ }
+
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}