]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java
d390b5364f407b8ae43d10bf31dd255e0cdfa3f5
[lgpl/argeo-commons.git] / eclipse / org.argeo.cms.swt / src / org / argeo / cms / swt / widgets / SwtHierarchicalPart.java
1 package org.argeo.cms.swt.widgets;
2
3 import java.util.function.Consumer;
4
5 import org.argeo.cms.swt.CmsSwtUtils;
6 import org.argeo.cms.ux.widgets.HierarchicalPart;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.events.SelectionEvent;
9 import org.eclipse.swt.events.SelectionListener;
10 import org.eclipse.swt.widgets.Composite;
11 import org.eclipse.swt.widgets.Tree;
12 import org.eclipse.swt.widgets.TreeItem;
13
14 /** {@link HierarchicalPart} implementation based on a {@link Tree}. */
15 public class SwtHierarchicalPart extends Composite implements HierarchicalPart {
16 private static final long serialVersionUID = -2189742596757101778L;
17
18 private final Tree tree;
19
20 private Consumer<Object> onSelected;
21 private Consumer<Object> onAction;
22
23 public SwtHierarchicalPart(Composite parent, int style) {
24 super(parent, style);
25 setLayout(CmsSwtUtils.noSpaceGridLayout());
26 tree = new Tree(this, SWT.VIRTUAL | SWT.BORDER);
27 }
28
29 public void refresh() {
30 tree.addListener(SWT.SetData, event -> {
31 TreeItem item = (TreeItem) event.item;
32 TreeItem parentItem = item.getParentItem();
33 if (parentItem == null) {
34 refreshRootItem(item);
35 } else {
36 refreshItem(parentItem, parentItem);
37 }
38 });
39 tree.setItemCount(getRootItemCount());
40 CmsSwtUtils.fill(tree);
41
42 tree.addSelectionListener(new SelectionListener() {
43
44 private static final long serialVersionUID = 4334785560035009330L;
45
46 @Override
47 public void widgetSelected(SelectionEvent e) {
48 onSelected.accept(e.item.getData());
49 }
50
51 @Override
52 public void widgetDefaultSelected(SelectionEvent e) {
53 onAction.accept(e.item.getData());
54 }
55 });
56
57 }
58
59 protected void refreshRootItem(TreeItem item) {
60
61 }
62
63 protected void refreshItem(TreeItem parentItem, TreeItem item) {
64
65 }
66
67 protected int getRootItemCount() {
68 return 0;
69 }
70
71 protected Tree getTree() {
72 return tree;
73 }
74
75 public void onSelected(Consumer<Object> onSelected) {
76 this.onSelected = onSelected;
77 }
78
79 public void onAction(Consumer<Object> onAction) {
80 this.onAction = onAction;
81 }
82
83 }