Advanced Spin Gadget

Share your advanced PureBasic knowledge/code with the community.
GPI
PureBasic Expert
PureBasic Expert
Posts: 1394
Joined: Fri Apr 25, 2003 6:41 pm

Advanced Spin Gadget

Post by GPI »

For easier handling of the spingadgets and for change of the range of the gadget

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
gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Post by gnozal »

Thanks for sharing :D
Post Reply