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
.DoubleClickEvent
;
13 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
14 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
15 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
16 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
17 import org
.eclipse
.swt
.SWT
;
18 import org
.eclipse
.swt
.custom
.SashForm
;
19 import org
.eclipse
.swt
.events
.KeyEvent
;
20 import org
.eclipse
.swt
.events
.KeyListener
;
21 import org
.eclipse
.swt
.layout
.GridData
;
22 import org
.eclipse
.swt
.layout
.GridLayout
;
23 import org
.eclipse
.swt
.widgets
.Composite
;
24 import org
.eclipse
.swt
.widgets
.Label
;
25 import org
.eclipse
.swt
.widgets
.Table
;
28 * Experimental UI upon Java 7 nio files api: SashForm layout with bookmarks on
29 * the left hand side and a simple table on the right hand side.
31 public class SimpleFsBrowser
extends Composite
{
32 private final static Log log
= LogFactory
.getLog(SimpleFsBrowser
.class);
33 private static final long serialVersionUID
= -40347919096946585L;
35 private Path currSelected
;
36 private FsTableViewer bookmarksViewer
;
37 private FsTableViewer directoryDisplayViewer
;
39 public SimpleFsBrowser(Composite parent
, int style
) {
42 // parent.layout(true, true);
45 private void createContent(Composite parent
) {
46 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
48 SashForm form
= new SashForm(parent
, SWT
.HORIZONTAL
);
49 Composite leftCmp
= new Composite(form
, SWT
.NONE
);
50 populateBookmarks(leftCmp
);
52 Composite rightCmp
= new Composite(form
, SWT
.BORDER
);
53 populateDisplay(rightCmp
);
54 form
.setLayoutData(EclipseUiUtils
.fillAll());
55 form
.setWeights(new int[] { 1, 3 });
58 public void setInput(Path
... paths
) {
59 bookmarksViewer
.setPathsInput(paths
);
60 bookmarksViewer
.getTable().getParent().layout(true, true);
63 private void populateBookmarks(final Composite parent
) {
64 // GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
65 // layout.verticalSpacing = 5;
66 parent
.setLayout(new GridLayout());
68 ISelectionChangedListener selList
= new MySelectionChangedListener();
70 appendTitle(parent
, "My bookmarks");
71 bookmarksViewer
= new FsTableViewer(parent
, SWT
.MULTI
| SWT
.NO_SCROLL
);
72 Table table
= bookmarksViewer
.configureDefaultSingleColumnTable(500);
73 GridData gd
= EclipseUiUtils
.fillWidth();
74 gd
.horizontalIndent
= 10;
75 table
.setLayoutData(gd
);
76 bookmarksViewer
.addSelectionChangedListener(selList
);
78 appendTitle(parent
, "Jcr + File");
80 FsTableViewer jcrFilesViewers
= new FsTableViewer(parent
, SWT
.MULTI
| SWT
.NO_SCROLL
);
81 table
= jcrFilesViewers
.configureDefaultSingleColumnTable(500);
82 gd
= EclipseUiUtils
.fillWidth();
83 gd
.horizontalIndent
= 10;
84 table
.setLayoutData(gd
);
85 jcrFilesViewers
.addSelectionChangedListener(selList
);
87 // FileSystemProvider fsProvider = new JackrabbitMemoryFsProvider();
89 // Path testPath = fsProvider.getPath(new URI("jcr+memory:/"));
90 // jcrFilesViewers.setPathsInput(testPath);
91 // } catch (URISyntaxException e) {
92 // // TODO Auto-generated catch block
93 // e.printStackTrace();
97 private Label
appendTitle(Composite parent
, String value
) {
98 Label titleLbl
= new Label(parent
, SWT
.NONE
);
99 titleLbl
.setText(value
);
100 titleLbl
.setFont(EclipseUiUtils
.getBoldFont(parent
));
101 GridData gd
= EclipseUiUtils
.fillWidth();
102 gd
.horizontalIndent
= 5;
103 gd
.verticalIndent
= 5;
104 titleLbl
.setLayoutData(gd
);
108 private class MySelectionChangedListener
implements ISelectionChangedListener
{
110 public void selectionChanged(SelectionChangedEvent event
) {
111 IStructuredSelection selection
= (IStructuredSelection
) bookmarksViewer
.getSelection();
112 if (selection
.isEmpty())
115 Path newSelected
= (Path
) selection
.getFirstElement();
116 if (newSelected
.equals(currSelected
))
118 currSelected
= newSelected
;
119 directoryDisplayViewer
.setInput(currSelected
, "*");
124 private void populateDisplay(final Composite parent
) {
125 parent
.setLayout(EclipseUiUtils
.noSpaceGridLayout());
126 directoryDisplayViewer
= new FsTableViewer(parent
, SWT
.MULTI
);
127 List
<ColumnDefinition
> colDefs
= new ArrayList
<>();
128 colDefs
.add(new ColumnDefinition(new FileIconNameLabelProvider(), "Name", 200));
129 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_SIZE
), "Size", 100));
130 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_TYPE
), "Type", 250));
131 colDefs
.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants
.PROPERTY_LAST_MODIFIED
),
132 "Last modified", 200));
133 Table table
= directoryDisplayViewer
.configureDefaultTable(colDefs
);
134 table
.setLayoutData(EclipseUiUtils
.fillAll());
136 table
.addKeyListener(new KeyListener() {
137 private static final long serialVersionUID
= -8083424284436715709L;
140 public void keyReleased(KeyEvent e
) {
144 public void keyPressed(KeyEvent e
) {
145 log
.debug("Key event received: " + e
.keyCode
);
146 IStructuredSelection selection
= (IStructuredSelection
) directoryDisplayViewer
.getSelection();
147 Path selected
= null;
148 if (!selection
.isEmpty())
149 selected
= ((Path
) selection
.getFirstElement());
150 if (e
.keyCode
== SWT
.CR
) {
151 if (!Files
.isDirectory(selected
))
153 if (selected
!= null) {
154 currSelected
= selected
;
155 directoryDisplayViewer
.setInput(currSelected
, "*");
157 } else if (e
.keyCode
== SWT
.BS
) {
158 currSelected
= currSelected
.getParent();
159 directoryDisplayViewer
.setInput(currSelected
, "*");
160 directoryDisplayViewer
.getTable().setFocus();
165 directoryDisplayViewer
.addDoubleClickListener(new IDoubleClickListener() {
167 public void doubleClick(DoubleClickEvent event
) {
168 IStructuredSelection selection
= (IStructuredSelection
) directoryDisplayViewer
.getSelection();
169 Path selected
= null;
170 if (!selection
.isEmpty())
171 selected
= ((Path
) selection
.getFirstElement());
172 if (selected
!= null) {
173 if (!Files
.isDirectory(selected
))
175 currSelected
= selected
;
176 directoryDisplayViewer
.setInput(currSelected
, "*");
181 directoryDisplayViewer
.addDoubleClickListener(new IDoubleClickListener() {
183 public void doubleClick(DoubleClickEvent event
) {
184 IStructuredSelection selection
= (IStructuredSelection
) directoryDisplayViewer
.getSelection();
185 Path selected
= null;
186 if (!selection
.isEmpty())
187 selected
= ((Path
) selection
.getFirstElement());
188 if (selected
!= null) {
189 if (!Files
.isDirectory(selected
))
191 currSelected
= selected
;
192 directoryDisplayViewer
.setInput(currSelected
, "*");