svn commit: r15943 - trunk/src/argouml-app/src/org/argouml/uml: diagram/ui ui ui/foundation/core

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
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();
+        }
     }
 
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.