Improve UX part framework
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 24 Oct 2022 06:35:40 +0000 (08:35 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 24 Oct 2022 06:35:40 +0000 (08:35 +0200)
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractDataPart.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractTabularPart.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/Column.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/DataView.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/HierarchicalPart.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/TabularPart.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtView.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java

index 958fcde6a32d1fad4306c51753fbd49b5eb4e226..49856efb53d0c5e587eaaf0b7c32af9872c45193 100644 (file)
@@ -48,6 +48,12 @@ public abstract class AbstractDataPart<INPUT, T> implements DataPart<INPUT, T> {
                }
        }
 
+       protected void notifyItemCountChange() {
+               for (DataView<INPUT, T> view : views.keySet()) {
+                       view.notifyItemCountChange();
+               }
+       }
+
        @Override
        public void addView(DataView<INPUT, T> view) {
                views.put(view, new Object());
index 7e63ea85bc7a27b9b77ec83f6ab33bb0c3e6b55e..400f9c8853da679032182ada53fd0ec55ff1ba84 100644 (file)
@@ -14,6 +14,7 @@ public abstract class AbstractTabularPart<INPUT, T> extends AbstractDataPart<INP
                return columns.get(index);
        }
 
+       @Override
        public void addColumn(Column<T> column) {
                columns.add(column);
        }
index 973fddb5a8504a070c2968fe2643e711de6181be..9ee141c9040b0b60d39318f00534855f41cc327e 100644 (file)
@@ -2,6 +2,8 @@ package org.argeo.cms.ux.widgets;
 
 import org.argeo.api.cms.ux.CmsIcon;
 
+/** A column in a data representation. */
+@FunctionalInterface
 public interface Column<T> {
        String getText(T model);
 
index 9768c68ec9a94e9feeb5cd006c48ec5f2bbd674b..311cf924ed74e265b231bab09f2eee855389277b 100644 (file)
@@ -2,4 +2,6 @@ package org.argeo.cms.ux.widgets;
 
 public interface DataView<INPUT,TYPE> {
        void refresh();
+       
+       void notifyItemCountChange();
 }
index 372c295dcfb34c34cf44bfbfe4efd14743037c5a..1f42c6aa5fb384840e846e557226c4762dd13ec7 100644 (file)
@@ -4,6 +4,7 @@ import java.util.List;
 
 import org.argeo.api.cms.ux.CmsIcon;
 
+/** A hierarchical representation of data. */
 public interface HierarchicalPart<T> extends ColumnsPart<T, T> {
        List<T> getChildren(T parent);
 
index 6adc0c3e6c1ffdf37c47c97a62793611aaec4765..2ed077c42778226d01c82521cca5a68946c21554 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.cms.ux.widgets;
 
+/** A tabular presentation of data. */
 public interface TabularPart<INPUT, T> extends ColumnsPart<INPUT, T> {
        int getItemCount();
 
@@ -7,5 +8,7 @@ public interface TabularPart<INPUT, T> extends ColumnsPart<INPUT, T> {
 
        Column<T> getColumn(int index);
 
+       void addColumn(Column<T> column);
+
        int getColumnCount();
 }
index efdc45a8a3b41b43b3f1504e563d24ab7ee604b5..e3a268153eba21a946ed5e42be5cfe18b4b404f6 100644 (file)
@@ -3,6 +3,7 @@ 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.SWT;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.widgets.Composite;
@@ -16,8 +17,8 @@ public abstract class AbstractSwtView<INPUT, TYPE> extends Composite implements
        protected final SelectionListener selectionListener;
 
        @SuppressWarnings("unchecked")
-       public AbstractSwtView(Composite parent, int style, DataPart<INPUT, TYPE> dataPart) {
-               super(parent, style);
+       public AbstractSwtView(Composite parent, DataPart<INPUT, TYPE> dataPart) {
+               super(parent, SWT.NONE);
                setLayout(CmsSwtUtils.noSpaceGridLayout());
 
                this.dataPart = dataPart;
index b136f36e16c73cb03ba615160a453f5c4fa14ff3..a58a5a47856aebe5350b47f9879227b3f1255103 100644 (file)
@@ -22,10 +22,10 @@ public class SwtTableView<INPUT, T> extends AbstractSwtView<INPUT, T> {
        private CmsSwtTheme theme;
 
        public SwtTableView(Composite parent, int style, TabularPart<INPUT, T> tabularPart) {
-               super(parent, style, tabularPart);
+               super(parent, tabularPart);
                theme = CmsSwtUtils.getCmsTheme(parent);
 
-               table = new Table(this, SWT.VIRTUAL | SWT.BORDER);
+               table = new Table(this, SWT.VIRTUAL | style);
                table.setLinesVisible(true);
                table.setLayoutData(CmsSwtUtils.fillAll());
 
@@ -75,6 +75,11 @@ public class SwtTableView<INPUT, T> extends AbstractSwtView<INPUT, T> {
                }
        }
 
+       @Override
+       public void notifyItemCountChange() {
+               table.setItemCount(tabularPart.getItemCount());
+       }
+
        protected Table getTable() {
                return table;
        }
index 79543e9f89d938f583a9c05d3c1a5aba4bfe5b37..a0ac24836c4cb3aa393f11e1d868e91972501be3 100644 (file)
@@ -22,10 +22,10 @@ public class SwtTreeView<T> extends AbstractSwtView<T, T> {
        private CmsSwtTheme theme;
 
        public SwtTreeView(Composite parent, int style, HierarchicalPart<T> hierarchicalPart) {
-               super(parent, style, hierarchicalPart);
+               super(parent, hierarchicalPart);
                theme = CmsSwtUtils.getCmsTheme(parent);
 
-               tree = new Tree(this, SWT.BORDER);
+               tree = new Tree(this, style);
                tree.setLayoutData(CmsSwtUtils.fillAll());
                this.hierarchicalPart = hierarchicalPart;
 
@@ -82,6 +82,14 @@ public class SwtTreeView<T> extends AbstractSwtView<T, T> {
                        new TreeItem(item, SWT.NONE);
                return item;
        }
+       
+       
+
+       @Override
+       public void notifyItemCountChange() {
+               // TODO what to update ?
+               
+       }
 
        protected Tree getTree() {
                return tree;