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