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. |