Improve E4 support
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui / src / org / argeo / eclipse / ui / fs / FsTableViewer.java
index 370d9b9bdf43f7d0ff51732a16efae1850333d6e..47258f718df314c5d02e4e4638046cd4a0ef490e 100644 (file)
@@ -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,25 @@ 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 = dir.getRoot().equals(dir);
+               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 +117,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);
                }
        }
 }