]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/SimpleFsBrowser.java
Start working on pseudo Eclipse Forms in order to ease transition to
[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.jface.viewers.Viewer;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.custom.SashForm;
20 import org.eclipse.swt.events.KeyEvent;
21 import org.eclipse.swt.events.KeyListener;
22 import org.eclipse.swt.layout.GridData;
23 import org.eclipse.swt.layout.GridLayout;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Label;
26 import org.eclipse.swt.widgets.Table;
27
28 /**
29 * Experimental UI upon Java 7 nio files api: SashForm layout with bookmarks on
30 * the left hand side and a simple table on the right hand side.
31 */
32 public class SimpleFsBrowser extends Composite {
33 private final static Log log = LogFactory.getLog(SimpleFsBrowser.class);
34 private static final long serialVersionUID = -40347919096946585L;
35
36 private Path currSelected;
37 private FsTableViewer bookmarksViewer;
38 private FsTableViewer directoryDisplayViewer;
39
40 public SimpleFsBrowser(Composite parent, int style) {
41 super(parent, style);
42 createContent(this);
43 // parent.layout(true, true);
44 }
45
46 public Viewer getViewer() {
47 return directoryDisplayViewer;
48 }
49
50 private void createContent(Composite parent) {
51 parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
52
53 SashForm form = new SashForm(parent, SWT.HORIZONTAL);
54 Composite leftCmp = new Composite(form, SWT.NONE);
55 populateBookmarks(leftCmp);
56
57 Composite rightCmp = new Composite(form, SWT.BORDER);
58 populateDisplay(rightCmp);
59 form.setLayoutData(EclipseUiUtils.fillAll());
60 form.setWeights(new int[] { 1, 3 });
61 }
62
63 public void setInput(Path... paths) {
64 bookmarksViewer.setPathsInput(paths);
65 bookmarksViewer.getTable().getParent().layout(true, true);
66 }
67
68 private void populateBookmarks(final Composite parent) {
69 // GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
70 // layout.verticalSpacing = 5;
71 parent.setLayout(new GridLayout());
72
73 ISelectionChangedListener selList = new MySelectionChangedListener();
74
75 appendTitle(parent, "My bookmarks");
76 bookmarksViewer = new FsTableViewer(parent, SWT.MULTI | SWT.NO_SCROLL);
77 Table table = bookmarksViewer.configureDefaultSingleColumnTable(500);
78 GridData gd = EclipseUiUtils.fillWidth();
79 gd.horizontalIndent = 10;
80 table.setLayoutData(gd);
81 bookmarksViewer.addSelectionChangedListener(selList);
82
83 appendTitle(parent, "Jcr + File");
84
85 FsTableViewer jcrFilesViewers = new FsTableViewer(parent, SWT.MULTI | SWT.NO_SCROLL);
86 table = jcrFilesViewers.configureDefaultSingleColumnTable(500);
87 gd = EclipseUiUtils.fillWidth();
88 gd.horizontalIndent = 10;
89 table.setLayoutData(gd);
90 jcrFilesViewers.addSelectionChangedListener(selList);
91
92 // FileSystemProvider fsProvider = new JackrabbitMemoryFsProvider();
93 // try {
94 // Path testPath = fsProvider.getPath(new URI("jcr+memory:/"));
95 // jcrFilesViewers.setPathsInput(testPath);
96 // } catch (URISyntaxException e) {
97 // // TODO Auto-generated catch block
98 // e.printStackTrace();
99 // }
100 }
101
102 private Label appendTitle(Composite parent, String value) {
103 Label titleLbl = new Label(parent, SWT.NONE);
104 titleLbl.setText(value);
105 titleLbl.setFont(EclipseUiUtils.getBoldFont(parent));
106 GridData gd = EclipseUiUtils.fillWidth();
107 gd.horizontalIndent = 5;
108 gd.verticalIndent = 5;
109 titleLbl.setLayoutData(gd);
110 return titleLbl;
111 }
112
113 private class MySelectionChangedListener implements ISelectionChangedListener {
114 @Override
115 public void selectionChanged(SelectionChangedEvent event) {
116 IStructuredSelection selection = (IStructuredSelection) bookmarksViewer.getSelection();
117 if (selection.isEmpty())
118 return;
119 else {
120 Path newSelected = (Path) selection.getFirstElement();
121 if (newSelected.equals(currSelected))
122 return;
123 currSelected = newSelected;
124 directoryDisplayViewer.setInput(currSelected, "*");
125 }
126 }
127 }
128
129 private void populateDisplay(final Composite parent) {
130 parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
131 directoryDisplayViewer = new FsTableViewer(parent, SWT.MULTI);
132 List<ColumnDefinition> colDefs = new ArrayList<>();
133 colDefs.add(new ColumnDefinition(new FileIconNameLabelProvider(), "Name", 200));
134 colDefs.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants.PROPERTY_SIZE), "Size", 100));
135 colDefs.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants.PROPERTY_TYPE), "Type", 250));
136 colDefs.add(new ColumnDefinition(new NioFileLabelProvider(FsUiConstants.PROPERTY_LAST_MODIFIED),
137 "Last modified", 200));
138 Table table = directoryDisplayViewer.configureDefaultTable(colDefs);
139 table.setLayoutData(EclipseUiUtils.fillAll());
140
141 table.addKeyListener(new KeyListener() {
142 private static final long serialVersionUID = -8083424284436715709L;
143
144 @Override
145 public void keyReleased(KeyEvent e) {
146 }
147
148 @Override
149 public void keyPressed(KeyEvent e) {
150 log.debug("Key event received: " + e.keyCode);
151 IStructuredSelection selection = (IStructuredSelection) directoryDisplayViewer.getSelection();
152 Path selected = null;
153 if (!selection.isEmpty())
154 selected = ((Path) selection.getFirstElement());
155 if (e.keyCode == SWT.CR) {
156 if (!Files.isDirectory(selected))
157 return;
158 if (selected != null) {
159 currSelected = selected;
160 directoryDisplayViewer.setInput(currSelected, "*");
161 }
162 } else if (e.keyCode == SWT.BS) {
163 currSelected = currSelected.getParent();
164 directoryDisplayViewer.setInput(currSelected, "*");
165 directoryDisplayViewer.getTable().setFocus();
166 }
167 }
168 });
169
170 directoryDisplayViewer.addDoubleClickListener(new IDoubleClickListener() {
171 @Override
172 public void doubleClick(DoubleClickEvent event) {
173 IStructuredSelection selection = (IStructuredSelection) directoryDisplayViewer.getSelection();
174 Path selected = null;
175 if (!selection.isEmpty())
176 selected = ((Path) selection.getFirstElement());
177 if (selected != null) {
178 if (!Files.isDirectory(selected))
179 return;
180 currSelected = selected;
181 directoryDisplayViewer.setInput(currSelected, "*");
182 }
183 }
184 });
185
186 directoryDisplayViewer.addDoubleClickListener(new IDoubleClickListener() {
187 @Override
188 public void doubleClick(DoubleClickEvent event) {
189 IStructuredSelection selection = (IStructuredSelection) directoryDisplayViewer.getSelection();
190 Path selected = null;
191 if (!selection.isEmpty())
192 selected = ((Path) selection.getFirstElement());
193 if (selected != null) {
194 if (!Files.isDirectory(selected))
195 return;
196 currSelected = selected;
197 directoryDisplayViewer.setInput(currSelected, "*");
198 }
199 }
200 });
201 }
202 }