package org.argeo.cms.swt.acr; import javax.xml.namespace.QName; import org.argeo.api.acr.Content; import org.argeo.cms.swt.CmsSwtUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; public class AcrContentTreeView extends Composite { private static final long serialVersionUID = -3707881216246077323L; private SwtContentHierarchicalPart hPart; // private Tree tree; private Table table; private Content rootContent; private Content selected; public AcrContentTreeView(Composite parent, int style, Content content) { super(parent, style); this.rootContent = content; this.selected = rootContent; setLayout(new GridLayout(2, false)); initTree(); GridData treeGd = CmsSwtUtils.fillHeight(); treeGd.widthHint = 300; hPart.getArea().setLayoutData(treeGd); initTable(); table.setLayoutData(CmsSwtUtils.fillAll()); } protected void initTree() { hPart = new SwtContentHierarchicalPart(this, getStyle()); hPart.setInput(rootContent); hPart.onSelected((o) -> { Content content = (Content) o; selected = content; refreshTable(); }); // tree = new Tree(this, 0); // for (Content c : rootContent) { // TreeItem root = new TreeItem(tree, 0); // root.setText(c.getName().toString()); // root.setData(c); // new TreeItem(root, 0); // } // tree.addListener(SWT.Expand, event -> { // final TreeItem root = (TreeItem) event.item; // TreeItem[] items = root.getItems(); // for (TreeItem item : items) { // if (item.getData() != null) // return; // item.dispose(); // } // Content content = (Content) root.getData(); // for (Content c : content) { // TreeItem item = new TreeItem(root, 0); // item.setText(c.getName().toString()); // item.setData(c); // boolean hasChildren = true; // if (hasChildren) { // new TreeItem(item, 0); // } // } // }); // tree.addListener(SWT.Selection, event -> { // TreeItem item = (TreeItem) event.item; // selected = (Content) item.getData(); // refreshTable(); // }); } protected void initTable() { table = new Table(this, 0); table.setLinesVisible(true); table.setHeaderVisible(true); TableColumn keyCol = new TableColumn(table, SWT.NONE); keyCol.setText("Attribute"); keyCol.setWidth(200); TableColumn valueCol = new TableColumn(table, SWT.NONE); valueCol.setText("Value"); keyCol.setWidth(300); refreshTable(); } protected void refreshTable() { for (TableItem item : table.getItems()) { item.dispose(); } for (QName key : selected.keySet()) { TableItem item = new TableItem(table, 0); item.setText(0, key.toString()); Object value = selected.get(key); item.setText(1, value.toString()); } table.getColumn(0).pack(); table.getColumn(1).pack(); } // public static void main(String[] args) { // Path basePath; // if (args.length > 0) { // basePath = Paths.get(args[0]); // } else { // basePath = Paths.get(System.getProperty("user.home")); // } // // final Display display = new Display(); // final Shell shell = new Shell(display); // shell.setText(basePath.toString()); // shell.setLayout(new FillLayout()); // // FsContentProvider contentSession = new FsContentProvider("/", basePath); //// GcrContentTreeView treeView = new GcrContentTreeView(shell, 0, contentSession.get("/")); // // shell.setSize(shell.computeSize(800, 600)); // shell.open(); // while (!shell.isDisposed()) { // if (!display.readAndDispatch()) // display.sleep(); // } // display.dispose(); // } }