Files
wnsrc/lua/vgui/dlistview_line.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

196 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:SetTextInset( 5, 0 )
end
function PANEL:UpdateColours( skin )
if ( self:GetParent():IsLineSelected() ) then return self:SetTextStyleColor( skin.Colours.Label.Bright ) end
return self:SetTextStyleColor( skin.Colours.Label.Dark )
end
function PANEL:GenerateExample()
-- Do nothing!
end
derma.DefineControl( "DListViewLabel", "", PANEL, "DLabel" )
--[[---------------------------------------------------------
DListView_Line
-----------------------------------------------------------]]
local PANEL = {}
Derma_Hook( PANEL, "Paint", "Paint", "ListViewLine" )
Derma_Hook( PANEL, "ApplySchemeSettings", "Scheme", "ListViewLine" )
Derma_Hook( PANEL, "PerformLayout", "Layout", "ListViewLine" )
AccessorFunc( PANEL, "m_iID", "ID" )
AccessorFunc( PANEL, "m_pListView", "ListView" )
AccessorFunc( PANEL, "m_bAlt", "AltLine" )
function PANEL:Init()
self:SetSelectable( true )
self:SetMouseInputEnabled( true )
self.Columns = {}
self.Data = {}
end
function PANEL:OnSelect()
-- For override
end
function PANEL:OnRightClick()
-- For override
end
function PANEL:OnMousePressed( mcode )
if ( mcode == MOUSE_RIGHT ) then
-- This is probably the expected behaviour..
if ( !self:IsLineSelected() ) then
self:GetListView():OnClickLine( self, true )
self:OnSelect()
end
self:GetListView():OnRowRightClick( self:GetID(), self )
self:OnRightClick()
return
end
self:GetListView():OnClickLine( self, true )
self:OnSelect()
end
function PANEL:OnCursorMoved()
if ( input.IsMouseDown( MOUSE_LEFT ) ) then
self:GetListView():OnClickLine( self )
end
end
function PANEL:SetSelected( b )
self.m_bSelected = b
-- Update colors of the lines
for id, column in pairs( self.Columns ) do
column:ApplySchemeSettings()
end
end
function PANEL:IsLineSelected()
return self.m_bSelected
end
function PANEL:SetColumnText( i, strText )
if ( type( strText ) == "Panel" ) then
if ( IsValid( self.Columns[ i ] ) ) then self.Columns[ i ]:Remove() end
strText:SetParent( self )
self.Columns[ i ] = strText
self.Columns[ i ].Value = strText
return
end
if ( !IsValid( self.Columns[ i ] ) ) then
self.Columns[ i ] = vgui.Create( "DListViewLabel", self )
self.Columns[ i ]:SetMouseInputEnabled( false )
end
self.Columns[ i ]:SetText( tostring( strText ) )
self.Columns[ i ].Value = strText
return self.Columns[ i ]
end
PANEL.SetValue = PANEL.SetColumnText
function PANEL:GetColumnText( i )
if ( !self.Columns[ i ] ) then return "" end
return self.Columns[ i ].Value
end
PANEL.GetValue = PANEL.GetColumnText
--[[---------------------------------------------------------
Allows you to store data per column
Used in the SortByColumn function for incase you want to
sort with something else than the text
-----------------------------------------------------------]]
function PANEL:SetSortValue( i, data )
self.Data[ i ] = data
end
function PANEL:GetSortValue( i )
return self.Data[ i ]
end
function PANEL:DataLayout( ListView )
self:ApplySchemeSettings()
local height = self:GetTall()
local x = 0
for k, Column in pairs( self.Columns ) do
local w = ListView:ColumnWidth( k )
Column:SetPos( x, 0 )
Column:SetSize( w, height )
x = x + w
end
end
derma.DefineControl( "DListViewLine", "A line from the List View", PANEL, "Panel" )
derma.DefineControl( "DListView_Line", "A line from the List View", PANEL, "Panel" )