Re: Module System (PB-Internals)
Posted: Sat Jun 19, 2021 10:08 am
Update v1.09
- Fix Support C-BackEnd (Windows PB v6.0 Alpha 2)
- Fix Support C-BackEnd (Windows PB v6.0 Alpha 2)
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
DeclareModule GadgetEnum
Declare GetGadgetList(WindowNo.i, List gadgets())
EndDeclareModule
Module GadgetEnum
DisableExplicit
Declare GetParentWindowID(Gadget)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Import ""
CompilerElse
ImportC ""
CompilerEndIf
PB_Object_EnumerateStart(*object)
PB_Object_EnumerateNext(*object,*id.Integer)
PB_Object_EnumerateAbort(*object)
PB_Gadget_Objects.i
PB_Image_Objects.i
EndImport
Procedure GetParentWindowID(Gadget) ; Retval handle
Protected WindowID
If IsGadget(Gadget)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_MacOS
Protected *Gadget.sdkGadget = IsGadget(Gadget)
WindowID = WindowID(*Gadget\Window)
CompilerCase #PB_OS_Linux
WindowID = gtk_widget_get_toplevel_(GadgetID(Gadget))
CompilerCase #PB_OS_Windows
WindowID = GetAncestor_(GadgetID(Gadget), #GA_ROOT)
CompilerEndSelect
EndIf
ProcedureReturn WindowID
EndProcedure
Procedure GetGadgetList(WindowNo.i, List Gadgets()) ; Retval count of gadgets
Protected object
Protected WindowID = WindowID(WindowNo)
ClearList(Gadgets())
PB_Object_EnumerateStart(PB_Gadget_Objects)
If WindowID = 0
While PB_Object_EnumerateNext(PB_Gadget_Objects, @object)
AddElement(Gadgets())
Gadgets() = object
Wend
Else
While PB_Object_EnumerateNext(PB_Gadget_Objects, @object)
If GetParentWindowID(object) = WindowID
AddElement(Gadgets())
Gadgets() = object
EndIf
Wend
EndIf
ProcedureReturn ListSize(Gadgets())
EndProcedure
EndModule