--- a/MenuPanel.st Tue Sep 21 16:59:04 2010 +0200
+++ b/MenuPanel.st Wed Sep 22 14:20:31 2010 +0200
@@ -2092,7 +2092,6 @@
|submenu|
-
self itemAt:stringOrNumber do:[:anItem|
submenu := anItem currentSubmenu.
submenu isNil ifTrue:[
@@ -2100,6 +2099,8 @@
].
].
^ submenu
+
+ "Modified: / 22-09-2010 / 13:53:21 / cg"
!
subMenuAt:stringOrNumber put:aSubMenu
@@ -7610,7 +7611,7 @@
aRecv isNil ifTrue:[^ nil].
sel := menuItem submenuChannel.
- sel isString ifFalse:[^ nil].
+ (sel isString or:[sel isSymbol]) ifFalse:[^ nil].
sel := sel asSymbol.
numArgs := sel numArgs.
@@ -7652,7 +7653,7 @@
^ subm
- "Modified: / 30.10.2001 / 13:28:25 / cg"
+ "Modified: / 22-09-2010 / 13:56:50 / cg"
!
indicationValue
@@ -7770,7 +7771,8 @@
!
setupSubmenu
- |appl master recv submenuHolder submenu submenuEncoding channel|
+ |appl submenuProvider master recv submenuHolder newSubmenu submenuEncoding
+ channel whoProvidedMenu t|
channel := menuItem submenuChannel value.
channel isNil ifTrue:[ ^ subMenu ].
@@ -7782,45 +7784,103 @@
channel isSymbol ifFalse:[
submenuHolder := channel
] ifTrue:[
- appl := menuPanel application.
- appl isNil ifTrue:[
- appl := menuPanel receiver.
- appl notNil ifTrue:[
- (submenuHolder := self findSubMenuIn:appl) isNil ifTrue:[
- [submenuHolder isNil
- and:[(master := appl perform:#masterApplication ifNotUnderstood:nil) notNil
- and:[master ~~ appl]]] whileTrue:[
- appl := master.
- submenuHolder := self findSubMenuIn:appl.
- ].
- ]
+ "/ submenu is specified by a selector in submenuChannel.
+ "/ who gets me the menu:
+ "/ 1) submenuProvider (if not nil)
+ "/ 2) menuPanel application
+ "/ 3) menuPanel receiver
+ "/ 4) menuPanel application master-chain
+ "/ 5) menuPanel receiver master-chain
+
+ (submenuProvider := menuItem submenuProvider) notNil ifTrue:[
+ submenuHolder := self findSubMenuIn:submenuProvider.
+ whoProvidedMenu := submenuProvider.
+ ].
+ submenuHolder isNil ifTrue:[
+ appl := menuPanel application.
+ (appl notNil and:[appl ~~ submenuProvider]) ifTrue:[
+ submenuHolder := self findSubMenuIn:appl.
+ whoProvidedMenu := appl.
].
- ].
- submenuHolder isNil ifTrue:[
- (submenuHolder := self findSubMenuIn:appl) isNil ifTrue:[
- (recv := menuPanel receiver) ~~ appl ifTrue:[
- appl := recv.
- submenuHolder := self findSubMenuIn:appl
- ]
- ]
- ]
- ].
-
- (submenu := submenuHolder value) isArray ifTrue:[
- submenuEncoding := submenu.
- submenu := Menu decodeFromLiteralArray:submenuEncoding.
+ submenuHolder isNil ifTrue:[
+ recv := menuPanel receiver.
+ (recv notNil and:[recv ~~ appl and:[recv ~~ submenuProvider]]) ifTrue:[
+ submenuHolder := self findSubMenuIn:recv.
+ whoProvidedMenu := recv.
+ ].
+ (submenuHolder isNil and:[appl notNil]) ifTrue:[
+ t := appl.
+ [ submenuHolder isNil
+ and:[ (master := t perform:#masterApplication ifNotUnderstood:nil) notNil ]
+ ] whileTrue:[
+ ( master ~~ appl
+ and:[ master ~~ recv
+ and:[ master ~~ submenuProvider ]] ) ifTrue:[
+ submenuHolder := self findSubMenuIn:master.
+ ].
+ t := master.
+ whoProvidedMenu := master.
+ ]
+ ].
+ (submenuHolder isNil and:[recv notNil]) ifTrue:[
+ t := recv.
+ [ submenuHolder isNil
+ and:[ (master := t perform:#masterApplication ifNotUnderstood:nil) notNil ]
+ ] whileTrue:[
+ ( master ~~ appl
+ and:[ master ~~ recv
+ and:[ master ~~ submenuProvider ]] ) ifTrue:[
+ submenuHolder := self findSubMenuIn:master.
+ ].
+ t := master.
+ whoProvidedMenu := master.
+ ]
+ ].
+ ].
+ ].
+ submenuHolder isNil ifTrue:[
+ self halt:'did not find any menu'
+ ].
+
+"/ appl := menuPanel application.
+"/ appl isNil ifTrue:[
+"/ appl := menuPanel receiver.
+"/ appl notNil ifTrue:[
+"/ (submenuHolder := self findSubMenuIn:appl) isNil ifTrue:[
+"/ [submenuHolder isNil
+"/ and:[(master := appl perform:#masterApplication ifNotUnderstood:nil) notNil
+"/ and:[master ~~ appl]]] whileTrue:[
+"/ appl := master.
+"/ submenuHolder := self findSubMenuIn:appl.
+"/ ].
+"/ ]
+"/ ].
+"/ ].
+"/ submenuHolder isNil ifTrue:[
+"/ (submenuHolder := self findSubMenuIn:appl) isNil ifTrue:[
+"/ (recv := menuPanel receiver) ~~ appl ifTrue:[
+"/ appl := recv.
+"/ submenuHolder := self findSubMenuIn:appl
+"/ ]
+"/ ]
+"/ ]
+ ].
+
+ (newSubmenu := submenuHolder value) isArray ifTrue:[
+ submenuEncoding := newSubmenu.
+ newSubmenu := Menu decodeFromLiteralArray:submenuEncoding.
"/ cg: linked menus also may contain translations ...
- submenu notNil ifTrue:[
- appl notNil ifTrue:[
- submenu findGuiResourcesIn:appl.
+ newSubmenu notNil ifTrue:[
+ whoProvidedMenu "appl" notNil ifTrue:[
+ newSubmenu findGuiResourcesIn:whoProvidedMenu "appl".
]
].
].
"/ appl notNil ifTrue:[submenu application:appl].
- self submenu:submenu.
+ self submenu:newSubmenu.
^ subMenu
- "Modified: / 27-03-2007 / 08:43:25 / cg"
+ "Modified: / 22-09-2010 / 14:19:29 / cg"
!
spaceBetweenEmptyLines
@@ -8272,11 +8332,11 @@
!MenuPanel class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg2/MenuPanel.st,v 1.505 2010-08-17 08:47:53 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/MenuPanel.st,v 1.506 2010-09-22 12:20:31 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libwidg2/MenuPanel.st,v 1.505 2010-08-17 08:47:53 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/MenuPanel.st,v 1.506 2010-09-22 12:20:31 cg Exp $'
! !
MenuPanel initialize!