Morphic Sub menus [HELP]

jj at objectsroot.com jj at objectsroot.com
Tue Oct 5 18:16:22 UTC 2004


Hi all...
 I am working on Celeste to gain submenu on some area.
I cannot build a proper submenu.
I have used code like this inside 
	Celeste>>addGeneralMenuOptionsTo: aMenu 
...
subMenu := (MenuMorph entitled:'Submenu') defaultTarget: (aMenu
defaultTarget).
[...adding submenu objects...]
aMenu add: (self category) subMenu: subMenu

When the menu is renderer, I got a complain  by
MenuMorph>>setInvokingView: (see below)

In the line
 MenuMorph>>setInvokingView: {[:item | item arguments isEmpty   ifTrue:
[item   

item arguments return nil (it seems item is my dear submenu or something
like that).

How is the right way to init a SubMenu?
Can you help me?
Thanks :)



5 October 2004 7:09:34 pm

VM: Win32 - a SmalltalkImage
Image: Squeak3.8alpha [latest update: #5990]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir C:\gio\netDisk\celeste
Trusted Dir C:\gio\netDisk\celeste\Gio
Untrusted Dir C:\My Squeak\Gio

UndefinedObject(Object)>>doesNotUnderstand: #isEmpty
	Receiver: nil
	Arguments and temporary variables: 
		aMessage: 	isEmpty
	Receiver's instance variables: 
nil

[] in MenuMorph>>setInvokingView: {[:item | item arguments isEmpty  
ifTrue: [item     arguments: (Array with: ...]}
	Arguments and temporary variables: 
		invokingView: 	a PluggableListMorphByItem(1550)
		item: 	a MenuItemMorph(704)'.sent.'

Array(SequenceableCollection)>>do:
	Receiver: #(a MenuItemMorph(606)'fetch mail' a MenuItemMorph(826)'send
queued mail' a MenuItemMorph(...etc...
	Arguments and temporary variables: 
		aBlock: 	[] in MenuMorph>>setInvokingView: {[:item | item arguments
isEmpty   if...etc...
		index: 	4
		indexLimiT: 	24
	Receiver's instance variables: 
#(a MenuItemMorph(606)'fetch mail' a MenuItemMorph(826)'send queued
mail' a MenuItemMorph(...etc...

MenuMorph>>setInvokingView:
	Receiver: a MenuMorph(268)
	Arguments and temporary variables: 
		invokingView: 	a PluggableListMorphByItem(1550)
		item: 	a MenuItemMorph(704)'.sent.'
	Receiver's instance variables: 
		bounds: 	0 at 0 corner: 40 at 10
		owner: 	nil
		submorphs: 	#(a MenuItemMorph(606)'fetch mail' a
MenuItemMorph(826)'send queued ...etc...
		fullBounds: 	nil
		color: 	(Color r: 0.97 g: 0.97 b: 0.97)
		extension: 	a MorphExtension (3624) [other:  (layoutPolicy -> a
TableLayout) (co...etc...
		borderWidth: 	2
		borderColor: 	#raised
		defaultTarget: 	a ScaffoldingCeleste
		selectedItem: 	nil
		stayUp: 	false
		popUpOwner: 	nil
		activeSubMenu: 	nil


--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #isEmpty
[] in MenuMorph>>setInvokingView: {[:item | item arguments isEmpty  
ifTrue: [item     arguments: (Array with: ...]}
Array(SequenceableCollection)>>do:
MenuMorph>>setInvokingView:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PluggableListMorphByItem(ScrollPane)>>yellowButtonActivity:
PluggableListMorphByItem(ScrollPane)>>scrollBarMenuButtonPressed:
PluggableListMorphByItem(ScrollPane)>>vScrollBarMenuButtonPressed:
[] in ScrollBar>>menuButtonMouseDown: {[:sel |  menuSelector := sel. 
model perform: sel with: event]}
ScrollBar(MorphicModel)>>use:orMakeModelSelectorFor:in:
ScrollBar>>menuButtonMouseDown:
EventHandler>>send:to:withEvent:fromMorph:
EventHandler>>mouseDown:fromMorph:
RectangleMorph(Morph)>>mouseDown:
RectangleMorph(Morph)>>handleMouseDown:
MouseButtonEvent>>sentTo:
RectangleMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>dispatchEvent:with:
RectangleMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>dispatchEvent:with:
ScrollBar(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>dispatchEvent:with:
PluggableListMorphByItem(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>dispatchEvent:with:
SystemWindow(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>dispatchEvent:with:
PasteUpMorph(Morph)>>processEvent:using:
PasteUpMorph>>processEvent:using:
PasteUpMorph(Morph)>>processEvent:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[] in WorldState>>doOneCycleNowFor: {[:h |  ActiveHand := h.  h
processEvents.  capturingGesture := capturingGest...]}
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess {[[World doOneCycle.  Processor
yield.  false] whileFalse.  nil]}
[] in BlockContext>>newProcess {[self value.  Processor
terminateActive]}



More information about the Squeak-dev mailing list