ResizeGadget

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

ResizeGadget

Post by mestnyi »

Fred something like add, to be able to learn, has changed a gadget

Code: Select all

;Resize gadget constant
CompilerIf Defined(PB_Event_MoveGadget, #PB_Constant) =0 And
           Defined(PB_Event_SizeGadget, #PB_Constant) =0
  Enumeration #PB_Event_FirstCustomValue
    #PB_Event_MoveGadget
    #PB_Event_SizeGadget
  EndEnumeration
  
  Enumeration #PB_EventType_FirstCustomValue
    #PB_EventType_MoveGadget_X
    #PB_EventType_MoveGadget_Y
    
    #PB_EventType_SizeGadget_Width
    #PB_EventType_SizeGadget_Height
  EndEnumeration
CompilerEndIf
;Get ID from handle  
CompilerIf Defined(IDWindow, #PB_Function) =0
  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
    EndImport
    Procedure IDWindow(Handle)
      Protected ID
      PB_Object_EnumerateStart(PB_Window_Objects)
      While PB_Object_EnumerateNext(PB_Window_Objects, @ID)
        If Handle = WindowID(ID)
          ProcedureReturn ID
        EndIf
      Wend
      ProcedureReturn -1
    EndProcedure
  CompilerEndIf
  ;Get parent gadget
  CompilerIf Defined(GetParent, #PB_Function) =0
    Procedure GetParent(ChildID)
      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 
    
    Procedure GadgetWindow(Gadget)
      Protected ParentID = GetParent(GadgetID(Gadget))
      While ParentID
        ParentID = GetParent(ParentID)
        If ParentID
          ProcedureReturn IDWindow(ParentID)
        EndIf
      Wend  
    EndProcedure
  CompilerEndIf
  
  ;Get parent gadget
  CompilerIf Defined(BindEventGadget, #PB_Function) =0
  ProcedureDLL BindEventGadget(*CallBack, Gadget =-1, EventType =-1, Event =#PB_Event_Gadget)
    If Gadget = #PB_All
      BindEvent(Event, *CallBack)
    Else     
      If EventType = #PB_All
        BindEvent(Event, *CallBack, GadgetWindow(Gadget), Gadget)
      Else
        BindGadgetEvent(Gadget, *CallBack, EventType)
      EndIf  
    EndIf
  EndProcedure
  CompilerEndIf
  
  ProcedureDLL MoveGadget(Gadget, X, Y) ;Move gadget and set Event = #PB_Event_MoveGadget and EventType = #PB_EventType_MoveGadget_X|#PB_EventType_MoveGadget_Y
    Static OldX, OldY 
    If IsGadget(Gadget)
    If (OldX <> X And X <> #PB_Ignore) :OldX = X 
      PostEvent(#PB_Event_MoveGadget, GadgetWindow(Gadget), Gadget, #PB_EventType_MoveGadget_X)
      PostEvent(#PB_Event_Gadget, GadgetWindow(Gadget), Gadget, #PB_EventType_MoveGadget_X)
    EndIf  
    
    If (OldY<>Y And Y<>#PB_Ignore) :OldY=Y
      PostEvent(#PB_Event_MoveGadget, GadgetWindow(Gadget), Gadget, #PB_EventType_MoveGadget_Y)
      PostEvent(#PB_Event_Gadget, GadgetWindow(Gadget), Gadget, #PB_EventType_MoveGadget_Y)
    EndIf  
    ResizeGadget(Gadget, X, Y, #PB_Ignore, #PB_Ignore) 
    EndIf
  EndProcedure 
  
  ProcedureDLL SizeGadget(Gadget, Width, Height) ;Size gadget and set Event = #PB_Event_SizeGadget and EventType = #PB_EventType_SizeGadget_Width|#PB_EventType_SizeGadget_Height
    Static OldWidth, OldHeight 
    
    If IsGadget(Gadget)
    If (OldWidth <> Width And Width <> #PB_Ignore) :OldWidth = Width 
      PostEvent(#PB_Event_SizeGadget, GadgetWindow(Gadget), Gadget, #PB_EventType_SizeGadget_Width)
      PostEvent(#PB_Event_Gadget, GadgetWindow(Gadget), Gadget, #PB_EventType_SizeGadget_Width)
    EndIf  
    
    If (OldHeight <> Height And Height <> #PB_Ignore) :OldHeight = Height 
      PostEvent(#PB_Event_SizeGadget, GadgetWindow(Gadget), Gadget, #PB_EventType_SizeGadget_Height)
      PostEvent(#PB_Event_Gadget, GadgetWindow(Gadget), Gadget, #PB_EventType_SizeGadget_Height)
    EndIf  
    ResizeGadget(Gadget, #PB_Ignore, #PB_Ignore, Width, Height) 
    EndIf
  EndProcedure  
  
  CompilerIf (#PB_Compiler_IsMainFile)
    Procedure Event_SizeGadget()
      ;Debug "Size - " + EventGadget()
      If EventType()=#PB_EventType_SizeGadget_Width
        Result$ ="Size_w - " + EventGadget() + " w= " + GadgetWidth(EventGadget())
        Debug Result$
      EndIf         
      If EventType()=#PB_EventType_SizeGadget_Height
        Result$ ="Size_h - " + EventGadget() + " h= " + GadgetHeight(EventGadget())
        Debug Result$
      EndIf         
    If IsWindow(GadgetWindow(EventGadget()))  
      SetWindowTitle(GadgetWindow(EventGadget()),Result$)
    EndIf  
    EndProcedure
    Procedure Event_MoveGadget()
      ;Debug "Move - " + EventGadget()
      If EventType()=#PB_EventType_MoveGadget_X
        Result$ ="Move_x - " + EventGadget() + " x= " + GadgetX(EventGadget())
        Debug Result$
        
      EndIf         
      If EventType()=#PB_EventType_MoveGadget_Y
        Result$ ="Move_y - " + EventGadget() + " y= " + GadgetY(EventGadget())
        Debug Result$
        
      EndIf         
    If IsWindow(GadgetWindow(EventGadget()))  
      SetWindowTitle(GadgetWindow(EventGadget()),Result$)
    EndIf  
    EndProcedure
    
    Procedure OpenWindow_0(x = 0, y = 0, width = 330, height = 300)
      ;Global Window_0 = OpenWindow(#PB_Any, x, y, width, height, "0", #PB_Window_SystemMenu| #PB_Window_SizeGadget)
      
      ButtonGadget(5, 20, 20, 20, 20,"5")
      SetParent_(GadgetID(5),0)
      
      BindEventGadget(@Event_MoveGadget(),5);,#PB_Any,#PB_Event_MoveGadget)
      BindEventGadget(@Event_SizeGadget(),5);,#PB_Any,#PB_Event_SizeGadget)
     EndProcedure    
    Procedure OpenWindow_1(x = 0, y = 340, width = 330, height = 300)
      Global Window_1 = OpenWindow(#PB_Any, x, y, width, height, "1", #PB_Window_SystemMenu| #PB_Window_SizeGadget)
      
      ButtonGadget(15, 20, 20, 20, 20,"15")
      
      BindEvent(#PB_Event_MoveGadget,@Event_MoveGadget(),Window_1,15)
      BindEvent(#PB_Event_SizeGadget,@Event_SizeGadget(),Window_1,15)
    EndProcedure    
    
    Procedure ResizeButton(x,y,Text$)
     ContainerGadget(#PB_Any, x,  y, 300, 50) 
      TextGadget    (#PB_Any, 0,  5, 250, 20,Text$, #PB_Text_Center)
      TrackBar = TrackBarGadget(#PB_Any, 0,  30, 250, 20, 0, 300)
      CloseGadgetList()
      ProcedureReturn TrackBar  
    EndProcedure
    Procedure ResizeButtonWindow(x = 350, y = 0, width = 265, height = 300)
      OpenWindow(#PB_Any, x, y, width, height, "Center", #PB_Window_SystemMenu| #PB_Window_ScreenCentered)
      TextGadget    (#PB_Any, 30,  5, 200, 20,"Select Gadget", #PB_Text_Center)
      ComboBoxGadget(1,30,30,205,21)
      AddGadgetItem(1,-1,"5")
      AddGadgetItem(1,-1,"15")
      
      Global Xg=ResizeButton(5,55,"move gadget X coordinate") :DisableGadget(Xg,1)
      Global Yg=ResizeButton(5,110,"move gadget Y coordinate") :DisableGadget(Yg,1)
      Global Wg=ResizeButton(5,165,"Size gadget Width coordinate") :DisableGadget(Wg,1)
      Global Hg=ResizeButton(5,215,"Size gadget Height coordinate") :DisableGadget(Hg,1)
      
    EndProcedure
    
    ResizeButtonWindow()
    OpenWindow_0()
    OpenWindow_1()

    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_Gadget
          If EventGadget() =1
            Global SGadget = Val(GetGadgetText(1))
            DisableGadget(Xg,0) 
            DisableGadget(Yg,0) 
            DisableGadget(Wg,0) 
            DisableGadget(Hg,0)
          EndIf
          If EventGadget() =Xg
            moveGadget(SGadget,GetGadgetState(Xg)+20,#PB_Ignore)
          ElseIf EventGadget() =Yg
            moveGadget(SGadget,#PB_Ignore,GetGadgetState(Yg)+20)
          ElseIf EventGadget() =Wg
            sizeGadget(SGadget,GetGadgetState(Wg)+20,#PB_Ignore)
          ElseIf EventGadget() =Hg
            sizeGadget(SGadget,#PB_Ignore,GetGadgetState(Hg)+20)
            
          EndIf
        Case #PB_Event_CloseWindow
          End
      EndSelect
    ForEver 
  CompilerEndIf