padding, right click menu at top of frame, reset metrics command, basic tab complete support
This commit is contained in:
parent
41b976c973
commit
74bba46c30
1 changed files with 71 additions and 6 deletions
|
@ -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()
|
||||||
|
|
Loading…
Reference in a new issue