padding, right click menu at top of frame, reset metrics command, basic tab complete support

This commit is contained in:
Cynthia Foxwell 2024-07-01 14:38:49 -06:00
parent 41b976c973
commit 74bba46c30
1 changed files with 71 additions and 6 deletions

View File

@ -137,13 +137,12 @@ local function CreateChatbox()
frame:SetDeleteOnClose(false) frame:SetDeleteOnClose(false)
frame:SetSizable(true) frame:SetSizable(true)
frame:SetScreenLock(true) frame:SetScreenLock(true)
frame:DockPadding(8, 8, 8, 8) frame:DockPadding(16, 20, 16, 12)
local dx, dy, dw, dh = GetDefaultBounds() local dx, dy, dw, dh = GetDefaultBounds()
-- TODO: make this configurable frame:SetMinWidth(math.min(256, dw))
frame:SetMinWidth(dw) frame:SetMinHeight(math.min(128, dh))
frame:SetMinHeight(dh)
local x = frame:GetCookie("pos_x", dx) local x = frame:GetCookie("pos_x", dx)
local y = frame:GetCookie("pos_y", dy) local y = frame:GetCookie("pos_y", dy)
@ -202,6 +201,53 @@ local function CreateChatbox()
end end
end end
function frame:OnMousePressed(button)
local screenX, screenY = self:LocalToScreen( 0, 0 )
if self.m_bSizable and gui.MouseX() > (screenX + self:GetWide() - 20) and gui.MouseY() > (screenY + self:GetTall() - 20) then
self.Sizing = {gui.MouseX() - self:GetWide(), gui.MouseY() - self:GetTall()}
self:MouseCapture(true)
return
end
if self:GetDraggable() and gui.MouseY() < (screenY + 16) then
if button == MOUSE_LEFT then
self.Dragging = {gui.MouseX() - self.x, gui.MouseY() - self.y}
self:MouseCapture(true)
elseif button == MOUSE_RIGHT then
local menu = DermaMenu()
local settings = menu:AddOption("Settings", function() end)
settings:SetIcon("icon16/cog.png")
local metrics = menu:AddOption("Reset Metrics", function()
RunConsoleCommand("cbox_chatbox_reset_metrics")
if IsValid(cbox.chatbox.panels.input) then
cbox.chatbox.panels.input:RequestFocus()
end
end)
metrics:SetIcon("icon16/arrow_out.png")
menu:AddSpacer()
local reload = menu:AddOption("Reload Chatbox", function()
RunConsoleCommand((input.IsKeyDown(KEY_LSHIFT) or input.IsKeyDown(KEY_RSHIFT)) and "_cbox_chatbox_fullreload" or "cbox_chatbox_reload")
end)
reload:SetIcon("icon16/arrow_refresh.png")
menu:AddSpacer()
local close = menu:AddOption("Close", function()
cbox.chatbox.Close()
end)
close:SetIcon("icon16/cross.png")
menu:Open()
end
return
end
end
function frame:Paint(w, h) function frame:Paint(w, h)
local alpha = CHATBOX_ALPHA:GetInt() local alpha = CHATBOX_ALPHA:GetInt()
@ -380,9 +426,13 @@ local function CreateChatbox()
if #self:GetText() == 0 then if #self:GetText() == 0 then
mode_switch:NextMode() mode_switch:NextMode()
else else
-- TODO: autocomplete local tab_text = hook.Run("OnChatTab", self:GetText())
self:SetText(tab_text)
end end
timer.Simple(0, function() self:RequestFocus() end) timer.Simple(0, function()
self:RequestFocus()
self:SetCaretPos(self:GetText():len())
end)
else else
hook.Run("ChatTextChanged", self:GetText()) hook.Run("ChatTextChanged", self:GetText())
end end
@ -529,6 +579,21 @@ concommand.Add("cbox_chatbox_reload", function()
CreateChatbox() CreateChatbox()
end, nil, "Reloads the chatbox") end, nil, "Reloads the chatbox")
concommand.Add("cbox_chatbox_reset_metrics", function()
if IsValid(cbox.chatbox.panels.frame) then
local frame = cbox.chatbox.panels.frame
local dx, dy, dw, dh = GetDefaultBounds()
frame:SetCookie("pos_x", dx)
frame:SetCookie("pos_y", dy)
frame:SetCookie("width", dw)
frame:SetCookie("height", dh)
frame:SetPos(dx, dy)
frame:SetSize(dw, dh)
end
end, nil, "Resets the metrics (size and position) of the chatbox")
concommand.Add("_cbox_chatbox_fullreload", function() concommand.Add("_cbox_chatbox_fullreload", function()
if IsValid(cbox.chatbox.panels.frame) then if IsValid(cbox.chatbox.panels.frame) then
cbox.chatbox.panels.frame:Remove() cbox.chatbox.panels.frame:Remove()