]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java
Start working on pseudo Eclipse Forms in order to ease transition to
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui / src / org / argeo / eclipse / ui / fs / FsTableViewer.java
1 package org.argeo.eclipse.ui.fs;
2
3 import java.nio.file.Path;
4 import java.util.List;
5
6 import org.argeo.eclipse.ui.ColumnDefinition;
7 import org.eclipse.jface.viewers.CellLabelProvider;
8 import org.eclipse.jface.viewers.ILazyContentProvider;
9 import org.eclipse.jface.viewers.TableViewer;
10 import org.eclipse.jface.viewers.TableViewerColumn;
11 import org.eclipse.jface.viewers.Viewer;
12 import org.eclipse.swt.SWT;
13 import org.eclipse.swt.layout.GridData;
14 import org.eclipse.swt.widgets.Composite;
15 import org.eclipse.swt.widgets.Table;
16 import org.eclipse.swt.widgets.TableColumn;
17
18 /**
19 * Canonical implementation of a JFace table viewer to display the content of a
20 * file folder
21 */
22 public class FsTableViewer extends TableViewer {
23 private static final long serialVersionUID = -5632407542678477234L;
24
25 private boolean showHiddenItems = false;
26 private boolean folderFirst = true;
27 private boolean reverseOrder = false;
28 private String orderProperty = FsUiConstants.PROPERTY_NAME;
29
30 public FsTableViewer(Composite parent, int style) {
31 super(parent, style | SWT.VIRTUAL);
32 }
33
34 public Table configureDefaultSingleColumnTable(int tableWidthHint) {
35
36 return configureDefaultSingleColumnTable(tableWidthHint, new FileIconNameLabelProvider());
37 }
38
39 public Table configureDefaultSingleColumnTable(int tableWidthHint, CellLabelProvider labelProvider) {
40 Table table = this.getTable();
41 table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
42 table.setLinesVisible(false);
43 table.setHeaderVisible(false);
44 // CmsUtils.markup(table);
45 // CmsUtils.style(table, MaintenanceStyles.BROWSER_COLUMN);
46
47 TableViewerColumn column = new TableViewerColumn(this, SWT.NONE);
48 TableColumn tcol = column.getColumn();
49 tcol.setWidth(tableWidthHint);
50 column.setLabelProvider(labelProvider);
51 this.setContentProvider(new MyLazyCP());
52 return table;
53 }
54
55 public Table configureDefaultTable(List<ColumnDefinition> columns) {
56 this.setContentProvider(new MyLazyCP());
57 Table table = this.getTable();
58 table.setLinesVisible(true);
59 table.setHeaderVisible(true);
60 // CmsUtils.markup(table);
61 // CmsUtils.style(table, MaintenanceStyles.BROWSER_COLUMN);
62 for (ColumnDefinition colDef : columns) {
63 TableViewerColumn column = new TableViewerColumn(this, SWT.NONE);
64 column.setLabelProvider(colDef.getLabelProvider());
65 TableColumn tcol = column.getColumn();
66 tcol.setResizable(true);
67 tcol.setText(colDef.getLabel());
68 tcol.setWidth(colDef.getMinWidth());
69 }
70 return table;
71 }
72
73 public void setInput(Path dir, String filter) {
74 Object[] rows = FsUiUtils.getChildren(dir, filter, showHiddenItems, folderFirst, orderProperty, reverseOrder);
75 this.setInput(rows);
76 int length = rows == null ? 0 : rows.length;
77 this.setItemCount(length);
78 this.refresh();
79 }
80
81 /** Directly displays bookmarks **/
82 public void setPathsInput(Path... paths) {
83 this.setInput((Object[]) paths);
84 this.setItemCount(paths.length);
85 this.refresh();
86 }
87
88 private class MyLazyCP implements ILazyContentProvider {
89 private static final long serialVersionUID = 9096550041395433128L;
90 private Object[] elements;
91
92 public void dispose() {
93 }
94
95 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
96 // IMPORTANT: don't forget this: an exception will be thrown if
97 // a selected object is not part of the results anymore.
98 viewer.setSelection(null);
99 this.elements = (Object[]) newInput;
100 }
101
102 public void updateElement(int index) {
103 FsTableViewer.this.replace(elements[index], index);
104 }
105 }
106 }