ID and Parent

Got an idea for enhancing PureBasic? New command(s) you'd like to see?
mestnyi
Addict
Addict
Posts: 1000
Joined: Mon Nov 25, 2013 6:41 am

ID and Parent

Post by mestnyi »

If possible, add the following procedures are necessary for various operations with gadgets. And if you can not, I would like to get an answer why?

Code: Select all

        EnableExplicit
        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_Window_Objects.l
          PB_Gadget_Objects.l
          PB_Image_Objects.l
        EndImport
         
        ProcedureDLL Image(Handle) ;Returns purebasic image (ID) from handle
         Protected ID
          PB_Object_EnumerateStart(PB_Image_Objects)
          While PB_Object_EnumerateNext(PB_Image_Objects, @ID)
            If Handle = ImageID(ID) :PB_Object_EnumerateAbort(PB_Image_Objects)
              ProcedureReturn ID
            EndIf
          Wend
          ProcedureReturn -1
        EndProcedure
        
        ProcedureDLL Gadget(Handle) ;Returns purebasic gadget (ID) from handle
         Protected ID
          PB_Object_EnumerateStart(PB_Gadget_Objects)
          While PB_Object_EnumerateNext(PB_Gadget_Objects, @ID)
            If Handle = GadgetID(ID) :PB_Object_EnumerateAbort(PB_Gadget_Objects)
              ProcedureReturn ID
            EndIf
          Wend
          ProcedureReturn -1
        EndProcedure
         
        ProcedureDLL Window(Handle) ;Returns purebasic window (ID) from handle
         Protected ID
          PB_Object_EnumerateStart(PB_Window_Objects)
          While PB_Object_EnumerateNext(PB_Window_Objects, @ID)
            If Handle = WindowID(ID) :PB_Object_EnumerateAbort(PB_Window_Objects)
              ProcedureReturn ID
            EndIf
          Wend
          ProcedureReturn -1
        EndProcedure
       
        ProcedureDLL ID(Handle) ;Returns purebasic (ID) from handle
         Protected ID
         
          ID=Gadget(Handle)
          If IsGadget(ID)
           ProcedureReturn ID
          EndIf
          
          ID=Window(Handle)
          If IsWindow(ID)
           ProcedureReturn ID
          EndIf
          
          ID=Image(Handle)
          If IsImage(ID)
           ProcedureReturn ID
          EndIf
          If IsGadget(Handle) Or IsWindow(Handle) Or IsImage(Handle)
            ProcedureReturn Handle
          EndIf
         ProcedureReturn -1
        EndProcedure
        
        ProcedureDLL GetParent(ChildID) ;Returns Parent(Handle) from Child(Handle)
         Protected ID 
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
           While ChildID <>0
            ChildID=GetParent_(ChildID)
            ID=ID(ChildID)
             If IsGadget(ID) And GadgetID(ID)=ChildID
              ProcedureReturn ChildID
             ElseIf IsWindow(ID) And WindowID(ID)=ChildID
              ProcedureReturn ChildID
             EndIf
           Wend  
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
           While ChildID <>0
            ChildID=gtk_widget_get_parent_(ChildID)
            ID=ID(ChildID)
             If IsGadget(ID) And GadgetID(ID)=ChildID
              ProcedureReturn ChildID
             ElseIf IsWindow(ID) And WindowID(ID)=ChildID
              ProcedureReturn ChildID
             EndIf
           Wend  
         CompilerEndIf
        EndProcedure 
       
        ProcedureDLL GetParentWindow(Gadget) ;Returns always Parent Window(ID) from Gadget(ID)
         Protected  ID,ChildID
          ChildID=GadgetID(Gadget)
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
           While ChildID <>0
            ChildID=GetParent_(ChildID)
            ID=ID(ChildID)
             If IsWindow(ID) And WindowID(ID)=ChildID
              ProcedureReturn ID
             EndIf
           Wend  
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
           While ChildID <>0
            ChildID=gtk_widget_get_parent_(ChildID)
            ID=ID(ChildID)
             If IsWindow(ID) And WindowID(ID)=ChildID
              ProcedureReturn ID
             EndIf
           Wend  
         CompilerEndIf
        EndProcedure 
       
        ProcedureDLL GetParentGadgetTop(Gadget) ;Returns Top Parent Gadget(ID) from Gadget(ID)
         Static TopGadget 
         Protected  ID,ChildID
          ChildID=GadgetID(Gadget)
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
           While ChildID <>0
            ChildID=GetParent_(ChildID)
            ID=ID(ChildID)
            If IsGadget(ID) And GadgetID(ID)=ChildID
             TopGadget= ID
            EndIf
            If IsWindow(ID) And WindowID(ID)=ChildID
             ProcedureReturn TopGadget
            EndIf
           Wend  
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
           While ChildID <>0
            ChildID=gtk_widget_get_parent_(ChildID)
            ID=ID(ChildID)
             If IsGadget(ID) And GadgetID(ID)=ChildID
              TopGadget= ID
             EndIf
             If IsWindow(ID) And WindowID(ID)=ChildID
              ProcedureReturn TopGadget
             EndIf
           Wend  
         CompilerEndIf
        EndProcedure 
       
        ProcedureDLL GetGadgetParentWindow(Gadget) ;Returns Parent Window(ID) from Gadget(ID)
         Protected  ID,ChildID
          ChildID=GadgetID(Gadget)
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
           While ChildID <>0
            ChildID=GetParent_(ChildID)
            ID=ID(ChildID)
            If IsWindow(ID) And WindowID(ID)=ChildID
             ProcedureReturn ID
            EndIf
           Wend  
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
           While ChildID <>0
            ChildID=gtk_widget_get_parent_(ChildID)
            ID=ID(ChildID)
            If IsWindow(ID) And WindowID(ID)=ChildID
             ProcedureReturn ID
            EndIf
           Wend  
          CompilerEndIf  
         ProcedureReturn -1
        EndProcedure

        ProcedureDLL GetGadgetParentGadget(Gadget) ;Returns Parent Gadget(ID) from Gadget(ID)
         Protected  ID,ChildID
          ChildID=GadgetID(Gadget)
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
           While ChildID <>0
            ChildID=GetParent_(ChildID)
            ID=ID(ChildID)
            If IsGadget(ID) And GadgetID(ID)=ChildID
             ProcedureReturn ID
            EndIf
           Wend  
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
           While ChildID <>0
            ChildID=gtk_widget_get_parent_(ChildID)
            ID=ID(ChildID)
            If IsGadget(ID) And GadgetID(ID)=ChildID
             ProcedureReturn ID
            EndIf
           Wend  
          CompilerEndIf  
         ProcedureReturn -1
        EndProcedure
        
        ProcedureDLL GetWindowParentWindow(Window) ;Returns Parent Window(ID) from Window(ID)
         Protected  ID,ChildID
          ChildID=WindowID(Window)
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
           While ChildID <>0
            ChildID=GetParent_(ChildID)
            ID=ID(ChildID)
            If IsWindow(ID) And WindowID(ID)=ChildID
             ProcedureReturn ID
            EndIf
           Wend  
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
           While ChildID <>0
            ChildID=gtk_widget_get_parent_(ChildID)
            ID=ID(ChildID)
            If IsWindow(ID) And WindowID(ID)=ChildID
             ProcedureReturn ID
            EndIf
           Wend  
          CompilerEndIf  
         ProcedureReturn -1
        EndProcedure

        ProcedureDLL GetWindowParentGadget(Window) ;Returns Parent Gadget(ID) from Window(ID)
         Protected  ID,ChildID
          ChildID=WindowID(Window)
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
           While ChildID <>0
            ChildID=GetParent_(ChildID)
            ID=ID(ChildID)
            If IsGadget(ID) And GadgetID(ID)=ChildID
             ProcedureReturn ID
            EndIf
           Wend  
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
           While ChildID <>0
            ChildID=gtk_widget_get_parent_(ChildID)
            ID=ID(ChildID)
            If IsGadget(ID) And GadgetID(ID)=ChildID
             ProcedureReturn ID
            EndIf
           Wend  
          CompilerEndIf  
         ProcedureReturn -1
        EndProcedure
       
        DisableExplicit
example

Code: Select all

    ;автор : mestnyi
    ;почта : mestnyi33@.ya.ru
    ;помогли Никита Однороб и Пётр
    ;GadgetDock.pbi

Procedure ContainerInnerCoordinateHeight(Gadget,Mode=#PB_Gadget_ActualSize)
 If GadgetType(Gadget)=#PB_GadgetType_Container And Mode & #PB_Gadget_RequiredSize 
  Protected Result,Height
  OpenGadgetList(Gadget)
   Result = TextGadget(#PB_Any,0,0,0,0,"")
    CloseGadgetList()
     Height = (GadgetY(Result,#PB_Gadget_WindowCoordinate) - GadgetY(Gadget,#PB_Gadget_WindowCoordinate))*2
      Height=GadgetHeight(Gadget)-Height
     If IsGadget(Result) :FreeGadget(Result) :EndIf
    ProcedureReturn Height 
   Else
  ProcedureReturn GadgetHeight(Gadget,Mode)
 EndIf 
EndProcedure
Macro GadgetHeight(Gadget,Mode=#PB_Gadget_ActualSize)
 ContainerInnerCoordinateHeight(Gadget,Mode)
EndMacro
  

Procedure ContainerInnerCoordinateWidth(Gadget,Mode=#PB_Gadget_ActualSize)
 If GadgetType(Gadget)=#PB_GadgetType_Container And Mode & #PB_Gadget_RequiredSize 
  Protected Result,Width
  OpenGadgetList(Gadget)
   Result = TextGadget(#PB_Any,0,0,0,0,"")
    CloseGadgetList()
     Width = (GadgetX(Result,#PB_Gadget_WindowCoordinate) - GadgetX(Gadget,#PB_Gadget_WindowCoordinate))*2
      Width=GadgetWidth(Gadget)-Width
     If IsGadget(Result) :FreeGadget(Result) :EndIf
    ProcedureReturn Width 
   Else
  ProcedureReturn GadgetWidth(Gadget,Mode)
 EndIf 
EndProcedure
Macro GadgetWidth(Gadget,Mode=#PB_Gadget_ActualSize)
 ContainerInnerCoordinateWidth(Gadget,Mode)
EndMacro
  


    EnableExplicit
    Enumeration 1
     #GadgetDockLeft
     #GadgetDockTop
     #GadgetDockRight
     #GadgetDockBottom
     #GadgetDockClient
    EndEnumeration

    Global.i NewList DockTop()
    Global.i NewList DockLeft()
    Global.i NewList DockRight()
    Global.i NewList DockBottom()
    Global.i NewList DockClient()
     
    ProcedureDLL DockGadgetResize(EventWindow)
     Protected.i Gadget,GadgetParent,ww,wh,l,t,r,b,c
     If IsWindow(EventWindow) 
     ForEach DockTop()
      Gadget=DockTop()
      GadgetParent=GetParentWindow(Gadget)
      If EventWindow=GadgetParent
        If IsGadget(GetGadgetParentGadget(Gadget))
         ww= GadgetWidth(GetGadgetParentGadget(Gadget),#PB_Gadget_RequiredSize)
        Else  
         ww= WindowWidth(GadgetParent)
        EndIf 
         ResizeGadget(Gadget,l,t,ww,#PB_Ignore)
           t + GadgetHeight(Gadget)
      EndIf
     Next
     ForEach DockBottom()
      Gadget=DockBottom()
      GadgetParent=GetParentWindow(Gadget)
      If EventWindow=GadgetParent
        If IsGadget(GetGadgetParentGadget(Gadget))
         ww= GadgetWidth(GetGadgetParentGadget(Gadget),#PB_Gadget_RequiredSize)
         wh= GadgetHeight(GetGadgetParentGadget(Gadget),#PB_Gadget_RequiredSize)
        Else  
         ww= WindowWidth(GadgetParent)
         wh= WindowHeight(GadgetParent)
        EndIf 
        b + GadgetHeight(Gadget) 
        ResizeGadget(Gadget,l,wh-b,ww-(r+l),#PB_Ignore)
      EndIf
     Next
     ForEach DockLeft()
      Gadget=DockLeft()
      GadgetParent=GetParentWindow(Gadget)
      If EventWindow=GadgetParent
        If IsGadget(GetGadgetParentGadget(Gadget))
         wh= GadgetHeight(GetGadgetParentGadget(Gadget),#PB_Gadget_RequiredSize)
        Else  
        wh= WindowHeight(GadgetParent)
        EndIf
        ResizeGadget(Gadget,l,t,#PB_Ignore,wh-(t+b))
        l + GadgetWidth(Gadget) 
      EndIf
     Next
     ForEach DockRight()
      Gadget=DockRight()
      GadgetParent=GetParentWindow(Gadget)
      If EventWindow=GadgetParent
        If IsGadget(GetGadgetParentGadget(Gadget))
         ww= GadgetWidth(GetGadgetParentGadget(Gadget),#PB_Gadget_RequiredSize)
         wh= GadgetHeight(GetGadgetParentGadget(Gadget),#PB_Gadget_RequiredSize)
        Else  
         ww= WindowWidth(GadgetParent)
         wh= WindowHeight(GadgetParent)
        EndIf
        r + GadgetWidth(Gadget)
        ResizeGadget(Gadget,ww-r,t,#PB_Ignore,wh-(t+b))
      EndIf
     Next
     ForEach DockClient()
      Gadget=DockClient()
      GadgetParent=GetParentWindow(Gadget)
      If EventWindow=GadgetParent
        If IsGadget(GetGadgetParentGadget(Gadget))
         ww= GadgetWidth(GetGadgetParentGadget(Gadget),#PB_Gadget_RequiredSize)
         wh= GadgetHeight(GetGadgetParentGadget(Gadget),#PB_Gadget_RequiredSize)
        Else  
        ww= WindowWidth(GadgetParent)
        wh= WindowHeight(GadgetParent)
      EndIf
        c + GadgetHeight(Gadget) 
        ResizeGadget(Gadget,l,t,ww-(r+l),wh-(t+b))
      EndIf
     Next
     EndIf  
     
     CompilerIf #PB_Compiler_OS=#PB_OS_Windows
      RedrawWindow_(WindowID(EventWindow), 0, 0, #RDW_ALLCHILDREN|#RDW_UPDATENOW)
     CompilerEndIf
    EndProcedure
    
    ProcedureDLL DockGadgetCallBack()
      DockGadgetResize(EventWindow())
    EndProcedure
   
    ProcedureDLL GadgetDock(Gadget, dock)
     Protected Object,Parent,Window
     Window=GetParentWindow(Gadget)
     Parent=ID(GetGadgetParentGadget(Gadget))
      ;Debug Parent
      If IsGadget(Parent)
        BindGadgetEvent(Parent, @DockGadgetCallBack());, #PB_EventType_LeftClick)
      Else
        BindEvent(#PB_Event_SizeWindow,@DockGadgetCallBack(),Window)
      EndIf
     
     If dock = #GadgetDockTop
        AddElement(DockTop())
        DockTop() = Gadget
        DockGadgetResize(Window)
      EndIf
      If dock = #GadgetDockLeft
        AddElement(DockLeft())
        DockLeft() = Gadget
        DockGadgetResize(Window)
      EndIf
      If dock = #GadgetDockRight
        AddElement(DockRight())
        DockRight() = Gadget
        DockGadgetResize(Window)
      EndIf
      If dock = #GadgetDockBottom
        AddElement(DockBottom())
        DockBottom() = Gadget
        DockGadgetResize(Window)
      EndIf
      If dock = #GadgetDockClient
        AddElement(DockClient())
        DockClient() = Gadget
        DockGadgetResize(Window)
      EndIf
    EndProcedure

     
     
    
     ; IncludeFile "GadgetDock.pbi"

     Procedure win(i)
     Static s 
      OpenWindow(i,5,s*25,700,400,"",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
      ContainerGadget(i+0,50,50,600,300,#PB_Container_Flat)
      ButtonGadget(i+1,5,40,130,25,"Dock = left", #WS_CLIPSIBLINGS) :GadgetDock(i+1,1)
      ButtonGadget(i+2,5,40,130,25,"Dock = top", #WS_CLIPSIBLINGS) :GadgetDock(i+2,2)
      ButtonGadget(i+3,5,40,130,25,"Dock = right", #WS_CLIPSIBLINGS) :GadgetDock(i+3,3)
      ButtonGadget(i+4,5,40,130,25,"Dock = bottom", #WS_CLIPSIBLINGS) :GadgetDock(i+4,4)
      ButtonGadget(i+5,5,40,130,25,"Dock = client", #WS_CLIPSIBLINGS) :GadgetDock(i+5,5)
      ButtonGadget(i+6,5,40,130,25,"Dock = left", #WS_CLIPSIBLINGS) :GadgetDock(i+6,1)
      ButtonGadget(i+7,5,40,130,25,"Dock = top", #WS_CLIPSIBLINGS) :GadgetDock(i+7,2)
      ButtonGadget(i+8,5,40,130,25,"Dock = right", #WS_CLIPSIBLINGS) :GadgetDock(i+8,3)
      ButtonGadget(i+9,5,40,130,25,"Dock = bottom", #WS_CLIPSIBLINGS) :GadgetDock(i+9,4)
      CloseGadgetList()
      s=i
      ProcedureReturn i
     EndProcedure
    
     OpenWindow(5,5,5,700,400,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
     
     
      ButtonGadget(0,5,40,130,25,"Dock = left", #WS_CLIPSIBLINGS) :GadgetDock(0,1)
      ButtonGadget(1,5,40,130,25,"Dock = top", #WS_CLIPSIBLINGS) :GadgetDock(1,2)
      ButtonGadget(2,5,40,130,25,"Dock = right", #WS_CLIPSIBLINGS) :GadgetDock(2,3)
      ButtonGadget(3,5,40,130,25,"Dock = bottom", #WS_CLIPSIBLINGS) :GadgetDock(3,4)
      ButtonGadget(4,85,40,130,25,"Dock = client", #WS_CLIPSIBLINGS) :GadgetDock(4,5)
      ButtonGadget(5,5,40,130,25,"Dock = left", #WS_CLIPSIBLINGS) :GadgetDock(5,1)
      ButtonGadget(6,5,40,130,25,"Dock = top", #WS_CLIPSIBLINGS) :GadgetDock(6,2)
      ButtonGadget(7,5,40,130,25,"Dock = right", #WS_CLIPSIBLINGS) :GadgetDock(7,3)
      ButtonGadget(8,5,40,130,25,"Dock = bottom", #WS_CLIPSIBLINGS) :GadgetDock(8,4)
     
      
      win(10)
      win(20)
      win(30)
      win(40)
  
      Repeat
      Define   Event = WaitWindowEvent()

        Select Event 
         
          Case #PB_Event_CloseWindow
            End
          Case #PB_Event_SizeWindow
            If EventWindow()<>5
             ResizeGadget(EventWindow(),#PB_Ignore,#PB_Ignore,WindowWidth(EventWindow())-100,WindowHeight(EventWindow())-100) 
            EndIf
        EndSelect
      ForEver
  
mestnyi
Addict
Addict
Posts: 1000
Joined: Mon Nov 25, 2013 6:41 am

Re: ID and Parent

Post by mestnyi »

Add more dimensions parent GadgetParentX (), GadgetParentY (), GadgetParentWidth (), GadgetParentHeight ()
That library with source code that you need to abrade and add please, from this will not be bad as anyone.
Скачать Parent.zip
mestnyi
Addict
Addict
Posts: 1000
Joined: Mon Nov 25, 2013 6:41 am

Re: ID and Parent

Post by mestnyi »

Fred look at it, why not tell it all add something :evil:

Code: Select all

  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_Object_EnumerateAll(Object,*CallBack,*Data)
    PB_Object_Count(Object)
    PB_Window_Objects.l
    PB_Gadget_Objects.l
    PB_Image_Objects.l
  EndImport
  
  
  ;=============ID================
  
  ProcedureDLL IDGadget(GadgetID) ;Returns purebasic Gadget ID from GadgetID
      Protected Gadget  
          CompilerSelect #PB_Compiler_OS
              CompilerCase #PB_OS_Windows 
                 Gadget = GetProp_(GadgetID, "PB_ID")
                    If IsGadget(Gadget) And GadgetID(Gadget) = GadgetID
                        ProcedureReturn Gadget 
                           EndIf
                              CompilerDefault
                           PB_Object_EnumerateStart(PB_Gadget_Objects)
                        While PB_Object_EnumerateNext(PB_Gadget_Objects, @Gadget)
                     If IsGadget(Gadget) And GadgetID(Gadget) = GadgetID
                  ProcedureReturn Gadget
               EndIf
            Wend
         CompilerEndSelect
      ProcedureReturn -1 
  EndProcedure  

  ProcedureDLL IDWindow(WindowID) ;Returns purebasic Window ID from WindowID
      Protected Window  
          CompilerSelect #PB_Compiler_OS
              CompilerCase #PB_OS_Windows 
                 Window = GetProp_(WindowID, "PB_WindowID") -1
                    If IsWindow(Window) And WindowID(Window) = WindowID
                        ProcedureReturn Window 
                           EndIf
                              CompilerDefault
                           PB_Object_EnumerateStart(PB_Window_Objects)
                        While PB_Object_EnumerateNext(PB_Window_Objects, @Window)
                     If IsWindow(Window) And WindowID(Window) = WindowID
                  ProcedureReturn Window
               EndIf
            Wend
         CompilerEndSelect
      ProcedureReturn -1 
  EndProcedure  
  
  ProcedureDLL IDImage(ImageID) ;Returns purebasic Image ID from ImageID
      Protected Image  
          CompilerSelect #PB_Compiler_OS
              CompilerCase #PB_OS_Windows 
                 Image = GetProp_(ImageID, "PB_Image_ID")
                    If IsImage(Image) And ImageID(Image) = ImageID
                        ProcedureReturn Image 
                           EndIf
                              CompilerDefault
                           PB_Object_EnumerateStart(PB_Image_Objects)
                        While PB_Object_EnumerateNext(PB_Image_Objects, @Image)
                     If IsImage(Image) And ImageID(Image) = ImageID
                  ProcedureReturn Image
               EndIf
            Wend
         CompilerEndSelect
      ProcedureReturn -1 
  EndProcedure  
  
  ProcedureDLL IDStatusBar(StatusBarID) ;Returns purebasic StatusBar ID from StatusBarID
      Protected StatusBar  
          CompilerSelect #PB_Compiler_OS
              CompilerCase #PB_OS_Windows 
                 StatusBar = GetProp_(StatusBarID, "PB_StatusBar_ID") 
                    If IsStatusBar(StatusBar) And StatusBarID(StatusBar) = StatusBarID
                        ProcedureReturn StatusBar 
                           EndIf
                              CompilerDefault
                                
         CompilerEndSelect
      ProcedureReturn -1 
  EndProcedure  
  
  ProcedureDLL IDToolBar(ToolBarID) ;Returns purebasic ToolBar ID from ToolBarID
      Protected ToolBar  
          CompilerSelect #PB_Compiler_OS
              CompilerCase #PB_OS_Windows 
                 ToolBar = GetProp_(ToolBarID, "PB_ToolBar_ID")
                    If IsToolBar(ToolBar) And ToolBarID(ToolBar) = ToolBarID
                        ProcedureReturn ToolBar 
                           EndIf
                              CompilerDefault
                                
            CompilerEndSelect
      ProcedureReturn -1 
  EndProcedure  
  
  
  ProcedureDLL IsWindowID(WindowID) ;Returns TRUE if is WindowID
      If IsWindow(IDWindow(WindowID))
          ProcedureReturn #True
      EndIf  
  EndProcedure  
  
  ProcedureDLL IsGadgetID(GadgetID);Returns TRUE if is GadgetID
      If IsGadget(IDGadget(GadgetID))
          ProcedureReturn #True
      EndIf  
  EndProcedure  
       
  ProcedureDLL IsImageID(ImageID) ;Returns TRUE if is ImageID
      If IsImage(IDImage(ImageID))
          ProcedureReturn #True
      EndIf  
  EndProcedure  
       
  ProcedureDLL IsToolBarID(ToolBarID);Returns TRUE if is ToolBarID
     If IsToolBar(IDToolBar(ToolBarID))
         ProcedureReturn #True
     EndIf  
  EndProcedure  
       
  ProcedureDLL IsStatusBarID(StatusBarID);Returns TRUE if is StatusBarID
     If IsStatusBar(IDStatusBar(StatusBarID))
         ProcedureReturn #True
     EndIf  
  EndProcedure  
  
  
  ProcedureDLL ID(Handle) ;Returns purebasic object ID from handle
     If IsWindowID(Handle)
         ProcedureReturn IDWindow(Handle)
             ElseIf IsGadgetID(Handle)
                ProcedureReturn IDGadget(Handle)
                  ElseIf IsImageID(Handle)
                    ProcedureReturn IDImage(Handle)
                       ElseIf IsStatusBarID(Handle)
                          ProcedureReturn IDStatusBar(Handle)
                             ElseIf IsToolBarID(Handle)
                          ProcedureReturn IDToolBar(Handle)
                       Else
                    If IsGadget(Handle) Or IsWindow(Handle) Or IsImage(Handle) Or IsStatusBar(Handle) Or IsToolBar(Handle)
                  ProcedureReturn Handle
               Else
            ProcedureReturn -1
        EndIf
     EndIf
  EndProcedure  
  
  ProcedureDLL IsHandle(Handle) ;Returns TRUE if is handle
     If IsWindowID(Handle)
         ProcedureReturn #True
             ElseIf IsGadgetID(Handle)
                ProcedureReturn #True
                  ElseIf IsImageID(Handle)
                    ProcedureReturn #True
                  ElseIf IsStatusBarID(Handle)
                ProcedureReturn #True
             ElseIf IsToolBarID(Handle)
          ProcedureReturn #True
      EndIf
  EndProcedure
  
  
  ;============GetParent================
  
  
  ProcedureDLL GetParent(ChildID) ;Returns ParentID from ChildID (Default)
     CompilerIf #PB_Compiler_OS = #PB_OS_Windows
        ProcedureReturn GetParent_(ChildID)
          CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
        ProcedureReturn gtk_widget_get_parent_(ChildID)
     CompilerEndIf
  EndProcedure 
  
  ProcedureDLL GetParentID(ChildID) ;Returns ParentID from ChildID
     While ChildID
          ChildID = GetParent(ChildID)
              If IsWindowID(ChildID)
                  ProcedureReturn ChildID
              ElseIf IsGadgetID(ChildID)
           ProcedureReturn ChildID
        EndIf
     Wend  
  EndProcedure
 
  ProcedureDLL GadgetParentID(Gadget) ;Returns ParentID from Child Gadget
    If IsGadget(Gadget) 
       Gadget = GadgetID(Gadget)
          EndIf
       ProcedureReturn GetParentID(Gadget)
  EndProcedure
  
  ProcedureDLL GadgetParent2(Gadget, number) 
    Protected ParentID = GadgetParentID(Gadget)
      Protected i 
        If number 
           For i=2 To number 
              ParentID = GetParentID(ParentID) 
                 Next 
              EndIf
            If ParentID
          ProcedureReturn ID(ParentID)
       EndIf
     ProcedureReturn -1
  EndProcedure
        
  ProcedureDLL GadgetParent(Gadget) ;Returns parent window or gadget ID from gadget ID or Handle
     ProcedureReturn GadgetParent2(Gadget,#False)
  EndProcedure
        
  ProcedureDLL GadgetParentCount(Gadget) ;Returns Count Parent from child Gadget
          Static Parent, Count, OldCount
            Parent = GadgetParentID(Gadget)
              While Parent :Count +1
               Parent = GadgetParentID(Parent)
              Wend  
             OldCount = Count
            Count = #False
          ProcedureReturn OldCount
  EndProcedure
        
  ProcedureDLL GadgetParentWindowID(Gadget) ;Returns Parent WindowID from child Gadget
     Protected ParentID = GadgetParentID(Gadget)
        If IsWindowID(ParentID)
          ProcedureReturn ParentID
     EndIf
  EndProcedure
  
  ProcedureDLL GadgetParentWindow(Gadget) ;Returns Parent Window from child Gadget
     ProcedureReturn IDWindow(GadgetParentWindowID(Gadget))  
  EndProcedure
  
  ProcedureDLL GadgetParentGadgetID(Gadget) ;Returns Parent GadgetID from child Gadget
     Protected ParentID = GadgetParentID(Gadget)
        If IsGadgetID(ParentID)
          ProcedureReturn ParentID
     EndIf
  EndProcedure
  
  ProcedureDLL GadgetParentGadget(Gadget) ;Returns Parent Gadget from child Gadget
      ProcedureReturn IDGadget(GadgetParentGadgetID(Gadget)) 
  EndProcedure

  ProcedureDLL GadgetWindowID(Gadget) ;Returns Top Parent WindowID from child Gadget
          Protected ParentID
               ParentID = GadgetParentID(Gadget)
                 If IsWindowID(ParentID)
                    ProcedureReturn ParentID
                       Else  
                          While ParentID
                            ParentID = GadgetParentID(ParentID)
                          If IsWindowID(ParentID)
                       ProcedureReturn ParentID
                    EndIf
                 Wend
              EndIf
           ProcedureReturn -1
  EndProcedure
  
  ProcedureDLL GadgetWindow(Gadget) ;Returns Top Parent Window from child Gadget
     ProcedureReturn IDWindow(GadgetWindowID(Gadget))
  EndProcedure
        
  ProcedureDLL GadgetGadgetID(Gadget) ;Returns Top Parent GadgetID from child Gadget
          Protected GadgetID ,ParentID
               ParentID = GadgetParentID(Gadget)
                 If IsGadgetID(ParentID)
                   While ParentID 
                     GadgetID = ParentID 
                       ParentID = GadgetParentID(ParentID)
                          If IsWindowID(ParentID)
                       ProcedureReturn GadgetID
                    EndIf
                 Wend
              EndIf
           ProcedureReturn -1
  EndProcedure
  
  ProcedureDLL GadgetGadget(Gadget) ;Returns Top Parent Gadget from child Gadget
     ProcedureReturn IDGadget(GadgetGadgetID(Gadget))
  EndProcedure
  
  
  ;=============Enumerate==================
  
  
  Procedure Enumerate(Object) 
   Static Window, Gadget, Image
     If IsWindow(Object) :Window=Object :EndIf 
       If IsGadget(Object) :Gadget=Object :EndIf 
         If IsImage(Object) :Image=Object :EndIf 
           If Object = -2
             ProcedureReturn Gadget
               ElseIf Object = -3
             ProcedureReturn Window
           ElseIf Object = -4
        ProcedureReturn Image
     EndIf  
  EndProcedure
  
  ProcedureDLL EnumerateWindowStart() ;Start enumerate window
   ProcedureReturn PB_Object_EnumerateStart(PB_Window_Objects)
  EndProcedure
 
  ProcedureDLL EnumerateGadgetStart() ;Start enumerate gadget
   ProcedureReturn PB_Object_EnumerateStart(PB_Gadget_Objects)
  EndProcedure
  
  ProcedureDLL EnumerateImageStart() ;Start enumerate Image
   ProcedureReturn PB_Object_EnumerateStart(PB_Image_Objects)
  EndProcedure
 
 
  ProcedureDLL EnumerateWindowNext() ;Next enumerate window
    Protected Object, Window =-1
      Object = PB_Object_EnumerateNext(PB_Window_Objects, @Window)
        If IsWindow(Window)
          Enumerate(Window)
       ProcedureReturn Object
      EndIf  
  EndProcedure
  
  ProcedureDLL EnumerateGadgetNext() ;Next enumerate gadget
    Protected Object, Gadget =-1
      Object = PB_Object_EnumerateNext(PB_Gadget_Objects, @Gadget)
        If IsGadget(Gadget)
          Enumerate(Gadget)
       ProcedureReturn Object
     EndIf  
  EndProcedure
 
  ProcedureDLL EnumerateImageNext() ;Next enumerate image
    Protected Object, Image =-1
      Object = PB_Object_EnumerateNext(PB_Image_Objects, @Image)
        If IsImage(Image)
          Enumerate(Image)
       ProcedureReturn Object
     EndIf  
  EndProcedure
  
  
  ProcedureDLL EnumerateWindowAbort() ;Abort enumerate window
   ProcedureReturn PB_Object_EnumerateAbort(PB_Window_Objects)
  EndProcedure
   
  ProcedureDLL EnumerateGadgetAbort() ;Abort enumerate gadget
   ProcedureReturn PB_Object_EnumerateAbort(PB_Gadget_Objects)
  EndProcedure
 
  ProcedureDLL EnumerateImageAbort() ;Abort enumerate image
   ProcedureReturn PB_Object_EnumerateAbort(PB_Image_Objects)
  EndProcedure
  
  
  ProcedureDLL EnumerateWindow() ;Enumerate Window ID
    ProcedureReturn Enumerate(-3)
  EndProcedure
  
  ProcedureDLL EnumerateGadget2(ParentID)
   Protected Gadget = Enumerate(-2)
     If IsHandle(ParentID)
       If GadgetParentWindowID(Gadget) = ParentID
           ProcedureReturn Gadget
              ElseIf GadgetParentGadgetID(Gadget) = ParentID
                 ProcedureReturn Gadget
                     EndIf 
                        ElseIf IsWindow(ParentID)
                     If GadgetWindow(Gadget) = ParentID
                  ProcedureReturn Gadget
               EndIf
            Else
         ProcedureReturn Gadget
      EndIf 
    ProcedureReturn -1
  EndProcedure
  
  ProcedureDLL EnumerateGadget() ;Returns Gadget ID
    ProcedureReturn EnumerateGadget2(#PB_Any)
  EndProcedure
 
  ProcedureDLL EnumerateImage() ;Enumerate Image ID
    ProcedureReturn Enumerate(-4)
  EndProcedure

  ;{  Windows      
OpenWindow(1, 700, 200, 350, 350, "shows the position of the mouse on the gadget", #PB_Window_SystemMenu|#PB_Window_SizeGadget)

;PanelGadget(5,50,50,250,250) 
PanelGadget(115,50,50,250,250) :AddGadgetItem(115,-1,"Panel")
;ScrollAreaGadget(5,50,50,250,250,248,248,0,#PB_ScrollArea_Flat)
;ContainerGadget(5,50,50,250,250,#PB_Container_Flat)

 ContainerGadget(113,50,50,250,250,#PB_Container_Flat)
  ContainerGadget(112,50,50,250,250,#PB_Container_Flat)
    ButtonGadget(111, 50, 50, 150, 150, "ButtonGadget") 
   CloseGadgetList()
  CloseGadgetList()
 CloseGadgetList()
 
 OpenWindow(2, 0, 0, 250, 185, "", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

    ButtonGadget(51, 5, 30, 105, 20, "1",#PB_Button_Right)
    ButtonGadget(53, 5, 30, 120, 20, "2",#PB_Button_Right)
    
    ContainerGadget(50,0,0,333,333)
    ButtonGadget(10, 105, 5, 140, 20, "10",#PB_Button_Right)
    CloseGadgetList()
    
         
     
OpenWindow(3, 0, 0, 250, 185, "", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

    ButtonGadget(1, 5, 5, 105, 20, "1",#PB_Button_Right)
    ButtonGadget(2, 5, 5, 120, 20, "2",#PB_Button_Right)
    ButtonGadget(3, 5, 5, 135, 20, "3",#PB_Button_Right)
    ;}
  
    EnumerateGadgetStart()
    While EnumerateGadgetNext() 
     Gadget = EnumerateGadget2(0);GadgetID(50));WindowID(2));2);
      Debug "Gadget " +Gadget+ " GadgetParent " +GadgetParent2(Gadget,0)+ " GadgetWindow " +GadgetWindow(Gadget)+ " GadgetParentWindow " +GadgetParentWindow(Gadget)+ " GadgetGadget " +GadgetGadget(Gadget) + " GadgetParentGadget " +GadgetParentGadget(Gadget)
      Debug "------------"
    Wend
    
    Repeat :  Until WaitWindowEvent() = #PB_Event_CloseWindow

Last edited by mestnyi on Thu Sep 04, 2014 7:46 am, edited 1 time in total.
User avatar
luis
Addict
Addict
Posts: 3876
Joined: Wed Aug 31, 2005 11:09 pm
Location: Italy

Re: ID and Parent

Post by luis »

Fred look at it, why not tell it all add something :evil:
Bold it's not enough, you must also use a bigger font.

I was about to suggest to underline it but you already tried that combination -> http://www.purebasic.fr/english/viewtop ... 00#p441000

BBCodes should support sound effects too to catch attention, something like a blaring trumpet maybe.
"Have you tried turning it off and on again ?"
A little PureBasic review
LuCiFeR[SD]
666
666
Posts: 1033
Joined: Mon Sep 01, 2003 2:33 pm

Re: ID and Parent

Post by LuCiFeR[SD] »

Oh luis... please... don't forget colours...... lots of pretty colours and a large font
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8433
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: ID and Parent

Post by netmaestro »

Maybe if you post the code again, people need to see code at least three times before they realize they should read it.
BERESHEIT
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4749
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Re: ID and Parent

Post by Fangbeast »

LuCiFeR[SD] wrote:Oh luis... please... don't forget colours...... lots of pretty colours and a large font
Damnit, you made me lose an hour there. The pretty colours made me go crosseyed and go into a trance!! Only my wife passing by made me snap out of it!
Amateur Radio, D-STAR/VK3HAF
mestnyi
Addict
Addict
Posts: 1000
Joined: Mon Nov 25, 2013 6:41 am

Re: ID and Parent

Post by mestnyi »

Может быть, если вы разместите код снова, люди должны видеть код по крайней мере, три раза, прежде чем они понимают, что они должны прочитать его.
Вы почему болобол превратили это, никому кроме меня это не нужно?
User avatar
Lord
Addict
Addict
Posts: 849
Joined: Tue May 26, 2009 2:11 pm

Re: ID and Parent

Post by Lord »

mestnyi wrote:
Может быть, если вы разместите код снова, люди должны видеть код по крайней мере, три раза, прежде чем они понимают, что они должны прочитать его.
Вы почему болобол превратили это, никому кроме меня это не нужно?
Rembrandt?
Image
Justin
Addict
Addict
Posts: 832
Joined: Sat Apr 26, 2003 2:49 pm

Re: ID and Parent

Post by Justin »

It's been requested several times, *maybe* in three years gets included.
freak
PureBasic Team
PureBasic Team
Posts: 5929
Joined: Fri Apr 25, 2003 5:21 pm
Location: Germany

Re: ID and Parent

Post by freak »

Very funny. I read every post in here, so I saw this one even the first time. I don't see much use for most of these functions, that is why they haven't been included and probably won't be in the future. It is that simple.

Remember: this is a "wishlist" forum, not a "demandlist" forum. Just because you want it doesn't mean it will get done.
quidquid Latine dictum sit altum videtur
Justin
Addict
Addict
Posts: 832
Joined: Sat Apr 26, 2003 2:49 pm

Re: ID and Parent

Post by Justin »

It is not useful for you so it does not get included, great.
It can be useful to create a gadget layout system, the dialog lib is very limited because it cannot be changed at runtime, a big design flaw indeed.
freak
PureBasic Team
PureBasic Team
Posts: 5929
Joined: Fri Apr 25, 2003 5:21 pm
Location: Germany

Re: ID and Parent

Post by freak »

> It is not useful for you so it does not get included, great.

I didn't say that. I was talking about usefulness to the regular PB user. And no, writing your own layout engine is not a very frequent use case.
quidquid Latine dictum sit altum videtur
mestnyi
Addict
Addict
Posts: 1000
Joined: Mon Nov 25, 2013 6:41 am

Re: ID and Parent

Post by mestnyi »

Какая у вас была цель при создании пурика? Дополнение которое давал бы большие возможности для формы простая привязка к краям формы, позиционирование не возможен без этих библиотек, это жизненно необходимые для пользователя с точки зрения интерфейса. Если вы не хотите добавлять не добавляйте ... вам в руки. :twisted:
User avatar
graph100
Enthusiast
Enthusiast
Posts: 115
Joined: Tue Aug 10, 2010 3:17 pm

Re: ID and Parent

Post by graph100 »

freak wrote:And no, writing your own layout engine is not a very frequent use case.
Yes, but it's getting more frequent, isn't it ?
I also add my tiny bit of salt on this scale platter.

I missed these functions a lot in one of my project. it's the kind of feature that you remark only when they are missing.

@ mestnyi : I, as many user on this English forum don't understand Russian, if you want to be read this much please at least add the English google translation !
_________________________________________________
My Website : CeriseCode (Warning : perpetual changes & not completed ;))
Post Reply