svn commit: r12885 - trunk/src_new/org/argouml: ui uml/ui

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: mvw
Date: 2007-06-20 10:43:23-0700
New Revision: 12885

Modified:
   trunk/src_new/org/argouml/ui/DetailsPane.java
   trunk/src_new/org/argouml/uml/ui/TabProps.java

Log:
Fix for issue 1925: Tab selection behaviour. Patch committed by Aleksandar.

Modified: trunk/src_new/org/argouml/ui/DetailsPane.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/ui/DetailsPane.java?view=diff&rev=12885&p1=trunk/src_new/org/argouml/ui/DetailsPane.java&p2=trunk/src_new/org/argouml/ui/DetailsPane.java&r1=12884&r2=12885
==============================================================================
--- trunk/src_new/org/argouml/ui/DetailsPane.java	(original)
+++ trunk/src_new/org/argouml/ui/DetailsPane.java	2007-06-20 10:43:23-0700
@@ -179,7 +179,7 @@
                 lastNonNullTab = i;
             }
         }
-        setTarget(null);
+        setTarget(null, true);
         topLevelTabbedPane.addMouseListener(this);
         topLevelTabbedPane.addChangeListener(this);
     }
@@ -215,6 +215,24 @@
     }
 
     /**
+     * Selects the prop tab if it is appropriate for the target.
+     *
+     * @param target
+     *            the target object
+     * @return true if props tab is really selected
+     */
+    private boolean selectPropsTab(Object target) {
+        if (getTabProps().shouldBeEnabled(target)) {
+            int indexOfPropPanel = topLevelTabbedPane
+                    .indexOfComponent(getTabProps());
+            topLevelTabbedPane.setSelectedIndex(indexOfPropPanel);
+            lastNonNullTab = indexOfPropPanel;
+            return true;
+        }
+        return false;
+    }
+
+    /**
      * Sets the target of the Details pane to either be a
      * selected model element or
      * the owner(model element) of a selected fig.<p>
@@ -223,25 +241,27 @@
      *
      * @param target the target object
      */
-    private void setTarget(Object target) {
+    private void setTarget(Object target, boolean defaultToProperties) {
         enableTabs(target);
         if (target != null) {
             boolean tabSelected = false;
 
-            // Select prop panel if current panel is not appropriate
-            // for selected target
-            Component selectedTab = topLevelTabbedPane
-                    .getComponentAt(lastNonNullTab);
-            if (selectedTab instanceof TabTarget) {
-                if (((TabTarget) selectedTab).shouldBeEnabled(target)) {
-                    topLevelTabbedPane.setSelectedIndex(lastNonNullTab);
-                    tabSelected = true;
-                } else {
-                    int indexOfPropPanel = topLevelTabbedPane
-                            .indexOfComponent(getTabProps());
-                    topLevelTabbedPane.setSelectedIndex(indexOfPropPanel);
-                    tabSelected = true;
-                    lastNonNullTab = indexOfPropPanel;
+            // Always select properties panel if defaultToProperties is true,
+            // and if properties panel is appropriate for selected perspective
+            if (defaultToProperties) {
+                tabSelected = selectPropsTab(target);
+            } else {
+                // Select prop panel if current panel is not appropriate
+                // for selected target
+                Component selectedTab = topLevelTabbedPane
+                        .getComponentAt(lastNonNullTab);
+                if (selectedTab instanceof TabTarget) {
+                    if (((TabTarget) selectedTab).shouldBeEnabled(target)) {
+                        topLevelTabbedPane.setSelectedIndex(lastNonNullTab);
+                        tabSelected = true;
+                    } else {
+                        tabSelected = selectPropsTab(target);
+                    }
                 }
             }
             if (!tabSelected) {
@@ -565,7 +585,7 @@
      * @see TargetListener#targetAdded(TargetEvent)
      */
     public void targetAdded(TargetEvent e) {
-        setTarget(TargetManager.getInstance().getSingleTarget());
+        setTarget(TargetManager.getInstance().getSingleTarget(), false);
         fireTargetAdded(e);
     }
 
@@ -573,7 +593,7 @@
      * @see TargetListener#targetRemoved(TargetEvent)
      */
     public void targetRemoved(TargetEvent e) {
-        setTarget(TargetManager.getInstance().getSingleTarget());
+        setTarget(TargetManager.getInstance().getSingleTarget(), false);
         fireTargetRemoved(e);
     }
 
@@ -581,7 +601,7 @@
      * @see TargetListener#targetSet(TargetEvent)
      */
     public void targetSet(TargetEvent e) {
-        setTarget(TargetManager.getInstance().getSingleTarget());
+        setTarget(TargetManager.getInstance().getSingleTarget(), true);
         fireTargetSet(e);
     }
 

Modified: trunk/src_new/org/argouml/uml/ui/TabProps.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/uml/ui/TabProps.java?view=diff&rev=12885&p1=trunk/src_new/org/argouml/uml/ui/TabProps.java&p2=trunk/src_new/org/argouml/uml/ui/TabProps.java&r1=12884&r2=12885
==============================================================================
--- trunk/src_new/org/argouml/uml/ui/TabProps.java	(original)
+++ trunk/src_new/org/argouml/uml/ui/TabProps.java	2007-06-20 10:43:23-0700
@@ -323,7 +323,7 @@
             }
             return p;
         }
-        
+
         LOG.error("Failed to create a prop panel for : " + trgt);
         return null;
     }
@@ -338,7 +338,7 @@
     private TabModelTarget createPropPanel(Object modelElement) {
 
 	TabModelTarget propPanel = null;
-	
+
         // Create prop panels for diagrams
         if (modelElement instanceof UMLActivityDiagram) {
             propPanel = new PropPanelUMLActivityDiagram();
@@ -515,7 +515,7 @@
         } else if (modelElement instanceof FigText) {
             propPanel = new PropPanelString();
         }
-        
+
         if (propPanel instanceof PropPanel) {
             ((PropPanel) propPanel).buildToolbar();
         }
@@ -545,7 +545,7 @@
     }
 
     /**
-     * Determines if the property panel should be enabled. 
+     * Determines if the property panel should be enabled.
      * The property panel should always be enabled if the
      * target is an instance of a modelelement or an argodiagram.
      * If the target given is a Fig, a check is made if the fig
@@ -557,7 +557,8 @@
      */
     public boolean shouldBeEnabled(Object t) {
         t = (t instanceof Fig) ? ((Fig) t).getOwner() : t;
-        if (t instanceof Diagram || Model.getFacade().isAUMLElement(t)) {
+        if ((t instanceof Diagram || Model.getFacade().isAUMLElement(t))
+                && findPanelFor(t) != null) {
             shouldBeEnabled = true;
         } else {
             shouldBeEnabled = false;
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.