dobrograd-13-06-2022/garrysmod/addons/util-other/lua/cmenu/items/sticknote.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

89 lines
2.3 KiB
Lua

octolib.vars.init('dbg.sticknotes', {})
octogui.cmenu.stickNotes = octogui.cmenu.stickNotes or {}
local saveStickNotes = octolib.func.debounce(function()
local newData = {}
for uid, pnl in pairs(octogui.cmenu.stickNotes) do
if IsValid(pnl) then
newData[uid] = {
x = pnl:GetX(),
y = pnl:GetY(),
w = pnl:GetWide(),
h = pnl:GetTall(),
text = pnl.text:GetValue(),
}
else octogui.cmenu.stickNotes[uid] = nil end
end
octolib.vars.set('dbg.sticknotes', newData)
end, 0.5)
local function createSticknote(uid, x, y, w, h, text)
uid = uid or octolib.string.uuid():sub(1, 8)
if IsValid(octogui.cmenu.stickNotes[uid]) then
octogui.cmenu.stickNotes[uid]:Remove()
end
local f = vgui.Create 'DFrame'
f:DockPadding(4, 15, 4, 4)
f:SetKeyboardInputEnabled(false)
f:SetMouseInputEnabled(false)
f:MakePopup()
f:SetSize(w or 200, h or 200)
f:SetSizable(true)
f:SetTitle('')
function f:OnRemove()
octogui.cmenu.stickNotes[uid] = nil
saveStickNotes()
end
if x then f:SetX(x)
else f:AlignLeft(20) end
if y then f:SetY(y)
else f:CenterVertical() end
f.btnMinim:SetVisible(false)
f.btnMaxim:SetVisible(false)
f.Paint = octolib.func.zero
octogui.cmenu.stickNotes[uid] = f
f.OnSizeChanged = saveStickNotes
f.oldX, f.oldY = f:GetPos()
f.oldThink = f.Think
function f:Think()
self:oldThink()
if f.oldX ~= f:GetX() or f.oldY ~= f:GetY() then
f.oldX, f.oldY = f:GetPos()
saveStickNotes()
end
end
local e = f:Add 'DTextEntry'
e:Dock(FILL)
e:SetMultiline(true)
e:SetDrawLanguageID(false)
e:SetText(text or L.sticknote_hint)
f.text = e
e.PaintOffset = 4
function e:Think()
if vgui.CursorVisible() then
local cx, cy = gui.MousePos()
local wx, wy, ww, wh = f:GetBounds()
local show = (cx >= wx and cx <= wx + ww and cy >= wy and cy <= wy + wh)
if f:IsKeyboardInputEnabled() ~= show then
f:SetKeyboardInputEnabled(show)
f:SetMouseInputEnabled(show)
end
end
end
e.OnChange = saveStickNotes
end
hook.Add('Think', 'dbg.sticknotes', function()
hook.Remove('Think', 'dbg.sticknotes')
for uid, note in pairs(octolib.vars.get('dbg.sticknotes')) do
createSticknote(uid, note.x, note.y, note.w, note.h, note.text)
end
end)
octogui.cmenu.registerItem('other', 'sticknote', {
text = L.sticknote_create,
icon = octolib.icons.silk16('note_add'),
action = function() createSticknote() end,
})