]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java
d390b5364f407b8ae43d10bf31dd255e0cdfa3f5
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
extends Composite
implements HierarchicalPart
{
16 private static final long serialVersionUID
= -2189742596757101778L;
18 private final Tree tree
;
20 private Consumer
<Object
> onSelected
;
21 private Consumer
<Object
> onAction
;
23 public SwtHierarchicalPart(Composite parent
, int style
) {
25 setLayout(CmsSwtUtils
.noSpaceGridLayout());
26 tree
= new Tree(this, SWT
.VIRTUAL
| SWT
.BORDER
);
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
);
36 refreshItem(parentItem
, parentItem
);
39 tree
.setItemCount(getRootItemCount());
40 CmsSwtUtils
.fill(tree
);
42 tree
.addSelectionListener(new SelectionListener() {
44 private static final long serialVersionUID
= 4334785560035009330L;
47 public void widgetSelected(SelectionEvent e
) {
48 onSelected
.accept(e
.item
.getData());
52 public void widgetDefaultSelected(SelectionEvent e
) {
53 onAction
.accept(e
.item
.getData());
59 protected void refreshRootItem(TreeItem item
) {
63 protected void refreshItem(TreeItem parentItem
, TreeItem item
) {
67 protected int getRootItemCount() {
71 protected Tree
getTree() {
75 public void onSelected(Consumer
<Object
> onSelected
) {
76 this.onSelected
= onSelected
;
79 public void onAction(Consumer
<Object
> onAction
) {
80 this.onAction
= onAction
;