EventSource() and EVENT_GADGETMENU

BlitzMax Forums/BlitzMax Programming/EventSource() and EVENT_GADGETMENU

Jay Kyburz(Posted 2005) [#1]
Hi all,

I'm having trouble determining the source of Gadget Menu events. I have several right click menus I'd like to display depending on what gadget the user clicked on.

I would have assumed that the Event Source would simply be the Gadget the user right-clicked on to produce this event ( as with other events such as EVENT_GADGETOPEN), but this seems not to be the case.

Do I need to manually determine what the mouse was over at the time of the event or is there some bug here?

Should also mention I'm working on Mac. There is another, perhaps related bug at the moment where the right-click menu appears at the bottom of the screen rather than under the pointer.


Jay Kyburz(Posted 2005) [#2]
OK, quick update.

I moved the project to my PC system and confirmed that the behavior I expected is indeed how it works in Windows. That is, the EventSource() of right-clicking on a treeview = the treeview object.

Can one of you admin guys move this tread to the Bugs forum??

Also note. On the mac, once you click on the menu the EventSource() of the event is the menuItem. On the PC this is not the case.. I can't work out what it is.

I will try and write a small clear example later today.

Jay.


Jay Kyburz(Posted 2005) [#3]
Here is the simple example






' a window
Local win:TGadget = CreateWindow("Project File Example",100,100,400,400,0,WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_MENU|WINDOW_STATUS|WINDOW_CLIENTCOORDS|WINDOW_ACCEPTFILES)

' create a text area and treeview
Local TextArea:tGadget = CreateTextArea ((ClientWidth(win)/2)+5, 0, (ClientWidth(win)/2)-10, ClientHeight(win), win)


Local TreeView:tGadget = CreateTreeView (0,0,(ClientWidth(win)/2),ClientHeight(win),win)

Local root:TGadget = TreeViewRoot(TreeView)
Local tvHelp:TGadget = AddTreeViewNode("Help",root,1)
Local tvHelp_t1:TGadget = AddTreeViewNode( "topic 1",tvhelp)
Local tvHelp_t2:TGadget = AddTreeViewNode( "topic 2",tvhelp)
Local tvHelp_t3:TGadget = AddTreeViewNode( "topic 3",tvhelp)



' a right click menu for the tree view
Local TVMenu:tGadget = CreateMenu ("TVMENU",101,TreeView)

Local TVMenu_Open:tGadget = CreateMenu ("Open Tree View", 102, TVMenu)
Local TVMenu_Close:tGadget = CreateMenu ("Close Tree View", 103, TVMenu)

' a right click menu for the tree view
Local TAMenu:tGadget = CreateMenu ("TAMENU",108,TextArea)

Local TAMenu_Open:tGadget = CreateMenu ("Open Text Area", 109, TAMenu)
Local TAMenu_Close:tGadget = CreateMenu ("Close Text Area", 110, TAMenu)



' Main loop
While WaitEvent()

	Select EventID()
		Case EVENT_WINDOWCLOSE
			End
		
		Case EVENT_GADGETMENU
			Select EventSource()
				Case TreeView
					' will not work on Mac. Works fine on PC <------------------------------------------
					PopupWindowMenu (TreeView, TVMenu)
									
				Case TextArea
					PopupWindowMenu (TextArea, TAMenu)
					
			End Select
		
		Case EVENT_MENUACTION
			Select EventData()
				Case 101
					Notify "TV Menu"
					
				Case 102
					Notify "Open TV"
					
				Case 103
					Notify "Close TV"
					
				Case 108
					Notify "TA Menu"
					
				Case 109
					' here is a demo of event source for menu items
					If EventSource() = TAMenu_Open Then
						' Will get this on MAC <----------------------------------------------------
						Notify "TA Open:  Source = This menu item"
					Else
						' Will get this on PC <----------------------------------------------------
						Notify "TA Open: Source =  NOT this menu item"
					End If
					
				Case 110
					Notify "TA CLose"
					
			End Select
		
			
	End Select

Wend




ozak(Posted 2006) [#4]
Was this filed as a bug? I got the same problem and it's a major showstopper for the Mac version of my program.


Dreamora(Posted 2006) [#5]
This is no bug.
At the moment, only the treeview emits that Event.
Skid mentioned, that he plans to add _GadgetMenu and _GadgetSelect as well to the listbox, but others will never react to it.
You would need to manually do something about it.

I agree that ALL gadgets should react to all 3 events (as gadgetaction on most means doubleclick after the initial activation click)


ozak(Posted 2006) [#6]
Yeah but. It works for the treeview in windows, but not on OS X?


Dreamora(Posted 2006) [#7]
Perhaps a design decision? does it work if you use the regular key to "fake" rightclick on apple? (until recently the main system mouse was 1 button, not)


ozak(Posted 2006) [#8]
Nope. The fake key does nothing at all :)
It's rather inconsistent as it is and I have no way to tell which treeviewitem is under my cursor.


Dreamora(Posted 2006) [#9]
why not?
Doesn't SelectedTreeViewNode not give you the TGadget reference to the node?