Page 1 of 1

SplitterGadgetEx()

Posted: Wed Nov 26, 2014 1:39 pm
by mestnyi

Code: Select all


Procedure ResizeSplitter()
  #PB_EventType_SizeSplitter = #PB_EventType_SizeItem
  Static MouseMoveX, MouseMoveY
  Protected FirstGadget, SecondGadget, SplitterGadget = EventGadget()
  Protected Left, Top, Right, Bottom, MouseX, MouseY, Window = GetActiveWindow();EventWindow()
  
  If IsGadget(SplitterGadget) And GadgetType(SplitterGadget) = #PB_GadgetType_Splitter And IsWindow(Window)
    FirstGadget = GetGadgetAttribute(SplitterGadget, #PB_Splitter_FirstGadget)
    SecondGadget = GetGadgetAttribute(SplitterGadget, #PB_Splitter_SecondGadget)
    
    If (IsGadget(FirstGadget) And IsGadget(SecondGadget))
      MouseX = DesktopMouseX() 
      MouseY = DesktopMouseY()
      
      Left = (GadgetX(FirstGadget,#PB_Gadget_ScreenCoordinate)+GadgetWidth(FirstGadget)) 
      Top = (GadgetY(FirstGadget,#PB_Gadget_ScreenCoordinate)+GadgetHeight(FirstGadget)) 
      Right = GadgetX(SecondGadget,#PB_Gadget_ScreenCoordinate)
      Bottom = GadgetY(SecondGadget,#PB_Gadget_ScreenCoordinate)
      
      If (MouseX >= Left And MouseX <= Right) Or 
         (MouseY >= Top And MouseY <= Bottom) 
        
        If ((MouseX <>-1 And MouseY <>-1) And 
            ((MouseMoveX <> MouseX) Or (MouseMoveY <> MouseY))) 
          MouseMoveX = MouseX 
          MouseMoveY = MouseY
          
          PostEvent(#PB_Event_Gadget,Window,SplitterGadget,#PB_EventType_SizeSplitter)
          CompilerIf #PB_Compiler_OS = #PB_OS_Windows
            RedrawWindow_(WindowID(Window),0,0,#RDW_UPDATENOW);#RDW_ALLCHILDREN|
          CompilerEndIf
        EndIf 
      EndIf  
    EndIf
  EndIf  
EndProcedure

ProcedureDLL SplitterGadgetEx(SplitterName,GadgetFirst=-1,GadgetSecond=-1,x=0,y=0,w=0,h=0,FirstMinimumSize=0,SecondMinimumSize=0,SpliterPosition=-1,Flag=0,MinSize = 0);#PB_Splitter_Vertical)
  ;
  If GadgetType(GadgetFirst)=#PB_GadgetType_Splitter
    If GadgetType(GetGadgetAttribute(GadgetFirst,#PB_Splitter_FirstGadget))=#PB_GadgetType_Splitter
      Protected FirstSpliterPosition=GetGadgetState(GadgetFirst)
    EndIf  
    If Flag & #PB_Splitter_SecondFixed
      If Flag & #PB_Splitter_Vertical
        SpliterPosition=((GadgetWidth(GetGadgetAttribute(GadgetFirst,#PB_Splitter_SecondGadget))+GetGadgetState(GadgetFirst))-SpliterPosition)
        FirstMinimumSize=4+(GadgetWidth(GetGadgetAttribute(GadgetFirst,#PB_Splitter_FirstGadget)))+FirstMinimumSize
      Else
        SpliterPosition=SpliterPosition+4
      EndIf 
    EndIf
  Else
    If Not ((Flag & #PB_Splitter_FirstFixed) Or (Flag & #PB_Splitter_SecondFixed))
      If SpliterPosition>=0 :SpliterPosition=FirstMinimumSize+SpliterPosition+4 :EndIf
    EndIf
  EndIf
  
  ;
  SplitterNameID = SplitterGadget(SplitterName, x,y,w,h, GadgetFirst, GadgetSecond, Flag)
  If SplitterName =-1 :SplitterName = SplitterNameID :EndIf
    
  ;
  SetGadgetAttribute(SplitterName,#PB_Splitter_FirstMinimumSize,FirstMinimumSize)
  SetGadgetAttribute(SplitterName,#PB_Splitter_SecondMinimumSize,SecondMinimumSize)
  SetGadgetState(SplitterName, SpliterPosition) 

  If GadgetType(GadgetFirst)=#PB_GadgetType_Splitter
    If GadgetType(GetGadgetAttribute(GadgetFirst,#PB_Splitter_FirstGadget))=#PB_GadgetType_Splitter
      SetGadgetState(GadgetFirst, FirstSpliterPosition) 
    EndIf  
  EndIf
  
  BindGadgetEvent(SplitterName,@ResizeSplitter())
  ProcedureReturn SplitterNameID
EndProcedure

Global Splitter_Six,code,Form

Procedure Resize()
  If IsGadget(Splitter_Six)
    ResizeGadget(Splitter_Six,#PB_Ignore,#PB_Ignore,WindowWidth(EventWindow())-10,WindowHeight(EventWindow())-10)
  EndIf  
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    RedrawWindow_(WindowID(0),0,0,#RDW_UPDATENOW)
  CompilerEndIf 
EndProcedure 

Procedure ResizePanel()
  ;If EventType() = #PB_EventType_SizeSplitter
    ResizeGadget(Code,0,0,GetGadgetAttribute(15, #PB_Panel_ItemWidth),GetGadgetAttribute(15, #PB_Panel_ItemHeight))
   ; EndIf
 EndProcedure 
 
If OpenWindow(0, 0, 0, 630, 380, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_Invisible)
  SmartWindowRefresh(0, 1) 
  WindowBounds(0,550,300,-1,-1)
  
  TextGadget(2, 0, 0, 0, 0, "Здесь будет подсказка к аплетам программы",#PB_Text_Border) 
    
    ListViewGadget(1, 0, 0, 0, 0);, "Button 5") 
    For a = 1 To 12
      AddGadgetItem (1, -1, "Item " + Str(a) + " of the Listview") ; define listview content
    Next
    SetGadgetState(1, 2) ; set (beginning with 0) the tenth item as the active one
    
    ButtonGadget(3, 0, 0, 0, 0, "Button 3") 
    TextGadget(4, 0, 0, 0, 0, "Здесь будет подсказка к функциям программы",#PB_Text_Border) 
    
    Panel = PanelGadget(15,x,y,w,h)
    AddGadgetItem(15,-1,"Code")
    Code = ListIconGadget(#PB_Any,x,y,w,h,"" ,1,Flag)
    AddGadgetItem(15,-1,"Form")
    
    Form = ContainerGadget(#PB_Any,10,10,200,100,#PB_Container_Flat) 

    
    ButtonGadget(13, 30, 10, 70, 20, "Button 13") 
    CloseGadgetList()
    CloseGadgetList()
    
    
    ListViewGadget(6, 0, 0, 0, 0);, "Button 5") 
    For a = 1 To 12
      AddGadgetItem (6, -1, "Item " + Str(a) + " of the Listview") ; define listview content
    Next
    SetGadgetState(6, 2) ; set (beginning with 0) the tenth item as the active one
   
    ContainerGadget(7, 0, 0, 0, 0, #PB_Container_Flat) 
    CloseGadgetList()
    
    x=5
    y=5
    w=(WindowWidth(0)-x*2)
    h=(WindowHeight(0)-y*2)
    
    
    Splitter_First = SplitterGadgetEx(#PB_Any,1,2, x, y, w, h,200,40,0,#PB_Splitter_SecondFixed)
    Splitter_Second = SplitterGadgetEx(#PB_Any,15,6, x, y, w, h,200,40,0,#PB_Splitter_SecondFixed)
    Splitter_Thread = SplitterGadgetEx(#PB_Any,3,4, x, y, w, h,200,40,0,#PB_Splitter_SecondFixed)
    
    Splitter_Four = SplitterGadgetEx(#PB_Any,Splitter_First,Splitter_Second, x, y, w, h,50,350,100,#PB_Splitter_Vertical|#PB_Splitter_FirstFixed)
    
    Splitter_Five = SplitterGadgetEx(#PB_Any,Splitter_Four,Splitter_Thread, x, y, w, h,350,50,100,#PB_Splitter_Vertical|#PB_Splitter_SecondFixed)
    Splitter_Six = SplitterGadgetEx(#PB_Any,7,Splitter_Five, x, y, w, h,24,100,-1)
    
    BindEvent(#PB_Event_Gadget,@ResizePanel())
    
    BindEvent(#PB_Event_SizeWindow,@Resize())
    HideWindow(0,0)
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
; IDE Options = PureBasic 5.22 LTS (Linux - x86)
; CursorPosition = 148
; FirstLine = 59
; Folding = m+-8-
; EnableUnicode
; EnableXP