/* _ ( ) _| | __ _ __ ___ ___ _ _ /'_` | /'__`\( '__)/' _ ` _ `\ /'_` ) ( (_| |( ___/| | | ( ) ( ) |( (_| | `\__,_)`\____)(_) (_) (_) (_)`\__,_) DHorizontalDivider: modified from DVerticalDivider by TAD2020 */ local PANEL = {} /*--------------------------------------------------------- Name: Init ---------------------------------------------------------*/ function PANEL:Init() self:SetCursor( "sizewe" ) self:SetPaintBackground( false ) end /*--------------------------------------------------------- Name: OnMousePressed ---------------------------------------------------------*/ function PANEL:OnMousePressed( mcode ) if ( mcode == MOUSE_LEFT ) then self:GetParent():StartGrab() end end vgui.Register( "DHorizontalDividerBar", PANEL, "DPanel" ) local PANEL = {} AccessorFunc( PANEL, "m_pLeft", "Left" ) AccessorFunc( PANEL, "m_pRigth", "Rigth" ) AccessorFunc( PANEL, "m_pMiddle", "Middle" ) AccessorFunc( PANEL, "m_iDividerWidth", "DividerWidth" ) AccessorFunc( PANEL, "m_iLeftWidth", "LeftWidth" ) AccessorFunc( PANEL, "m_bDragging", "Dragging", FORCE_BOOL ) AccessorFunc( PANEL, "m_iLeftWidthMin", "LeftMin" ) AccessorFunc( PANEL, "m_iRigthWidthMin", "RightMin" ) AccessorFunc( PANEL, "m_iHoldPos", "HoldPos" ) /*--------------------------------------------------------- Name: Init ---------------------------------------------------------*/ function PANEL:Init() self:SetDividerWidth( 8 ) self:SetLeftWidth( 100 ) self:SetLeftMin( 50 ) self:SetRightMin( 50 ) self:SetPaintBackground( false ) self.m_DragBar = vgui.Create( "DHorizontalDividerBar", self ) end /*--------------------------------------------------------- Name: LoadCookies ---------------------------------------------------------*/ function PANEL:LoadCookies() self:SetLeftWidth( self:GetCookieNumber( "LeftWidth", self:GetLeftWidth() ) ) end /*--------------------------------------------------------- Name: SetLeft ---------------------------------------------------------*/ function PANEL:SetLeft( pnl ) self.m_pLeft = pnl self.m_pLeft:SetParent( self ) end /*--------------------------------------------------------- Name: SetRight ---------------------------------------------------------*/ function PANEL:SetRight( pnl ) self.m_pRight = pnl self.m_pRight:SetParent( self ) end /*--------------------------------------------------------- Name: PerformLayout ---------------------------------------------------------*/ function PANEL:PerformLayout() if ( self.m_pLeft ) then self.m_pLeft:StretchToParent( 0, 0, nil, 0 ) self.m_pLeft:SetWide( self.m_iLeftWidth ) self.m_pLeft:InvalidateLayout() end if ( self.m_pRight ) then self.m_pRight:StretchToParent( self.m_iLeftWidth + self.m_iDividerWidth, 0, 0, 0 ) self.m_pRight:InvalidateLayout() end self.m_DragBar:StretchToParent( self.m_iLeftWidth, 0, 0, 0 ) self.m_DragBar:SetWide( self.m_iDividerWidth ) self.m_DragBar:SetZPos( -1 ) if ( self.m_pMiddle ) then self.m_pMiddle:StretchToParent( 0, 0, 0, 0 ) self.m_pMiddle:InvalidateLayout() end end /*--------------------------------------------------------- Name: SetMiddle ---------------------------------------------------------*/ function PANEL:SetMiddle( Middle ) self.m_pMiddle = Middle if ( Middle ) then Middle:SetParent( self.m_DragBar ) end end /*--------------------------------------------------------- Name: OnCursorMoved ---------------------------------------------------------*/ function PANEL:OnCursorMoved( x, y ) if ( !self:GetDragging() ) then return end x = math.Clamp( x - self:GetHoldPos(), self:GetLeftMin(), self:GetWide() - self:GetRightMin() - self:GetDividerWidth() ) self:SetLeftWidth( x ) self:InvalidateLayout() end /*--------------------------------------------------------- Name: StartGrab ---------------------------------------------------------*/ function PANEL:StartGrab() self:SetCursor( "sizewe" ) local x, y = self.m_DragBar:CursorPos() self:SetHoldPos( x ) self:SetDragging( true ) self:MouseCapture( true ) end /*--------------------------------------------------------- Name: OnMouseReleased ---------------------------------------------------------*/ function PANEL:OnMouseReleased( mcode ) if ( mcode == MOUSE_LEFT ) then self:SetCursor( "none" ) self:SetDragging( false ) self:MouseCapture( false ) self:SetCookie( "LeftWidth", self.m_iLeftWidth ) end end /*--------------------------------------------------------- Name: GenerateExample ---------------------------------------------------------*/ function PANEL:GenerateExample( ClassName, PropertySheet, Width, Height ) local ctrl = vgui.Create( ClassName ) ctrl:SetSize( 256, 256 ) ctrl:SetLeft( vgui.Create( "DButton" ) ) ctrl:SetRight( vgui.Create( "DButton" ) ) PropertySheet:AddSheet( ClassName, ctrl, nil, true, true ) end derma.DefineControl( "DHorizontalDivider", "", PANEL, "DPanel" )