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; /** 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; @SuppressWarnings("unchecked") public AbstractSwtView(Composite parent, DataPart dataPart) { super(parent, SWT.NONE); 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(); }