From fd46e1f55b8aa95e6218dabf84315adcc9c4957f Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 18 Sep 2022 11:57:36 +0200 Subject: [PATCH] Clarify distinction between UX views and parts --- .../argeo/cms/swt/app/AcrContentTreeView.java | 11 +++-- ...tractSwtPart.java => AbstractSwtView.java} | 6 ++- ...{SwtTabularPart.java => SwtTableView.java} | 6 +-- ...HierarchicalPart.java => SwtTreeView.java} | 46 ++++++------------- 4 files changed, 28 insertions(+), 41 deletions(-) rename swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/{AbstractSwtPart.java => AbstractSwtView.java} (83%) rename swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/{SwtTabularPart.java => SwtTableView.java} (90%) rename swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/{SwtHierarchicalPart.java => SwtTreeView.java} (61%) diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java index fb1a79d44..e66549216 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java @@ -10,8 +10,8 @@ import javax.xml.namespace.QName; 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; @@ -19,6 +19,7 @@ import org.eclipse.swt.SWT; 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; @@ -38,7 +39,7 @@ public class AcrContentTreeView extends Composite { ContentHierarchicalPart contentPart = new ContentHierarchicalPart(); contentPart.setInput(rootContent); - SwtHierarchicalPart hPart = new SwtHierarchicalPart<>(split, getStyle(), contentPart); + new SwtTreeView<>(split, getStyle(), contentPart); Composite area = new Composite(split, SWT.BORDER); area.setLayout(CmsSwtUtils.noSpaceGridLayout(2)); @@ -79,7 +80,7 @@ public class AcrContentTreeView extends Composite { }); // attributesPart.setInput(selected); - SwtTabularPart attributeTable = new SwtTabularPart<>(area, style, attributesPart); + SwtTableView attributeTable = new SwtTableView<>(area, style, attributesPart); attributeTable.setLayoutData(CmsSwtUtils.fillAll()); // types @@ -101,7 +102,7 @@ public class AcrContentTreeView extends Composite { // typesPart.setInput(selected); - SwtTabularPart typesTable = new SwtTabularPart<>(area, style, typesPart); + SwtTableView typesTable = new SwtTableView<>(area, style, typesPart); typesTable.setLayoutData(CmsSwtUtils.fillAll()); // controller diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtPart.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtView.java similarity index 83% rename from swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtPart.java rename to swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtView.java index c3d11a181..efdc45a8a 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtPart.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtView.java @@ -7,14 +7,16 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; -public abstract class AbstractSwtPart extends Composite implements DataView { +/** Base class for {@link DataView}s based on an SWT {@link Composite}. */ +public abstract class AbstractSwtView extends Composite implements DataView { private static final long serialVersionUID = -1999179054267812170L; protected DataPart dataPart; protected final SelectionListener selectionListener; - public AbstractSwtPart(Composite parent, int style, DataPart dataPart) { + @SuppressWarnings("unchecked") + public AbstractSwtView(Composite parent, int style, DataPart dataPart) { super(parent, style); setLayout(CmsSwtUtils.noSpaceGridLayout()); diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java similarity index 90% rename from swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java rename to swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java index 2f10cac75..b136f36e1 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java @@ -13,15 +13,15 @@ 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 extends AbstractSwtPart { +/** View of a {@link TabularPart} based on a {@link Table}. */ +public class SwtTableView extends AbstractSwtView { private static final long serialVersionUID = -1114155772446357750L; private final Table table; private TabularPart tabularPart; private CmsSwtTheme theme; - public SwtTabularPart(Composite parent, int style, TabularPart tabularPart) { + public SwtTableView(Composite parent, int style, TabularPart tabularPart) { super(parent, style, tabularPart); theme = CmsSwtUtils.getCmsTheme(parent); diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java similarity index 61% rename from swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java rename to swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java index 07c9bac2e..79543e9f8 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtHierarchicalPart.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java @@ -3,23 +3,28 @@ 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; -/** {@link HierarchicalPart} implementation based on a {@link Tree}. */ -public class SwtHierarchicalPart extends AbstractSwtPart { +/** View of a {@link HierarchicalPart} based on a {@link Tree}. */ +public class SwtTreeView extends AbstractSwtView { private static final long serialVersionUID = -6247710601465713047L; private final Tree tree; private HierarchicalPart hierarchicalPart; + private CmsSwtTheme theme; - public SwtHierarchicalPart(Composite parent, int style, HierarchicalPart hierarchicalPart) { + public SwtTreeView(Composite parent, int style, HierarchicalPart hierarchicalPart) { super(parent, style, hierarchicalPart); + theme = CmsSwtUtils.getCmsTheme(parent); + tree = new Tree(this, SWT.BORDER); tree.setLayoutData(CmsSwtUtils.fillAll()); this.hierarchicalPart = hierarchicalPart; @@ -27,43 +32,24 @@ public class SwtHierarchicalPart extends AbstractSwtPart { tree.addSelectionListener(selectionListener); } + @SuppressWarnings("unchecked") @Override public void refresh() { // TODO optimise - // tree.clearAll(true); - for (TreeItem rootItem : tree.getItems()) { rootItem.dispose(); } List rootItems = hierarchicalPart.getChildren(hierarchicalPart.getInput()); for (T child : rootItems) { - TreeItem childItem = addTreeItem(null, child); -// List grandChildren = hierarchicalPart.getChildren(child); -// for (T grandChild : grandChildren) { -// addTreeItem(childItem, grandChild); -// } + addTreeItem(null, child); } -// 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 grandChildren = hierarchicalPart.getChildren((T) item.getData()); -// for (T grandChild : grandChildren) { -// addTreeItem(item, grandChild); -// } return; } item.dispose(); @@ -71,11 +57,7 @@ public class SwtHierarchicalPart extends AbstractSwtPart { List children = hierarchicalPart.getChildren((T) root.getData()); for (T child : children) { - TreeItem childItem = addTreeItem(root, child); -// List grandChildren = hierarchicalPart.getChildren(child); -// for (T grandChild : grandChildren) { -// addTreeItem(childItem, grandChild); -// } + addTreeItem(root, child); } }); @@ -90,13 +72,15 @@ public class SwtHierarchicalPart extends AbstractSwtPart { 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 grandChildren = hierarchicalPart.getChildren(data); if (grandChildren.size() != 0) new TreeItem(item, SWT.NONE); return item; -//if(icon!=null) -// item.setImage(null); } protected Tree getTree() { -- 2.30.2