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<Object> onSelected;
private Consumer<Object> 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());
@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) {
}
this.onAction = onAction;
}
+ public Composite getArea() {
+ return area;
+ }
+
}