72 lines
2.5 KiB
Lua
72 lines
2.5 KiB
Lua
PTGuiMultiLineEditBox = PTGuiComponent:Extend("multi_line_editbox")
|
|
PTGuiMultiLineEditBox:Import(true, "SetText", "SetMultiLine", "SetAutoFocus", "SetFocus", "ClearFocus", "HighlightText")
|
|
PTGuiMultiLineEditBox:Import(false, "GetText", "IsMultiLine", "IsAutoFocus")
|
|
PTGuiMultiLineEditBox:ImportComponent("scroll_frame", true, "Show", "Hide", "ClearAllPoints")
|
|
|
|
function PTGuiMultiLineEditBox:New()
|
|
local obj = setmetatable({}, self)
|
|
obj:SetHandle(CreateFrame("Editbox", self:GenerateName(), nil))
|
|
obj:GetHandle():SetFontObject(ChatFontNormal)
|
|
obj:SetAutoFocus(false) -- Who actually wants this on by default??
|
|
obj:SetMultiLine(true)
|
|
local scrollFrame = PTGuiScrollFrame:New(obj)
|
|
obj:GetHandle():SetPoint("TOPLEFT", 0, 0)
|
|
obj:AddComponent("scroll_frame", scrollFrame)
|
|
obj:SetPrimary()
|
|
obj:SetScript("OnTextChanged", function()
|
|
-- Stolen from SuperMacro
|
|
local scrollBar = getglobal(this:GetParent():GetName().."ScrollBar")
|
|
this:GetParent():UpdateScrollChildRect()
|
|
|
|
local _, max = scrollBar:GetMinMaxValues()
|
|
scrollBar.prevMaxValue = scrollBar.prevMaxValue or max
|
|
|
|
if math.abs(scrollBar.prevMaxValue - scrollBar:GetValue()) <= 1 then
|
|
-- if scroll is down and add new line then move scroll
|
|
scrollBar:SetValue(max);
|
|
end
|
|
if max ~= scrollBar.prevMaxValue then
|
|
-- save max value
|
|
scrollBar.prevMaxValue = max
|
|
end
|
|
end, true)
|
|
obj:SetScript("OnEscapePressed", function()
|
|
this:ClearFocus()
|
|
end, true)
|
|
return obj
|
|
end
|
|
|
|
function PTGuiMultiLineEditBox:OnDispose()
|
|
self.super.OnDispose(self)
|
|
|
|
self:SetText("")
|
|
self:SetAutoFocus(false)
|
|
end
|
|
|
|
function PTGuiMultiLineEditBox:GetScrollFrame()
|
|
return self:GetComponent("scroll_frame")
|
|
end
|
|
|
|
function PTGuiMultiLineEditBox:SetParent(obj)
|
|
self:GetScrollFrame():SetParent(obj)
|
|
end
|
|
|
|
function PTGuiMultiLineEditBox:SetWidth(width)
|
|
self:GetScrollFrame():GetHandle():SetWidth(width)
|
|
return self
|
|
end
|
|
|
|
function PTGuiMultiLineEditBox:SetHeight(height)
|
|
self:GetScrollFrame():GetHandle():SetHeight(height)
|
|
return self
|
|
end
|
|
|
|
function PTGuiMultiLineEditBox:SetPoint(point, relativeFrame, relativePoint, xOffset, yOffset)
|
|
if type(relativeFrame) == "table" and relativeFrame.IsPuppeteerGui then
|
|
relativeFrame = relativeFrame:GetAnchor()
|
|
end
|
|
self:GetScrollFrame():SetPoint(point, relativeFrame, relativePoint, xOffset, yOffset)
|
|
return self
|
|
end
|
|
|
|
PTGuiLib.RegisterComponent(PTGuiMultiLineEditBox) |