mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
Upload
This commit is contained in:
184
lua/vgui/dverticaldivider.lua
Normal file
184
lua/vgui/dverticaldivider.lua
Normal file
@@ -0,0 +1,184 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
|
||||
self:SetCursor( "sizens" )
|
||||
self:SetPaintBackground( false )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:OnMousePressed( mcode )
|
||||
|
||||
if ( mcode == MOUSE_LEFT ) then
|
||||
self:GetParent():StartGrab()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
derma.DefineControl( "DVerticalDividerBar", "", PANEL, "DPanel" )
|
||||
|
||||
--[[---------------------------------------------------------
|
||||
DVerticalDivider
|
||||
-----------------------------------------------------------]]
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
AccessorFunc( PANEL, "m_pTop", "Top" )
|
||||
AccessorFunc( PANEL, "m_pBottom", "Bottom" )
|
||||
AccessorFunc( PANEL, "m_pMiddle", "Middle" )
|
||||
AccessorFunc( PANEL, "m_iDividerHeight", "DividerHeight" )
|
||||
AccessorFunc( PANEL, "m_iTopHeight", "TopHeight" )
|
||||
AccessorFunc( PANEL, "m_bDragging", "Dragging" )
|
||||
|
||||
AccessorFunc( PANEL, "m_iTopHeightMin", "TopMin" )
|
||||
AccessorFunc( PANEL, "m_iTopHeightMax", "TopMax" )
|
||||
AccessorFunc( PANEL, "m_iBottomHeightMin", "BottomMin" )
|
||||
|
||||
AccessorFunc( PANEL, "m_iHoldPos", "HoldPos" )
|
||||
|
||||
function PANEL:Init()
|
||||
|
||||
self:SetDividerHeight( 8 )
|
||||
self:SetTopHeight( 100 )
|
||||
|
||||
self:SetTopMin( 50 )
|
||||
self:SetTopMax( 4096 )
|
||||
|
||||
self:SetBottomMin( 50 )
|
||||
|
||||
self:SetPaintBackground( false )
|
||||
|
||||
self.m_DragBar = vgui.Create( "DVerticalDividerBar", self )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:LoadCookies()
|
||||
|
||||
self:SetTopHeight( self:GetCookieNumber( "TopHeight", self:GetTopHeight() ) )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:SetTop( pnl )
|
||||
|
||||
self.m_pTop = pnl
|
||||
self.m_pTop:SetParent( self )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:SetBottom( pnl )
|
||||
|
||||
self.m_pBottom = pnl
|
||||
self.m_pBottom:SetParent( self )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:DoConstraints()
|
||||
|
||||
if ( self:GetTall() == 0 ) then return end
|
||||
|
||||
self.m_iTopHeight = math.Clamp( self.m_iTopHeight, self:GetTopMin(), self:GetTall() - self:GetBottomMin() - self:GetDividerHeight() )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:PerformLayout()
|
||||
|
||||
self:DoConstraints()
|
||||
|
||||
if ( self.m_pTop ) then
|
||||
|
||||
self.m_pTop:StretchToParent( 0, 0, 0, nil )
|
||||
self.m_pTop:SetTall( self.m_iTopHeight )
|
||||
self.m_pTop:InvalidateLayout()
|
||||
|
||||
end
|
||||
|
||||
if ( self.m_pBottom ) then
|
||||
|
||||
self.m_pBottom:StretchToParent( 0, self.m_iTopHeight + self.m_iDividerHeight, 0, 0 )
|
||||
self.m_pBottom:InvalidateLayout()
|
||||
|
||||
end
|
||||
|
||||
self.m_DragBar:StretchToParent( 0, self.m_iTopHeight, 0, 0 )
|
||||
self.m_DragBar:SetTall( self.m_iDividerHeight )
|
||||
self.m_DragBar:SetZPos( -1 )
|
||||
|
||||
if ( self.m_pMiddle ) then
|
||||
|
||||
self.m_pMiddle:StretchToParent( 0, 0, 0, 0 )
|
||||
self.m_pMiddle:InvalidateLayout()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function PANEL:SetMiddle( Middle )
|
||||
|
||||
self.m_pMiddle = Middle
|
||||
|
||||
if ( Middle ) then
|
||||
|
||||
Middle:SetParent( self.m_DragBar )
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function PANEL:OnCursorMoved( x, y )
|
||||
|
||||
if ( !self:GetDragging() ) then return end
|
||||
|
||||
self.m_iTopHeight = y - self:GetHoldPos()
|
||||
|
||||
self.m_iTopHeight = math.min( self.m_iTopHeight, self:GetTopMax() )
|
||||
|
||||
self:InvalidateLayout( true )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:StartGrab()
|
||||
|
||||
self:SetCursor( "sizens" )
|
||||
|
||||
local x, y = self.m_DragBar:CursorPos()
|
||||
self:SetHoldPos( y )
|
||||
|
||||
self:SetDragging( true )
|
||||
self:MouseCapture( true )
|
||||
|
||||
end
|
||||
|
||||
function PANEL:OnMouseReleased( mcode )
|
||||
|
||||
if ( mcode == MOUSE_LEFT ) then
|
||||
self:SetCursor( "none" )
|
||||
self:SetDragging( false )
|
||||
self:MouseCapture( false )
|
||||
self:SetCookie( "TopHeight", self.m_iTopHeight )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function PANEL:GenerateExample( ClassName, PropertySheet, Width, Height )
|
||||
|
||||
local ctrl = vgui.Create( ClassName )
|
||||
ctrl:SetSize( 256, 256 )
|
||||
ctrl:SetTop( vgui.Create( "DButton" ) )
|
||||
ctrl:SetBottom( vgui.Create( "DButton" ) )
|
||||
|
||||
PropertySheet:AddSheet( ClassName, ctrl, nil, true, true )
|
||||
|
||||
end
|
||||
|
||||
derma.DefineControl( "DVerticalDivider", "", PANEL, "DPanel" )
|
||||
Reference in New Issue
Block a user