Introduce content layer and document type.
[gpl/argeo-suite.git] / library / org.argeo.library.ui / src / org / argeo / library / ui / ContentEntryArea.java
index 4c8b041c949a1f558b435a843e19fe737a4b4961..8b884ebcf7a4a95cfa05b36166f571855ad44da0 100644 (file)
@@ -10,35 +10,102 @@ import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.query.Query;
 
+import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.CmsView;
 import org.argeo.cms.ui.util.CmsUiUtils;
 import org.argeo.entity.EntityType;
 import org.argeo.jcr.Jcr;
 import org.argeo.jcr.JcrException;
+import org.argeo.suite.ui.SuiteEvent;
+import org.argeo.suite.ui.SuiteIcon;
 import org.argeo.suite.ui.widgets.TreeOrSearchArea;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewerColumn;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
 
 public class ContentEntryArea implements CmsUiProvider {
 
        @Override
        public Control createUi(Composite parent, Node context) throws RepositoryException {
+               CmsTheme theme = CmsTheme.getCmsTheme(parent);
+
                parent.setLayout(new GridLayout());
                Ui ui = new Ui(parent, SWT.NONE);
                ui.setLayoutData(CmsUiUtils.fillAll());
 
+               TreeViewerColumn nameCol = new TreeViewerColumn(ui.getTreeViewer(), SWT.NONE);
+               nameCol.getColumn().setWidth(400);
+               nameCol.setLabelProvider(new ColumnLabelProvider() {
+
+                       @Override
+                       public String getText(Object element) {
+                               Node node = (Node) element;
+                               return Jcr.getTitle(node);
+                       }
+
+                       @Override
+                       public Image getImage(Object element) {
+                               Node node = (Node) element;
+                               Image icon;
+                               if (Jcr.isNodeType(node, NodeType.NT_FOLDER)) {
+                                       icon = SuiteIcon.folder.getSmallIcon(theme);
+                               } else if (Jcr.isNodeType(node, NodeType.NT_FILE)) {
+                                       // TODO check recognized document types
+                                       icon = SuiteIcon.document.getSmallIcon(theme);
+                               } else if (Jcr.isNodeType(node, EntityType.document.get())) {
+                                       icon = SuiteIcon.document.getSmallIcon(theme);
+                               } else {
+                                       if (!isLeaf(node))
+                                               icon = SuiteIcon.folder.getSmallIcon(theme);
+                                       else
+                                               icon = null;
+                               }
+                               return icon;
+                       }
+
+               });
+
+               ui.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() {
+
+                       @Override
+                       public void doubleClick(DoubleClickEvent event) {
+                               Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
+                               if (user != null) {
+                                       CmsView.getCmsView(parent).sendEvent(SuiteEvent.openNewPart.topic(),
+                                                       SuiteEvent.eventProperties(user));
+                               }
+
+                       }
+               });
+               ui.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+                       public void selectionChanged(SelectionChangedEvent event) {
+                               Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
+                               if (user != null) {
+                                       CmsView.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
+                                                       SuiteEvent.eventProperties(user));
+                               }
+                       }
+               });
+
                ui.getTreeViewer().setContentProvider(new SpacesContentProvider());
                ui.getTreeViewer().setInput(context.getSession());
                return ui;
        }
 
        protected boolean isLeaf(Node node) {
-               return Jcr.isNodeType(node, EntityType.entity.get()) || Jcr.isNodeType(node, NodeType.NT_FILE);
+               return Jcr.isNodeType(node, EntityType.entity.get()) || Jcr.isNodeType(node, EntityType.document.get())
+                               || Jcr.isNodeType(node, NodeType.NT_FILE);
        }
 
        class Ui extends TreeOrSearchArea {