Files
wnsrc/lua/vgui/dmenuoption.lua

175 lines
2.9 KiB
Lua
Raw Normal View History

2024-08-04 23:12:27 +03:00
--[[
| 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 = {}
AccessorFunc( PANEL, "m_pMenu", "Menu" )
AccessorFunc( PANEL, "m_bChecked", "Checked" )
AccessorFunc( PANEL, "m_bCheckable", "IsCheckable" )
AccessorFunc( PANEL, "m_bRadio", "Radio" )
function PANEL:Init()
self:SetContentAlignment( 4 )
self:SetTextInset( 32, 0 ) -- Room for icon on left
self:SetChecked( false )
end
function PANEL:SetSubMenu( menu )
self.SubMenu = menu
if ( !IsValid( self.SubMenuArrow ) ) then
self.SubMenuArrow = vgui.Create( "DPanel", self )
self.SubMenuArrow.Paint = function( panel, w, h ) derma.SkinHook( "Paint", "MenuRightArrow", panel, w, h ) end
end
end
function PANEL:AddSubMenu()
local SubMenu = DermaMenu( true, self )
SubMenu:SetVisible( false )
SubMenu:SetParent( self )
self:SetSubMenu( SubMenu )
return SubMenu
end
function PANEL:OnCursorEntered()
if ( IsValid( self.ParentMenu ) ) then
self.ParentMenu:OpenSubMenu( self, self.SubMenu )
return
end
self:GetParent():OpenSubMenu( self, self.SubMenu )
end
function PANEL:OnCursorExited()
end
function PANEL:Paint( w, h )
derma.SkinHook( "Paint", "MenuOption", self, w, h )
--
-- Draw the button text
--
return false
end
function PANEL:OnMousePressed( mousecode )
self.m_MenuClicking = true
DButton.OnMousePressed( self, mousecode )
end
function PANEL:OnMouseReleased( mousecode )
DButton.OnMouseReleased( self, mousecode )
if ( self.m_MenuClicking && mousecode == MOUSE_LEFT ) then
self.m_MenuClicking = false
CloseDermaMenus()
end
end
function PANEL:DoRightClick()
if ( self:GetIsCheckable() ) then
self:ToggleCheck()
end
end
function PANEL:DoClickInternal()
if ( self:GetIsCheckable() ) then
self:ToggleCheck()
end
if ( self.m_pMenu ) then
self.m_pMenu:OptionSelectedInternal( self )
end
end
function PANEL:ToggleCheck()
if ( self:GetRadio() ) then
if ( self:GetChecked() ) then return end
local menu = self:GetMenu():GetCanvas()
for k, pnl in pairs( menu:GetChildren() ) do
pnl:SetChecked( false )
end
end
self:SetChecked( !self:GetChecked() )
end
function PANEL:SetChecked( b )
if ( self:GetChecked() != b ) then
self:OnChecked( b )
end
self.m_bChecked = b
end
function PANEL:OnChecked( b )
end
function PANEL:PerformLayout( w, h )
self:SizeToContents()
self:SetWide( self:GetWide() + 30 )
w = math.max( self:GetParent():GetWide(), self:GetWide() )
self:SetSize( w, 22 )
if ( IsValid( self.SubMenuArrow ) ) then
self.SubMenuArrow:SetSize( 15, 15 )
self.SubMenuArrow:CenterVertical()
self.SubMenuArrow:AlignRight( 4 )
end
DButton.PerformLayout( self, w, h )
end
function PANEL:GenerateExample()
-- Do nothing!
end
derma.DefineControl( "DMenuOption", "Menu Option Line", PANEL, "DButton" )