changed:5 methods
authorClaus Gittinger <cg@exept.de>
Wed, 14 Apr 2010 21:24:15 +0200
changeset 9409 498fd13dfd31
parent 9408 173aa5a55022
child 9410 4cf82538c97e
changed:5 methods construct a nice messages menu - even if no method is selected.
NewSystemBrowser.st
Tools__NewSystemBrowser.st
--- a/NewSystemBrowser.st	Wed Apr 14 10:54:54 2010 +0200
+++ b/NewSystemBrowser.st	Wed Apr 14 21:24:15 2010 +0200
@@ -9276,7 +9276,7 @@
          (MenuItem
             label: 'Implementors'
             translateLabel: true
-            isVisible: hasSingleMethodSelectedHolder
+            "/ isVisible: hasSingleMethodSelectedHolder
             submenuChannel: implementedMessagesMenu
           )
          (MenuItem
@@ -35528,13 +35528,15 @@
 !
 
 implementedMessagesMenu
-    ^ self
-        messagesMenuFor:#'spawnBrowserOnAllImplementorsOf:'
-        withSenderChain:false
-        withImplementorChain:true
-        withLocalSenders:false
-        withLocalImplementors:true
-        selfSendsOnly:false
+    ^ [
+        self
+            messagesMenuFor:#'spawnBrowserOnAllImplementorsOf:'
+            withSenderChain:false
+            withImplementorChain:true
+            withLocalSenders:false
+            withLocalImplementors:true
+            selfSendsOnly:false
+      ]
 
     "Modified: / 05-09-2006 / 10:34:10 / cg"
 !
@@ -35578,13 +35580,15 @@
 !
 
 messagesMenuFor:actionSelector withSenderChain:withSenderChain withImplementorChain:withImplementorChain selfSendsOnly:selfSendsOnly
-    ^ self
-        messagesMenuFor:actionSelector
-        withSenderChain:withSenderChain
-        withImplementorChain:withImplementorChain
-        withLocalSenders:false
-        withLocalImplementors:false
-        selfSendsOnly:selfSendsOnly
+    ^ [
+        self
+            messagesMenuFor:actionSelector
+            withSenderChain:withSenderChain
+            withImplementorChain:withImplementorChain
+            withLocalSenders:false
+            withLocalImplementors:false
+            selfSendsOnly:selfSendsOnly
+      ]
 
     "Modified: / 05-09-2006 / 10:33:05 / cg"
 !
@@ -35592,19 +35596,18 @@
 messagesMenuFor:actionSelector withSenderChain:withSenderChain withImplementorChain:withImplementorChain withLocalSenders:withLocalSenders withLocalImplementors:withLocalImplementors selfSendsOnly:selfSendsOnly
     <resource: #programMenu >
 
-    ^ [
-        |m mthd mSel contractedSelector item l cut|
-
-        m := Menu new.
-
-        mthd := self theSingleSelectedMethod.
-        (mthd notNil and:[ (mSel := mthd selector) notNil]) ifTrue:[
-            contractedSelector := mSel contractTo:80.
-
-            item := MenuItem label:(' ' , contractedSelector , ' ').   "/ ' ' is a kludge - to allow '-' selector
-            item value:actionSelector.
-            item argument:mSel.
-            m addItem:item.
+    |m mthd mSel contractedSelector item l cut methods allMessagesSent|
+
+    m := Menu new.
+
+    mthd := self theSingleSelectedMethod.
+    (mthd notNil and:[ (mSel := mthd selector) notNil]) ifTrue:[
+        contractedSelector := mSel contractTo:80.
+
+        item := MenuItem label:(' ' , contractedSelector , ' ').   "/ ' ' is a kludge - to allow '-' selector
+        item value:actionSelector.
+        item argument:mSel.
+        m addItem:item.
 
 "/            true "withInstanceProtocolOnly" ifTrue:[
 "/                item := MenuItem label:(resources string:' %1 - Instance Protocol Only' with:contractedSelector).
@@ -35619,42 +35622,42 @@
 "/                m addItem:item.
 "/            ].
 
-            (withLocalSenders | withSenderChain | withLocalImplementors | withImplementorChain) ifTrue:[
-                m addSeparator.
-            ].
-
-            withLocalSenders ifTrue:[
-                "/ item := MenuItem label:(resources string:' %1 - Local Senders' with:contractedSelector).
-                item := MenuItem label:(resources string:'Local Senders of %1' with:contractedSelector).
-                item value:#spawnLocalSendersBuffer.
-                m addItem:item.
-            ].
-            withSenderChain ifTrue:[
-                "/ item := MenuItem label:(resources string:' %1 - Sender Chain' with:contractedSelector).
-                item := MenuItem label:(resources string:'Sender Chain of %1' with:contractedSelector).
-                item value:#spawnSenderChainBuffer.
-                m addItem:item.
-            ].
-            withLocalImplementors ifTrue:[
-                "/ item := MenuItem label:(resources string:' %1 - Local Implementors' with:contractedSelector).
-                item := MenuItem label:(resources string:'Local Implementors of %1' with:contractedSelector).
-                item value:#spawnLocalImplementorsBuffer.
-                m addItem:item.
-            ].
-            withImplementorChain ifTrue:[
-                item := MenuItem label:(resources string:'Implementor Chain of %1' with:contractedSelector).
-                item value:#spawnImplementorChainBuffer.
-                m addItem:item.
-            ].
-
-            selfSendsOnly ifTrue:[
-                l := mthd messagesSentToSelf.
-            ] ifFalse:[
-                l := mthd messagesSent.
-            ].
-            l := l asSortedCollection.
-            l size > 0 ifTrue:[
-                m addSeparator.
+        (withLocalSenders | withSenderChain | withLocalImplementors | withImplementorChain) ifTrue:[
+            m addSeparator.
+        ].
+
+        withLocalSenders ifTrue:[
+            "/ item := MenuItem label:(resources string:' %1 - Local Senders' with:contractedSelector).
+            item := MenuItem label:(resources string:'Local Senders of %1' with:contractedSelector).
+            item value:#spawnLocalSendersBuffer.
+            m addItem:item.
+        ].
+        withSenderChain ifTrue:[
+            "/ item := MenuItem label:(resources string:' %1 - Sender Chain' with:contractedSelector).
+            item := MenuItem label:(resources string:'Sender Chain of %1' with:contractedSelector).
+            item value:#spawnSenderChainBuffer.
+            m addItem:item.
+        ].
+        withLocalImplementors ifTrue:[
+            "/ item := MenuItem label:(resources string:' %1 - Local Implementors' with:contractedSelector).
+            item := MenuItem label:(resources string:'Local Implementors of %1' with:contractedSelector).
+            item value:#spawnLocalImplementorsBuffer.
+            m addItem:item.
+        ].
+        withImplementorChain ifTrue:[
+            item := MenuItem label:(resources string:'Implementor Chain of %1' with:contractedSelector).
+            item value:#spawnImplementorChainBuffer.
+            m addItem:item.
+        ].
+
+        selfSendsOnly ifTrue:[
+            l := mthd messagesSentToSelf.
+        ] ifFalse:[
+            l := mthd messagesSent.
+        ].
+        l := l asSortedCollection.
+        l size > 0 ifTrue:[
+            m addSeparator.
 
 "
                 (l size > 30) ifTrue:[
@@ -35672,12 +35675,12 @@
                     l := l copyTo:30
                 ].
 "
-                l do:[:eachMessage |
-                    item := MenuItem label:(' ' , (eachMessage contractTo:100), ' ').  "/ ' ' is a kludge - to allow '-' selector
-                    item value:actionSelector.
-                    item argument:eachMessage asSymbol.
-                    m addItem:item.
-                ].
+            l do:[:eachMessage |
+                item := MenuItem label:(' ' , (eachMessage contractTo:100), ' ').  "/ ' ' is a kludge - to allow '-' selector
+                item value:actionSelector.
+                item argument:eachMessage asSymbol.
+                m addItem:item.
+            ].
 
 "
                 cut ifTrue:[
@@ -35685,10 +35688,48 @@
                     m addItem:(MenuItem label:'<< more items ignored >>').
                 ]
 "
-            ]
-        ].
-        m
-    ].
+        ]
+    ] ifFalse:[
+        allMessagesSent := Set new.
+
+        "/ not exactly one method selected;
+        "/ generate a menu for all selected method's implementors and sent messages.
+        methods := self selectedMethods value.
+        methods isEmptyOrNil ifTrue:[
+            methods := OrderedCollection new.
+            self selectedClassesDo:[:cls |
+                cls methodsDo:[:eachMethod | methods add:eachMethod].
+            ].
+        ].
+        methods do:[:eachMethod |
+            mSel := eachMethod selector.
+            contractedSelector := mSel contractTo:80.
+
+            item := MenuItem label:(' ' , contractedSelector , ' ').   "/ ' ' is a kludge - to allow '-' selector
+            item value:actionSelector.
+            item argument:mSel.
+            m addItem:item.
+
+            selfSendsOnly ifTrue:[
+                allMessagesSent addAll:(eachMethod messagesSentToSelf).
+            ] ifFalse:[
+                allMessagesSent addAll:(eachMethod messagesSent).
+            ].
+        ].
+
+        allMessagesSent := allMessagesSent asSortedCollection.
+        allMessagesSent size > 0 ifTrue:[
+            m addSeparator.
+            allMessagesSent do:[:eachMessage |
+                item := MenuItem label:(' ' , (eachMessage contractTo:100), ' ').  "/ ' ' is a kludge - to allow '-' selector
+                item value:actionSelector.
+                item argument:eachMessage asSymbol.
+                m addItem:item.
+            ].
+        ].
+    ].
+
+    ^ m
 
     "Created: / 05-09-2006 / 10:32:43 / cg"
 !
@@ -35783,13 +35824,15 @@
 !
 
 sentMessagesMenu
-    ^ self
-        messagesMenuFor:#'spawnBrowserOnAllSendersOf:'
-        withSenderChain:true "(self window sensor ctrlDown)"
-        withImplementorChain:false
-        withLocalSenders:true
-        withLocalImplementors:false
-        selfSendsOnly:false
+    ^ [
+        self
+            messagesMenuFor:#'spawnBrowserOnAllSendersOf:'
+            withSenderChain:true "(self window sensor ctrlDown)"
+            withImplementorChain:false
+            withLocalSenders:true
+            withLocalImplementors:false
+            selfSendsOnly:false
+      ]
 
     "Modified: / 05-09-2006 / 10:33:41 / cg"
 !
@@ -43933,11 +43976,11 @@
 !NewSystemBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1447 2010-03-29 14:26:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1448 2010-04-14 19:24:15 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1447 2010-03-29 14:26:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Attic/NewSystemBrowser.st,v 1.1448 2010-04-14 19:24:15 cg Exp $'
 ! !
 
 NewSystemBrowser initialize!
--- a/Tools__NewSystemBrowser.st	Wed Apr 14 10:54:54 2010 +0200
+++ b/Tools__NewSystemBrowser.st	Wed Apr 14 21:24:15 2010 +0200
@@ -9276,7 +9276,7 @@
          (MenuItem
             label: 'Implementors'
             translateLabel: true
-            isVisible: hasSingleMethodSelectedHolder
+            "/ isVisible: hasSingleMethodSelectedHolder
             submenuChannel: implementedMessagesMenu
           )
          (MenuItem
@@ -35528,13 +35528,15 @@
 !
 
 implementedMessagesMenu
-    ^ self
-        messagesMenuFor:#'spawnBrowserOnAllImplementorsOf:'
-        withSenderChain:false
-        withImplementorChain:true
-        withLocalSenders:false
-        withLocalImplementors:true
-        selfSendsOnly:false
+    ^ [
+        self
+            messagesMenuFor:#'spawnBrowserOnAllImplementorsOf:'
+            withSenderChain:false
+            withImplementorChain:true
+            withLocalSenders:false
+            withLocalImplementors:true
+            selfSendsOnly:false
+      ]
 
     "Modified: / 05-09-2006 / 10:34:10 / cg"
 !
@@ -35578,13 +35580,15 @@
 !
 
 messagesMenuFor:actionSelector withSenderChain:withSenderChain withImplementorChain:withImplementorChain selfSendsOnly:selfSendsOnly
-    ^ self
-        messagesMenuFor:actionSelector
-        withSenderChain:withSenderChain
-        withImplementorChain:withImplementorChain
-        withLocalSenders:false
-        withLocalImplementors:false
-        selfSendsOnly:selfSendsOnly
+    ^ [
+        self
+            messagesMenuFor:actionSelector
+            withSenderChain:withSenderChain
+            withImplementorChain:withImplementorChain
+            withLocalSenders:false
+            withLocalImplementors:false
+            selfSendsOnly:selfSendsOnly
+      ]
 
     "Modified: / 05-09-2006 / 10:33:05 / cg"
 !
@@ -35592,19 +35596,18 @@
 messagesMenuFor:actionSelector withSenderChain:withSenderChain withImplementorChain:withImplementorChain withLocalSenders:withLocalSenders withLocalImplementors:withLocalImplementors selfSendsOnly:selfSendsOnly
     <resource: #programMenu >
 
-    ^ [
-        |m mthd mSel contractedSelector item l cut|
-
-        m := Menu new.
-
-        mthd := self theSingleSelectedMethod.
-        (mthd notNil and:[ (mSel := mthd selector) notNil]) ifTrue:[
-            contractedSelector := mSel contractTo:80.
-
-            item := MenuItem label:(' ' , contractedSelector , ' ').   "/ ' ' is a kludge - to allow '-' selector
-            item value:actionSelector.
-            item argument:mSel.
-            m addItem:item.
+    |m mthd mSel contractedSelector item l cut methods allMessagesSent|
+
+    m := Menu new.
+
+    mthd := self theSingleSelectedMethod.
+    (mthd notNil and:[ (mSel := mthd selector) notNil]) ifTrue:[
+        contractedSelector := mSel contractTo:80.
+
+        item := MenuItem label:(' ' , contractedSelector , ' ').   "/ ' ' is a kludge - to allow '-' selector
+        item value:actionSelector.
+        item argument:mSel.
+        m addItem:item.
 
 "/            true "withInstanceProtocolOnly" ifTrue:[
 "/                item := MenuItem label:(resources string:' %1 - Instance Protocol Only' with:contractedSelector).
@@ -35619,42 +35622,42 @@
 "/                m addItem:item.
 "/            ].
 
-            (withLocalSenders | withSenderChain | withLocalImplementors | withImplementorChain) ifTrue:[
-                m addSeparator.
-            ].
-
-            withLocalSenders ifTrue:[
-                "/ item := MenuItem label:(resources string:' %1 - Local Senders' with:contractedSelector).
-                item := MenuItem label:(resources string:'Local Senders of %1' with:contractedSelector).
-                item value:#spawnLocalSendersBuffer.
-                m addItem:item.
-            ].
-            withSenderChain ifTrue:[
-                "/ item := MenuItem label:(resources string:' %1 - Sender Chain' with:contractedSelector).
-                item := MenuItem label:(resources string:'Sender Chain of %1' with:contractedSelector).
-                item value:#spawnSenderChainBuffer.
-                m addItem:item.
-            ].
-            withLocalImplementors ifTrue:[
-                "/ item := MenuItem label:(resources string:' %1 - Local Implementors' with:contractedSelector).
-                item := MenuItem label:(resources string:'Local Implementors of %1' with:contractedSelector).
-                item value:#spawnLocalImplementorsBuffer.
-                m addItem:item.
-            ].
-            withImplementorChain ifTrue:[
-                item := MenuItem label:(resources string:'Implementor Chain of %1' with:contractedSelector).
-                item value:#spawnImplementorChainBuffer.
-                m addItem:item.
-            ].
-
-            selfSendsOnly ifTrue:[
-                l := mthd messagesSentToSelf.
-            ] ifFalse:[
-                l := mthd messagesSent.
-            ].
-            l := l asSortedCollection.
-            l size > 0 ifTrue:[
-                m addSeparator.
+        (withLocalSenders | withSenderChain | withLocalImplementors | withImplementorChain) ifTrue:[
+            m addSeparator.
+        ].
+
+        withLocalSenders ifTrue:[
+            "/ item := MenuItem label:(resources string:' %1 - Local Senders' with:contractedSelector).
+            item := MenuItem label:(resources string:'Local Senders of %1' with:contractedSelector).
+            item value:#spawnLocalSendersBuffer.
+            m addItem:item.
+        ].
+        withSenderChain ifTrue:[
+            "/ item := MenuItem label:(resources string:' %1 - Sender Chain' with:contractedSelector).
+            item := MenuItem label:(resources string:'Sender Chain of %1' with:contractedSelector).
+            item value:#spawnSenderChainBuffer.
+            m addItem:item.
+        ].
+        withLocalImplementors ifTrue:[
+            "/ item := MenuItem label:(resources string:' %1 - Local Implementors' with:contractedSelector).
+            item := MenuItem label:(resources string:'Local Implementors of %1' with:contractedSelector).
+            item value:#spawnLocalImplementorsBuffer.
+            m addItem:item.
+        ].
+        withImplementorChain ifTrue:[
+            item := MenuItem label:(resources string:'Implementor Chain of %1' with:contractedSelector).
+            item value:#spawnImplementorChainBuffer.
+            m addItem:item.
+        ].
+
+        selfSendsOnly ifTrue:[
+            l := mthd messagesSentToSelf.
+        ] ifFalse:[
+            l := mthd messagesSent.
+        ].
+        l := l asSortedCollection.
+        l size > 0 ifTrue:[
+            m addSeparator.
 
 "
                 (l size > 30) ifTrue:[
@@ -35672,12 +35675,12 @@
                     l := l copyTo:30
                 ].
 "
-                l do:[:eachMessage |
-                    item := MenuItem label:(' ' , (eachMessage contractTo:100), ' ').  "/ ' ' is a kludge - to allow '-' selector
-                    item value:actionSelector.
-                    item argument:eachMessage asSymbol.
-                    m addItem:item.
-                ].
+            l do:[:eachMessage |
+                item := MenuItem label:(' ' , (eachMessage contractTo:100), ' ').  "/ ' ' is a kludge - to allow '-' selector
+                item value:actionSelector.
+                item argument:eachMessage asSymbol.
+                m addItem:item.
+            ].
 
 "
                 cut ifTrue:[
@@ -35685,10 +35688,48 @@
                     m addItem:(MenuItem label:'<< more items ignored >>').
                 ]
 "
-            ]
-        ].
-        m
-    ].
+        ]
+    ] ifFalse:[
+        allMessagesSent := Set new.
+
+        "/ not exactly one method selected;
+        "/ generate a menu for all selected method's implementors and sent messages.
+        methods := self selectedMethods value.
+        methods isEmptyOrNil ifTrue:[
+            methods := OrderedCollection new.
+            self selectedClassesDo:[:cls |
+                cls methodsDo:[:eachMethod | methods add:eachMethod].
+            ].
+        ].
+        methods do:[:eachMethod |
+            mSel := eachMethod selector.
+            contractedSelector := mSel contractTo:80.
+
+            item := MenuItem label:(' ' , contractedSelector , ' ').   "/ ' ' is a kludge - to allow '-' selector
+            item value:actionSelector.
+            item argument:mSel.
+            m addItem:item.
+
+            selfSendsOnly ifTrue:[
+                allMessagesSent addAll:(eachMethod messagesSentToSelf).
+            ] ifFalse:[
+                allMessagesSent addAll:(eachMethod messagesSent).
+            ].
+        ].
+
+        allMessagesSent := allMessagesSent asSortedCollection.
+        allMessagesSent size > 0 ifTrue:[
+            m addSeparator.
+            allMessagesSent do:[:eachMessage |
+                item := MenuItem label:(' ' , (eachMessage contractTo:100), ' ').  "/ ' ' is a kludge - to allow '-' selector
+                item value:actionSelector.
+                item argument:eachMessage asSymbol.
+                m addItem:item.
+            ].
+        ].
+    ].
+
+    ^ m
 
     "Created: / 05-09-2006 / 10:32:43 / cg"
 !
@@ -35783,13 +35824,15 @@
 !
 
 sentMessagesMenu
-    ^ self
-        messagesMenuFor:#'spawnBrowserOnAllSendersOf:'
-        withSenderChain:true "(self window sensor ctrlDown)"
-        withImplementorChain:false
-        withLocalSenders:true
-        withLocalImplementors:false
-        selfSendsOnly:false
+    ^ [
+        self
+            messagesMenuFor:#'spawnBrowserOnAllSendersOf:'
+            withSenderChain:true "(self window sensor ctrlDown)"
+            withImplementorChain:false
+            withLocalSenders:true
+            withLocalImplementors:false
+            selfSendsOnly:false
+      ]
 
     "Modified: / 05-09-2006 / 10:33:41 / cg"
 !
@@ -43933,11 +43976,11 @@
 !NewSystemBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.1447 2010-03-29 14:26:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.1448 2010-04-14 19:24:15 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.1447 2010-03-29 14:26:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__NewSystemBrowser.st,v 1.1448 2010-04-14 19:24:15 cg Exp $'
 ! !
 
 NewSystemBrowser initialize!