mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
123 lines
2.8 KiB
Lua
123 lines
2.8 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 PLUGIN = PLUGIN
|
||
|
|
local PANEL = {}
|
||
|
|
PANEL.Base = "Panel"
|
||
|
|
|
||
|
|
-- Ripped from GMod github
|
||
|
|
local ContentPanel = nil
|
||
|
|
|
||
|
|
function PANEL:Init()
|
||
|
|
|
||
|
|
self:Dock(TOP)
|
||
|
|
self:SetHeight(20)
|
||
|
|
self:DockMargin(0, 0, 0, 3)
|
||
|
|
|
||
|
|
self.Search = self:Add("DTextEntry")
|
||
|
|
self.Search:Dock(FILL)
|
||
|
|
|
||
|
|
self.Search.OnEnter = function() self:RefreshResults() end
|
||
|
|
self.Search.OnFocusChanged = function(_, b) if (b) then self:RefreshResults() end end
|
||
|
|
self.Search:SetTooltip("Press enter to search")
|
||
|
|
|
||
|
|
local btn = self.Search:Add("DImageButton")
|
||
|
|
|
||
|
|
btn:SetImage("icon16/magnifier.png")
|
||
|
|
btn:SetText("")
|
||
|
|
btn:Dock(RIGHT)
|
||
|
|
btn:DockMargin(4, 2, 4, 2)
|
||
|
|
btn:SetSize(16, 16)
|
||
|
|
btn:SetTooltip("Press to search")
|
||
|
|
btn.DoClick = function()
|
||
|
|
self:RefreshResults()
|
||
|
|
end
|
||
|
|
|
||
|
|
self.Search.OnKeyCode = function(p, code)
|
||
|
|
|
||
|
|
if (code == KEY_F1) then hook.Run("OnSpawnMenuClose") end
|
||
|
|
if (code == KEY_ESCAPE) then hook.Run("OnSpawnMenuClose") end
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:StartSearch()
|
||
|
|
|
||
|
|
if (g_SpawnMenu:IsVisible()) then return hook.Run("OnSpawnMenuClose") end
|
||
|
|
|
||
|
|
hook.Run("OnSpawnMenuOpen")
|
||
|
|
hook.Run("OnTextEntryGetFocus", self.Search)
|
||
|
|
|
||
|
|
self.Search:RequestFocus()
|
||
|
|
self.Search:SetText("")
|
||
|
|
|
||
|
|
timer.Simple(0.1, function() g_SpawnMenu:HangOpen(false) end)
|
||
|
|
|
||
|
|
ContentPanel:SwitchPanel(self.SearchItemPanel)
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
--function PLUGIN:SearchUpdate()
|
||
|
|
|
||
|
|
-- if (!g_SpawnMenu:IsVisible()) then return end
|
||
|
|
-- self:RefreshResults()
|
||
|
|
|
||
|
|
-- end
|
||
|
|
|
||
|
|
self.SearchItemPanel = vgui.Create("ContentContainer", self)
|
||
|
|
self.SearchItemPanel:SetVisible(false)
|
||
|
|
self.SearchItemPanel:SetTriggerSpawnlistChange(false)
|
||
|
|
|
||
|
|
g_SpawnMenu.SearchItemPanel = self.SearchItemPanel
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
function PANEL:RefreshResults()
|
||
|
|
|
||
|
|
if (self.Search:GetText() == "") then return end
|
||
|
|
|
||
|
|
self.SearchItemPanel:Clear()
|
||
|
|
|
||
|
|
local text = self.Search:GetText():utf8lower()
|
||
|
|
text = text:PatternSafe()
|
||
|
|
|
||
|
|
local results = {}
|
||
|
|
|
||
|
|
for k, v in pairs(ix.item.list) do
|
||
|
|
if (v.name:utf8lower():find(text)) then
|
||
|
|
results[k] = v
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local header = self:Add("ContentHeader")
|
||
|
|
|
||
|
|
header:SetText(table.Count(results) .. " Results for \"" .. self.Search:GetText() .. "\"")
|
||
|
|
self.SearchItemPanel:Add(header)
|
||
|
|
|
||
|
|
if (!table.IsEmpty(results)) then
|
||
|
|
for _, itemTable in pairs(results) do
|
||
|
|
if itemTable.base == "base_bgclothes" then
|
||
|
|
spawnmenu.CreateContentIcon("ixItemAdvanced", self.SearchItemPanel, itemTable)
|
||
|
|
else
|
||
|
|
spawnmenu.CreateContentIcon("ixItem", self.SearchItemPanel, itemTable)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
self.SearchItemPanel:SetParent(ContentPanel)
|
||
|
|
ContentPanel:SwitchPanel(self.SearchItemPanel)
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
function PLUGIN:PopulateContent(pnlContent, tree, node)
|
||
|
|
ContentPanel = pnlContent
|
||
|
|
end
|
||
|
|
|
||
|
|
vgui.Register("ItemSearch", PANEL)
|