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

170 lines
3.5 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 = {}
AccessorFunc( PANEL, "m_strSelectedIcon", "SelectedIcon" )
AccessorFunc( PANEL, "m_bManual", "Manual" )
function PANEL:SelectIcon( name )
self.m_strSelectedIcon = name
for k, v in ipairs( self.IconLayout:GetChildren() ) do
if ( v:GetImage() == name ) then
self.m_pSelectedIcon = v
end
end
end
function PANEL:ScrollToSelected()
if ( !IsValid( self.m_pSelectedIcon ) ) then return end
self:ScrollToChild( self.m_pSelectedIcon )
end
function PANEL:Init()
self.m_strSelectedIcon = ""
self.IconLayout = self:GetCanvas():Add( "DIconLayout" )
self.IconLayout:SetSpaceX( 0 )
self.IconLayout:SetSpaceY( 0 )
self.IconLayout:SetBorder( 4 )
self.IconLayout:Dock( TOP )
self:SetPaintBackground( true )
end
local local_IconList = nil
local local_IconList_Split = 0
local local_IconList_FlagSplit = 0
function PANEL:Fill()
self.Filled = true
if ( self.m_bManual ) then return end
if ( !local_IconList ) then
local_IconList = file.Find( "materials/icon16/*.png", "MOD" )
local_IconList_Split = #local_IconList
table.Add( local_IconList, file.Find( "materials/flags16/*.png", "MOD" ) )
local_IconList_FlagSplit = #local_IconList
table.Add( local_IconList, file.Find( "materials/games/16/*.png", "MOD" ) )
end
for k, v in SortedPairs( local_IconList ) do
timer.Simple( k * 0.001, function()
if ( !IsValid( self ) ) then return end
if ( !IsValid( self.IconLayout ) ) then return end
local btn = self.IconLayout:Add( "DImageButton" )
btn.FilterText = string.lower( v )
if ( k > local_IconList_Split and k > local_IconList_FlagSplit ) then
btn:SetOnViewMaterial( "games/16/" .. v )
elseif (k > local_IconList_Split ) then
btn:SetOnViewMaterial( "flags16/" .. v )
else
btn:SetOnViewMaterial( "icon16/" .. v )
end
btn:SetTooltip( btn:GetImage() )
btn:SetSize( 22, 22 )
btn:SetPos( -22, -22 )
btn:SetStretchToFit( false )
btn.DoClick = function()
self.m_pSelectedIcon = btn
self.m_strSelectedIcon = btn:GetImage()
self:OnChangeInternal()
end
btn.Paint = function( pnl, w, h )
if ( self.m_pSelectedIcon != pnl ) then return end
derma.SkinHook( "Paint", "Selection", pnl, w, h )
end
if ( !self.m_pSelectedIcon || self.m_strSelectedIcon == btn:GetImage() ) then
self.m_pSelectedIcon = btn
--self:ScrollToChild( btn )
end
self.IconLayout:Layout()
end )
end
end
function PANEL:FilterByText( text )
local text_lwr = string.lower( text )
for k, v in ipairs( self.IconLayout:GetChildren() ) do
v:SetVisible( v.FilterText:find( text_lwr ) != nil )
end
self.IconLayout:Layout()
end
function PANEL:Paint( w, h )
if ( !self.Filled ) then self:Fill() end
derma.SkinHook( "Paint", "Tree", self, w, h )
end
function PANEL:OnChangeInternal()
self:OnChange()
end
function PANEL:Clear()
self.IconLayout:Clear()
end
function PANEL:Add( name )
return self.IconLayout:Add( name )
end
function PANEL:OnChange()
end
function PANEL:GenerateExample( ClassName, PropertySheet, Width, Height )
local ctrl = vgui.Create( ClassName )
ctrl:SetSize( 300, 300 )
ctrl:SelectIcon( "icon16/heart.png" )
PropertySheet:AddSheet( ClassName, ctrl, nil, true, true )
end
derma.DefineControl( "DIconBrowser", "", PANEL, "DScrollPanel" )