class: InspectorView
authorClaus Gittinger <cg@exept.de>
Sun, 31 Mar 2013 11:52:01 +0200
changeset 12597 cce7b1ccaa6d
parent 12596 454b05887d49
child 12598 8dcaa0fcccc1
class: InspectorView refactored fieldMenu: #localProtocolMenu #protocolMenu
InspectorView.st
--- a/InspectorView.st	Sat Mar 30 20:59:17 2013 +0100
+++ b/InspectorView.st	Sun Mar 31 11:52:01 2013 +0200
@@ -1257,10 +1257,7 @@
 
     <resource: #programMenu>
 
-    |items m sel protocolMenu localProtocolMenu 
-     protocols protocolsSorted
-     selectorsByFirstCharacter alphaMenu
-     localSelectors|
+    |items m sel|
 
     sel := self selection.
 
@@ -1363,74 +1360,6 @@
         ].
     ].
 
-    protocols := Dictionary new.
-    selectorsByFirstCharacter := Dictionary new.
-    object class withAllSuperclassesDo:[:eachClass |
-        eachClass methodDictionary keysAndValuesDo:[:sel :m |
-            sel numArgs == 0 ifTrue:[
-                (protocols at:m category ifAbsentPut:[Set new]) add:sel.
-                (selectorsByFirstCharacter at:(sel first asString) ifAbsentPut:[Set new]) add:sel.
-            ]
-        ].
-    ].
-
-    protocolsSorted := protocols keys asArray sort.
-    protocolMenu := PopUpMenu
-                        labels:#('alphabetical' '=') , protocolsSorted
-                        selectors:#(nil nil) , protocolsSorted.
-
-    protocolMenu 
-        subMenuAt:'alphabetical'
-        put:[
-            |firstChars|
-
-            firstChars := selectorsByFirstCharacter keys asOrderedCollection sort.
-            alphaMenu := PopUpMenu
-                               labels:firstChars
-                               selector:#mmm 
-                               args:firstChars
-                               receiver:self.
-            firstChars do:[:ch |
-                alphaMenu
-                    subMenuAt:ch
-                    put:[
-                        |selectors sortedSelectors|
-
-                        selectors := selectorsByFirstCharacter at:ch.
-                        sortedSelectors := selectors asArray sort.
-                        protocolMenu := PopUpMenu
-                                            labels:sortedSelectors
-                                            selector:#letSelectedObjectPerform: 
-                                            args:sortedSelectors
-                                            receiver:self.
-                    ]
-            ].
-            alphaMenu
-        ].
-
-    protocolsSorted do:[:p |
-        protocolMenu 
-            subMenuAt:p 
-            put:[
-                |selectors sortedSelectors|
-
-                selectors := protocols at:p.
-                sortedSelectors := selectors asArray sort.
-                protocolMenu := PopUpMenu
-                                    labels:sortedSelectors
-                                    selector:#letSelectedObjectPerform: 
-                                    args:sortedSelectors
-                                    receiver:self.
-            ]
-    ].
-
-    localSelectors := object class methodDictionary keys asArray sort.
-    localProtocolMenu := PopUpMenu
-                        labels:localSelectors
-                        selector:#letSelectedObjectPerform: 
-                        args:localSelectors
-                        receiver:self.
-
     items := items , (self sortOrderItems).
     items := items , (self numberBaseItems).
 
@@ -1438,8 +1367,8 @@
           itemList:items
           resources:resources.
 
-    m subMenuAt:#protocolMenu put:protocolMenu.
-    m subMenuAt:#localProtocolMenu put:localProtocolMenu.
+    m subMenuAt:#protocolMenu put:(self protocolMenu).
+    m subMenuAt:#localProtocolMenu put:(self localProtocolMenu).
 
     (self theSingleSelectionIndex isNil) ifTrue:[
         m disableAll:#(doFollow doInspect doBasicInspect doNewInspect
@@ -1463,11 +1392,30 @@
         m disable:#browseMethodsClass
     ].
 
+    sel := nil. "/ release ref to sel; helps reference finder
+
     ^ m
 
     "Modified: / 20-07-2012 / 10:50:45 / cg"
 !
 
+localProtocolMenu
+    "return the menu for the inspected object's local implemented messages"
+
+    |localSelectors labels localProtocolMenu|
+
+    localSelectors := object class methodDictionary keys asArray sort.
+    "/ kludge: '-' and '=' are special in a menu
+    labels := localSelectors collect:[:sel | (#('-' '=') includes:sel) ifTrue:[' ',sel] ifFalse:[sel]].
+    localProtocolMenu := PopUpMenu
+                        labels:labels
+                        selector:#letSelectedObjectPerform: 
+                        args:localSelectors
+                        receiver:self.
+
+    ^ localProtocolMenu
+!
+
 numberBaseItems
     ^ {
         #('-') .
@@ -1595,6 +1543,74 @@
     ^ #()
 !
 
+protocolMenu
+    "return the menu for the inspected object's implemented messages"
+
+    |protocols protocolsSorted selectorsByFirstCharacter protocolMenu|
+
+    protocols := Dictionary new.
+    selectorsByFirstCharacter := Dictionary new.
+    object class withAllSuperclassesDo:[:eachClass |
+        eachClass methodDictionary keysAndValuesDo:[:sel :m |
+            sel numArgs == 0 ifTrue:[
+                (protocols at:m category ifAbsentPut:[Set new]) add:sel.
+                (selectorsByFirstCharacter at:(sel first asString) ifAbsentPut:[Set new]) add:sel.
+            ]
+        ].
+    ].
+
+    protocolsSorted := protocols keys asArray sort.
+    protocolMenu := PopUpMenu
+                        labels:#('alphabetical' '=') , protocolsSorted
+                        selectors:#(nil nil) , protocolsSorted.
+
+    protocolMenu 
+        subMenuAt:'alphabetical'
+        put:[
+            |firstChars alphaMenu|
+
+            firstChars := selectorsByFirstCharacter keys asOrderedCollection sort.
+            alphaMenu := PopUpMenu
+                               labels:firstChars
+                               selector:#mmm 
+                               args:firstChars
+                               receiver:self.
+            firstChars do:[:ch |
+                alphaMenu
+                    subMenuAt:ch
+                    put:[
+                        |selectors sortedSelectors|
+
+                        selectors := selectorsByFirstCharacter at:ch.
+                        sortedSelectors := selectors asArray sort.
+                        PopUpMenu
+                            labels:sortedSelectors
+                            selector:#letSelectedObjectPerform: 
+                            args:sortedSelectors
+                            receiver:self.
+                    ]
+            ].
+            alphaMenu
+        ].
+
+    protocolsSorted do:[:p |
+        protocolMenu 
+            subMenuAt:p 
+            put:[
+                |selectors sortedSelectors|
+
+                selectors := protocols at:p.
+                sortedSelectors := selectors asArray sort.
+                PopUpMenu
+                    labels:sortedSelectors
+                    selector:#letSelectedObjectPerform: 
+                    args:sortedSelectors
+                    receiver:self.
+            ]
+    ].
+    ^  protocolMenu
+!
+
 sortOrderItems
     object class instSize == 0 ifTrue:[ ^ #() ].
     ^ {
@@ -3489,10 +3505,10 @@
 !InspectorView class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/InspectorView.st,v 1.301 2013-03-26 11:18:01 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/InspectorView.st,v 1.302 2013-03-31 09:52:01 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/InspectorView.st,v 1.301 2013-03-26 11:18:01 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/InspectorView.st,v 1.302 2013-03-31 09:52:01 cg Exp $'
 ! !