Code: Select all
EnableExplicit
Macro GadgetFromHwnd(hwnd)
GetProp_(hwnd, "PB_ID")
EndMacro
Procedure GetHwnd(object.i)
If IsWindow(object)
ProcedureReturn WindowID(object)
ElseIf IsGadget(object)
ProcedureReturn GadgetID(object)
EndIf
EndProcedure
;Gets the first child gadget of a window or gadget container.
;item : for panel gadgets the panel item, -1 to get the selected panel.
Procedure GetFirstChildGadget(parentGadget.i, item.i = -1)
Define.i hwParent, hwnd, gadget, x
hwParent = GetHwnd(parentGadget)
If hwParent
If IsWindow(parentGadget)
hwnd = GetWindow_(hwParent, #GW_CHILD)
gadget = GadgetFromHwnd(hwnd)
If IsGadget(gadget)
ProcedureReturn gadget
EndIf
ElseIf IsGadget(parentGadget)
If GadgetType(parentGadget) = #PB_GadgetType_Panel
If item < -1 : item = -1 : EndIf
If item = -1
item = GetGadgetState(parentGadget)
EndIf
;Go to the panel item
x = 0
hwnd = GetWindow_(hwParent, #GW_CHILD)
While x < item
hwnd = GetWindow_(hwnd, #GW_HWNDNEXT)
x = x + 1
Wend
;Get first child of this panel item
gadget = GadgetFromHwnd(GetWindow_(hwnd, #GW_CHILD))
If IsGadget(gadget)
ProcedureReturn gadget
EndIf
Else ;All other gadgets.
gadget = GadgetFromHwnd(GetWindow_(hwParent, #GW_CHILD))
If IsGadget(gadget)
ProcedureReturn gadget
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure GetNextSiblingGadget(gadget.i)
Define.i hwnd
hwnd = GetWindow_(GadgetID(gadget), #GW_HWNDNEXT)
gadget = GadgetFromHwnd(hwnd)
If IsGadget(gadget)
ProcedureReturn gadget
EndIf
EndProcedure
;- TEST
Global.i be, mainWin
Procedure clickHandler()
Define.i gadget, gadget2
gadget = GetFirstChildGadget(mainWin)
While gadget
Debug GetGadgetText(gadget)
If GadgetType(gadget) = #PB_GadgetType_Panel
gadget2 = GetFirstChildGadget(gadget)
While gadget2
Debug "--- " + GetGadgetText(gadget2)
gadget2 = GetNextSiblingGadget(gadget2)
Wend
EndIf
gadget = GetNextSiblingGadget(gadget)
Wend
EndProcedure
mainWin = OpenWindow(#PB_Any, 0, 0, 322, 220, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
be = ButtonGadget(#PB_Any, 0, 0, 80, 24,"Enumerate")
BindGadgetEvent(be, @clickHandler(), #PB_EventType_LeftClick)
PanelGadget(1, 8, 30, 306, 180)
AddGadgetItem (1, -1, "Panel 1")
ButtonGadget(2, 10, 15, 80, 24,"Button 1")
AddGadgetItem (1, -1,"Panel 2")
ButtonGadget(3, 95, 15, 80, 24,"Button 2")
CloseGadgetList()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow