WB3D Menu select

Blitz3D Forums/Blitz3D Programming/WB3D Menu select

Guy Fawkes(Posted 2008) [#1]
Ok. Can someone please help fix if you select a menu item, then return menuselect as 1 and the menu id. If menu id is a certain id, then activate a file request, or a function depending on menu id.

AppTitle "Particlos"












Include "WB3DStyles.bb"

; setup gfx mode.
Graphics3D 800,600,32,2

Global RuntimeWindow_hWnd = WB3D_InitializeGUI(SystemProperty("AppHwnd"),10,10,GraphicsWidth(),GraphicsHeight())
 
Global FrameStart
Global DeltaTime# = 0.1
Global GameTime# = 0
Global FPS = 1200
Global FPSCount = FPS
Global timFPS

Global menuselect = 0

Global keypressed
Global menu
 
WB3D_HotKeyEvent MOD_CONTROL,65,1	; ctrl+a
WB3D_HotKeyEvent MOD_CONTROL,76,78	; ctrl+l

;WB3D_HotKeyEvent MOD_CONTROL,76,

; menus
menus = WB3D_WindowMenu(RuntimeWindow_hWnd)
file = WB3D_CreateMenu("File",0,menus,0)

	NewItem = WB3D_CreateMenu("&New "+WB3D_MENUHOTKEY_SPACER+"Ctrl+L",get_menu(),file,0) : WB3D_AddMenuIcon(file,1,"menuBMPS/MENUNEW.BMP")
	
	OpenItem = WB3D_CreateMenu("&Open.."+WB3D_MENUHOTKEY_SPACER+"Ctrl+O",get_menu(),file,0) : WB3D_AddMenuIcon(file,2,"menuBMPS/MENULOAD.BMP")
	WB3D_CreateMenu("",0,file,0)
	SaveItem = WB3D_CreateMenu("Save",get_menu(),file,0)  : WB3D_AddMenuIcon(file,3,"menuBMPS/MENUSAVE.BMP")
	WB3D_CreateMenu("",0,file,0)
	QuitItem = WB3D_CreateMenu("Quit",get_menu(),file,0) : WB3D_AddMenuIcon(file,4,"menuBMPS/MENUQUIT.BMP")
	
editmenu_window_1 = WB3D_CreateMenu("Edit",0,menus,0)
	CutItem = WB3D_CreateMenu("Cut",get_menu(),editmenu_window_1,0) ;: WB3D_AddMenuIcon(editmenu_window_1,5,"menuBMPS/MENUCUT.BMP")
	CopyItem = WB3D_CreateMenu("Copy",get_menu(),editmenu_window_1,0) ;: WB3D_AddMenuIcon(editmenu_window_1,6,"menuBMPS/MENUCOPY.BMP")
	PasteItem = WB3D_CreateMenu("Paste",get_menu(),editmenu_window_1,0) ;: WB3D_AddMenuIcon(editmenu_window_1,7,"menuBMPS/menupaste.BMP")
	
If file Or NewItem Or SaveItem Or QuitItem Or CutItem Or CopyItem Or PasteItem Then menuselect = 1
 
	WB3D_RadiocheckMenu editmenu_window_1,5,7,6
		
WB3D_UpdateWindowMenu(RuntimeWindow_hWnd)


statusbar = WB3D_CreateStatusBar(RuntimeWindow_hWnd,"")
WB3D_SetStatusParts statusbar,2

WB3D_StatusPartWidth(statusbar,0,150)
WB3D_StatusPartWidth(statusbar,1,150)
WB3D_StatusPartWidth(statusbar,2,150)
;WB3D_StatusPartWidth(statusbar,3,200)
;WB3D_StatusPartWidth(statusbar,4,-1)


;WB3D_SetStatusText statusbar,1,"part 1"
;WB3D_SetStatusText statusbar,3,"part 3"
;WB3D_SetStatusText statusbar,4,"part 4"

WB3D_UpdateStatusbar statusbar

; cleanup any old creation events, its better to do this before we enter the main
; event loop, when some gadgets are created they generate events.
WB3D_FlushEvents 

; setup out quit flag, and loop until the flag is set.
QUIT = 0
While Not QUIT = 1

menuselect = 0

WB3D_SetStatusText statusbar,2,"menuselect:"+menuselect

WB3D_SetStatusText statusbar,1,"menu:"+menu

    ; Frame Update
    FrameStart = MilliSecs()
    If timFPS < FrameStart Then
        FPS = FPSCount
        FPSCount = 0
        timFPS = FrameStart + 1000
        DeltaTime = 1.0 / Float(FPS)
        GameTime = GameTime + DeltaTime
    End If

WB3D_SetStatusText statusbar,0,"FPS: "+FPS
 
	; generate an internal blitz event
	Flip
		
	; get an event of the event queue.
	event = WB3D_WaitEvent()
	
	Select event
					
		Case WB3D_EVENT_MENU
						
		If menuselect > 0 And menu = 2
		
		ext$ = "*.mid"+Chr$(0)+"*.mid"+Chr$(0)+"*.mp3"+Chr$(0)+"*.mp3"+Chr$(0)


						 WB3D_OpenFileRequest("..", "..",ext$, "") 		 
								
			If opens = 1 Then DebugLog menu
										
		EndIf
							
		Case WB3D_EVENT_KEYPRESS
		
			; wb_eventdata holds the key code that was pressed.
			keypressed = WB3D_EventData()
			DebugLog "Keypressed: "+keypressed + " : " + "flag: "+WB3D_EventFlagKey() 
			
			Select keypressed
							
				;Case WB3D_KEY_CONTROL
				;	DebugLog "Keypressed: "+ + " : " + flagkey

					
				Case WB3D_KEY_ESCAPE	
					
					; set the flag to leave the loop.
					QUIT = 1
					
			End Select
				
		Case WB3D_EVENT_WINDOW_CLOSE
			;WB3D_ShowGadget RuntimeWindow_hWnd

			Select WB3D_EventSource()
				Case RuntimeWindow_hWnd
					QUIT = 1
										
					;state = WB3D_Notify("Quit","Save changes",MB_YESNOCANCEL)
					;Select state
					;
					;	Case IDCANCEL
					;	
					;	Case IDYES	
					;	
					;	Case IDNO
					;		QUIT = 1
					;			
					;End Select
					
				
			End Select
			
	End Select
	
    FPSCount = FPSCount + 1

Flip

Wend

Function get_menu()

If menuselect > 0

menu = menu + 1

If menu > 43 Then menu = 43

Return menu

EndIf

End Function

Function FileExtension$(ext$)

For I% = Len(ext$) To 1 Step -1

If Mid$(ext$, I%,1) = "," Then Return "*"+Left(ext$, I%-1)+";"+"*"+ Right$(ext$, I%-1)

Next

End Function

Function FileName$(File$)
For I% = Len(File$) To 1 Step -1
	If Mid(File$, I%, 1) = "\" Or Mid(File$, I%, 1) = "/" Then Return Mid(File$, I% + 1)
	Next
Return File$
End Function

Function FileExtention$(File$)
For I% = Len(File$) To 1 Step -1
	If Mid(File$, I%, 1) = "." Return "."+Mid(File$, I% + 1)
	If Mid(File$, I%, 1) = "\" Or Mid(File$, I%, 1) = "/" Then Return ""
	Next
End Function

Function FilePath$(File$)
For I% = Len(File$) To 1 Step -1
	If Mid(File$, I%, 1) = "\" Or Mid(File$, I%, 1) = "/" Then Return Left(File$, I% - 1)
	Next
End Function

; Adds a file extention, if not exists. | FEt eine Dateiendung hinzu falls noch keine da ist.
Function AddFileExtention$(File$, Extention$)
If FileExtention(File$) = "" Then Return File$ + "." + Extention$ Else Return File$
End Function

; use notify using external winapi constants. 
WB3D_Notify "WB3D GUI Window Example","Bye, Thats It I Quit",MB_OK Or MB_ICONASTERISK
WB3D_EndGUI()
EndGraphics
End


Thanks to anyone who helps! =)

~DarkShadowWing~


Kev(Posted 2008) [#2]
when the WB3D_EVENT_MENU fires WB3D_EventData() contains the index used when creating your menus.

for example

Case WB3D_EVENT_MENU
Select WB3D_EventData()
       case 1 ; open file

       case 2 ; close file
End Select



kev


Guy Fawkes(Posted 2008) [#3]
Thanks. But 1 prob mate. It activates the select WB3D_EventData() if you click on the screen AND when you select a menu.


Kev(Posted 2008) [#4]
an example
Include "WB3DStyles.bb"

; setup gfx mode.
Graphics3D 640,480,16,3


Global RuntimeWindow_hWnd = WB3D_InitializeGUI(SystemProperty("AppHwnd"),10,10,800,600)

; menus
menus = WB3D_WindowMenu(RuntimeWindow_hWnd)
file = WB3D_CreateMenu("File",0,menus,0)
	NewItem = WB3D_CreateMenu("New",1,file,0) 
	OpenItem = WB3D_CreateMenu("Open",2,file,0) 
	
	SaveItem = WB3D_CreateMenu("Save",3,file,0)
	WB3D_CreateMenu("",0,file,0)
	QuitItem = WB3D_CreateMenu("Quit",4,file,0)

		
WB3D_UpdateWindowMenu(RuntimeWindow_hWnd)


; cleanup any old creation events, its better to do this before we enter the main
; event loop, when some gadgets are created they generate events.
WB3D_FlushEvents 

; setup out quit flag, and loop until the flag is set.
QUIT = 0
While Not QUIT = 1
 	
	Cls
	
	; get an event of the event queue.
	event = WB3D_WaitEvent()
	
	Select event
		
		Case WB3D_EVENT_MENU
		    Select WB3D_EventData()
			
				Case 1
					WB3D_Notify "Menu","You selected 'New' menu item",0

				Case 2
					WB3D_Notify "Menu","You selected 'Open' menu item",0

				Case 3
					WB3D_Notify "Menu","You selected 'Save' menu item",0

				Case 4
					QUIT = 1
			End Select
			
				
		Case WB3D_EVENT_WINDOW_CLOSE
			;WB3D_ShowGadget RuntimeWindow_hWnd

			Select WB3D_EventSource()
				Case RuntimeWindow_hWnd
					QUIT = 1
					
				
			End Select
			
	End Select
	
	; generate an internal blitz event
	Flip

Wend

; use notify using external winapi constants. 
WB3D_Notify "WB3D GUI Window Example","Bye, Thats It I Quit",MB_OK Or MB_ICONASTERISK
WB3D_EndGUI()
EndGraphics
End


clicking the window does not generate a menu event

kev


Guy Fawkes(Posted 2008) [#5]
Thanks Kev!