mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
142 lines
2.9 KiB
Lua
142 lines
2.9 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 IsValid = IsValid
|
|
|
|
local TDLib_Classes = sui.TDLib.LibClasses
|
|
local SUI, NAME = CURRENT_SUI, CURRENT_SUI.name
|
|
|
|
local GetColor = SUI.GetColor
|
|
|
|
local Panel = {}
|
|
|
|
function Panel:Init()
|
|
self.tabs = {}
|
|
|
|
local tab_scroller = self:Add(NAME .. ".ScrollPanel")
|
|
tab_scroller:Dock(LEFT)
|
|
|
|
function tab_scroller:Paint(w, h)
|
|
self:RoundedBox("Background", 1, 0, 0, w, h, GetColor("column_sheet_bar"))
|
|
end
|
|
|
|
self.tabs_wide = 48
|
|
self.tab_scroller = tab_scroller
|
|
|
|
self:ScaleChanged()
|
|
SUI.OnScaleChanged(self, self.ScaleChanged)
|
|
end
|
|
|
|
function Panel:ScaleChanged()
|
|
local tabs_wide = SUI.Scale(self.tabs_wide)
|
|
self.tab_scroller:SetWide(tabs_wide)
|
|
|
|
self:InvalidateLayout(true)
|
|
|
|
local tabs = self.tabs
|
|
for i = 1, #self.tabs do
|
|
tabs[i].img:SetMinus(SUI.Scale(20))
|
|
end
|
|
end
|
|
|
|
function Panel:Paint(w, h)
|
|
self:RoundedBox("Background", 1, 0, 0, w, h, GetColor("column_sheet"))
|
|
end
|
|
|
|
local tab_DoClick = function(s)
|
|
s.parent:SetActiveTab(s)
|
|
end
|
|
|
|
local tab_Paint = function(s, w, h)
|
|
local cur_col
|
|
if s.active then
|
|
cur_col = GetColor("column_sheet_tab_active")
|
|
elseif s.Hovered then
|
|
cur_col = GetColor("column_sheet_tab_hover")
|
|
else
|
|
cur_col = GetColor("column_sheet_tab")
|
|
end
|
|
|
|
s:RoundedBox("Backgrounds", 0, 0, 0, w, h, cur_col)
|
|
end
|
|
|
|
local tab_OnRemove = function(s)
|
|
table.RemoveByValue(s.parent.tabs, s)
|
|
end
|
|
|
|
function Panel:AddSheet(mat, load_func)
|
|
local tab = self.tab_scroller:Add(NAME .. ".Button")
|
|
tab:Dock(TOP)
|
|
tab:SetText("")
|
|
tab:SetTall(self.tabs_wide)
|
|
|
|
tab.On = TDLib_Classes.On
|
|
|
|
tab.DoClick = tab_DoClick
|
|
tab.Paint = tab_Paint
|
|
tab:On("OnRemove", tab_OnRemove)
|
|
|
|
tab.parent = self
|
|
tab.load_func = load_func
|
|
|
|
local img = tab:Add(NAME .. ".Image")
|
|
img:Dock(FILL)
|
|
img:SetImage(mat)
|
|
img:SetMinus(SUI.Scale(20))
|
|
|
|
tab.img = img
|
|
|
|
self.tab_scroller:AddItem(tab)
|
|
|
|
if not self:GetActiveTab() then
|
|
self:SetActiveTab(tab)
|
|
end
|
|
|
|
table.insert(self.tabs, tab)
|
|
|
|
return tab
|
|
end
|
|
|
|
function Panel:GetActiveTab()
|
|
return self.active_tab
|
|
end
|
|
|
|
function Panel:SetActiveTab(new_tab)
|
|
if new_tab == self.active_tab then return end
|
|
|
|
if not IsValid(new_tab.panel) then
|
|
local panel = new_tab.load_func(self)
|
|
panel:SetParent(self)
|
|
panel:SetVisible(false)
|
|
panel:SetAlpha(0)
|
|
|
|
panel.tab = new_tab
|
|
new_tab.panel = panel
|
|
end
|
|
|
|
local old_active_tab = self.active_tab
|
|
local delay = 0
|
|
if old_active_tab and IsValid(old_active_tab.panel) then
|
|
old_active_tab.active = false
|
|
delay = 0.2
|
|
old_active_tab.panel:AlphaTo(0, delay, 0, function(_, p)
|
|
if p:IsValid() then
|
|
p:SetVisible(false)
|
|
end
|
|
end)
|
|
end
|
|
|
|
new_tab.active = true
|
|
new_tab.panel:SetVisible(true)
|
|
new_tab.panel:AlphaTo(255, 0.2, delay)
|
|
self.active_tab = new_tab
|
|
end
|
|
|
|
sui.register("ColumnSheet", Panel, "EditablePanel") |