]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/fs/SimpleFsTreeBrowser.java
Make CMS wizard more robust
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui / src / org / argeo / eclipse / ui / fs / SimpleFsTreeBrowser.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.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;
24
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;
29
30 private Path currSelected;
31 private FsTreeViewer treeViewer;
32 private FsTableViewer directoryDisplayViewer;
33
34 public SimpleFsTreeBrowser(Composite parent, int style) {
35 super(parent, style);
36 createContent(this);
37 // parent.layout(true, true);
38 }
39
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);
44 populateTree(child1);
45 Composite child2 = new Composite(form, SWT.BORDER);
46 populateDisplay(child2);
47 form.setLayoutData(EclipseUiUtils.fillAll());
48 form.setWeights(new int[] { 1, 3 });
49 }
50
51 public void setInput(Path... paths) {
52 treeViewer.setPathsInput(paths);
53 treeViewer.getControl().getParent().layout(true, true);
54 }
55
56 private void populateTree(final Composite parent) {
57 // GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
58 // layout.verticalSpacing = 5;
59 parent.setLayout(new GridLayout());
60
61 ISelectionChangedListener selList = new MySelectionChangedListener();
62
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);
69 }
70
71 private class MySelectionChangedListener implements ISelectionChangedListener {
72 @Override
73 public void selectionChanged(SelectionChangedEvent event) {
74 IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
75 if (selection.isEmpty())
76 return;
77 else {
78 Path newSelected = (Path) selection.getFirstElement();
79 if (newSelected.equals(currSelected))
80 return;
81 currSelected = newSelected;
82 if (Files.isDirectory(currSelected))
83 directoryDisplayViewer.setInput(currSelected, "*");
84 }
85 }
86 }
87
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());
99
100 table.addKeyListener(new KeyListener() {
101 private static final long serialVersionUID = -8083424284436715709L;
102
103 @Override
104 public void keyReleased(KeyEvent e) {
105 }
106
107 @Override
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))
116 return;
117 if (selected != null) {
118 currSelected = selected;
119 directoryDisplayViewer.setInput(currSelected, "*");
120 }
121 } else if (e.keyCode == SWT.BS) {
122 currSelected = currSelected.getParent();
123 directoryDisplayViewer.setInput(currSelected, "*");
124 directoryDisplayViewer.getTable().setFocus();
125 }
126 }
127 });
128 }
129 }