EXAMPLE SOURCE CODES


     This is a small collection of mostly game example source codes. These source codes are made available to help PlayBasic programmers kick start their game programming journey. Looking for more source code / tutorials & media, then remember to visit the PlayBasic Resource board on our forums.

Found #2 items in Gui category by Kevin Picone

 Simple Text Menu

By: Kevin Picone Added: June 21st, 2022

Category: All,GUI,Menu

 Simple Text Menu

 While tinkering last night, I wrote a simple menu library that lets the programmer define a list of text options that can have a key and mousing bindings as well.   The library is more a starting point than a end product, but it shows a way how we can wrap a system into library that help us separate that functionality from the main program.   The user can tag a function (by name) that is called when any option is clicked or the key binding is pressed.  


Example:

 So our processing loop looks like this..

PlayBasic Code:
	loadfont "verdana",1 , 48


		cr$=chr$(10)+chr$(13)

	
		Options$ =" L) Load File        [BindKey=38][OnClick=LOAD_FUNCTION]"+cr$
		Options$+=" S) Save File        [BindKey=31][OnClick=SAVE_FUNCTION]"+cr$
		Options$+=" D) Delete File        [BindKey=32][OnClick=DELETE_FUNCTION]"+cr$


	//  
	GUI_CREATE_SIMPLE_MENU(Options$)


	Do	
		cls $304050
		
		 GUI_UPDATE_SIMPLE_MENU_INPUTSTATE()
		 GUI_DRAW_SIMPLE_MENU()
	
	
		action$=GUI_Get_SIMPLE_MENU_CLICKS()
	
		if Len(Action$)
				Index=FunctionIndex(Action$)
				if Index
						CallFunction Action$
				endif
		endif	
		 
		sync
	loop



Function LOad_Function()
	cls 255
			print "LOAD FUNCTION"
EndFunction

Function SAVE_Function()
	cls $00ff00
			Print "SAVE FUNCTION"
EndFunction

Function DELETE_Function()
	cls $ff0000
			Print "DELETE FUNCTION"
EndFunction
	




COMMANDS USED: LOADFONT | CHR$ | CLS | LEN | SYNC | PRINT |




COMPLETE EXAMPLE:

PlayBasic Code:
	loadfont "verdana",1 , 48


		cr$=chr$(10)+chr$(13)

	
		Options$ =" L) Load File        [BindKey=38][OnClick=LOAD_FUNCTION]"+cr$
		Options$+=" S) Save File        [BindKey=31][OnClick=SAVE_FUNCTION]"+cr$
		Options$+=" D) Delete File        [BindKey=32][OnClick=DELETE_FUNCTION]"+cr$


	//  
	GUI_CREATE_SIMPLE_MENU(Options$)


	Do	
		cls $304050
		
		 GUI_UPDATE_SIMPLE_MENU_INPUTSTATE()
		 GUI_DRAW_SIMPLE_MENU()
	
	
		action$=GUI_Get_SIMPLE_MENU_CLICKS()
	
		if Len(Action$)
				Index=FunctionIndex(Action$)
				if Index
						CallFunction Action$
				endif
		endif	
		 
		sync
	loop



Function LOad_Function()
	cls 255
			print "LOAD FUNCTION"
EndFunction

Function SAVE_Function()
	cls $00ff00
			Print "SAVE FUNCTION"
EndFunction

Function DELETE_Function()
	cls $ff0000
			Print "DELETE FUNCTION"
EndFunction
	

//------------------------------------------------------------------
//------------------------------------------------------------------
//------------------------------------------------------------------
//------------------------------------------------------------------
//------------------------------------------------------------------


		Type tSimpleTextMenuInputState
					Status
					MX
					MY
					MB
					ScanCode
		EndType



		Type tSimpleTextMenu
				Caption$

				KeyBindingScanCode				
				FunctionToCall$


				x1,y1,x2,y2		; render position of this on screen
				MouseOver
		EndType

		Dim SimpleTextMenu(256) as tSimpleTextmenu

		Dim SimpleTextmenuInputState as tSimpleTextMenuInputState


function GUI_CREATE_SIMPLE_MENU(MenuOptions$)
	
		// Redim the Global Memu 
		Dim SimpleTextMenu(256) as tSimpleTextmenu

		//
		GUI_INIT_SIMPLE_MENU_INPUTSTATE()		


		dim Rows$(1024)
	
		Options$=Replace$(MenuOptions$,chr$(10),"")
		
		LinesOfText = SplitToArray(options$,chr$(13),rows$(),0,0)
		
		
		MenuIndex =1
		
		for lp=0 to LinesOftext-1
			
					s$=Rows$(lp)
					
					// Check for empty line
					if len(trim$(S$))>0
							Param_KeyBind$		=""
							Param_Onclick$		=""

							Current_Pos =1
							do

								// Look for square brackets							
								Left_pos=instring(s$,"[",Current_pos)
								if Left_Pos
										Right_pos=instring(s$,"]",Current_pos)
										If Right_Pos>Left_Pos
											
											Opcode$=Mid$(s$,Left_pos+1,(Right_Pos-Left_Pos)-1)
											
											
											Current_Pos=Left_pos
											S1$=     Left$(s$,Left_pos-1)
											S2$=  CutLeft$(s$,Right_pos)
											s$=s1$+s2$

											// get Opcode and Value 
											Value$		=""
											Equals_pos  = instring(opcode$,"=")
											if Equals_pos
												Value$	= CutLeft$(Opcode$,Equals_pos)
												Opcode$	=    Left$(Opcode$,Equals_pos-1)
											endif
										
											Select upper$(trim$(opcode$))
														
													//  process embedded opcodes for this menu option	
													case "ONCLICK"
															Param_Onclick$ = value$
												
													case "KEYBIND", "BINDKEY", "KEY"
															Param_KEYBIND$ = value$
															
											EndSelect			
											
											//  reset the next search 
											Current_pos=Left_pos								
										else
											Current_Pos=Left_pos+1	
										endif		
								else
										exitdo																		
								endif
							loop 
							
							// -----------------------------------------------
							if Len(s$)
							// -----------------------------------------------

									SimpleTextMenu(MenuIndex)=New tSimpleTextMenu
									
									SimpleTextMenu(MenuIndex).Caption 				=s$
									SimpleTextMenu(MenuIndex).KeyBindingScanCode  =val(Param_KeyBind$)
									SimpleTextMenu(MenuIndex).FunctionToCall		 =Param_OnClick$
									MenuIndex ++
							endif

					endif			
					
		next		
	
EndFunction



	
function GUI_DRAW_SIMPLE_MENU()
	
		GUI_INIT_SIMPLE_MENU_INPUTSTATE()
	
	
		//  Message includes the ONCLICK=	
		
		MouseStatus = 		SimpleTextmenuInputState.Status
		Mx				= 		SimpleTextmenuInputState.MX
		My 			= 		SimpleTextmenuInputState.MY
		Mb 			= 		SimpleTextmenuInputState.MB

		CursorX		=GetCursorX()
		CursorY		=GetCursorY()	
	
		TH =GettextHeight("|")
		for lp=0 to getArrayElements(SimpleTextMenu())
			if SimpleTextMenu(lp)
			
					T$=SimpleTextMenu(lp).Caption$
					
					CursorX2 = CursorX1+GettextWidth(t$)
					CursorY2 = CursorY1+TH
			
					SimpleTextMenu(lp).x1=CursorX1	
					SimpleTextMenu(lp).X2=CursorX2	
					SimpleTextMenu(lp).Y1=CursorY1	
					SimpleTextMenu(lp).Y2=CursorY2
					
					
					MouseOverState = 0
					if MouseStatus
						if range(My,CursorY1,CursorY2-1)
							inkmode 1+32
							c=GetInk()
							BoxC 0,CursorY1,getSurfaceWidth(),CursorY2,true,RgbFade(c,50)
							inkmode 1
							
							MouseOverState = 1
							
						endif					
					endif

					SimpleTextMenu(lp).MouseOver		=MouseOverState

					// Check if mouse over

					text CursorX1,CursorY1, t$

					CursorY1=CursorY2
			
			endif
		next		
	
EndFunction



Function GUI_Get_SIMPLE_MENU_CLICKS()
	
	
		GUI_INIT_SIMPLE_MENU_INPUTSTATE()
	
	
		MouseStatus = 		SimpleTextmenuInputState.Status
		Mx				= 		SimpleTextmenuInputState.MX
		My 			= 		SimpleTextmenuInputState.MY
		Mb 			= 		SimpleTextmenuInputState.MB
	
		if MouseStatus
			if MB
				for lp=0 to getArrayElements(SimpleTextMenu())
					if SimpleTextMenu(lp)
						if SimpleTextMenu(lp).MouseOver	
							if Mb & 1
								Action$ = SimpleTextMenu(lp).FunctionToCall
							endif
						endif
					endif
				next	
			endif
		endif

		SC = SimpleTextmenuInputState.ScanCode
		if SC	
			for lp=0 to getArrayElements(SimpleTextMenu())
				if SimpleTextMenu(lp)
					if SimpleTextMenu(lp).KeyBindingScanCode=SC
							Action$ = SimpleTextMenu(lp).FunctionToCall
					endif
				endif
			next	
		endif


EndFunction Action$



Function GUI_UPDATE_SIMPLE_MENU_INPUTSTATE()
	
		GUI_INIT_SIMPLE_MENU_INPUTSTATE()

		SimpleTextmenuInputState.Status = true
		SimpleTextmenuInputState.Mx =MouseX()
		SimpleTextmenuInputState.MY =MouseY()
		SimpleTextmenuInputState.MB =MouseButton()


		SimpleTextmenuInputState.ScanCode =ScanCode()
		
	
EndFunction


Function GUI_INIT_SIMPLE_MENU_INPUTSTATE()
	
	
		 if GetArrayStatus(SimpleTextmenuInputState())=false
				Dim SimpleTextmenuInputState as tSimpleTextMenuInputState
		 endif 

	
EndFunction








 Custom File Dialog

By: Kevin Picone Added: September 14th, 2009

Category: All, Menus, Gui


This example creates a custom file dialog/file requester for use in your PlayBasic programs. It was originally written for friends map editor project about 7/8 years ago in another language. Then was later on updated for PB. Those with long memories will no doubt remember it being part of the original example pack. This version is basically the same, except for a few minor improvements.
Download: Login to Download




Viewing Page [1] of [1]



Want More Source Codes?:



Release Type: The source code & tutorials found on this site are released as license ware for PlayBasic Users. No Person or Company may redistribute any file (tutorial / source code or media files) from this site, without explicit written permission.

 

 
     
 
       

(c) Copyright 2002 / 2024 Kevin Picone , UnderwareDesign.com  - Privacy Policy   Site: V0.99a [Alpha]