Author: scooter
Date: 2012-07-31 20:36:16 -0700 (Tue, 31 Jul 2012)
New Revision: 30062

Removed:
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenu.java
Modified:
   
core3/impl/trunk/layout-cytoscape-impl/src/main/java/csapps/layout/CyActivator.java
   
core3/impl/trunk/layout-impl/src/main/java/org/cytoscape/view/layout/internal/CyActivator.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenuPopulator.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/CytoscapeMenuBar.java
Log:
Reorganize layout menus


Modified: 
core3/impl/trunk/layout-cytoscape-impl/src/main/java/csapps/layout/CyActivator.java
===================================================================
--- 
core3/impl/trunk/layout-cytoscape-impl/src/main/java/csapps/layout/CyActivator.java
 2012-08-01 01:50:59 UTC (rev 30061)
+++ 
core3/impl/trunk/layout-cytoscape-impl/src/main/java/csapps/layout/CyActivator.java
 2012-08-01 03:36:16 UTC (rev 30062)
@@ -42,7 +42,7 @@
                
                HierarchicalLayoutAlgorithm hierarchicalLayoutAlgorithm = new 
HierarchicalLayoutAlgorithm(undo,hf,bf);
                Properties hierarchicalLayoutAlgorithmProps = new Properties();
-               hierarchicalLayoutAlgorithmProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               // hierarchicalLayoutAlgorithmProps.setProperty(PREFERRED_MENU, 
"Layout");
                
hierarchicalLayoutAlgorithmProps.setProperty("preferredTaskManager","menu");
                
hierarchicalLayoutAlgorithmProps.setProperty(TITLE,hierarchicalLayoutAlgorithm.toString());
                
hierarchicalLayoutAlgorithmProps.setProperty(MENU_GRAVITY,"10.1");
@@ -50,7 +50,7 @@
                
                CircularLayoutAlgorithm circularLayoutAlgorithm = new 
CircularLayoutAlgorithm(undo);
                Properties circularLayoutAlgorithmProps = new Properties();
-               circularLayoutAlgorithmProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               // circularLayoutAlgorithmProps.setProperty(PREFERRED_MENU, 
"Layout");
                
circularLayoutAlgorithmProps.setProperty("preferredTaskManager","menu");
                
circularLayoutAlgorithmProps.setProperty(TITLE,circularLayoutAlgorithm.toString());
                circularLayoutAlgorithmProps.setProperty(MENU_GRAVITY,"10.2");
@@ -58,7 +58,7 @@
 
                StackedNodeLayout stackedNodeLayout = new 
StackedNodeLayout(undo);
                Properties stackedNodeLayoutProps = new Properties();
-               stackedNodeLayoutProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               // stackedNodeLayoutProps.setProperty(PREFERRED_MENU, "Layout");
                
stackedNodeLayoutProps.setProperty("preferredTaskManager","menu");
                
stackedNodeLayoutProps.setProperty(TITLE,stackedNodeLayout.toString());
                stackedNodeLayoutProps.setProperty(MENU_GRAVITY,"10.3");
@@ -67,7 +67,7 @@
 
                AttributeCircleLayout attributeCircleLayout = new 
AttributeCircleLayout(undo);
                Properties attributeCircleLayoutProps = new Properties();
-               attributeCircleLayoutProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               // attributeCircleLayoutProps.setProperty(PREFERRED_MENU, 
"Layout");
                
attributeCircleLayoutProps.setProperty("preferredTaskManager","menu");
                
attributeCircleLayoutProps.setProperty(TITLE,attributeCircleLayout.toString());
                attributeCircleLayoutProps.setProperty(MENU_GRAVITY,"10.4");
@@ -75,7 +75,7 @@
 
                DegreeSortedCircleLayout degreeSortedCircleLayout = new 
DegreeSortedCircleLayout(undo);
                Properties degreeSortedCircleLayoutProps = new Properties();
-               degreeSortedCircleLayoutProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               // degreeSortedCircleLayoutProps.setProperty(PREFERRED_MENU, 
"Layout");
                
degreeSortedCircleLayoutProps.setProperty("preferredTaskManager","menu");
                
degreeSortedCircleLayoutProps.setProperty(TITLE,degreeSortedCircleLayout.toString());
                degreeSortedCircleLayoutProps.setProperty(MENU_GRAVITY,"10.5");
@@ -83,15 +83,16 @@
 
                GroupAttributesLayout groupAttributesLayout = new 
GroupAttributesLayout(undo);
                Properties groupAttributesLayoutProps = new Properties();
-               groupAttributesLayoutProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               // groupAttributesLayoutProps.setProperty(PREFERRED_MENU, 
"Layout");
                
groupAttributesLayoutProps.setProperty("preferredTaskManager","menu");
                
groupAttributesLayoutProps.setProperty(TITLE,groupAttributesLayout.toString());
                groupAttributesLayoutProps.setProperty(MENU_GRAVITY,"10.6");
+               
groupAttributesLayoutProps.setProperty(INSERT_SEPARATOR_AFTER,"true");
                
registerService(bc,groupAttributesLayout,CyLayoutAlgorithm.class, 
groupAttributesLayoutProps);
 
                /*
                Properties bioLayoutKKAlgorithmFALSEProps = new Properties();
-               bioLayoutKKAlgorithmFALSEProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               bioLayoutKKAlgorithmFALSEProps.setProperty(PREFERRED_MENU, 
"Layout");
                
bioLayoutKKAlgorithmFALSEProps.setProperty("preferredTaskManager","menu");
                
bioLayoutKKAlgorithmFALSEProps.setProperty(TITLE,bioLayoutKKAlgorithmFALSE.toString());
                
bioLayoutKKAlgorithmFALSEProps.setProperty(MENU_GRAVITY,"10.99");
@@ -100,7 +101,7 @@
                
                BioLayoutFRAlgorithm bioLayoutFRAlgorithm = new 
BioLayoutFRAlgorithm(true,undo);
                Properties bioLayoutFRAlgorithmProps = new Properties();
-               bioLayoutFRAlgorithmProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               // bioLayoutFRAlgorithmProps.setProperty(PREFERRED_MENU, 
"Layout");
                
bioLayoutFRAlgorithmProps.setProperty("preferredTaskManager","menu");
                
bioLayoutFRAlgorithmProps.setProperty(TITLE,bioLayoutFRAlgorithm.toString());
                bioLayoutFRAlgorithmProps.setProperty(MENU_GRAVITY,"10.8");
@@ -108,7 +109,7 @@
                
                BioLayoutKKAlgorithm bioLayoutKKAlgorithmTRUE = new 
BioLayoutKKAlgorithm(true,undo);
                Properties bioLayoutKKAlgorithmTRUEProps = new Properties();
-               bioLayoutKKAlgorithmTRUEProps.setProperty(PREFERRED_MENU, 
"Layout.Cytoscape Layouts");
+               // bioLayoutKKAlgorithmTRUEProps.setProperty(PREFERRED_MENU, 
"Layout");
                
bioLayoutKKAlgorithmTRUEProps.setProperty("preferredTaskManager","menu");
                
bioLayoutKKAlgorithmTRUEProps.setProperty(TITLE,bioLayoutKKAlgorithmTRUE.toString());
                bioLayoutKKAlgorithmTRUEProps.setProperty(MENU_GRAVITY,"10.9");
@@ -117,10 +118,11 @@
 
                ISOMLayout ISOMLayout = new ISOMLayout(undo);
                Properties ISOMLayoutProps = new Properties();
-               ISOMLayoutProps.setProperty(PREFERRED_MENU, "Layout.Cytoscape 
Layouts");
+               // ISOMLayoutProps.setProperty(PREFERRED_MENU, "Layout");
                ISOMLayoutProps.setProperty("preferredTaskManager","menu");
                ISOMLayoutProps.setProperty(TITLE,ISOMLayout.toString());
                ISOMLayoutProps.setProperty(MENU_GRAVITY,"10.99");
+               ISOMLayoutProps.setProperty(INSERT_SEPARATOR_AFTER,"true");
                registerService(bc,ISOMLayout,CyLayoutAlgorithm.class, 
ISOMLayoutProps);
        }
 }

Modified: 
core3/impl/trunk/layout-impl/src/main/java/org/cytoscape/view/layout/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/layout-impl/src/main/java/org/cytoscape/view/layout/internal/CyActivator.java
      2012-08-01 01:50:59 UTC (rev 30061)
+++ 
core3/impl/trunk/layout-impl/src/main/java/org/cytoscape/view/layout/internal/CyActivator.java
      2012-08-01 03:36:16 UTC (rev 30062)
@@ -32,9 +32,10 @@
                registerService(bc,cyLayouts,CyLayoutAlgorithmManager.class, 
new Properties());
 
                Properties gridNodeLayoutProps = new Properties();
-               
gridNodeLayoutProps.setProperty(PREFERRED_MENU,"Layout.Cytoscape Layouts");
+               // 
gridNodeLayoutProps.setProperty(PREFERRED_MENU,"Layout.Cytoscape Layouts");
                gridNodeLayoutProps.setProperty("preferredTaskManager","menu");
                
gridNodeLayoutProps.setProperty(TITLE,gridNodeLayout.toString());
+               gridNodeLayoutProps.setProperty(MENU_GRAVITY,"10.0");
                registerService(bc,gridNodeLayout,CyLayoutAlgorithm.class, 
gridNodeLayoutProps);
 
                
registerServiceListener(bc,cyLayouts,"addLayout","removeLayout",CyLayoutAlgorithm.class);

Deleted: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenu.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenu.java
      2012-08-01 01:50:59 UTC (rev 30061)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenu.java
      2012-08-01 03:36:16 UTC (rev 30062)
@@ -1,198 +0,0 @@
-/*
-  File: LayoutMenu.java
-
-  Copyright (c) 2006, The Cytoscape Consortium (www.cytoscape.org)
-
-  The Cytoscape Consortium is:
-  - Institute for Systems Biology
-  - University of California San Diego
-  - Memorial Sloan-Kettering Cancer Center
-  - Institut Pasteur
-  - Agilent Technologies
-
-  This library is free software; you can redistribute it and/or modify it
-  under the terms of the GNU Lesser General Public License as published
-  by the Free Software Foundation; either version 2.1 of the License, or
-  any later version.
-
-  This library is distributed in the hope that it will be useful, but
-  WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF
-  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  The software and
-  documentation provided hereunder is on an "as is" basis, and the
-  Institute for Systems Biology and the Whitehead Institute
-  have no obligations to provide maintenance, support,
-  updates, enhancements or modifications.  In no event shall the
-  Institute for Systems Biology and the Whitehead Institute
-  be liable to any party for direct, indirect, special,
-  incidental or consequential damages, including lost profits, arising
-  out of the use of this software and its documentation, even if the
-  Institute for Systems Biology and the Whitehead Institute
-  have been advised of the possibility of such damage.  See
-  the GNU Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public License
-  along with this library; if not, write to the Free Software Foundation,
-  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-*/
-package org.cytoscape.internal.layout.ui;
-
-import org.cytoscape.work.TaskManager;
-import org.cytoscape.work.swing.DialogTaskManager;
-import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.model.CyColumn;
-import org.cytoscape.model.CyNode;
-import org.cytoscape.model.CyNetwork;
-import org.cytoscape.model.CyTable;
-import org.cytoscape.model.CyTableUtil;
-import org.cytoscape.view.layout.CyLayoutAlgorithm;
-import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-
-import javax.swing.*;
-import javax.swing.event.MenuEvent;
-import javax.swing.event.MenuListener;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Comparator;
-
-
-/**
- *
- * A DynamicLayoutMenu is a more complicated layout menu that constructs 
layout menu
- * items on-the-fly based on the capabilities of the layout algorithm and 
environment
- * factors such as whether or not nodes are selected, the presence of node or 
edge
- * attributes, etc.
- */
-
-// This should extend CyMenuItem, I think....
-public class LayoutMenu extends JMenu implements MenuListener {
-    private final static long serialVersionUID = 1202339874255880L;
-    List<CyLayoutAlgorithm> subMenuList;
-    private CyApplicationManager appMgr;
-    private DialogTaskManager tm;
-    private final LayoutComparator layoutComparator = new LayoutComparator();
-
-    /**
-     * Creates a new LayoutMenu object.
-     *
-     * @param menuName  DOCUMENT ME!
-     */
-    public LayoutMenu(String menuName, CyApplicationManager appMgr, 
DialogTaskManager tm) {
-        super(menuName);
-        addMenuListener(this);
-        subMenuList = new ArrayList<CyLayoutAlgorithm>();
-        this.appMgr = appMgr;
-        this.tm = tm;
-    }
-
-    /**
-     *  DOCUMENT ME!
-     *
-     * @param layout DOCUMENT ME!
-     */
-    public void add(CyLayoutAlgorithm layout) {
-        subMenuList.add(layout);
-    }
-
-    /**
-     *  DOCUMENT ME!
-     *
-     * @param layout DOCUMENT ME!
-     */
-    public void remove(CyLayoutAlgorithm layout) {
-        subMenuList.remove(layout);
-    }
-
-    /**
-     *  DOCUMENT ME!
-     *
-     * @return  DOCUMENT ME!
-     */
-    public int getItemCount() {
-        return subMenuList.size();
-    }
-
-    /**
-     *  DOCUMENT ME!
-     *
-     * @param e DOCUMENT ME!
-     */
-    public void menuCanceled(MenuEvent e) { } ;
-
-    /**
-     *  DOCUMENT ME!
-     *
-     * @param e DOCUMENT ME!
-     */
-    public void menuDeselected(MenuEvent e) { } ;
-
-    /**
-     *  DOCUMENT ME!
-     *
-     * @param e DOCUMENT ME!
-     */
-    public void menuSelected(MenuEvent e) {
-        // Clear any previous entries
-        this.removeAll();
-
-        CyNetworkView view = appMgr.getCurrentNetworkView();
-        if ( view == null )
-            return;
-
-        CyNetwork network = view.getModel();
-
-        // Figure out if we have anything selected
-        boolean someSelected = 
network.getDefaultNodeTable().countMatchingRows(CyNetwork.SELECTED, true) > 0;
-        boolean enableMenuItem = checkEnabled();
-        
-        Collections.sort(subMenuList,layoutComparator);
-
-        for ( CyLayoutAlgorithm layout : subMenuList ) {
-        
-            boolean usesNodeAttrs = 
-                
hasValidAttributes(layout.getSupportedNodeAttributeTypes(),network.getDefaultNodeTable());
-            boolean usesEdgeAttrs = 
-                
hasValidAttributes(layout.getSupportedEdgeAttributeTypes(),network.getDefaultEdgeTable());
-            boolean usesSelected = (layout.getSupportsSelectedOnly() && 
someSelected);
-
-            if (usesNodeAttrs || usesEdgeAttrs || usesSelected) {
-                super.add(new 
DynamicLayoutMenu(layout,network,enableMenuItem,appMgr,
-                                                
tm,usesNodeAttrs,usesEdgeAttrs,usesSelected));
-            } else {
-                super.add(new 
StaticLayoutMenu(layout,enableMenuItem,appMgr,tm));
-            }
-        }
-    }
-    
-    private boolean hasValidAttributes(Set<Class<?>> typeSet, CyTable 
attributes) {
-        for (final CyColumn column : attributes.getColumns())
-            if (typeSet.contains(column.getType()))
-                return true;
-        return false;
-    }
-
-    private boolean checkEnabled() {
-        CyNetwork network = appMgr.getCurrentNetwork();
-        if ( network == null )
-            return false;
-
-        CyNetworkView view = appMgr.getCurrentNetworkView();
-        if ( view == null )
-            return false;
-        else
-            return true;
-    }
-
-    private static class LayoutComparator implements 
Comparator<CyLayoutAlgorithm> {
-        public int compare(CyLayoutAlgorithm o1, CyLayoutAlgorithm o2) {
-            return o1.toString().compareTo(o2.toString());    
-        }
-        public boolean equals(Object obj) {
-            return ( obj == this );
-        }
-    }
-}
-

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenuPopulator.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenuPopulator.java
     2012-08-01 01:50:59 UTC (rev 30061)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenuPopulator.java
     2012-08-01 03:36:16 UTC (rev 30062)
@@ -36,78 +36,151 @@
 */
 package org.cytoscape.internal.layout.ui;
 
-import org.cytoscape.view.layout.CyLayoutAlgorithm;
-import static org.cytoscape.work.ServiceProperties.*;
-import org.cytoscape.work.TaskManager;
-import org.cytoscape.work.swing.DialogTaskManager;
 import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.application.swing.CySwingApplication;
 import org.cytoscape.internal.view.CytoscapeMenuBar;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.work.TaskManager;
+import static org.cytoscape.work.ServiceProperties.*;
+import org.cytoscape.work.swing.DialogTaskManager;
+import org.cytoscape.util.swing.GravityTracker;
+import org.cytoscape.util.swing.JMenuTracker;
+import org.cytoscape.view.layout.CyLayoutAlgorithm;
+import org.cytoscape.view.model.CyNetworkView;
 
 import java.util.*;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.event.MenuEvent;
+import javax.swing.event.MenuListener;
 
 
-public class LayoutMenuPopulator {
+public class LayoutMenuPopulator implements MenuListener {
 
-    private Map<String, List<CyLayoutAlgorithm>> menuAlgorithmMap;
-    private Map<String, LayoutMenu> menuMap;
+               private Map<CyLayoutAlgorithm, Map> algorithmMap;
+               private Map<CyLayoutAlgorithm, JMenuItem> menuMap;
+               private Map<CyLayoutAlgorithm, Boolean> separatorMap;
     private CyApplicationManager appMgr;
     private DialogTaskManager tm;
-    private CytoscapeMenuBar menuBar;
+    private GravityTracker gravityTracker; 
+    private JMenu layoutMenu;
 
     public LayoutMenuPopulator(CytoscapeMenuBar menuBar, CyApplicationManager 
appMgr, DialogTaskManager tm) {
-        menuAlgorithmMap = new HashMap<String,List<CyLayoutAlgorithm>>();
-        menuMap = new HashMap<String,LayoutMenu>();
+        algorithmMap = new HashMap<CyLayoutAlgorithm,Map>();
+        menuMap = new HashMap<CyLayoutAlgorithm,JMenuItem>();
+        separatorMap = new HashMap<CyLayoutAlgorithm,Boolean>();
         this.appMgr = appMgr;
         this.tm = tm;
-        this.menuBar = menuBar;
+        this.gravityTracker = 
menuBar.getMenuTracker().getGravityTracker("Layout");
+        this.layoutMenu = (JMenu)gravityTracker.getMenu();
+        this.layoutMenu.addMenuListener(this);
     }
 
     public void addLayout(CyLayoutAlgorithm layout, Map props) {
-        String fullMenuName = (String)props.get(PREFERRED_MENU);
-        if (fullMenuName == null )
-            fullMenuName = "Layout." + layout.toString();
-        
-        String actualMenuName = fullMenuName;
-        if ( actualMenuName.startsWith("Layout."))
-            actualMenuName = actualMenuName.substring(7);
+        algorithmMap.put(layout, props);
+    }
 
-        // make sure the list is set up for this name
-        if ( !menuAlgorithmMap.containsKey(fullMenuName) ) {
-            List<CyLayoutAlgorithm> menuList = new 
ArrayList<CyLayoutAlgorithm>();
-            menuAlgorithmMap.put(fullMenuName, menuList);
-        }
+    public void removeLayout(CyLayoutAlgorithm layout, Map props) {
+        algorithmMap.remove(layout);
+    }
 
-        // add layout to the list of layouts for this name
-        menuAlgorithmMap.get(fullMenuName).add(layout);
+    /**
+     *  DOCUMENT ME!
+     *
+     * @param e DOCUMENT ME!
+     */
+    public void menuCanceled(MenuEvent e) { } ;
 
-        // make sure the menu is set up
-        if ( !menuMap.containsKey(fullMenuName) ) {
-            LayoutMenu menu = new LayoutMenu(actualMenuName, appMgr, tm);
-            menuMap.put(fullMenuName, menu);
-            // This needs to be done so that gravity is supported
-            menuBar.getMenu("Layout").add(menu);
-        } else {
-            // See if the menu type has changed from a Menu to a MenuItem or 
visa-versa
-            // Yes, replace it.
-            LayoutMenu menu = menuMap.get(fullMenuName);
-            // if (menu.updateSubMenus()) {
-                // Update the menu
-            // }
-        }
+    /**
+     *  DOCUMENT ME!
+     *
+     * @param e DOCUMENT ME!
+     */
+    public void menuDeselected(MenuEvent e) { } ;
 
-        // add layout to the menu for this name
-        menuMap.get(fullMenuName).add(layout);
-    }
+    /**
+     *  DOCUMENT ME!
+     *
+     * @param e DOCUMENT ME!
+     */
+    public void menuSelected(MenuEvent e) {
+        CyNetworkView view = appMgr.getCurrentNetworkView();
+        if ( view == null )
+            return;
 
-    public void removeLayout(CyLayoutAlgorithm layout, Map props) {
-        for (String menu : menuAlgorithmMap.keySet()) {
-            List<CyLayoutAlgorithm> menuList = menuAlgorithmMap.get(menu);
-            if (menuList.indexOf(layout) >= 0) {
-                menuList.remove(layout);
-                menuMap.get(menu).remove(layout);
-                return;
+        CyNetwork network = view.getModel();
+
+        // Figure out if we have anything selected
+        boolean someSelected = 
network.getDefaultNodeTable().countMatchingRows(CyNetwork.SELECTED, true) > 0;
+        boolean enableMenuItem = checkEnabled();
+
+        // Get all of the algorithms
+        for ( CyLayoutAlgorithm layout : algorithmMap.keySet() ) {
+            Map props = algorithmMap.get(layout);
+            double gravity = 1000.0;
+            if (props.get(MENU_GRAVITY) != null)
+               gravity = Double.parseDouble((String)props.get(MENU_GRAVITY));
+
+                                               boolean separatorAfter = false;
+            if (props.get(INSERT_SEPARATOR_AFTER) != null)
+               separatorAfter = 
Boolean.parseBoolean((String)props.get(INSERT_SEPARATOR_AFTER));
+
+                                               boolean separatorBefore = false;
+            if (props.get(INSERT_SEPARATOR_BEFORE) != null)
+               separatorBefore = 
Boolean.parseBoolean((String)props.get(INSERT_SEPARATOR_BEFORE));
+
+            // Remove the old menu
+            if (menuMap.containsKey(layout)) {
+                layoutMenu.remove(menuMap.get(layout));
+                menuMap.remove(layout);
             }
+        
+            boolean usesNodeAttrs = 
+                
hasValidAttributes(layout.getSupportedNodeAttributeTypes(),network.getDefaultNodeTable());
+            boolean usesEdgeAttrs = 
+                
hasValidAttributes(layout.getSupportedEdgeAttributeTypes(),network.getDefaultEdgeTable());
+            boolean usesSelected = (layout.getSupportsSelectedOnly() && 
someSelected);
+
+            if (usesNodeAttrs || usesEdgeAttrs || usesSelected) {
+                JMenu newMenu = new 
DynamicLayoutMenu(layout,network,enableMenuItem,appMgr,
+                                                      
tm,usesNodeAttrs,usesEdgeAttrs,usesSelected);
+                menuMap.put(layout, newMenu);
+                gravityTracker.addMenu(newMenu, gravity);
+            } else {
+                JMenuItem newMenu = new 
StaticLayoutMenu(layout,enableMenuItem,appMgr,tm);
+                menuMap.put(layout, newMenu);
+                gravityTracker.addMenuItem(newMenu, gravity);
+            }
+
+                                               if (separatorAfter && 
!separatorMap.containsKey(layout)) {
+                gravityTracker.addMenuSeparator(gravity+0.0001);
+                separatorMap.put(layout, Boolean.TRUE);
+                                               } else if (separatorBefore && 
!separatorMap.containsKey(layout)) {
+                gravityTracker.addMenuSeparator(gravity-0.0001);
+                separatorMap.put(layout, Boolean.TRUE);
+                                               }
         }
     }
+    
+    private boolean hasValidAttributes(Set<Class<?>> typeSet, CyTable 
attributes) {
+        for (final CyColumn column : attributes.getColumns())
+            if (typeSet.contains(column.getType()))
+                return true;
+        return false;
+    }
+
+    private boolean checkEnabled() {
+        CyNetwork network = appMgr.getCurrentNetwork();
+        if ( network == null )
+            return false;
+
+        CyNetworkView view = appMgr.getCurrentNetworkView();
+        if ( view == null )
+            return false;
+        else
+            return true;
+    }
+    
 }

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/CytoscapeMenuBar.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/CytoscapeMenuBar.java
     2012-08-01 01:50:59 UTC (rev 30061)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/CytoscapeMenuBar.java
     2012-08-01 03:36:16 UTC (rev 30062)
@@ -160,6 +160,10 @@
                return (JMenu)gravityTracker.getMenu();
        }
 
+       public JMenuTracker getMenuTracker() {
+               return menuTracker;
+       }
+
        private JMenuItem createMenuItem(final CyAction action) {
                JMenuItem ret;
                if (action.useCheckBoxMenuItem())

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to