]> git.argeo.org Git - lgpl/argeo-commons.git/blob - swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java
Add account-related RFC 2307bis LDAP objects and attributes
[lgpl/argeo-commons.git] / swt / org.argeo.cms.swt / src / org / argeo / cms / swt / widgets / SwtTableView.java
1 package org.argeo.cms.swt.widgets;
2
3 import org.argeo.api.cms.ux.CmsIcon;
4 import org.argeo.cms.swt.CmsSwtTheme;
5 import org.argeo.cms.swt.CmsSwtUtils;
6 import org.argeo.cms.ux.widgets.Column;
7 import org.argeo.cms.ux.widgets.TabularPart;
8 import org.eclipse.swt.SWT;
9 import org.eclipse.swt.events.SelectionEvent;
10 import org.eclipse.swt.graphics.Image;
11 import org.eclipse.swt.widgets.Composite;
12 import org.eclipse.swt.widgets.Table;
13 import org.eclipse.swt.widgets.TableColumn;
14 import org.eclipse.swt.widgets.TableItem;
15
16 /** View of a {@link TabularPart} based on a {@link Table}. */
17 public class SwtTableView<INPUT, T> extends AbstractSwtView<INPUT, T> {
18 private static final long serialVersionUID = -1114155772446357750L;
19 private final Table table;
20 private TabularPart<INPUT, T> tabularPart;
21
22 private CmsSwtTheme theme;
23
24 public SwtTableView(Composite parent, int style, TabularPart<INPUT, T> tabularPart) {
25 super(parent, style, tabularPart);
26 theme = CmsSwtUtils.getCmsTheme(parent);
27
28 table = new Table(this, SWT.VIRTUAL | SWT.BORDER);
29 table.setLinesVisible(true);
30 table.setLayoutData(CmsSwtUtils.fillAll());
31
32 this.tabularPart = tabularPart;
33 }
34
35 @Override
36 public void refresh() {
37 // TODO optimise
38 table.clearAll();
39 table.addListener(SWT.SetData, event -> {
40 TableItem item = (TableItem) event.item;
41 refreshItem(item);
42 });
43 table.setItemCount(tabularPart.getItemCount());
44 for (int i = 0; i < tabularPart.getColumnCount(); i++) {
45 TableColumn swtColumn = new TableColumn(table, SWT.NONE);
46 swtColumn.setWidth(tabularPart.getColumn(i).getWidth());
47 }
48 CmsSwtUtils.fill(table);
49
50 table.addSelectionListener(selectionListener);
51
52 }
53
54 protected Object getDataFromEvent(SelectionEvent e) {
55 Object data = e.item.getData();
56 if (data == null)
57 data = tabularPart.getData(getTable().indexOf((TableItem) e.item));
58 return data;
59 }
60
61 protected void refreshItem(TableItem item) {
62 int row = getTable().indexOf(item);
63 for (int i = 0; i < tabularPart.getColumnCount(); i++) {
64 Column<T> column = tabularPart.getColumn(i);
65 T data = tabularPart.getData(row);
66 item.setData(data);
67 String text = data != null ? column.getText(data) : "";
68 if (text != null)
69 item.setText(i, text);
70 CmsIcon icon = column.getIcon(data);
71 if (icon != null) {
72 Image image = theme.getSmallIcon(icon);
73 item.setImage(i, image);
74 }
75 }
76 }
77
78 protected Table getTable() {
79 return table;
80 }
81
82 }