mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
185 lines
3.6 KiB
Lua
185 lines
3.6 KiB
Lua
--[[
|
|
| 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" )
|