]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/SimpleFsBrowser.java
Introduce basic NIO Java 7 UI
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui / src / org / argeo / eclipse / ui / fs / SimpleFsBrowser.java
1 package org.argeo.eclipse.ui.fs;
2
3 import java.nio.file.Files;
4 import java.nio.file.Path;
5 import java.util.ArrayList;
6 import java.util.List;
7
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;
26
27 /**
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.
30 */
31 public class SimpleFsBrowser extends Composite {
32 private final static Log log = LogFactory.getLog(SimpleFsBrowser.class);
33 private static final long serialVersionUID = -40347919096946585L;
34
35 private Path currSelected;
36 private FsTableViewer bookmarksViewer;
37 private FsTableViewer directoryDisplayViewer;
38
39 public SimpleFsBrowser(Composite parent, int style) {
40 super(parent, style);
41 createContent(this);
42 // parent.layout(true, true);
43 }
44
45 private void createContent(Composite parent) {
46 parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
47
48 SashForm form = new SashForm(parent, SWT.HORIZONTAL);
49 Composite leftCmp = new Composite(form, SWT.NONE);
50 populateBookmarks(leftCmp);
51
52 Composite rightCmp = new Composite(form, SWT.BORDER);
53 populateDisplay(rightCmp);
54 form.setLayoutData(EclipseUiUtils.fillAll());
55 form.setWeights(new int[] { 1, 3 });
56 }
57
58 public void setInput(Path... paths) {
59 bookmarksViewer.setPathsInput(paths);
60 bookmarksViewer.getTable().getParent().layout(true, true);
61 }
62
63 private void populateBookmarks(final Composite parent) {
64 // GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
65 // layout.verticalSpacing = 5;
66 parent.setLayout(new GridLayout());
67
68 ISelectionChangedListener selList = new MySelectionChangedListener();
69
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);
77
78 appendTitle(parent, "Jcr + File");
79
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);
86
87 // FileSystemProvider fsProvider = new JackrabbitMemoryFsProvider();
88 // try {
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();
94 // }
95 }
96
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);
105 return titleLbl;
106 }
107
108 private class MySelectionChangedListener implements ISelectionChangedListener {
109 @Override
110 public void selectionChanged(SelectionChangedEvent event) {
111 IStructuredSelection selection = (IStructuredSelection) bookmarksViewer.getSelection();
112 if (selection.isEmpty())
113 return;
114 else {
115 Path newSelected = (Path) selection.getFirstElement();
116 if (newSelected.equals(currSelected))
117 return;
118 currSelected = newSelected;
119 directoryDisplayViewer.setInput(currSelected, "*");
120 }
121 }
122 }
123
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());
135
136 table.addKeyListener(new KeyListener() {
137 private static final long serialVersionUID = -8083424284436715709L;
138
139 @Override
140 public void keyReleased(KeyEvent e) {
141 }
142
143 @Override
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))
152 return;
153 if (selected != null) {
154 currSelected = selected;
155 directoryDisplayViewer.setInput(currSelected, "*");
156 }
157 } else if (e.keyCode == SWT.BS) {
158 currSelected = currSelected.getParent();
159 directoryDisplayViewer.setInput(currSelected, "*");
160 directoryDisplayViewer.getTable().setFocus();
161 }
162 }
163 });
164
165 directoryDisplayViewer.addDoubleClickListener(new IDoubleClickListener() {
166 @Override
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))
174 return;
175 currSelected = selected;
176 directoryDisplayViewer.setInput(currSelected, "*");
177 }
178 }
179 });
180
181 directoryDisplayViewer.addDoubleClickListener(new IDoubleClickListener() {
182 @Override
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))
190 return;
191 currSelected = selected;
192 directoryDisplayViewer.setInput(currSelected, "*");
193 }
194 }
195 });
196 }
197 }