X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Forg.argeo.cms.swt%2Fsrc%2Forg%2Fargeo%2Fcms%2Fswt%2Fwidgets%2FSwtTabularPart.java;h=8fd4065ad92bce617dbcd2f195da80ddf6a49320;hb=55d1a78150b6be0004f6bcb28703bcdd6daf55a1;hp=02f2f815354e332d0c8617f9fd4f7173b37295e6;hpb=e168383bac50637131fef8c41e119db7eb2284a7;p=lgpl%2Fargeo-commons.git diff --git a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java index 02f2f8153..8fd4065ad 100644 --- a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java +++ b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java @@ -2,13 +2,18 @@ package org.argeo.cms.swt.widgets; import java.util.function.Consumer; +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.TabularPart; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; 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}. */ @@ -20,10 +25,14 @@ public class SwtTabularPart implements TabularPart { private Consumer onSelected; private Consumer onAction; + private CmsSwtTheme theme; + public SwtTabularPart(Composite parent, int style) { + theme = CmsSwtUtils.getCmsTheme(parent); area = new Composite(parent, style); area.setLayout(CmsSwtUtils.noSpaceGridLayout()); table = new Table(area, SWT.VIRTUAL | SWT.BORDER); + table.setLinesVisible(true); } @Override @@ -43,18 +52,25 @@ public class SwtTabularPart implements TabularPart { @Override public void widgetSelected(SelectionEvent e) { if (onSelected != null) - onSelected.accept(e.item.getData()); + onSelected.accept(getDataFromEvent(e)); } @Override public void widgetDefaultSelected(SelectionEvent e) { if (onAction != null) - onAction.accept(e.item.getData()); + onAction.accept(getDataFromEvent(e)); } }); } + protected Object getDataFromEvent(SelectionEvent e) { + Object data = e.item.getData(); + if (data == null) + data = getData(getTable().indexOf((TableItem) e.item)); + return data; + } + @Override public void setInput(Object data) { area.setData(data); @@ -67,13 +83,30 @@ public class SwtTabularPart implements TabularPart { } protected void refreshItem(TableItem item) { - + int row = getTable().indexOf(item); + for (int i = 0; i < item.getParent().getColumnCount(); i++) { + Column column = (Column) item.getParent().getColumn(i).getData(); + Object data = getData(row); + item.setData(data); + String text = data != null ? column.getText(data) : ""; + if (text != null) + item.setText(i, text); + CmsIcon icon = column.getIcon(data); + if (icon != null) { + Image image = theme.getSmallIcon(icon); + item.setImage(i, image); + } + } } protected int getItemCount() { return 0; } + protected Object getData(int row) { + return null; + } + protected Table getTable() { return table; } @@ -86,4 +119,16 @@ public class SwtTabularPart implements TabularPart { this.onAction = onAction; } + @Override + public void addColumn(Column column) { + TableColumn swtColumn = new TableColumn(table, SWT.NONE); + swtColumn.setWidth(column.getWidth()); + swtColumn.setData(column); + + } + + public Composite getArea() { + return area; + } + }