1 package org
.argeo
.eclipse
.ui
.fs
;
3 import java
.nio
.file
.Files
;
4 import java
.nio
.file
.Path
;
5 import java
.util
.ArrayList
;
8 import org
.argeo
.api
.cms
.CmsLog
;
9 import org
.argeo
.eclipse
.ui
.ColumnDefinition
;
10 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
11 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
12 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
13 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
14 import org
.eclipse
.swt
.SWT
;
15 import org
.eclipse
.swt
.custom
.SashForm
;
16 import org
.eclipse
.swt
.events
.KeyEvent
;
17 import org
.eclipse
.swt
.events
.KeyListener
;
18 import org
.eclipse
.swt
.layout
.GridData
;
19 import org
.eclipse
.swt
.layout
.GridLayout
;
20 import org
.eclipse
.swt
.widgets
.Composite
;
21 import org
.eclipse
.swt
.widgets
.Table
;
22 import org
.eclipse
.swt
.widgets
.Tree
;
24 /** A simple Java 7 nio files browser with a tree */
25 public class SimpleFsTreeBrowser
extends Composite
{
26 private final static CmsLog log
= CmsLog
.getLog(SimpleFsTreeBrowser
.class);
27 private static final long serialVersionUID
= -40347919096946585L;
29 private Path currSelected
;
30 private FsTreeViewer treeViewer
;
31 private FsTableViewer directoryDisplayViewer
;
33 public SimpleFsTreeBrowser(Composite parent
, int style
) {
36 // parent.layout(true, true);
39 private void createContent(Composite parent
) {
40 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
41 SashForm form
= new SashForm(parent
, SWT
.HORIZONTAL
);
42 Composite child1
= new Composite(form
, SWT
.NONE
);
44 Composite child2
= new Composite(form
, SWT
.BORDER
);
45 populateDisplay(child2
);
46 form
.setLayoutData(EclipseUiUtils
.fillAll());
47 form
.setWeights(new int[] { 1, 3 });
50 public void setInput(Path
... paths
) {
51 treeViewer
.setPathsInput(paths
);
52 treeViewer
.getControl().getParent().layout(true, true);
55 private void populateTree(final Composite parent
) {
56 // GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
57 // layout.verticalSpacing = 5;
58 parent
.setLayout(new GridLayout());
60 ISelectionChangedListener selList
= new MySelectionChangedListener();
62 treeViewer
= new FsTreeViewer(parent
, SWT
.MULTI
);
63 Tree tree
= treeViewer
.configureDefaultSingleColumnTable(500);
64 GridData gd
= EclipseUiUtils
.fillAll();
65 // gd.horizontalIndent = 10;
66 tree
.setLayoutData(gd
);
67 treeViewer
.addSelectionChangedListener(selList
);
70 private class MySelectionChangedListener
implements ISelectionChangedListener
{
72 public void selectionChanged(SelectionChangedEvent event
) {
73 IStructuredSelection selection
= (IStructuredSelection
) treeViewer
.getSelection();
74 if (selection
.isEmpty())
77 Path newSelected
= (Path
) selection
.getFirstElement();
78 if (newSelected
.equals(currSelected
))
80 currSelected
= newSelected
;
81 if (Files
.isDirectory(currSelected
))
82 directoryDisplayViewer
.setInput(currSelected
, "*");
87 private void populateDisplay(final Composite parent
) {
88 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
89 directoryDisplayViewer
= new FsTableViewer(parent
, SWT
.MULTI
);
90 List
<ColumnDefinition
> colDefs
= new ArrayList
<>();
91 colDefs
.add(new ColumnDefinition(new FileIconNameLabelProvider(), "Name", 200, 200));
92 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_SIZE
), "Size", 100, 100));
93 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_TYPE
), "Type", 300, 300));
94 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_LAST_MODIFIED
),
95 "Last modified", 100, 100));
96 Table table
= directoryDisplayViewer
.configureDefaultTable(colDefs
);
97 table
.setLayoutData(EclipseUiUtils
.fillAll());
99 table
.addKeyListener(new KeyListener() {
100 private static final long serialVersionUID
= -8083424284436715709L;
103 public void keyReleased(KeyEvent e
) {
107 public void keyPressed(KeyEvent e
) {
108 log
.debug("Key event received: " + e
.keyCode
);
109 IStructuredSelection selection
= (IStructuredSelection
) directoryDisplayViewer
.getSelection();
110 Path selected
= null;
111 if (!selection
.isEmpty())
112 selected
= ((Path
) selection
.getFirstElement());
113 if (e
.keyCode
== SWT
.CR
) {
114 if (!Files
.isDirectory(selected
))
116 if (selected
!= null) {
117 currSelected
= selected
;
118 directoryDisplayViewer
.setInput(currSelected
, "*");
120 } else if (e
.keyCode
== SWT
.BS
) {
121 currSelected
= currSelected
.getParent();
122 directoryDisplayViewer
.setInput(currSelected
, "*");
123 directoryDisplayViewer
.getTable().setFocus();