You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.8 KiB
65 lines
2.8 KiB
local _, T = ...
|
|
local XU, type = T.exUI, type
|
|
local assert, getWidgetData, newWidgetData, _setWidgetData, AddObjectMethods, _CallObjectScript = XU:GetImpl()
|
|
|
|
local LineInput, LineInputData = {}, {}, {}
|
|
local LineInputProps = {
|
|
api=LineInput,
|
|
style='common',
|
|
tipL=0, tipR=0, tipT=0, tipB = 0,
|
|
}
|
|
AddObjectMethods({"LineInput"}, LineInputProps)
|
|
|
|
function LineInput:SetStyle(style)
|
|
local d = assert(getWidgetData(self, LineInputData), 'invalid object type')
|
|
assert(style == nil or type(style) == 'string', 'Syntax: LineInput:SetStyle("style")')
|
|
local common, l, r, m = style == "common", d.l, d.r, d.m
|
|
l:SetSize(common and 8 or 32, common and 20 or 32)
|
|
l:SetPoint("LEFT", common and -5 or -10, 0)
|
|
l:SetTexture(common and "Interface\\Common\\Common-Input-Border" or "Interface\\ChatFrame\\UI-ChatInputBorder-Left2")
|
|
r:SetSize(common and 8 or 32, common and 20 or 32)
|
|
r:SetPoint("RIGHT", common and 0 or 10, 0)
|
|
r:SetTexture(common and "Interface\\Common\\Common-Input-Border" or "Interface\\ChatFrame\\UI-ChatInputBorder-Right2")
|
|
m:SetHeight(common and 20 or 32)
|
|
m:SetPoint("LEFT", l, "RIGHT")
|
|
m:SetPoint("RIGHT", r, "LEFT")
|
|
m:SetTexture(common and "Interface\\Common\\Common-Input-Border" or "Interface\\ChatFrame\\UI-ChatInputBorder-Mid2", "MIRROR")
|
|
if common then
|
|
l:SetTexCoord(0,1/16, 0,5/8)
|
|
r:SetTexCoord(15/16,1, 0,5/8)
|
|
m:SetTexCoord(1/16,15/16, 0,5/8)
|
|
else
|
|
l:SetTexCoord(0,1, 0,1)
|
|
r:SetTexCoord(0,1, 0,1)
|
|
m:SetTexCoord(0,1, 0,1)
|
|
end
|
|
m:SetHorizTile(not common)
|
|
d.style = style
|
|
LineInput.SetTextInsets(self, d.tipL, d.tipR, d.tipT, d.tipB)
|
|
end
|
|
function LineInput:SetTextInsets(left, right, top, bottom)
|
|
local d = assert(getWidgetData(self, LineInputData), 'invalid object type')
|
|
left, right, top, bottom = tonumber(left or 0), tonumber(right or 0), tonumber(top or 0), tonumber(bottom or 0)
|
|
assert(type(left) == 'number' and type(right) == 'number' and type(top) == 'number' and type(bottom) == 'number', 'Syntax: LineInput:SetTextInsets(left, right, top, bottom)')
|
|
d.tipL, d.tipR, d.tipT, d.tipB = left, right, top, bottom
|
|
local common = d.style == 'common'
|
|
d.proto.super.SetTextInsets(self, left + (common and 0 or 1), right, top, bottom)
|
|
end
|
|
function LineInput:GetTextInsets()
|
|
local d = assert(getWidgetData(self, LineInputData), 'invalid object type')
|
|
return d.tipL, d.tipR, d.tipT, d.tipB
|
|
end
|
|
|
|
local function CreateLineInput(name, parent, outerTemplate, id)
|
|
local input, d = CreateFrame("EditBox", name, parent, outerTemplate, id)
|
|
d = newWidgetData(input, LineInputData, LineInputProps)
|
|
input:SetAutoFocus(nil)
|
|
input:SetSize(150, 20)
|
|
input:SetFontObject(ChatFontNormal)
|
|
input:SetScript("OnEscapePressed", input.ClearFocus)
|
|
d.l, d.m, d.r = input:CreateTexture(nil, "BACKGROUND"), input:CreateTexture(nil, "BACKGROUND"), input:CreateTexture(nil, "BACKGROUND")
|
|
LineInput.SetStyle(input, "common")
|
|
return input
|
|
end
|
|
|
|
XU:RegisterFactory("LineInput", CreateLineInput)
|