Author: mvw
Date: 2008-10-26 13:53:28-0700
New Revision: 15943

Modified:
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/PropPanelDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/ui/UMLComboBoxModel2.java
   
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLGeneralizationPowertypeComboBoxModel.java
   
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLModelElementNamespaceComboBoxModel.java
   
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLStructuralFeatureTypeComboBoxModel.java

Log:
Fix for issue 5469: Custom datatypes do not appear in the return type dropdown 
box.

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/PropPanelDiagram.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/PropPanelDiagram.java?view=diff&rev=15943&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/PropPanelDiagram.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/PropPanelDiagram.java&r1=15942&r2=15943
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/PropPanelDiagram.java  
(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/PropPanelDiagram.java  
2008-10-26 13:53:28-0700
@@ -139,6 +139,7 @@
         Collection list = new ArrayList(1);
         list.add(getSelectedModelElement());
         setElements(list);
+        setModelInvalid();
     }
     
     @Override

Modified: trunk/src/argouml-app/src/org/argouml/uml/ui/UMLComboBoxModel2.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/ui/UMLComboBoxModel2.java?view=diff&rev=15943&p1=trunk/src/argouml-app/src/org/argouml/uml/ui/UMLComboBoxModel2.java&p2=trunk/src/argouml-app/src/org/argouml/uml/ui/UMLComboBoxModel2.java&r1=15942&r2=15943
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/ui/UMLComboBoxModel2.java 
(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/ui/UMLComboBoxModel2.java 
2008-10-26 13:53:28-0700
@@ -463,7 +463,9 @@
      * Build the minimal number of items in the model for the edit box
      * to be populated. By default this calls buildModelList but it
      * can be overridden in subclasses to delay population of the list
-     * till the list is displayed.
+     * till the list is displayed. <p>
+     * 
+     * If this lazy list building is used, do call setModelInvalid() here!
      */
     protected void buildMinimalModelList() {
         buildModelListTimed();
@@ -763,6 +765,15 @@
         return false;
     }
     
+    /**
+     * Indicate that the model has to be rebuild. 
+     * For a lazy model, this suffices to get the model rebuild 
+     * the next time the user opens the combo.
+     */
+    protected void setModelInvalid() {
+        modelValid = false;
+    }
+
     public void popupMenuCanceled(PopupMenuEvent e) {
     }
 

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLGeneralizationPowertypeComboBoxModel.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLGeneralizationPowertypeComboBoxModel.java?view=diff&rev=15943&p1=trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLGeneralizationPowertypeComboBoxModel.java&p2=trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLGeneralizationPowertypeComboBoxModel.java&r1=15942&r2=15943
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLGeneralizationPowertypeComboBoxModel.java
   (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLGeneralizationPowertypeComboBoxModel.java
   2008-10-26 13:53:28-0700
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2006 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
@@ -89,6 +89,7 @@
         }
         list.add(element);
         setElements(list);
+        setModelInvalid();
     }
     
     @Override

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLModelElementNamespaceComboBoxModel.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLModelElementNamespaceComboBoxModel.java?view=diff&rev=15943&p1=trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLModelElementNamespaceComboBoxModel.java&p2=trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLModelElementNamespaceComboBoxModel.java&r1=15942&r2=15943
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLModelElementNamespaceComboBoxModel.java
     (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLModelElementNamespaceComboBoxModel.java
     2008-10-26 13:53:28-0700
@@ -87,6 +87,7 @@
             }
         }
         setElements(c);
+        setModelInvalid();
     }
 
     /*
@@ -145,11 +146,11 @@
         if (t != null
                 && evt.getSource() == t
                 && evt.getNewValue() != null) {
+            buildMinimalModelList();
             /* In some cases (see issue 3780) the list remains the same, but
              * the selected item differs. Without the next step,
              * the combo would not be refreshed.
              */
-            buildMinimalModelList();
             setSelectedItem(getSelectedModelElement());
         }
     }

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLStructuralFeatureTypeComboBoxModel.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLStructuralFeatureTypeComboBoxModel.java?view=diff&rev=15943&p1=trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLStructuralFeatureTypeComboBoxModel.java&p2=trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLStructuralFeatureTypeComboBoxModel.java&r1=15942&r2=15943
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLStructuralFeatureTypeComboBoxModel.java
     (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/ui/foundation/core/UMLStructuralFeatureTypeComboBoxModel.java
     2008-10-26 13:53:28-0700
@@ -49,10 +49,6 @@
      */
     public UMLStructuralFeatureTypeComboBoxModel() {
         super("type", false);
-        /* TODO: Investigate if the following is needed, and if so, adapt the
-         * propertyChange() below.  */
-//        Model.getPump().addClassModelEventListener(this,
-//                Model.getMetaTypes().getNamespace(), "ownedElement");
     }
 
     /*
@@ -70,6 +66,7 @@
     /*
      * @see org.argouml.uml.ui.UMLComboBoxModel2#buildModelList()
      */
+    @SuppressWarnings("unchecked")
     protected void buildModelList() {
         Set<Object> elements = new TreeSet<Object>(new PathComparator());
 
@@ -96,6 +93,7 @@
         setElements(elements);
     }
     
+    @SuppressWarnings("unchecked")
     @Override
     protected void buildMinimalModelList() {
         Collection list = new ArrayList(1);
@@ -104,6 +102,7 @@
             list.add(element);
         }
         setElements(list);
+        setModelInvalid();
     }
     
     @Override
@@ -126,6 +125,34 @@
     }
 
     @Override
+    protected void addOtherModelEventListeners(Object newTarget) {
+        super.addOtherModelEventListeners(newTarget);
+        
+        Model.getPump().addClassModelEventListener(this,
+              Model.getMetaTypes().getNamespace(), "ownedElement");
+        Model.getPump().addClassModelEventListener(this,
+                Model.getMetaTypes().getUMLClass(), "name");
+        Model.getPump().addClassModelEventListener(this,
+                Model.getMetaTypes().getInterface(), "name");
+        Model.getPump().addClassModelEventListener(this,
+                Model.getMetaTypes().getDataType(), "name");
+    }
+
+    @Override
+    protected void removeOtherModelEventListeners(Object oldTarget) {
+        super.removeOtherModelEventListeners(oldTarget);
+
+        Model.getPump().removeClassModelEventListener(this,
+                Model.getMetaTypes().getNamespace(), "ownedElement");
+        Model.getPump().removeClassModelEventListener(this,
+                Model.getMetaTypes().getUMLClass(), "name");
+        Model.getPump().removeClassModelEventListener(this,
+                Model.getMetaTypes().getInterface(), "name");
+        Model.getPump().removeClassModelEventListener(this,
+                Model.getMetaTypes().getDataType(), "name");
+    }
+
+    @Override
     public void modelChanged(UmlChangeEvent evt) {
         /*
          * The default behavior for super implementation is
@@ -133,6 +160,22 @@
          * that complex here, because there is no need to
          * change the list on a simple type change.
          */
+        Object newSelection = getSelectedModelElement();
+        if (getSelectedItem() != newSelection) {
+            /* The combo is not showing the correct UML element
+             * as the selected item. 
+             * So, let's empty the combo model, 
+             * and set the right selected UML element: */
+            buildMinimalModelList();
+            setSelectedItem(newSelection);
+        }
+        if (evt.getSource() != getTarget()) {
+            /* The target model element is not changed, 
+             * but something else that may be shown in the list.
+             * Since this is a "lazy" model, we can simply reset the flag to
+             * indicate that the model has to be built again: */
+            setModelInvalid();
+        }
     }
 
 }

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

Reply via email to