[bmx] Path Edit Gadget by JoshK [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:42

Previous topic - Next topic

BlitzBot

Title : Path Edit Gadget
Author : JoshK
Posted : 1+ years ago

Description : Gadget for choosing file and folder paths

Code :
Code: blitzmax
SuperStrict

Import MaxGui.Drivers
Import brl.retro

Local window:TGadget

window=CreateWindow("pathedit Example",40,40,320,240)

Local label:TGadget
Local pathedit:TPathEdit
Local x:Int=4,y:Int=4

label=CreateLabel("Pick File:",x,y,60,18,window)
SetGadgetLayout label,1,0,1,0
pathedit=CreatePathEdit(x+60,y,200,20,window,PATHEDIT_FILE|PATHEDIT_STRIPDIR)
SetGadgetLayout pathedit,1,1,1,0


While True
	WaitEvent 
	Print CurrentEvent.ToString()
	Select EventID()
		Case EVENT_WINDOWCLOSE
			End
	End Select
Wend

'-------------------------------------------------------------------

Const PATHEDIT_FILE:Int=0
Const PATHEDIT_DIR:Int=1
Const PATHEDIT_STRIPDIR:Int=2

Type TPathEdit Extends TProxygadget
	
	Field panel:TGadget
	Field textfield:TGadget
	Field button:TGadget
	Field style:Int
	Field extensions:String="All Files:*"
	
	Method Cleanup()
		RemoveHook(EmitEventHook,EventHook,Self)
		Super.cleanup()
	EndMethod
	
	Function Create:TPathEdit(x:Int,y:Int,width:Int,height:Int,group:TGadget,style:Int=0)
		Local pathedit:TPathEdit
		
		pathedit=New TPathEdit
		
		pathedit.panel=CreatePanel(x,y,width,height,group)
		pathedit.textfield=CreateTextField(0,0,pathedit.panel.ClientWidth()-pathedit.panel.ClientHeight(),pathedit.panel.ClientHeight(),pathedit.panel)
		SetGadgetLayout pathedit.textfield,1,1,1,1
		
		pathedit.style=style
		
		pathedit.button=CreateButton("...",pathedit.panel.ClientWidth()-pathedit.panel.ClientHeight(),0,pathedit.panel.ClientHeight(),pathedit.panel.ClientHeight(),pathedit.panel)		
		SetGadgetLayout pathedit.button,0,1,1,1
		
		pathedit.setproxy(pathedit.panel)
		
		AddHook(EmitEventHook,EventHook,pathedit)
		Return pathedit
	EndFunction
	
	Function EventHook:Object(id:Int,data:Object,context:Object)
		Local event:TEvent
		Local pathedit:TPathEdit
		
		event=TEvent(data)
		If event
			pathedit=TPathEdit(context)
			If pathedit
				Select event.id
				Case EVENT_GADGETLOSTFOCUS
					If event.source=pathedit.textfield
						EmitEvent CreateEvent(EVENT_GADGETACTION,pathedit,0,0,0,0,GadgetText(pathedit.textfield))
						Return Null
					EndIf				
				Case EVENT_GADGETACTION
					Select event.source
					Case pathedit.textfield
						Return Null
					Case pathedit.button
						Local file$
						If PATHEDIT_DIR & pathedit.style
							file=RequestDir("Select Folder",GadgetText(pathedit.textfield))
						Else
							file=RequestFile("Open File",pathedit.extensions,0,GadgetText(pathedit.textfield))
							If PATHEDIT_STRIPDIR & pathedit.style
								file=StripDir(file)
							EndIf
						EndIf
						If file
							SetGadgetText pathedit.textfield,file
							EmitEvent CreateEvent(EVENT_GADGETACTION,pathedit,0,0,0,0,file)
						EndIf
						Return Null
					EndSelect
				EndSelect
			EndIf
		EndIf
		Return data
	EndFunction
	
EndType

Rem
bbdoc:
EndRem
Function CreatePathEdit:TPathEdit(x:Int,y:Int,width:Int,height:Int,group:TGadget,flags:Int=0)
	Return Tpathedit.Create(x,y,width,height,group,flags)
EndFunction

Rem
bbdoc:
EndRem
Function SetPathEditExtensions(pathedit:TPathEdit,extensions:String)
	pathedit.extensions=extensions
EndFunction


Comments : none...