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;
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);
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;
}
}
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();
}
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;
}
public void updateElement(int index) {
- FsTableViewer.this.replace(elements[index], index);
+ if (index < elements.length)
+ FsTableViewer.this.replace(elements[index], index);
}
}
}