]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java
1 package org
.argeo
.cms
.swt
.widgets
;
5 import org
.argeo
.api
.cms
.CmsLog
;
6 import org
.argeo
.api
.cms
.ux
.CmsIcon
;
7 import org
.argeo
.cms
.swt
.CmsSwtTheme
;
8 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
9 import org
.argeo
.cms
.ux
.widgets
.Column
;
10 import org
.argeo
.cms
.ux
.widgets
.HierarchicalPart
;
11 import org
.eclipse
.swt
.SWT
;
12 import org
.eclipse
.swt
.graphics
.Image
;
13 import org
.eclipse
.swt
.widgets
.Composite
;
14 import org
.eclipse
.swt
.widgets
.Tree
;
15 import org
.eclipse
.swt
.widgets
.TreeItem
;
17 /** View of a {@link HierarchicalPart} based on a {@link Tree}. */
18 public class SwtTreeView
<T
> extends AbstractSwtView
<T
, T
> {
19 private final static CmsLog log
= CmsLog
.getLog(SwtTreeView
.class);
21 private static final long serialVersionUID
= -6247710601465713047L;
23 private final Tree tree
;
25 private HierarchicalPart
<T
> hierarchicalPart
;
26 private CmsSwtTheme theme
;
28 public SwtTreeView(Composite parent
, int style
, HierarchicalPart
<T
> hierarchicalPart
) {
29 super(parent
, hierarchicalPart
);
30 theme
= CmsSwtUtils
.getCmsTheme(parent
);
32 tree
= new Tree(this, style
);
33 tree
.setLayoutData(CmsSwtUtils
.fillAll());
34 this.hierarchicalPart
= hierarchicalPart
;
36 tree
.addSelectionListener(selectionListener
);
39 @SuppressWarnings("unchecked")
41 public void refresh() {
43 for (TreeItem rootItem
: tree
.getItems()) {
47 List
<T
> rootItems
= hierarchicalPart
.getChildren(hierarchicalPart
.getInput());
48 for (T child
: rootItems
) {
50 addTreeItem(null, child
);
51 } catch (Exception e
) {
52 if (log
.isTraceEnabled())
53 log
.error("Cannot retrieve child", e
);
57 tree
.addListener(SWT
.Expand
, event
-> {
58 final TreeItem root
= (TreeItem
) event
.item
;
59 TreeItem
[] items
= root
.getItems();
60 for (TreeItem item
: items
) {
61 if (item
.getData() != null) {
67 List
<T
> children
= hierarchicalPart
.getChildren((T
) root
.getData());
68 for (T child
: children
) {
69 addTreeItem(root
, child
);
73 CmsSwtUtils
.fill(tree
);
77 protected TreeItem
addTreeItem(TreeItem parent
, T data
) {
78 TreeItem item
= parent
== null ?
new TreeItem(tree
, SWT
.NONE
) : new TreeItem(parent
, SWT
.NONE
);
80 for (int i
= 0; i
< hierarchicalPart
.getColumnCount(); i
++) {
81 Column
<T
> column
= hierarchicalPart
.getColumn(i
);
82 String txt
= column
.getText(data
);
85 CmsIcon icon
= column
.getIcon(data
);
87 Image image
= theme
.getSmallIcon(icon
);
92 List
<T
> grandChildren
= hierarchicalPart
.getChildren(data
);
93 if (grandChildren
.size() != 0)
94 new TreeItem(item
, SWT
.NONE
);
99 public void notifyItemCountChange() {
100 // TODO what to update ?
104 protected Tree
getTree() {