Menus not working in Linux...

BlitzMax Forums/MaxGUI Module/Menus not working in Linux...

jondecker76(Posted 2010) [#1]
I'm starting on a small skin editor for a program that I have just made. I started programming it in windows and everything worked fine. However, when I build it in Linux, the Menus don't show up.

Below is the code so far... Is this a bug?

SuperStrict
Import MaxGui.Drivers

Const MENU_NEW:Int=101
Const MENU_OPEN:Int=102
Const MENU_SAVE:Int=103
Const MENU_SAVE_AS:Int=104
Const MENU_CLOSE:Int=105
Const MENU_EXIT:Int=106

Const MENU_ABOUT:Int=201

'Make the window
Global win:TGadget=CreateWindow("Skin Editor",0,0,640,600,Null,WINDOW_TITLEBAR|WINDOW_MENU|WINDOW_STATUS|WINDOW_CENTER|WINDOW_ACCEPTFILES)

'Make the file menu
Global filemenu:TGadget=CreateMenu("&File",0,win)
CreateMenu("&New",MENU_NEW,filemenu)
CreateMenu("&Open",MENU_OPEN,filemenu)
CreateMenu("&Save",MENU_SAVE,filemenu)
CreateMenu("Save &As",MENU_SAVE_AS,filemenu)
CreateMenu("&Close",MENU_CLOSE,filemenu)
CreateMenu("E&xit",MENU_EXIT,filemenu)

'Make the help menu
Global helpmenu:TGadget=CreateMenu("&Help",0,win)
CreateMenu("&About",MENU_ABOUT,helpmenu)

'Now update the window to use the menus
UpdateWindowMenu(win)

Global tabber:TGadget=CreateTabber(0,0,ClientWidth(win),ClientHeight(win),win)
SetGadgetLayout(tabber,1,1,1,1)
AddGadgetItem(tabber,"General",False,-1,"General skin properties")
AddGadgetItem(tabber,"Vending",False,-1,"Options for the Vending screen")
AddGadgetItem(tabber,"Waiting",False,-1,"Options for the Waiting screen")
AddGadgetItem(tabber,"Countdown",False,-1,"Options for the Countdown")
AddGadgetItem(tabber,"Photograph",False,-1,"Options for the Photograph screen")
AddGadgetItem(tabber,"Developing",False,-1,"Options for the Developing screen")
AddGadgetItem(tabber,"Review",False,-1,"Options for the Review screen")
AddGadgetItem(tabber,"Gallery",False,-1,"OPtions for the Gallery screen")
AddGadgetItem(tabber,"Thankyou",False,-1,"Options for the Thankyou screen")
AddGadgetItem(tabber,"Preview",False,-1,"Preview this skin")
Global GENERAL:Int=0
Global VENDING:Int=1
Global WAITING:Int=2
Global COUNTDOWN:Int=3
Global PHOTOGRAPH:Int=4
Global DEVELOPING:Int=5
Global REVIEW:Int=6
Global GALLERY:Int=7
Global THANKYOU:Int=8
Global PREVIEW:Int=9

Global TabPanel:TGadget[11]
Global CurrentTabPanel:TGadget
TabPanel[GENERAL]=CreateTabPanel(tabber)
TabPanel[VENDING]=CreateTabPanel(tabber)
TabPanel[WAITING]=CreateTabPanel(tabber)
TabPanel[COUNTDOWN]=CreateTabPanel(tabber)
TabPanel[PHOTOGRAPH]=CreateTabPanel(tabber)
TabPanel[DEVELOPING]=CreateTabPanel(tabber)
TabPanel[REVIEW]=CreateTabPanel(tabber)
TabPanel[GALLERY]=CreateTabPanel(tabber)
TabPanel[THANKYOU]=CreateTabPanel(tabber)
TabPanel[PREVIEW]=CreateTabPanel(tabber)
'===========
'GENERAL TAB
'===========
Local lblPosx:Int=10
Local lblPosy:Int=400
Local lblWidth:Int=175
Local lblHeight:Int=20
Local txtPosx:Int=175
Local txtPosY:Int=400
Local txtWidth:Int=330
Local txtHeight:Int=20
Local btnPosx:Int=500
Local btnPosy:Int=400
Local btnWidth:Int=50
Local btnHeight:Int=20
Local vertOffset:Int=20
Global lblBackgroundImage:TGadget=CreateLabel("Background Image:",lblPosx,lblPosy,lblWidth,lblHeight,TabPanel[GENERAL])
Global txtBackgroundImage:TGadget=CreateTextField(txtPosX,txtPosy,txtWidth,txtHeight,TabPanel[GENERAL])
Global btnGeneralBackground:TGadget=CreateButton("Browse",btnPosX,btnPosy,btnWidth,btnHeight,TabPanel[GENERAL])
lblPosy=lblPosy+vertOffset
txtPosY=txtPosy+vertOffset
btnPosY=btnPosy+vertOffset
Global lblSavepathOriginals:TGadget=CreateLabel("Save Original Photos To:",lblPosx,lblPosy,lblWidth,lblHeight,TabPanel[GENERAL])
Global txtSavePathOriginals:TGadget=CreateTextField(txtPosX,txtPosy,txtWidth,txtHeight,TabPanel[GENERAL])
Global btnSavePathOriginals:TGadget=CreateButton("Browse",btnPosX,btnPosy,btnWidth,btnHeight,TabPanel[GENERAL])
lblPosy=lblPosy+vertOffset
txtPosY=txtPosy+vertOffset
btnPosY=btnPosy+vertOffset
Global lblSavePathPrintouts:TGadget=CreateLabel("Save Printout Photos To:",lblPosx,lblPosy,lblWidth,lblHeight,TabPanel[GENERAL])
Global txtSavePathPrintouts:TGadget=CreateTextField(txtPosX,txtPosy,txtWidth,txtHeight,TabPanel[GENERAL])
Global btnSavePathPrintouts:TGadget=CreateButton("Browse",btnPosX,btnPosy,btnWidth,btnHeight,TabPanel[GENERAL])
lblPosy=lblPosy+vertOffset
txtPosY=txtPosy+vertOffset
btnPosY=btnPosy+vertOffset
Global lblNumPics:TGadget=CreateLabel("Number of pictures:",lblPosx,lblPosy,lblWidth,lblHeight,TabPanel[GENERAL])
Global txtNumPics:TGadget=CreateTextField(txtPosX,txtPosy,txtWidth/8,txtHeight,TabPanel[GENERAL])
lblPosy=lblPosy+vertOffset
txtPosY=txtPosy+vertOffset
btnPosY=btnPosy+vertOffset
Global lblEnableVending:TGadget=CreateLabel("Enable Vending Mode:",lblPosx,lblPosy,lblWidth,lblHeight,TabPanel[GENERAL])
Global btnEnableVending:TGadget=CreateButton("",txtPosX,btnPosy,btnWidth,btnHeight,TabPanel[GENERAL],BUTTON_CHECKBOX)

'Global lblMessageBGColor:TGadget=CreateLabel()
'===========
'VENDING TAB
'===========
Global lblMessage:TGadget[11]
Global txtMessage:TGadget[11]

Global lblAudio:TGadget[11]
Global txtAudio:TGadget[11]
Global btnAudio:TGadget[11]
lblMessage[VENDING]=CreateLabel("On Screen Message:",10,300,150,20,TabPanel[VENDING])
txtMessage[VENDING]=CreateTextField(160,300,330,20,TabPanel[VENDING])
lblAudio[VENDING]=CreateLabel("Audio File:",10,320,330,20,TabPanel[VENDING])
txtAudio[VENDING]=CreateTextField(160,320,330,20,TabPanel[VENDING])
Global canPreview:TGadget=CreateCanvas(0,0,600,400,TabPanel[VENDING])

CreateTimer 30

Init()

While WaitEvent()
	Select EventID()
	Case EVENT_TIMERTICK
			RedrawGadget canPreview
UpdateWindowMenu(win)
	Case EVENT_GADGETACTION
		If EventSource()=tabber
			HideGadget currentTabPanel
			currentTabPanel=TabPanel[EventData()]
			ShowGadget currentTabPanel
			'If TabPanel[EventData()]<>TabPanel[GENERAL]
				
				
			'Else
			'	HideGadget(canPreview)
			'EndIf
		EndIf
		RedrawGadget(canPreview)
		Case EVENT_GADGETPAINT
			SetGraphics CanvasGraphics(canPreview)
			SetOrigin 0,0
			SetLineWidth 5
			Cls
			Local t:Int=MilliSecs()
			DrawLine 0,0,120*Cos(t),120*Sin(t)
			DrawLine 0,0,80*Cos(t/60),80*Sin(t/60)

			Flip
	Case EVENT_WINDOWCLOSE
		' Quit
		End
	Case EVENT_WINDOWACCEPT
		'A File was dragged in!  Lets do it!
	Case EVENT_MENUACTION
		' Menu stuff
		Select EventData()
		Case MENU_EXIT
			End
		Case MENU_ABOUT
			Notify "Photobooth skin editor"
		End Select
	Default
		'None of the above....
		'RuntimeError CurrentEvent.toString()
	End Select
Wend


Function Init()
	CurrentTabPanel=TabPanel[GENERAL]
	ShowGadget CurrentTabPanel
	'HideGadget(canPreview)
End Function
Function CreateTabPanel:TGadget(thisTabber:TGadget)
	Local	panel:TGadget
	panel=CreatePanel(0,0,ClientWidth(thisTabber),ClientHeight(thisTabber),thisTabber)
	SetGadgetLayout panel,1,1,1,1
	HideGadget panel
	Return panel
End Function




SebHoll(Posted 2010) [#2]
You should parent root window menu to the menu returned by the WindowMenu() function. Iirc, the docs for CreateMenu() do explain this. The fact that it works on Windows / Cocoa is more a lucky circumstance. E.g. the following line...
Global filemenu:TGadget=CreateMenu("&File",0,win)
...should be...
Global filemenu:TGadget=CreateMenu("&File",0,WindowMenu(win) )
..and similarly for your 'Help' menu.


jondecker76(Posted 2010) [#3]
thankyou, I must have missed it in the documentation.

Works great now!