Get Any Gadget Parent
Posted: Tue Oct 15, 2013 4:54 am
Need more to do
No guarantee for next PB versions
Edit :Modified for better
Edit :Fixed out of bounds bug
No guarantee for next PB versions

Code: Select all
;:==========================================
;:- GetParent(Gadget)
;:- Author : RASHAD
;:- Date : 10 15, 2013
;:- Compiler : PureBasic 5.1x - 5.20 LTS
;:- Target OS : Cross Platform (Should be)
;:==========================================
Global Dim Gad(100,1),Count,Parent,Win ,Obj$,Run
Import ""
PB_Object_EnumerateAll(obj,cb,vData)
PB_Gadget_Objects.i
PB_Window_Objects.i
EndImport
Procedure WinCB(id,*obj,vdata)
Win = id
ProcedureReturn 1
EndProcedure
Procedure GadCB(id,*obj,vdata)
Gad(Count,0) = id
Gad(Count,1) = GadgetType(id)
Count+1
ProcedureReturn 1
EndProcedure
Procedure GetParent(Gadget)
If Run = 0
Run + 1
PB_Object_EnumerateAll(PB_Window_Objects,@WinCB(),0)
PB_Object_EnumerateAll(PB_Gadget_Objects,@GadCB(),0)
EndIf
For x = 0 To Count - 1
If Gad(x,1) = 11 Or Gad(x,1) = 16 Or Gad(x,1) = 28
id = Gad(x,0)
X1 = GadgetX(Gadget,#PB_Gadget_WindowCoordinate)
ResizeGadget(id,GadgetX(id)+10,#PB_Ignore, #PB_Ignore, #PB_Ignore)
X2 = GadgetX(Gadget,#PB_Gadget_WindowCoordinate)
ResizeGadget(id,GadgetX(id)-10,#PB_Ignore, #PB_Ignore, #PB_Ignore)
If X1 <> X2
Obj$ = "Gadget"
Parent = id
Break
EndIf
Else
Obj$ = "Window"
Parent = Win
EndIf
Next
EndProcedure
win1 = OpenWindow(#PB_Any,0,0,400,300,"Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered| #PB_Window_SizeGadget)
PanelGadget (0, 8, 8, 306, 203)
AddGadgetItem (0, -1, "Panel 1")
PanelGadget (1, 5, 5, 290, 166)
AddGadgetItem(1, -1, "Sub-Panel 1")
AddGadgetItem(1, -1, "Sub-Panel 2")
AddGadgetItem(1, -1, "Sub-Panel 3")
CloseGadgetList()
AddGadgetItem (0, -1,"Panel 2")
ButtonGadget(2, 10, 15, 80, 24,"Button 1")
ButtonGadget(3, 95, 15, 80, 24,"Button 2")
CloseGadgetList()
ContainerGadget(5,10,220,62,22,#PB_Container_Flat )
ButtonGadget(6,0,0,60,20,"Test")
CloseGadgetList()
ButtonGadget(10,10,250,60,20,"Run Test")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 10
GetParent(2)
Debug "Parent of Gadget 2 is : "+ Obj$ + " : "+ Str(Parent)
GetParent(6)
Debug "Parent of Gadget 6 is : "+ Obj$ + " : "+ Str(Parent)
GetParent(10)
Debug "Parent of Gadget 10 is : "+ Obj$ + " : "+Str(Parent)
EndSelect
EndSelect
Until Quit = 1
End
Edit :Fixed out of bounds bug