Enumerate* and Count*(Window,Gadget,Image)
Posted: Mon Feb 16, 2015 7:33 am
Code: Select all
CompilerIf Not Defined(PB_Object_Count, #PB_Function) And
Not Defined(PB_Object_Count, #PB_Procedure)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Import ""
CompilerElse
ImportC ""
CompilerEndIf
PB_Object_EnumerateStart( PB_Objects )
PB_Object_EnumerateNext( PB_Objects, *ID.Integer )
PB_Object_EnumerateAbort( PB_Objects )
PB_Object_Count( PB_Objects )
PB_Window_Objects.i
PB_Gadget_Objects.i
PB_Image_Objects.i
EndImport
CompilerEndIf
CompilerIf Not Defined(EnumerateStartGadget, #PB_Function) And
Not Defined(EnumerateStartGadget, #PB_Procedure)
EnableExplicit
ProcedureDLL CountWindow() ;Returns count window
ProcedureReturn PB_Object_Count(PB_Window_Objects)
EndProcedure
ProcedureDLL CountGadget() ;Returns count gadget
ProcedureReturn PB_Object_Count(PB_Gadget_Objects)
EndProcedure
ProcedureDLL CountImage() ;Returns count image
ProcedureReturn PB_Object_Count(PB_Image_Objects)
EndProcedure
ProcedureDLL EnumerateStartWindow() ;Returns pb window object
PB_Object_EnumerateStart(PB_Window_Objects)
ProcedureReturn PB_Window_Objects
EndProcedure
ProcedureDLL EnumerateStartGadget() ;Returns pb gadget object
PB_Object_EnumerateStart(PB_Gadget_Objects)
ProcedureReturn PB_Gadget_Objects
EndProcedure
ProcedureDLL EnumerateStartImage() ;Returns pb Image object
PB_Object_EnumerateStart(PB_Image_Objects)
ProcedureReturn PB_Image_Objects
EndProcedure
ProcedureDLL EnumerateNextWindow( *Window.Integer ) ;Returns next enumerate pb object
Protected PBObject, Window =-1
PBObject = PB_Object_EnumerateNext( PB_Window_Objects, @Window )
If IsWindow( Window )
PokeI( *Window, PeekI( @Window ) )
EndIf
ProcedureReturn PBObject
EndProcedure
ProcedureDLL EnumerateNextGadget2( *Gadget.Integer, Window )
Protected PBObject, WindowID, GadgetID, GadgetWindowID, Gadget =-1
PBObject = PB_Object_EnumerateNext(PB_Gadget_Objects, @Gadget)
If IsGadget( Gadget )
PokeI( *Gadget, PeekI( @Gadget ) )
EndIf
If (IsWindow(Window) And IsGadget(Gadget))
WindowID = WindowID( Window )
GadgetID = GadgetID( Gadget )
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
GadgetWindowID = gtk_widget_get_toplevel_ ( GadgetID )
CompilerCase #PB_OS_Windows
While GadgetID
GadgetWindowID = GadgetID
GadgetID = GetParent_( GadgetID )
If Not GadgetID
Break
EndIf
Wend
CompilerEndSelect
If GadgetWindowID = WindowID
ProcedureReturn PBObject
Else
ProcedureReturn EnumerateNextGadget2( *Gadget, Window )
EndIf
Else
ProcedureReturn PBObject
EndIf
EndProcedure
ProcedureDLL EnumerateNextGadget( *Gadget ) ;Returns next enumerate pb object
ProcedureReturn EnumerateNextGadget2( *Gadget, #PB_All )
EndProcedure
Macro EnumerateNextGadget( Gadget, Window = #PB_All )
EnumerateNextGadget2( Gadget, Window )
EndMacro
ProcedureDLL EnumerateNextImage( *Image.Integer ) ;Returns next enumerate pb object
Protected PBObject, Image =-1
PBObject = PB_Object_EnumerateNext(PB_Image_Objects, @Image)
If IsImage( Image )
PokeI( *Image, PeekI( @Image ) )
EndIf
ProcedureReturn PBObject
EndProcedure
ProcedureDLL EnumerateAbortWindow() ;Abort enumerate window
ProcedureReturn PB_Object_EnumerateAbort(PB_Window_Objects)
EndProcedure
ProcedureDLL EnumerateAbortGadget() ;Abort enumerate gadget
ProcedureReturn PB_Object_EnumerateAbort(PB_Gadget_Objects)
EndProcedure
ProcedureDLL EnumerateAbortImage() ;Abort enumerate image
ProcedureReturn PB_Object_EnumerateAbort(PB_Image_Objects)
EndProcedure
DisableExplicit
CompilerEndIf
CompilerIf #PB_Compiler_IsMainFile
X = 200
For i = 1 To 4
OpenWindow(i, 200, X, 150, 60, "Window_" + Trim(Str(i)))
ContainerGadget(i*5, 5, 5, 120,50, #PB_Container_Flat)
ButtonGadget(i,10,10,100,30,"Button_" + Trim(Str(i)))
CloseGadgetList()
X + 100
Next
Debug "Begen enumerate window"
If EnumerateStartWindow( )
While EnumerateNextWindow( @Window )
Debug "Window "+Window
Wend
EnumerateAbortWindow()
EndIf
Debug "Begen enumerate all gadget"
If EnumerateStartGadget( )
While EnumerateNextGadget( @Gadget )
Debug "Gadget "+Gadget
Wend
EnumerateAbortGadget()
EndIf
Window = 3
Debug "Begen enumerate gadget window = 3"
If EnumerateStartGadget( )
While EnumerateNextGadget( @Gadget, Window )
Debug "Gadget "+Str(Gadget) +" Window "+ Window
Wend
EnumerateAbortGadget()
EndIf
Repeat
If CountWindow( )
Event = WaitWindowEvent( )
If Event = #PB_Event_CloseWindow
CloseWindow( EventWindow( ) )
Debug "Close " + EventWindow( )
EndIf
Else
Break
EndIf
ForEver
Debug "Exit"
CompilerEndIf
Code: Select all
;- Enumerate
DeclareModule Enumerate
Declare CountWindow()
Declare CountGadget()
Declare CountImage()
Declare StartWindow()
Declare StartGadget()
Declare StartImage()
Declare NextWindow( *Window.Integer )
Declare NextGadget( *Gadget.Integer, Window = #PB_All )
Declare NextImage( *Image.Integer )
Declare AbortWindow()
Declare AbortGadget()
Declare AbortImage()
EndDeclareModule
Module Enumerate
EnableExplicit
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Import ""
CompilerElse
ImportC ""
CompilerEndIf
PB_Object_EnumerateStart( PB_Objects )
PB_Object_EnumerateNext( PB_Objects, *ID.Integer )
PB_Object_EnumerateAbort( PB_Objects )
PB_Object_Count( PB_Objects )
PB_Window_Objects.i
PB_Gadget_Objects.i
PB_Image_Objects.i
EndImport
Procedure CountWindow() ;Returns count window
ProcedureReturn PB_Object_Count(PB_Window_Objects)
EndProcedure
Procedure CountGadget() ;Returns count gadget
ProcedureReturn PB_Object_Count(PB_Gadget_Objects)
EndProcedure
Procedure CountImage() ;Returns count image
ProcedureReturn PB_Object_Count(PB_Image_Objects)
EndProcedure
Procedure StartWindow() ;Returns pb window object
PB_Object_EnumerateStart(PB_Window_Objects)
ProcedureReturn PB_Window_Objects
EndProcedure
Procedure StartGadget() ;Returns pb gadget object
PB_Object_EnumerateStart(PB_Gadget_Objects)
ProcedureReturn PB_Gadget_Objects
EndProcedure
Procedure StartImage() ;Returns pb Image object
PB_Object_EnumerateStart(PB_Image_Objects)
ProcedureReturn PB_Image_Objects
EndProcedure
Procedure NextWindow( *Window.Integer ) ;Returns next enumerate pb object
Protected PB_Object, Window =-1
PB_Object = PB_Object_EnumerateNext( PB_Window_Objects, @Window )
If IsWindow( Window )
PokeI( *Window, PeekI( @Window ) )
EndIf
ProcedureReturn PB_Object
EndProcedure
Procedure NextGadget( *Gadget.Integer, Window = #PB_All) ;Returns next enumerate pb object
Protected PB_Object, WindowID, GadgetID, GadgetWindowID, Gadget =-1
PB_Object = PB_Object_EnumerateNext(PB_Gadget_Objects, @Gadget)
If IsGadget( Gadget )
PokeI( *Gadget, PeekI( @Gadget ) )
EndIf
If (IsWindow(Window) And IsGadget(Gadget))
WindowID = WindowID( Window )
GadgetID = GadgetID( Gadget )
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
GadgetWindowID = gtk_widget_get_toplevel_ ( GadgetID )
CompilerCase #PB_OS_Windows
While GadgetID
GadgetWindowID = GadgetID
GadgetID = GetParent_( GadgetID )
If Not GadgetID
Break
EndIf
Wend
CompilerEndSelect
If GadgetWindowID = WindowID
ProcedureReturn PB_Object
Else
ProcedureReturn NextGadget( *Gadget, Window )
EndIf
Else
ProcedureReturn PB_Object
EndIf
EndProcedure
Procedure NextImage( *Image.Integer ) ;Returns next enumerate pb object
Protected PB_Object, Image =-1
PB_Object = PB_Object_EnumerateNext(PB_Image_Objects, @Image)
If IsImage( Image )
PokeI( *Image, PeekI( @Image ) )
EndIf
ProcedureReturn PB_Object
EndProcedure
Procedure AbortWindow() ;Abort enumerate window
ProcedureReturn PB_Object_EnumerateAbort(PB_Window_Objects)
EndProcedure
Procedure AbortGadget() ;Abort enumerate gadget
ProcedureReturn PB_Object_EnumerateAbort(PB_Gadget_Objects)
EndProcedure
Procedure AbortImage() ;Abort enumerate image
ProcedureReturn PB_Object_EnumerateAbort(PB_Image_Objects)
EndProcedure
DisableExplicit
EndModule
CompilerIf #PB_Compiler_IsMainFile
X = 200
For i = 1 To 4
OpenWindow(i, 200, X, 150, 60, "Window_" + Trim(Str(i)))
ContainerGadget(i*5, 5, 5, 120,50, #PB_Container_Flat)
ButtonGadget(i,10,10,100,30,"Button_" + Trim(Str(i)))
CloseGadgetList()
X + 100
Next
Debug "Begen enumerate window"
If Enumerate::StartWindow( )
While Enumerate::NextWindow( @Window )
Debug "Window "+Window
Wend
Enumerate::AbortWindow()
EndIf
Debug "Begen enumerate all gadget"
If Enumerate::StartGadget( )
While Enumerate::NextGadget( @Gadget )
Debug "Gadget "+Gadget
Wend
Enumerate::AbortGadget()
EndIf
Window = 3
Debug "Begen enumerate gadget window = 3"
If Enumerate::StartGadget( )
While Enumerate::NextGadget( @Gadget, Window )
Debug "Gadget "+Str(Gadget) +" Window "+ Window
Wend
Enumerate::AbortGadget()
EndIf
Repeat
If Enumerate::CountWindow( )
Event = WaitWindowEvent( )
If Event = #PB_Event_CloseWindow
CloseWindow( EventWindow( ) )
Debug "Close " + EventWindow( )
EndIf
Else
Break
EndIf
ForEver
Debug "Exit"
CompilerEndIf
; IDE Options = PureBasic 5.24 LTS (Windows - x64)
; CursorPosition = 158
; FirstLine = 61
; Folding = EQBg--
; EnableUnicode
; EnableXP