]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/gcr/GcrContentTreeView.java
Merge remote-tracking branch 'origin/unstable' into testing
[lgpl/argeo-commons.git] / eclipse / org.argeo.cms.swt / src / org / argeo / cms / swt / gcr / GcrContentTreeView.java
1 package org.argeo.cms.swt.gcr;
2
3 import java.nio.file.Path;
4 import java.nio.file.Paths;
5
6 import javax.xml.namespace.QName;
7
8 import org.argeo.api.acr.Content;
9 import org.argeo.cms.acr.fs.FsContentProvider;
10 import org.argeo.cms.swt.CmsSwtUtils;
11 import org.eclipse.swt.SWT;
12 import org.eclipse.swt.layout.FillLayout;
13 import org.eclipse.swt.layout.GridData;
14 import org.eclipse.swt.layout.GridLayout;
15 import org.eclipse.swt.widgets.Composite;
16 import org.eclipse.swt.widgets.Display;
17 import org.eclipse.swt.widgets.Shell;
18 import org.eclipse.swt.widgets.Table;
19 import org.eclipse.swt.widgets.TableColumn;
20 import org.eclipse.swt.widgets.TableItem;
21 import org.eclipse.swt.widgets.Tree;
22 import org.eclipse.swt.widgets.TreeItem;
23
24 public class GcrContentTreeView extends Composite {
25 private Tree tree;
26 private Table table;
27 private Content rootContent;
28
29 private Content selected;
30
31 public GcrContentTreeView(Composite parent, int style, Content content) {
32 super(parent, style);
33 this.rootContent = content;
34 this.selected = rootContent;
35 setLayout(new GridLayout(2, false));
36 initTree();
37 GridData treeGd = CmsSwtUtils.fillHeight();
38 treeGd.widthHint = 300;
39 tree.setLayoutData(treeGd);
40 initTable();
41
42 table.setLayoutData(CmsSwtUtils.fillAll());
43 }
44
45 protected void initTree() {
46 tree = new Tree(this, 0);
47 for (Content c : rootContent) {
48 TreeItem root = new TreeItem(tree, 0);
49 root.setText(c.getName().toString());
50 root.setData(c);
51 new TreeItem(root, 0);
52 }
53 tree.addListener(SWT.Expand, event -> {
54 final TreeItem root = (TreeItem) event.item;
55 TreeItem[] items = root.getItems();
56 for (TreeItem item : items) {
57 if (item.getData() != null)
58 return;
59 item.dispose();
60 }
61 Content content = (Content) root.getData();
62 for (Content c : content) {
63 TreeItem item = new TreeItem(root, 0);
64 item.setText(c.getName().toString());
65 item.setData(c);
66 boolean hasChildren = true;
67 if (hasChildren) {
68 new TreeItem(item, 0);
69 }
70 }
71 });
72 tree.addListener(SWT.Selection, event -> {
73 TreeItem item = (TreeItem) event.item;
74 selected = (Content) item.getData();
75 refreshTable();
76 });
77 }
78
79 protected void initTable() {
80 table = new Table(this, 0);
81 table.setLinesVisible(true);
82 table.setHeaderVisible(true);
83 TableColumn keyCol = new TableColumn(table, SWT.NONE);
84 keyCol.setText("Attribute");
85 keyCol.setWidth(200);
86 TableColumn valueCol = new TableColumn(table, SWT.NONE);
87 valueCol.setText("Value");
88 keyCol.setWidth(300);
89 refreshTable();
90 }
91
92 protected void refreshTable() {
93 for (TableItem item : table.getItems()) {
94 item.dispose();
95 }
96 for (QName key : selected.keySet()) {
97 TableItem item = new TableItem(table, 0);
98 item.setText(0, key.toString());
99 Object value = selected.get(key);
100 item.setText(1, value.toString());
101 }
102 table.getColumn(0).pack();
103 table.getColumn(1).pack();
104 }
105
106 public static void main(String[] args) {
107 Path basePath;
108 if (args.length > 0) {
109 basePath = Paths.get(args[0]);
110 } else {
111 basePath = Paths.get(System.getProperty("user.home"));
112 }
113
114 final Display display = new Display();
115 final Shell shell = new Shell(display);
116 shell.setText(basePath.toString());
117 shell.setLayout(new FillLayout());
118
119 FsContentProvider contentSession = new FsContentProvider(basePath);
120 // GcrContentTreeView treeView = new GcrContentTreeView(shell, 0, contentSession.get("/"));
121
122 shell.setSize(shell.computeSize(800, 600));
123 shell.open();
124 while (!shell.isDisposed()) {
125 if (!display.readAndDispatch())
126 display.sleep();
127 }
128 display.dispose();
129 }
130 }