X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.eclipse.ui%2Fsrc%2Forg%2Fargeo%2Feclipse%2Fui%2Ffs%2FFsTableViewer.java;h=3476739bcbd2e24fdc0a95607e23f2fb47418eb6;hb=95cb03bd2c79197f2bd333b6881101128313cd39;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..3476739bc 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 @@ -1,9 +1,11 @@ package org.argeo.eclipse.ui.fs; +import java.nio.file.Files; 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; @@ -31,6 +33,11 @@ public class FsTableViewer extends TableViewer { } 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 +48,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 +72,31 @@ 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 { + 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(); } @@ -94,7 +123,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); } } }