From a2deb7ccc6eff2e695557e6aa6fe05156042d3d5 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 16 Dec 2009 14:12:04 +0000
Subject: [PATCH] [LMS-1075] added context menu to project selection tree
 linking to project viewer

SVN: 13971
---
 .../ProjectSelectionTreeWidget.java           | 67 +++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeWidget.java
index 28db212596a..411a4d386dd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeWidget.java
@@ -22,20 +22,33 @@ import java.util.TreeSet;
 
 import com.extjs.gxt.ui.client.Style.SelectionMode;
 import com.extjs.gxt.ui.client.data.ModelData;
+import com.extjs.gxt.ui.client.event.MenuEvent;
 import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
 import com.extjs.gxt.ui.client.event.SelectionChangedListener;
+import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.store.TreeStore;
+import com.extjs.gxt.ui.client.widget.menu.Menu;
+import com.extjs.gxt.ui.client.widget.menu.MenuItem;
 import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ProjectViewer;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.NonHierarchicalBaseModelData;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Group;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
@@ -68,6 +81,10 @@ public final class ProjectSelectionTreeWidget extends TreePanel<ModelData> imple
         switchOffFolderIcons();
         getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
         refreshTree();
+
+        final Menu contextMenu = createContextMenu();
+        setContextMenu(contextMenu);
+
         getSelectionModel().addSelectionChangedListener(new SelectionChangedListener<ModelData>()
             {
                 @Override
@@ -76,13 +93,63 @@ public final class ProjectSelectionTreeWidget extends TreePanel<ModelData> imple
                     ModelData selected = se.getSelectedItem();
                     if (selected != null && isLeaf(selected))
                     {
+                        contextMenu.enable(); // context menu is enabled for projects
                         selectedProjectOrNull =
                                 (Project) selected.get(ModelDataPropertyNames.OBJECT);
                         getSelectionChangedListener().handleEvent(null);
+                    } else
+                    {
+                        contextMenu.disable(); // context menu is disabled for groups
                     }
+                }
+            });
+
+    }
 
+    private Menu createContextMenu()
+    {
+        final Menu contextMenu = new Menu();
+        final MenuItem details = new MenuItem("details");
+        details.addSelectionListener(new SelectionListener<MenuEvent>()
+            {
+                @Override
+                public void componentSelected(MenuEvent ce)
+                {
+                    // show project detail view if project context menu was selected
+                    if (selectedProjectOrNull != null)
+                    {
+                        showProjectDetailsView(selectedProjectOrNull);
+                    }
                 }
             });
+        contextMenu.add(details);
+        return contextMenu;
+    }
+
+    private void showProjectDetailsView(final Project project)
+    {
+        ITabItemFactory tabFactory;
+        final TechId projectId = TechId.create(project);
+        tabFactory = new ITabItemFactory()
+            {
+                public ITabItem create()
+                {
+                    final DatabaseModificationAwareComponent viewer =
+                            ProjectViewer.create(viewContext.getCommonViewContext(), projectId);
+                    return DefaultTabItem.create(getViewerTitle(), viewer, viewContext, false);
+                }
+
+                public String getId()
+                {
+                    return ProjectViewer.createId(projectId);
+                }
+
+                private String getViewerTitle()
+                {
+                    return AbstractViewer.getTitle(viewContext, Dict.PROJECT, project);
+                }
+            };
+        DispatcherHelper.dispatchNaviEvent(tabFactory);
     }
 
     private void switchOffFolderIcons()
-- 
GitLab