Unfinished slider panel gadget
BlitzMax Forums/MaxGUI Module/Unfinished slider panel gadget
| ||
Import MaxGui.Drivers
Strict
Local window:TGadget
Local panel:TGadget
Local panel2:TGadget
Local group:TGadget
window=CreateWindow("My Window",40,40,320,240)
' create a purple panel that occupies entire window client area
panel=CreatePanel(0,0,ClientWidth(window),ClientHeight(window),window,PANEL_ACTIVE)
SetGadgetLayout panel,1,1,1,1
'SetPanelColor panel,100,0,200
' and a smaller box
' and a group panel with a child button
Local sp:TSliderpanel=TSliderPanel.Create(120,10,100,100,panel)
CreateButton("hello",0,0,sp.subpanel.ClientWidth(),sp.subpanel.ClientHeight(),sp.subpanel)
While True
WaitEvent
Print CurrentEvent.ToString()
Select EventID()
Case EVENT_WINDOWCLOSE
End
End Select
Wend
Type TSliderPanel Extends TProxyGadget
Field panel:TGadget
Field subpanel:TGadget
Field subsubpanel:TGadget
Field slider:TGadget[2]
Const sliderwidth:Int=18
Field desiredwidth:Int,desiredheight:Int
Function Create:TSliderPanel(x:Int,y:Int,width:Int,height:Int,group:TGadget,style:Int=0)
Local sliderpanel:TSliderPanel=New TSliderPanel
sliderpanel.panel=CreatePanel(x,y,width,height,group)
sliderpanel.slider[0]=CreateSlider(sliderpanel.panel.ClientWidth()-sliderwidth,0,sliderwidth,sliderpanel.panel.ClientHeight(),sliderpanel.panel,SLIDER_VERTICAL)
sliderpanel.slider[1]=CreateSlider(0,sliderpanel.panel.ClientHeight()-sliderwidth,sliderpanel.panel.ClientWidth(),sliderwidth,sliderpanel.panel,SLIDER_HORIZONTAL)
sliderpanel.subpanel=CreatePanel(0,0,sliderpanel.panel.ClientWidth(),sliderpanel.panel.ClientHeight(),sliderpanel.panel)
SetGadgetLayout sliderpanel.panel,1,1,1,1
SetGadgetLayout sliderpanel.subpanel,1,1,1,1
SetGadgetColor sliderpanel.panel,255,0,0
SetGadgetColor sliderpanel.subpanel,0,0,255
sliderpanel.setproxy(sliderpanel.panel)
SetGadgetLayout sliderpanel.slider[0],0,1,1,1
SetGadgetLayout sliderpanel.slider[1],1,1,0,1
HideGadget sliderpanel.slider[0]
HideGadget sliderpanel.slider[1]
sliderpanel.desiredwidth=width
sliderpanel.desiredheight=height
AddHook(EmitEventHook,EventHook,sliderpanel)
Return sliderpanel
EndFunction
Method AdjustLayout()
Local w:Int=panel.ClientWidth()
Local h:Int=panel.ClientHeight()
Local x%=0,y%=0
If desiredheight>h h=desiredheight
If desiredwidth>w w=desiredwidth
If panel.ClientHeight()<desiredheight
SetSliderRange slider[0],panel.ClientHeight(),desiredheight
ShowGadget slider[0]
w:-sliderwidth
y=-SliderValue(slider[0])
Else
HideGadget slider[0]
EndIf
If panel.ClientWidth()<desiredwidth
SetSliderRange slider[1],panel.ClientWidth(),desiredwidth
ShowGadget slider[1]
h:-sliderwidth
x=-SliderValue(slider[1])
Else
HideGadget slider[1]
EndIf
SetGadgetShape slider[0],panel.ClientWidth()-sliderwidth,0,sliderwidth,h
SetGadgetShape slider[1],0,panel.ClientHeight()-sliderwidth,w,sliderwidth
SetGadgetShape subpanel,x,y,w,h
EndMethod
Function EventHook:Object(id:Int,data:Object,context:Object)
Local event:TEvent
Local sliderpanel:TSliderpanel
Local n:Int
event=TEvent(data)
If event
sliderpanel=TSliderpanel(context)
If sliderpanel
Select event.id
Case EVENT_GADGETACTION
Select event.source
Case sliderpanel.slider[0],sliderpanel.slider[1]
sliderpanel.AdjustLayout()
EndSelect
Case EVENT_WINDOWSIZE
sliderpanel.AdjustLayout()
EndSelect
EndIf
EndIf
Return data
EndFunction
EndType |
| ||
| I have been working separately on a new TScrollPanel proxy gaget myself that should be available in the next MaxGUI release. It's working really quite nicely, but I'll try and have a look at your version before release to see if I've missed any tricks. :P |
| ||
| I'm super pleased with my new TScrollPanel gadget that will be available with the next MaxGUI release (MaxGUI.ProxyGadget v1.08). The following functions will be provided: CreateScrollPanel() Creates a scrollable panel. ScrollPanelClient() Retrieves the panel that is scrolled. FitScrollPanelClient() Helper function that resizes the client area to common dimensions. ScrollScrollPanel() Scrolls the current viewport to a new position. ScrollPanelX() Returns the x position of the client-area that is currently at the top-left of the viewport. ScrollPanelY() Returns the y position of the client-area that is currently at the top-left of the viewport. I've also spent a lot of time writing the documentation, so hopefully it should be super easy to pick-up and use. |