
Kukulkan
Code: Select all
*d\MaxItems = DesktopWidth(0)
Code: Select all
y = (h - 1) * i / sy
Code: Select all
sy = h / (th * 2)
Code: Select all
Procedure FreeSpeedBarGadget(Gadget)
Protected *d._SpeedBar = GetGadgetData(Gadget)
If *d <> #Null
FreeMemory(*d)
FreeGadget(Gadget)
EndIf
EndProcedure
Code: Select all
Procedure SpeedBarGadget(Gadget, x, y, w, h, Flags=0)
;create new speedbar
Protected f, *d._SpeedBar, desktops, i
;build canvas flags
If Flags & #SpeedBarBorder
f | #PB_Canvas_Border
EndIf
;create additional speedbar object data
*d = AllocateMemory(SizeOf(_SpeedBar))
InitializeStructure(*d, _SpeedBar)
; NewList *d\Values() <--- With InitializeStructure(), NewList is no longer needed !
*d\Canvas = CanvasGadget(Gadget, x, y, w, h, f)
*d\Flags = Flags
*d\Font = FontID(LoadFont(#PB_Any, "", 8))
*d\Maximum = 100
*d\BackColor = $000000
*d\GridColor = $1C1C1C
*d\ValueColor = $0000FF
;store object in gadget data
If Gadget = #PB_Any
SetGadgetData(*d\Canvas, *d)
Else
SetGadgetData(Gadget, *d)
EndIf
;maximum number of values to store is limited to desktop width
desktops = ExamineDesktops()
For i = 0 To desktops - 1
If *d\MaxItems < DesktopWidth(i)
*d\MaxItems = DesktopWidth(i)
EndIf
Next
;return gadget id
ProcedureReturn *d\Canvas
EndProcedure
Code: Select all
Procedure SpeedBarFreeGadget(Gadget)
Protected *d._SpeedBar = GetGadgetData(Gadget)
If *d <> #Null
; All Basic field set to 0
; (it's for a purist, a maniac or a crazy programmer)
*d\Canvas = 0
*d\Flags = 0
*d\MaxItems = 0
*d\Maximum = 0
*d\BackColor = 0
*d\GridColor = 0
*d\ValueColor = 0
*d\SplitsX = 0
*d\SplitsY = 0
*d\Digits = 0
; Freeing the font
If *d\Font <> 0
FreeFont(*d\Font)
*d\Font = 0 ; The same comment as for previous basic fields apply here too !
EndIf
; Deleting all Values elements
ClearList(*d\Values())
FreeMemory(*d)
FreeGadget(Gadget)
EndIf
EndProcedure
Personally I prefer to use NewList, Map and Dim for any Linked List, Map and Dynamic Array used outside structured variable (loose inside a code, inside procedures, and so on) and use InitializeStructure() on structure containing Linked List, Map and Dynamic Array. Furthermore InitializeStructure() has been specifically designed for this purpose.Are there any advantages to use InitializeStructure() instead of NewList in my special case?