Module System (PB-Internals)

Share your advanced PureBasic knowledge/code with the community.
User avatar
mk-soft
Always Here
Always Here
Posts: 5335
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Module System (PB-Internals)

Post by mk-soft »

Update v1.09
- Fix Support C-BackEnd (Windows PB v6.0 Alpha 2)
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Rinzwind
Enthusiast
Enthusiast
Posts: 636
Joined: Wed Mar 11, 2009 4:06 pm
Location: NL

Re: Module System (PB-Internals)

Post by Rinzwind »

Thanks, very useful info. IMHO this should be officially included in PB. There is use to know the parent window of a control or the PB ID from a hwnd. Especially when one tries to create a custom control. If mr. dictator :P is willing..
User avatar
mk-soft
Always Here
Always Here
Posts: 5335
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Module System (PB-Internals)

Post by mk-soft »

Update v1.09.2
- Remove Fix Support C-BackEnd (Windows PB v6.0 Alpha 2)

Works now without fix c-backend
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
pamen
Enthusiast
Enthusiast
Posts: 173
Joined: Sat Dec 31, 2022 12:24 pm
Location: Cyprus
Contact:

Re: Module System (PB-Internals)

Post by pamen »

Hmm. gadget enumeration did not want to work in runtime,
After extracting parts, it does.
In any case - this tiny version of the original source does enumerate gadgets at runtime.
Thank you poster for the knowledge!

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
S.T.V.B.E.E.V.
Post Reply