new enumerator: allItemsDetect:ifNone:
authorClaus Gittinger <cg@exept.de>
Thu, 05 Jun 2008 19:13:20 +0200
changeset 2494 994b030ae562
parent 2493 6aa0d6539c5d
child 2495 728d6935dc5b
new enumerator: allItemsDetect:ifNone:
Menu.st
--- a/Menu.st	Thu Jun 05 17:30:14 2008 +0200
+++ b/Menu.st	Thu Jun 05 19:13:20 2008 +0200
@@ -856,6 +856,21 @@
 
 !Menu methodsFor:'enumerating'!
 
+allItemsDetect:aOneArgBlock ifNone:exceptionalValue
+    "find an element amongst each item and submenu items"
+
+    self itemsDo:[:anItem|
+        |sub subItem|
+
+        (aOneArgBlock value:anItem) ifTrue:[^ anItem].
+        (sub := anItem submenu) notNil ifTrue:[
+            subItem := sub allItemsDetect:aOneArgBlock ifNone:nil.
+            subItem notNil ifTrue:[^ subItem].
+        ]
+    ].
+    ^ exceptionalValue value
+!
+
 allItemsDo:aOneArgBlock
     "evaluate block on each item and submenu items
     "
@@ -1150,5 +1165,5 @@
 !Menu class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview2/Menu.st,v 1.69 2008-04-21 16:03:55 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview2/Menu.st,v 1.70 2008-06-05 17:13:20 cg Exp $'
 ! !