Author: mvw
Date: 2008-02-20 10:36:34-0800
New Revision: 14139

Modified:
   trunk/src/app/src/org/argouml/uml/diagram/ui/ActionSetPath.java
   trunk/src/app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java

Log:
Improvement on the changes done for issue 4832: Show the correct pop-up menu 
entries.

Modified: trunk/src/app/src/org/argouml/uml/diagram/ui/ActionSetPath.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/app/src/org/argouml/uml/diagram/ui/ActionSetPath.java?view=diff&rev=14139&p1=trunk/src/app/src/org/argouml/uml/diagram/ui/ActionSetPath.java&p2=trunk/src/app/src/org/argouml/uml/diagram/ui/ActionSetPath.java&r1=14138&r2=14139
==============================================================================
--- trunk/src/app/src/org/argouml/uml/diagram/ui/ActionSetPath.java     
(original)
+++ trunk/src/app/src/org/argouml/uml/diagram/ui/ActionSetPath.java     
2008-02-20 10:36:34-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2007 The Regents of the University of California. All
+// Copyright (c) 2007-2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 // software and its documentation without fee, and without a written
 // agreement is hereby granted, provided that the above copyright notice
@@ -24,17 +24,22 @@
 
 package org.argouml.uml.diagram.ui;
 
-import java.util.Iterator;
 import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
 
 import javax.swing.Action;
 
 import org.argouml.i18n.Translator;
+import org.argouml.model.Model;
+import org.argouml.ui.UndoableAction;
 import org.argouml.uml.diagram.PathContainer;
+import org.tigris.gef.base.Editor;
 import org.tigris.gef.base.Globals;
 import org.tigris.gef.base.Selection;
 import org.tigris.gef.presentation.Fig;
-import org.tigris.gef.undo.UndoableAction;
 
 
 /**
@@ -44,6 +49,11 @@
  */
 class ActionSetPath extends UndoableAction {
 
+    private static final UndoableAction SHOW_PATH =
+        new ActionSetPath(false);
+    private static final UndoableAction HIDE_PATH =
+        new ActionSetPath(true);
+
     private boolean isPathVisible;
 
     /**
@@ -62,6 +72,52 @@
         }
         putValue(Action.NAME, name);
     }
+    
+    /**
+     * Static function to return the path show and/or hide actions 
+     * needed for the selected Figs.
+     * 
+     * @return Only returns the actions for the menu-items that make sense for
+     *         the current selection.
+     */
+    public static Collection<UndoableAction> getActions() {
+        Collection<UndoableAction> actions = new ArrayList<UndoableAction>();
+        Editor ce = Globals.curEditor();
+        List<Fig> figs = ce.getSelectionManager().getFigs();
+        for (Fig f : figs) {
+            if (f instanceof PathContainer) {
+                Object owner = f.getOwner();
+                if (Model.getFacade().isAModelElement(owner)) {
+                    Object ns = Model.getFacade().getNamespace(owner);
+                    if (ns != null) {
+                        /* Only show the path item when there is 
+                         * an owning namespace. */
+                        if (((PathContainer) f).isPathVisible()) {
+                            actions.add(HIDE_PATH);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        for (Fig f : figs) {
+            if (f instanceof PathContainer) {
+                Object owner = f.getOwner();
+                if (Model.getFacade().isAModelElement(owner)) {
+                    Object ns = Model.getFacade().getNamespace(owner);
+                    if (ns != null) {
+                        /* Only show the path item when there is 
+                         * an owning namespace. */
+                        if (!((PathContainer) f).isPathVisible()) {
+                            actions.add(SHOW_PATH);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return actions;
+    }
 
     /**
      * @see 
org.tigris.gef.undo.UndoableAction#actionPerformed(java.awt.event.ActionEvent)
@@ -75,10 +131,10 @@
             Globals.curEditor().getSelectionManager().selections().iterator();
         while (i.hasNext()) {
             Selection sel = (Selection) i.next();
-            Fig       f   = sel.getContent();
+            Fig f = sel.getContent();
                        
             if (f instanceof PathContainer) {
-               ((PathContainer) f).setPathVisible(!isPathVisible);
+                ((PathContainer) f).setPathVisible(!isPathVisible);
             }
         }
     }

Modified: trunk/src/app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java?view=diff&rev=14139&p1=trunk/src/app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java&p2=trunk/src/app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java&r1=14138&r2=14139
==============================================================================
--- trunk/src/app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java       
(original)
+++ trunk/src/app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java       
2008-02-20 10:36:34-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2007 The Regents of the University of California. All
+// Copyright (c) 1996-2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 // software and its documentation without fee, and without a written
 // agreement is hereby granted, provided that the above copyright notice
@@ -83,6 +83,7 @@
 import org.argouml.ui.ArgoJMenu;
 import org.argouml.ui.Clarifier;
 import org.argouml.ui.ProjectActions;
+import org.argouml.ui.UndoableAction;
 import org.argouml.ui.targetmanager.TargetManager;
 import org.argouml.uml.StereotypeUtility;
 import org.argouml.uml.diagram.ArgoDiagram;
@@ -550,13 +551,8 @@
     protected ArgoJMenu buildShowPopUp() {
         ArgoJMenu showMenu = new ArgoJMenu("menu.popup.show");
 
-        Object owner = getOwner();
-        if (Model.getFacade().isAModelElement(owner)) {
-            Object ns = Model.getFacade().getNamespace(owner);
-            if (ns != null) {
-                /* Only show the path item when there is an owning namespace. 
*/
-                showMenu.add(new ActionSetPath(isPathVisible()));
-            }
+        for (UndoableAction ua : ActionSetPath.getActions()) {
+            showMenu.add(ua);
         }
         return showMenu;
     }

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to