]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java
Introduce hierarchies in user management
[lgpl/argeo-commons.git] / eclipse / org.argeo.cms.swt / src / org / argeo / cms / swt / widgets / SwtTabularPart.java
1 package org.argeo.cms.swt.widgets;
2
3 import java.util.function.Consumer;
4
5 import org.argeo.cms.swt.CmsSwtUtils;
6 import org.argeo.cms.ux.widgets.TabularPart;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.events.SelectionEvent;
9 import org.eclipse.swt.events.SelectionListener;
10 import org.eclipse.swt.widgets.Composite;
11 import org.eclipse.swt.widgets.Table;
12 import org.eclipse.swt.widgets.TableItem;
13
14 /** {@link TabularPart} implementation based on a {@link Table}. */
15 public class SwtTabularPart implements TabularPart {
16 private Composite area;
17
18 private final Table table;
19
20 private Consumer<Object> onSelected;
21 private Consumer<Object> onAction;
22
23 public SwtTabularPart(Composite parent, int style) {
24 area = new Composite(parent, style);
25 area.setLayout(CmsSwtUtils.noSpaceGridLayout());
26 table = new Table(area, SWT.VIRTUAL | SWT.BORDER);
27 }
28
29 @Override
30 public void refresh() {
31 // TODO optimise
32 table.clearAll();
33 table.addListener(SWT.SetData, event -> {
34 TableItem item = (TableItem) event.item;
35 refreshItem(item);
36 });
37 table.setItemCount(getItemCount());
38 CmsSwtUtils.fill(table);
39
40 table.addSelectionListener(new SelectionListener() {
41 private static final long serialVersionUID = -5225905921522775948L;
42
43 @Override
44 public void widgetSelected(SelectionEvent e) {
45 if (onSelected != null)
46 onSelected.accept(e.item.getData());
47 }
48
49 @Override
50 public void widgetDefaultSelected(SelectionEvent e) {
51 if (onAction != null)
52 onAction.accept(e.item.getData());
53 }
54 });
55
56 }
57
58 @Override
59 public void setInput(Object data) {
60 area.setData(data);
61 refresh();
62 }
63
64 @Override
65 public Object getInput() {
66 return area.getData();
67 }
68
69 protected void refreshItem(TableItem item) {
70
71 }
72
73 protected int getItemCount() {
74 return 0;
75 }
76
77 protected Table getTable() {
78 return table;
79 }
80
81 public void onSelected(Consumer<Object> onSelected) {
82 this.onSelected = onSelected;
83 }
84
85 public void onAction(Consumer<Object> onAction) {
86 this.onAction = onAction;
87 }
88
89 }