]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtView.java
Clarify distinction between UX views and parts
[lgpl/argeo-commons.git] / swt / org.argeo.cms.swt / src / org / argeo / cms / swt / widgets / AbstractSwtView.java
diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtView.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/AbstractSwtView.java
new file mode 100644 (file)
index 0000000..efdc45a
--- /dev/null
@@ -0,0 +1,47 @@
+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();
+}