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]
