]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTabularPart.java
8fd4065ad92bce617dbcd2f195da80ddf6a49320
1 package org
.argeo
.cms
.swt
.widgets
;
3 import java
.util
.function
.Consumer
;
5 import org
.argeo
.api
.cms
.ux
.CmsIcon
;
6 import org
.argeo
.cms
.swt
.CmsSwtTheme
;
7 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
8 import org
.argeo
.cms
.ux
.widgets
.Column
;
9 import org
.argeo
.cms
.ux
.widgets
.TabularPart
;
10 import org
.eclipse
.swt
.SWT
;
11 import org
.eclipse
.swt
.events
.SelectionEvent
;
12 import org
.eclipse
.swt
.events
.SelectionListener
;
13 import org
.eclipse
.swt
.graphics
.Image
;
14 import org
.eclipse
.swt
.widgets
.Composite
;
15 import org
.eclipse
.swt
.widgets
.Table
;
16 import org
.eclipse
.swt
.widgets
.TableColumn
;
17 import org
.eclipse
.swt
.widgets
.TableItem
;
19 /** {@link TabularPart} implementation based on a {@link Table}. */
20 public class SwtTabularPart
implements TabularPart
{
21 private Composite area
;
23 private final Table table
;
25 private Consumer
<Object
> onSelected
;
26 private Consumer
<Object
> onAction
;
28 private CmsSwtTheme theme
;
30 public SwtTabularPart(Composite parent
, int style
) {
31 theme
= CmsSwtUtils
.getCmsTheme(parent
);
32 area
= new Composite(parent
, style
);
33 area
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
34 table
= new Table(area
, SWT
.VIRTUAL
| SWT
.BORDER
);
35 table
.setLinesVisible(true);
39 public void refresh() {
42 table
.addListener(SWT
.SetData
, event
-> {
43 TableItem item
= (TableItem
) event
.item
;
46 table
.setItemCount(getItemCount());
47 CmsSwtUtils
.fill(table
);
49 table
.addSelectionListener(new SelectionListener() {
50 private static final long serialVersionUID
= -5225905921522775948L;
53 public void widgetSelected(SelectionEvent e
) {
54 if (onSelected
!= null)
55 onSelected
.accept(getDataFromEvent(e
));
59 public void widgetDefaultSelected(SelectionEvent e
) {
61 onAction
.accept(getDataFromEvent(e
));
67 protected Object
getDataFromEvent(SelectionEvent e
) {
68 Object data
= e
.item
.getData();
70 data
= getData(getTable().indexOf((TableItem
) e
.item
));
75 public void setInput(Object data
) {
81 public Object
getInput() {
82 return area
.getData();
85 protected void refreshItem(TableItem item
) {
86 int row
= getTable().indexOf(item
);
87 for (int i
= 0; i
< item
.getParent().getColumnCount(); i
++) {
88 Column
<Object
> column
= (Column
<Object
>) item
.getParent().getColumn(i
).getData();
89 Object data
= getData(row
);
91 String text
= data
!= null ? column
.getText(data
) : "";
93 item
.setText(i
, text
);
94 CmsIcon icon
= column
.getIcon(data
);
96 Image image
= theme
.getSmallIcon(icon
);
97 item
.setImage(i
, image
);
102 protected int getItemCount() {
106 protected Object
getData(int row
) {
110 protected Table
getTable() {
114 public void onSelected(Consumer
<Object
> onSelected
) {
115 this.onSelected
= onSelected
;
118 public void onAction(Consumer
<Object
> onAction
) {
119 this.onAction
= onAction
;
123 public void addColumn(Column
<?
> column
) {
124 TableColumn swtColumn
= new TableColumn(table
, SWT
.NONE
);
125 swtColumn
.setWidth(column
.getWidth());
126 swtColumn
.setData(column
);
130 public Composite
getArea() {