Code: Select all
;/
;/ Advanced Spin Gadgets
;/
;/ GPI - 04.07.2003
;/
Structure SpinGadgets_
Nr.l
max.l
min.l
EndStructure
NewList SpinGadgets_.SpinGadgets_()
Procedure FindSpin_(Nr)
ok=0
ResetList(SpinGadgets_())
Repeat
If NextElement(SpinGadgets_())
If SpinGadgets_()\Nr=Nr
ok=1
EndIf
Else
ok=-1
EndIf
Until ok
If ok=1
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure DoSpinGadgetEX(Nr,EventType)
If FindSpin_(Nr)
a$=GetGadgetText(Nr)
a=Val(a$)
b=GetGadgetState(Nr)
If a>SpinGadgets_()\max : a=SpinGadgets_()\max : do=#True : EndIf
If a<SpinGadgets_()\min : a=SpinGadgets_()\min : do=#True : EndIf
If b>SpinGadgets_()\max : b=SpinGadgets_()\max : do=#True : EndIf
If b<SpinGadgets_()\min : b=SpinGadgets_()\min : do=#True : EndIf
If b<>a Or a$<>STR(a) Or do
If EventType=#PB_EventType_Change Or EventType=#PB_EventType_Focus Or EventType=#PB_EventType_ReturnKey
SetGadgetState(Nr,a)
If STR(a)<>a$
SetGadgetText(Nr,STR(a))
SendMessage_(GadgetID(Nr),#em_setsel,0,-1)
EndIf
Else
SetGadgetText(Nr,STR(b))
SetGadgetState(Nr,b)
EndIf
EndIf
EndIf
EndProcedure
Procedure DoSpinGadget(Nr)
ProcedureReturn DoSpinGadgetEX(Nr,EventType())
EndProcedure
Procedure SetSpinGadget(Nr,state)
If FindSpin_(Nr)
SetGadgetState(Nr,state)
SetGadgetText(Nr,STR(state))
DoSpinGadgetEX(Nr,0)
EndIf
EndProcedure
Procedure GetSpinGadget(Nr)
ProcedureReturn GetGadgetState(Nr)
EndProcedure
Procedure CreateSpinGadget(Nr,X,Y,Width,Height,max,min,Start)
SpinGadget(Nr,X,Y,Width,Height,0 ,32767) ; no bug!
AddElement(SpinGadgets_())
SpinGadgets_()\Nr=Nr
SpinGadgets_()\max=max
SpinGadgets_()\min=min
SetSpinGadget(Nr,Start)
EndProcedure
Procedure FreeSpinGadget(Nr)
If FindSpin_(Nr)
DeleteElement(SpinGadgets_())
FreeGadget(Nr)
EndIf
EndProcedure
Procedure SetSpinGadgetMax(Nr,max)
If FindSpin_(Nr)
SpinGadgets_()\max=max
DoSpinGadgetEX(Nr,0)
EndIf
EndProcedure
Procedure SetSpinGadgetMin(Nr,min)
If FindSpin_(Nr)
SpinGadgets_()\min=min
DoSpinGadgetEX(Nr,0)
EndIf
EndProcedure
Procedure GetSpinGadgetMax(Nr)
If FindSpin_(Nr)
ProcedureReturn SpinGadgets_()\max
EndIf
EndProcedure
Procedure GetSpinGadgetMin(Nr)
If FindSpin_(Nr)
ProcedureReturn SpinGadgets_()\min
EndIf
EndProcedure
Procedure ResizeSpinGadget(Nr,X,Y,w,h)
ResizeGadget(Nr,X,Y,w,h)
EndProcedure
;- Little example
OpenWindow(0,0,200,200,200,#PB_Window_SystemMenu,"Spin-Test")
CreateGadgetList(WindowID())
CreateSpinGadget(10, 10,10, 100,32, 0,50, 40)
SetSpinGadgetMin(10,0)
SetSpinGadgetMax(10,20)
SetSpinGadget(10,15);neuer Wert
ResizeSpinGadget(10,-1,-1,-1,20)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadgetID()=10
DoSpinGadget(10)
EndIf
EndSelect
ForEver