From: Mathieu Date: Sun, 13 Nov 2022 07:10:34 +0000 (+0100) Subject: Improve UX data parts X-Git-Tag: v2.3.11~16 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=84914c5224fe7d441cc10f30b8418bf4ac4b0a0f Improve UX data parts --- diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/acr/ContentHierarchicalPart.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/acr/ContentHierarchicalPart.java index 43a403415..baaa25238 100644 --- a/org.argeo.cms.ux/src/org/argeo/cms/ux/acr/ContentHierarchicalPart.java +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/acr/ContentHierarchicalPart.java @@ -5,11 +5,10 @@ import java.util.Iterator; import java.util.List; import org.argeo.api.acr.Content; -import org.argeo.api.acr.NamespaceUtils; -import org.argeo.cms.ux.widgets.AbstractDataPart; +import org.argeo.cms.ux.widgets.AbstractHierarchicalPart; import org.argeo.cms.ux.widgets.HierarchicalPart; -public class ContentHierarchicalPart extends AbstractDataPart implements HierarchicalPart { +public class ContentHierarchicalPart extends AbstractHierarchicalPart implements HierarchicalPart { @Override public List getChildren(Content content) { List res = new ArrayList<>(); @@ -27,14 +26,4 @@ public class ContentHierarchicalPart extends AbstractDataPart protected boolean isLeaf(Content content) { return false; } - - @Override - public String getText(Content model) { - try { - return NamespaceUtils.toPrefixedName(model.getName()); - } catch (IllegalStateException e) { - return model.getName().toString(); - } - } - } diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractColumnsPart.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractColumnsPart.java new file mode 100644 index 000000000..143b9cc9e --- /dev/null +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractColumnsPart.java @@ -0,0 +1,26 @@ +package org.argeo.cms.ux.widgets; + +import java.util.ArrayList; +import java.util.List; + +public abstract class AbstractColumnsPart extends AbstractDataPart implements ColumnsPart { + + private List> columns = new ArrayList<>(); + + @Override + public Column getColumn(int index) { + if (index >= columns.size()) + throw new IllegalArgumentException("There a only " + columns.size()); + return columns.get(index); + } + + @Override + public void addColumn(Column column) { + columns.add(column); + } + + @Override + public int getColumnCount() { + return columns.size(); + } +} diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractHierarchicalPart.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractHierarchicalPart.java index dd1854d39..ccdcf4ea5 100644 --- a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractHierarchicalPart.java +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractHierarchicalPart.java @@ -1,5 +1,5 @@ package org.argeo.cms.ux.widgets; -public abstract class AbstractHierarchicalPart extends AbstractDataPart implements HierarchicalPart { +public abstract class AbstractHierarchicalPart extends AbstractColumnsPart implements HierarchicalPart { } diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractTabularPart.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractTabularPart.java index 400f9c885..835bc7ec7 100644 --- a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractTabularPart.java +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractTabularPart.java @@ -1,26 +1,6 @@ package org.argeo.cms.ux.widgets; -import java.util.ArrayList; -import java.util.List; +public abstract class AbstractTabularPart extends AbstractColumnsPart + implements TabularPart { -public abstract class AbstractTabularPart extends AbstractDataPart implements TabularPart { - - private List> columns = new ArrayList<>(); - - @Override - public Column getColumn(int index) { - if (index >= columns.size()) - throw new IllegalArgumentException("There a only " + columns.size()); - return columns.get(index); - } - - @Override - public void addColumn(Column column) { - columns.add(column); - } - - @Override - public int getColumnCount() { - return columns.size(); - } } diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/ColumnsPart.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/ColumnsPart.java index a60401c1f..2aaeb49de 100644 --- a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/ColumnsPart.java +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/ColumnsPart.java @@ -1,5 +1,12 @@ package org.argeo.cms.ux.widgets; +/** A presentation of data in columns. */ public interface ColumnsPart extends DataPart { + Column getColumn(int index); + + void addColumn(Column column); + + int getColumnCount(); + } diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/HierarchicalPart.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/HierarchicalPart.java index 1f42c6aa5..8f0e79845 100644 --- a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/HierarchicalPart.java +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/HierarchicalPart.java @@ -2,16 +2,7 @@ package org.argeo.cms.ux.widgets; import java.util.List; -import org.argeo.api.cms.ux.CmsIcon; - /** A hierarchical representation of data. */ public interface HierarchicalPart extends ColumnsPart { List getChildren(T parent); - - String getText(T model); - - default CmsIcon getIcon(T model) { - return null; - } - } diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/TabularPart.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/TabularPart.java index 2ed077c42..01b4d6b6b 100644 --- a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/TabularPart.java +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/TabularPart.java @@ -1,14 +1,8 @@ package org.argeo.cms.ux.widgets; /** A tabular presentation of data. */ -public interface TabularPart extends ColumnsPart { +public interface TabularPart extends ColumnsPart { int getItemCount(); - T getData(int row); - - Column getColumn(int index); - - void addColumn(Column column); - - int getColumnCount(); + TYPE getData(int row); } diff --git a/org.argeo.cms/src/org/argeo/cms/acr/directory/RoleContent.java b/org.argeo.cms/src/org/argeo/cms/acr/directory/RoleContent.java index 356e272c9..64feb1d67 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/directory/RoleContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/directory/RoleContent.java @@ -8,9 +8,7 @@ import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentName; import org.argeo.api.acr.spi.ProvidedSession; import org.argeo.api.cms.directory.UserDirectory; -import org.osgi.service.useradmin.Group; import org.osgi.service.useradmin.Role; -import org.osgi.service.useradmin.User; class RoleContent extends AbstractDirectoryContent { @@ -43,11 +41,7 @@ class RoleContent extends AbstractDirectoryContent { @SuppressWarnings("unchecked") @Override public A adapt(Class clss) { - if (clss.equals(Group.class)) - return (A) role; - else if (clss.equals(User.class)) - return (A) role; - else if (clss.equals(Role.class)) + if (Role.class.isAssignableFrom(clss)) return (A) role; return super.adapt(clss); } 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 e66549216..a3d533e2f 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.SwtTreeView; import org.argeo.cms.swt.widgets.SwtTableView; +import org.argeo.cms.swt.widgets.SwtTreeView; import org.argeo.cms.ux.acr.ContentHierarchicalPart; import org.argeo.cms.ux.widgets.Column; import org.argeo.cms.ux.widgets.DefaultTabularPart; @@ -37,6 +37,13 @@ public class AcrContentTreeView extends Composite { split.setLayoutData(CmsSwtUtils.fillAll()); ContentHierarchicalPart contentPart = new ContentHierarchicalPart(); + contentPart.addColumn((model) -> { + try { + return NamespaceUtils.toPrefixedName(model.getName()); + } catch (IllegalStateException e) { + return model.getName().toString(); + } + }); contentPart.setInput(rootContent); new SwtTreeView<>(split, getStyle(), contentPart); diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java index a58a5a478..3291980f6 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java @@ -60,9 +60,9 @@ public class SwtTableView extends AbstractSwtView { protected void refreshItem(TableItem item) { int row = getTable().indexOf(item); + T data = tabularPart.getData(row); for (int i = 0; i < tabularPart.getColumnCount(); i++) { Column column = tabularPart.getColumn(i); - T data = tabularPart.getData(row); item.setData(data); String text = data != null ? column.getText(data) : ""; if (text != null) diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java index 8fd1368b0..778ed4138 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java @@ -6,6 +6,7 @@ import org.argeo.api.cms.CmsLog; 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.HierarchicalPart; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; @@ -76,15 +77,18 @@ public class SwtTreeView extends AbstractSwtView { 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); + for (int i = 0; i < hierarchicalPart.getColumnCount(); i++) { + Column column = hierarchicalPart.getColumn(i); + String txt = column.getText(data); + if (txt != null) + item.setText(txt); + CmsIcon icon = column.getIcon(data); + if (icon != null) { + Image image = theme.getSmallIcon(icon); + item.setImage(image); + } } - // TODO optimize + // TODO optimise List grandChildren = hierarchicalPart.getChildren(data); if (grandChildren.size() != 0) new TreeItem(item, SWT.NONE);