X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Forg.argeo.cms.swt%2Fsrc%2Forg%2Fargeo%2Fcms%2Fswt%2Fwidgets%2FSwtHierarchicalPart.java;h=08c85b1657af0a9a01a0449aa4880d9cb16bb5cd;hb=e168383bac50637131fef8c41e119db7eb2284a7;hp=d390b5364f407b8ae43d10bf31dd255e0cdfa3f5;hpb=a0a4cc2c5657faec904e2de279efa4a165d59ac8;p=lgpl%2Fargeo-commons.git diff --git a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java index d390b5364..08c85b165 100644 --- a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java +++ b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java @@ -12,28 +12,30 @@ import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; /** {@link HierarchicalPart} implementation based on a {@link Tree}. */ -public class SwtHierarchicalPart extends Composite implements HierarchicalPart { - private static final long serialVersionUID = -2189742596757101778L; - +public class SwtHierarchicalPart implements HierarchicalPart { + private Composite area; private final Tree tree; private Consumer onSelected; private Consumer onAction; public SwtHierarchicalPart(Composite parent, int style) { - super(parent, style); - setLayout(CmsSwtUtils.noSpaceGridLayout()); - tree = new Tree(this, SWT.VIRTUAL | SWT.BORDER); + area = new Composite(parent, style); + area.setLayout(CmsSwtUtils.noSpaceGridLayout()); + tree = new Tree(area, SWT.VIRTUAL | SWT.BORDER); } + @Override public void refresh() { + // TODO optimise + tree.clearAll(true); tree.addListener(SWT.SetData, event -> { TreeItem item = (TreeItem) event.item; TreeItem parentItem = item.getParentItem(); if (parentItem == null) { refreshRootItem(item); } else { - refreshItem(parentItem, parentItem); + refreshItem(parentItem, item); } }); tree.setItemCount(getRootItemCount()); @@ -45,17 +47,30 @@ public class SwtHierarchicalPart extends Composite implements HierarchicalPart { @Override public void widgetSelected(SelectionEvent e) { - onSelected.accept(e.item.getData()); + if (onSelected != null) + onSelected.accept(e.item.getData()); } @Override public void widgetDefaultSelected(SelectionEvent e) { - onAction.accept(e.item.getData()); + if (onAction != null) + onAction.accept(e.item.getData()); } }); } + @Override + public void setInput(Object data) { + area.setData(data); + refresh(); + } + + @Override + public Object getInput() { + return area.getData(); + } + protected void refreshRootItem(TreeItem item) { }