import org.argeo.api.acr.Content;
import org.argeo.api.acr.NamespaceUtils;
import org.argeo.cms.swt.CmsSwtUtils;
-import org.argeo.cms.swt.widgets.SwtHierarchicalPart;
-import org.argeo.cms.swt.widgets.SwtTabularPart;
+import org.argeo.cms.swt.widgets.SwtTreeView;
+import org.argeo.cms.swt.widgets.SwtTableView;
import org.argeo.cms.ux.acr.ContentHierarchicalPart;
import org.argeo.cms.ux.widgets.Column;
import org.argeo.cms.ux.widgets.DefaultTabularPart;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.widgets.Composite;
+/** A simple ACR browser. */
public class AcrContentTreeView extends Composite {
private static final long serialVersionUID = -3707881216246077323L;
ContentHierarchicalPart contentPart = new ContentHierarchicalPart();
contentPart.setInput(rootContent);
- SwtHierarchicalPart<Content> hPart = new SwtHierarchicalPart<>(split, getStyle(), contentPart);
+ new SwtTreeView<>(split, getStyle(), contentPart);
Composite area = new Composite(split, SWT.BORDER);
area.setLayout(CmsSwtUtils.noSpaceGridLayout(2));
});
// attributesPart.setInput(selected);
- SwtTabularPart<Content, QName> attributeTable = new SwtTabularPart<>(area, style, attributesPart);
+ SwtTableView<Content, QName> attributeTable = new SwtTableView<>(area, style, attributesPart);
attributeTable.setLayoutData(CmsSwtUtils.fillAll());
// types
// typesPart.setInput(selected);
- SwtTabularPart<Content, QName> typesTable = new SwtTabularPart<>(area, style, typesPart);
+ SwtTableView<Content, QName> typesTable = new SwtTableView<>(area, style, typesPart);
typesTable.setLayoutData(CmsSwtUtils.fillAll());
// controller
+++ /dev/null
-package org.argeo.cms.swt.widgets;
-
-import org.argeo.cms.swt.CmsSwtUtils;
-import org.argeo.cms.ux.widgets.DataPart;
-import org.argeo.cms.ux.widgets.DataView;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.widgets.Composite;
-
-public abstract class AbstractSwtPart<INPUT, TYPE> extends Composite implements DataView<INPUT, TYPE> {
- private static final long serialVersionUID = -1999179054267812170L;
-
- protected DataPart<INPUT, TYPE> dataPart;
-
- protected final SelectionListener selectionListener;
-
- public AbstractSwtPart(Composite parent, int style, DataPart<INPUT, TYPE> dataPart) {
- super(parent, style);
- setLayout(CmsSwtUtils.noSpaceGridLayout());
-
- this.dataPart = dataPart;
-
- selectionListener = new SelectionListener() {
-
- private static final long serialVersionUID = 4334785560035009330L;
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- if (dataPart.getOnSelected() != null)
- dataPart.getOnSelected().accept((TYPE) e.item.getData());
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- if (dataPart.getOnAction() != null)
- dataPart.getOnAction().accept((TYPE) e.item.getData());
- }
- };
-
- dataPart.addView(this);
- addDisposeListener((e) -> dataPart.removeView(this));
- }
-
- public abstract void refresh();
-}
--- /dev/null
+package org.argeo.cms.swt.widgets;
+
+import org.argeo.cms.swt.CmsSwtUtils;
+import org.argeo.cms.ux.widgets.DataPart;
+import org.argeo.cms.ux.widgets.DataView;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+
+/** Base class for {@link DataView}s based on an SWT {@link Composite}. */
+public abstract class AbstractSwtView<INPUT, TYPE> extends Composite implements DataView<INPUT, TYPE> {
+ private static final long serialVersionUID = -1999179054267812170L;
+
+ protected DataPart<INPUT, TYPE> dataPart;
+
+ protected final SelectionListener selectionListener;
+
+ @SuppressWarnings("unchecked")
+ public AbstractSwtView(Composite parent, int style, DataPart<INPUT, TYPE> dataPart) {
+ super(parent, style);
+ setLayout(CmsSwtUtils.noSpaceGridLayout());
+
+ this.dataPart = dataPart;
+
+ selectionListener = new SelectionListener() {
+
+ private static final long serialVersionUID = 4334785560035009330L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (dataPart.getOnSelected() != null)
+ dataPart.getOnSelected().accept((TYPE) e.item.getData());
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ if (dataPart.getOnAction() != null)
+ dataPart.getOnAction().accept((TYPE) e.item.getData());
+ }
+ };
+
+ dataPart.addView(this);
+ addDisposeListener((e) -> dataPart.removeView(this));
+ }
+
+ public abstract void refresh();
+}
+++ /dev/null
-package org.argeo.cms.swt.widgets;
-
-import java.util.List;
-
-import org.argeo.api.cms.ux.CmsIcon;
-import org.argeo.cms.swt.CmsSwtUtils;
-import org.argeo.cms.ux.widgets.HierarchicalPart;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-
-/** {@link HierarchicalPart} implementation based on a {@link Tree}. */
-public class SwtHierarchicalPart<T> extends AbstractSwtPart<T, T> {
- private static final long serialVersionUID = -6247710601465713047L;
-
- private final Tree tree;
-
- private HierarchicalPart<T> hierarchicalPart;
-
- public SwtHierarchicalPart(Composite parent, int style, HierarchicalPart<T> hierarchicalPart) {
- super(parent, style, hierarchicalPart);
- tree = new Tree(this, SWT.BORDER);
- tree.setLayoutData(CmsSwtUtils.fillAll());
- this.hierarchicalPart = hierarchicalPart;
-
- tree.addSelectionListener(selectionListener);
- }
-
- @Override
- public void refresh() {
- // TODO optimise
- // tree.clearAll(true);
-
- for (TreeItem rootItem : tree.getItems()) {
- rootItem.dispose();
- }
-
- List<T> rootItems = hierarchicalPart.getChildren(hierarchicalPart.getInput());
- for (T child : rootItems) {
- TreeItem childItem = addTreeItem(null, child);
-// List<T> grandChildren = hierarchicalPart.getChildren(child);
-// for (T grandChild : grandChildren) {
-// addTreeItem(childItem, grandChild);
-// }
- }
-// tree.addListener(SWT.SetData, event -> {
-// TreeItem item = (TreeItem) event.item;
-// TreeItem parentItem = item.getParentItem();
-// if (parentItem == null) {
-// refreshRootItem(item);
-// } else {
-// refreshItem(parentItem, item);
-// }
-// });
-// tree.setItemCount(getRootItemCount());
-
- tree.addListener(SWT.Expand, event -> {
- final TreeItem root = (TreeItem) event.item;
- TreeItem[] items = root.getItems();
- for (TreeItem item : items) {
- if (item.getData() != null) {
-// List<T> grandChildren = hierarchicalPart.getChildren((T) item.getData());
-// for (T grandChild : grandChildren) {
-// addTreeItem(item, grandChild);
-// }
- return;
- }
- item.dispose();
- }
-
- List<T> children = hierarchicalPart.getChildren((T) root.getData());
- for (T child : children) {
- TreeItem childItem = addTreeItem(root, child);
-// List<T> grandChildren = hierarchicalPart.getChildren(child);
-// for (T grandChild : grandChildren) {
-// addTreeItem(childItem, grandChild);
-// }
- }
- });
-
- CmsSwtUtils.fill(tree);
-
- }
-
- protected TreeItem addTreeItem(TreeItem parent, T data) {
- TreeItem item = parent == null ? new TreeItem(tree, SWT.NONE) : new TreeItem(parent, SWT.NONE);
- item.setData(data);
- String txt = hierarchicalPart.getText(data);
- if (txt != null)
- item.setText(hierarchicalPart.getText(data));
- CmsIcon icon = hierarchicalPart.getIcon(data);
- // TODO optimize
- List<T> grandChildren = hierarchicalPart.getChildren(data);
- if (grandChildren.size() != 0)
- new TreeItem(item, SWT.NONE);
- return item;
-//if(icon!=null)
-// item.setImage(null);
- }
-
- protected Tree getTree() {
- return tree;
- }
-
-}
--- /dev/null
+package org.argeo.cms.swt.widgets;
+
+import org.argeo.api.cms.ux.CmsIcon;
+import org.argeo.cms.swt.CmsSwtTheme;
+import org.argeo.cms.swt.CmsSwtUtils;
+import org.argeo.cms.ux.widgets.Column;
+import org.argeo.cms.ux.widgets.TabularPart;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+
+/** View of a {@link TabularPart} based on a {@link Table}. */
+public class SwtTableView<INPUT, T> extends AbstractSwtView<INPUT, T> {
+ private static final long serialVersionUID = -1114155772446357750L;
+ private final Table table;
+ private TabularPart<INPUT, T> tabularPart;
+
+ private CmsSwtTheme theme;
+
+ public SwtTableView(Composite parent, int style, TabularPart<INPUT, T> tabularPart) {
+ super(parent, style, tabularPart);
+ theme = CmsSwtUtils.getCmsTheme(parent);
+
+ table = new Table(this, SWT.VIRTUAL | SWT.BORDER);
+ table.setLinesVisible(true);
+ table.setLayoutData(CmsSwtUtils.fillAll());
+
+ this.tabularPart = tabularPart;
+ }
+
+ @Override
+ public void refresh() {
+ // TODO optimise
+ table.clearAll();
+ table.addListener(SWT.SetData, event -> {
+ TableItem item = (TableItem) event.item;
+ refreshItem(item);
+ });
+ table.setItemCount(tabularPart.getItemCount());
+ for (int i = 0; i < tabularPart.getColumnCount(); i++) {
+ TableColumn swtColumn = new TableColumn(table, SWT.NONE);
+ swtColumn.setWidth(tabularPart.getColumn(i).getWidth());
+ }
+ CmsSwtUtils.fill(table);
+
+ table.addSelectionListener(selectionListener);
+
+ }
+
+ protected Object getDataFromEvent(SelectionEvent e) {
+ Object data = e.item.getData();
+ if (data == null)
+ data = tabularPart.getData(getTable().indexOf((TableItem) e.item));
+ return data;
+ }
+
+ protected void refreshItem(TableItem item) {
+ int row = getTable().indexOf(item);
+ for (int i = 0; i < tabularPart.getColumnCount(); i++) {
+ Column<T> column = tabularPart.getColumn(i);
+ T data = tabularPart.getData(row);
+ item.setData(data);
+ String text = data != null ? column.getText(data) : "";
+ if (text != null)
+ item.setText(i, text);
+ CmsIcon icon = column.getIcon(data);
+ if (icon != null) {
+ Image image = theme.getSmallIcon(icon);
+ item.setImage(i, image);
+ }
+ }
+ }
+
+ protected Table getTable() {
+ return table;
+ }
+
+}
+++ /dev/null
-package org.argeo.cms.swt.widgets;
-
-import org.argeo.api.cms.ux.CmsIcon;
-import org.argeo.cms.swt.CmsSwtTheme;
-import org.argeo.cms.swt.CmsSwtUtils;
-import org.argeo.cms.ux.widgets.Column;
-import org.argeo.cms.ux.widgets.TabularPart;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-
-/** {@link TabularPart} implementation based on a {@link Table}. */
-public class SwtTabularPart<INPUT, T> extends AbstractSwtPart<INPUT, T> {
- private static final long serialVersionUID = -1114155772446357750L;
- private final Table table;
- private TabularPart<INPUT, T> tabularPart;
-
- private CmsSwtTheme theme;
-
- public SwtTabularPart(Composite parent, int style, TabularPart<INPUT, T> tabularPart) {
- super(parent, style, tabularPart);
- theme = CmsSwtUtils.getCmsTheme(parent);
-
- table = new Table(this, SWT.VIRTUAL | SWT.BORDER);
- table.setLinesVisible(true);
- table.setLayoutData(CmsSwtUtils.fillAll());
-
- this.tabularPart = tabularPart;
- }
-
- @Override
- public void refresh() {
- // TODO optimise
- table.clearAll();
- table.addListener(SWT.SetData, event -> {
- TableItem item = (TableItem) event.item;
- refreshItem(item);
- });
- table.setItemCount(tabularPart.getItemCount());
- for (int i = 0; i < tabularPart.getColumnCount(); i++) {
- TableColumn swtColumn = new TableColumn(table, SWT.NONE);
- swtColumn.setWidth(tabularPart.getColumn(i).getWidth());
- }
- CmsSwtUtils.fill(table);
-
- table.addSelectionListener(selectionListener);
-
- }
-
- protected Object getDataFromEvent(SelectionEvent e) {
- Object data = e.item.getData();
- if (data == null)
- data = tabularPart.getData(getTable().indexOf((TableItem) e.item));
- return data;
- }
-
- protected void refreshItem(TableItem item) {
- int row = getTable().indexOf(item);
- for (int i = 0; i < tabularPart.getColumnCount(); i++) {
- Column<T> column = tabularPart.getColumn(i);
- T data = tabularPart.getData(row);
- item.setData(data);
- String text = data != null ? column.getText(data) : "";
- if (text != null)
- item.setText(i, text);
- CmsIcon icon = column.getIcon(data);
- if (icon != null) {
- Image image = theme.getSmallIcon(icon);
- item.setImage(i, image);
- }
- }
- }
-
- protected Table getTable() {
- return table;
- }
-
-}
--- /dev/null
+package org.argeo.cms.swt.widgets;
+
+import java.util.List;
+
+import org.argeo.api.cms.ux.CmsIcon;
+import org.argeo.cms.swt.CmsSwtTheme;
+import org.argeo.cms.swt.CmsSwtUtils;
+import org.argeo.cms.ux.widgets.HierarchicalPart;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+
+/** View of a {@link HierarchicalPart} based on a {@link Tree}. */
+public class SwtTreeView<T> extends AbstractSwtView<T, T> {
+ private static final long serialVersionUID = -6247710601465713047L;
+
+ private final Tree tree;
+
+ private HierarchicalPart<T> hierarchicalPart;
+ private CmsSwtTheme theme;
+
+ public SwtTreeView(Composite parent, int style, HierarchicalPart<T> hierarchicalPart) {
+ super(parent, style, hierarchicalPart);
+ theme = CmsSwtUtils.getCmsTheme(parent);
+
+ tree = new Tree(this, SWT.BORDER);
+ tree.setLayoutData(CmsSwtUtils.fillAll());
+ this.hierarchicalPart = hierarchicalPart;
+
+ tree.addSelectionListener(selectionListener);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void refresh() {
+ // TODO optimise
+ for (TreeItem rootItem : tree.getItems()) {
+ rootItem.dispose();
+ }
+
+ List<T> rootItems = hierarchicalPart.getChildren(hierarchicalPart.getInput());
+ for (T child : rootItems) {
+ addTreeItem(null, child);
+ }
+
+ tree.addListener(SWT.Expand, event -> {
+ final TreeItem root = (TreeItem) event.item;
+ TreeItem[] items = root.getItems();
+ for (TreeItem item : items) {
+ if (item.getData() != null) {
+ return;
+ }
+ item.dispose();
+ }
+
+ List<T> children = hierarchicalPart.getChildren((T) root.getData());
+ for (T child : children) {
+ addTreeItem(root, child);
+ }
+ });
+
+ CmsSwtUtils.fill(tree);
+
+ }
+
+ protected TreeItem addTreeItem(TreeItem parent, T data) {
+ TreeItem item = parent == null ? new TreeItem(tree, SWT.NONE) : new TreeItem(parent, SWT.NONE);
+ item.setData(data);
+ String txt = hierarchicalPart.getText(data);
+ if (txt != null)
+ item.setText(hierarchicalPart.getText(data));
+ CmsIcon icon = hierarchicalPart.getIcon(data);
+ if (icon != null) {
+ Image image = theme.getSmallIcon(icon);
+ item.setImage(image);
+ }
+ // TODO optimize
+ List<T> grandChildren = hierarchicalPart.getChildren(data);
+ if (grandChildren.size() != 0)
+ new TreeItem(item, SWT.NONE);
+ return item;
+ }
+
+ protected Tree getTree() {
+ return tree;
+ }
+
+}