]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java
1 package org
.argeo
.cms
.swt
.widgets
;
3 import java
.util
.function
.Consumer
;
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
;
14 /** {@link HierarchicalPart} implementation based on a {@link Tree}. */
15 public class SwtHierarchicalPart
implements HierarchicalPart
{
16 private Composite area
;
17 private final Tree tree
;
19 private Consumer
<Object
> onSelected
;
20 private Consumer
<Object
> onAction
;
22 public SwtHierarchicalPart(Composite parent
, int style
) {
23 area
= new Composite(parent
, style
);
24 area
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
25 tree
= new Tree(area
, SWT
.VIRTUAL
| SWT
.BORDER
);
29 public void refresh() {
32 tree
.addListener(SWT
.SetData
, event
-> {
33 TreeItem item
= (TreeItem
) event
.item
;
34 TreeItem parentItem
= item
.getParentItem();
35 if (parentItem
== null) {
36 refreshRootItem(item
);
38 refreshItem(parentItem
, item
);
41 tree
.setItemCount(getRootItemCount());
42 CmsSwtUtils
.fill(tree
);
44 tree
.addSelectionListener(new SelectionListener() {
46 private static final long serialVersionUID
= 4334785560035009330L;
49 public void widgetSelected(SelectionEvent e
) {
50 if (onSelected
!= null)
51 onSelected
.accept(e
.item
.getData());
55 public void widgetDefaultSelected(SelectionEvent e
) {
57 onAction
.accept(e
.item
.getData());
64 public void setInput(Object data
) {
70 public Object
getInput() {
71 return area
.getData();
74 protected void refreshRootItem(TreeItem item
) {
78 protected void refreshItem(TreeItem parentItem
, TreeItem item
) {
82 protected int getRootItemCount() {
86 protected Tree
getTree() {
90 public void onSelected(Consumer
<Object
> onSelected
) {
91 this.onSelected
= onSelected
;
94 public void onAction(Consumer
<Object
> onAction
) {
95 this.onAction
= onAction
;
98 public Composite
getArea() {