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
.apache
.commons
.logging
.Log
;
9 import org
.apache
.commons
.logging
.LogFactory
;
10 import org
.argeo
.eclipse
.ui
.ColumnDefinition
;
11 import org
.argeo
.eclipse
.ui
.EclipseUiUtils
;
12 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
13 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
14 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
15 import org
.eclipse
.swt
.SWT
;
16 import org
.eclipse
.swt
.custom
.SashForm
;
17 import org
.eclipse
.swt
.events
.KeyEvent
;
18 import org
.eclipse
.swt
.events
.KeyListener
;
19 import org
.eclipse
.swt
.layout
.GridData
;
20 import org
.eclipse
.swt
.layout
.GridLayout
;
21 import org
.eclipse
.swt
.widgets
.Composite
;
22 import org
.eclipse
.swt
.widgets
.Table
;
23 import org
.eclipse
.swt
.widgets
.Tree
;
25 /** A simple Java 7 nio files browser with a tree */
26 public class SimpleFsTreeBrowser
extends Composite
{
27 private final static Log log
= LogFactory
.getLog(SimpleFsTreeBrowser
.class);
28 private static final long serialVersionUID
= -40347919096946585L;
30 private Path currSelected
;
31 private FsTreeViewer treeViewer
;
32 private FsTableViewer directoryDisplayViewer
;
34 public SimpleFsTreeBrowser(Composite parent
, int style
) {
37 // parent.layout(true, true);
40 private void createContent(Composite parent
) {
41 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
42 SashForm form
= new SashForm(parent
, SWT
.HORIZONTAL
);
43 Composite child1
= new Composite(form
, SWT
.NONE
);
45 Composite child2
= new Composite(form
, SWT
.BORDER
);
46 populateDisplay(child2
);
47 form
.setLayoutData(EclipseUiUtils
.fillAll());
48 form
.setWeights(new int[] { 1, 3 });
51 public void setInput(Path
... paths
) {
52 treeViewer
.setPathsInput(paths
);
53 treeViewer
.getControl().getParent().layout(true, true);
56 private void populateTree(final Composite parent
) {
57 // GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
58 // layout.verticalSpacing = 5;
59 parent
.setLayout(new GridLayout());
61 ISelectionChangedListener selList
= new MySelectionChangedListener();
63 treeViewer
= new FsTreeViewer(parent
, SWT
.MULTI
);
64 Tree tree
= treeViewer
.configureDefaultSingleColumnTable(500);
65 GridData gd
= EclipseUiUtils
.fillAll();
66 // gd.horizontalIndent = 10;
67 tree
.setLayoutData(gd
);
68 treeViewer
.addSelectionChangedListener(selList
);
71 private class MySelectionChangedListener
implements ISelectionChangedListener
{
73 public void selectionChanged(SelectionChangedEvent event
) {
74 IStructuredSelection selection
= (IStructuredSelection
) treeViewer
.getSelection();
75 if (selection
.isEmpty())
78 Path newSelected
= (Path
) selection
.getFirstElement();
79 if (newSelected
.equals(currSelected
))
81 currSelected
= newSelected
;
82 if (Files
.isDirectory(currSelected
))
83 directoryDisplayViewer
.setInput(currSelected
, "*");
88 private void populateDisplay(final Composite parent
) {
89 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
90 directoryDisplayViewer
= new FsTableViewer(parent
, SWT
.MULTI
);
91 List
<ColumnDefinition
> colDefs
= new ArrayList
<>();
92 colDefs
.add(new ColumnDefinition(new FileIconNameLabelProvider(), "Name", 200, 200));
93 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_SIZE
), "Size", 100, 100));
94 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_TYPE
), "Type", 300, 300));
95 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_LAST_MODIFIED
),
96 "Last modified", 100, 100));
97 Table table
= directoryDisplayViewer
.configureDefaultTable(colDefs
);
98 table
.setLayoutData(EclipseUiUtils
.fillAll());
100 table
.addKeyListener(new KeyListener() {
101 private static final long serialVersionUID
= -8083424284436715709L;
104 public void keyReleased(KeyEvent e
) {
108 public void keyPressed(KeyEvent e
) {
109 log
.debug("Key event received: " + e
.keyCode
);
110 IStructuredSelection selection
= (IStructuredSelection
) directoryDisplayViewer
.getSelection();
111 Path selected
= null;
112 if (!selection
.isEmpty())
113 selected
= ((Path
) selection
.getFirstElement());
114 if (e
.keyCode
== SWT
.CR
) {
115 if (!Files
.isDirectory(selected
))
117 if (selected
!= null) {
118 currSelected
= selected
;
119 directoryDisplayViewer
.setInput(currSelected
, "*");
121 } else if (e
.keyCode
== SWT
.BS
) {
122 currSelected
= currSelected
.getParent();
123 directoryDisplayViewer
.setInput(currSelected
, "*");
124 directoryDisplayViewer
.getTable().setFocus();