X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.eclipse.ui%2Fsrc%2Forg%2Fargeo%2Feclipse%2Fui%2Ffs%2FFsTableViewer.java;h=3b126e90bcdcc33dcc1b380e22f228f76a31ceb4;hb=b01dfb98caa1b8b8ab8da15226bc023714b6048f;hp=370d9b9bdf43f7d0ff51732a16efae1850333d6e;hpb=5f483b2ddb6cb736bae99da3b7563c99246b273d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java b/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java index 370d9b9bd..3b126e90b 100644 --- a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java +++ b/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/FsTableViewer.java @@ -4,6 +4,7 @@ import java.nio.file.Path; import java.util.List; import org.argeo.eclipse.ui.ColumnDefinition; +import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.ILazyContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; @@ -26,11 +27,18 @@ public class FsTableViewer extends TableViewer { private boolean reverseOrder = false; private String orderProperty = FsUiConstants.PROPERTY_NAME; + private Path initialPath = null; + public FsTableViewer(Composite parent, int style) { super(parent, style | SWT.VIRTUAL); } public Table configureDefaultSingleColumnTable(int tableWidthHint) { + + return configureDefaultSingleColumnTable(tableWidthHint, new FileIconNameLabelProvider()); + } + + public Table configureDefaultSingleColumnTable(int tableWidthHint, CellLabelProvider labelProvider) { Table table = this.getTable(); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); table.setLinesVisible(false); @@ -41,7 +49,7 @@ public class FsTableViewer extends TableViewer { TableViewerColumn column = new TableViewerColumn(this, SWT.NONE); TableColumn tcol = column.getColumn(); tcol.setWidth(tableWidthHint); - column.setLabelProvider(new FileIconNameLabelProvider()); + column.setLabelProvider(labelProvider); this.setContentProvider(new MyLazyCP()); return table; } @@ -65,9 +73,33 @@ public class FsTableViewer extends TableViewer { } public void setInput(Path dir, String filter) { - Object[] rows = FsUiUtils.getChildren(dir, filter, showHiddenItems, folderFirst, orderProperty, reverseOrder); - this.setInput(rows); - int length = rows == null ? 0 : rows.length; + Path[] rows = FsUiUtils.getChildren(dir, filter, showHiddenItems, folderFirst, orderProperty, reverseOrder); + if (rows == null) { + this.setInput(null); + this.setItemCount(0); + return; + } + boolean isRoot; + try { + isRoot = dir.getRoot().equals(dir); + } catch (Exception e) { + // FIXME Workaround for JCR root node access + isRoot = dir.toString().equals("/"); + } + final Object[] res; + if (isRoot) + res = rows; + else if (initialPath != null && initialPath.equals(dir)) + res = rows; + else { + res = new Object[rows.length + 1]; + res[0] = new ParentDir(dir.getParent()); + for (int i = 1; i < res.length; i++) { + res[i] = rows[i - 1]; + } + } + this.setInput(res); + int length = res.length; this.setItemCount(length); this.refresh(); } @@ -79,6 +111,14 @@ public class FsTableViewer extends TableViewer { this.refresh(); } + /** + * A path which is to be considered as root (and thus provide no link to a + * parent directory) + */ + public void setInitialPath(Path initialPath) { + this.initialPath = initialPath; + } + private class MyLazyCP implements ILazyContentProvider { private static final long serialVersionUID = 9096550041395433128L; private Object[] elements; @@ -94,7 +134,8 @@ public class FsTableViewer extends TableViewer { } public void updateElement(int index) { - FsTableViewer.this.replace(elements[index], index); + if (index < elements.length) + FsTableViewer.this.replace(elements[index], index); } } }