Multientry (#7)

* from retail

* from retail

* from retail

* from retail

* from retail

* from retail

* remove new threat functions as they are not well implemented for now
This commit is contained in:
NoM0Re
2024-11-27 12:09:02 +01:00
committed by GitHub
parent eb8221cf89
commit 13f734038d
67 changed files with 3493 additions and 969 deletions
@@ -0,0 +1,135 @@
if not WeakAuras.IsCorrectVersion() then return end
local Type, Version = "WeakAurasAnchorButtons", 2
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
local directions = { "TOPLEFT", "TOP", "TOPRIGHT", "LEFT", "CENTER", "RIGHT", "BOTTOMLEFT", "BOTTOM", "BOTTOMRIGHT" }
local buttonSize = 10
local frameWidth = 100
local frameHeight = 50
local titleHeight = 15
local methods = {
["OnAcquire"] = function(self)
self:SetWidth(frameWidth + buttonSize)
self:SetHeight(frameHeight + buttonSize + titleHeight + 2)
self:SetDisabled(false)
end,
["SetValue"] = function(self, text)
if not tContains(directions, text) then return end
for direction, button in pairs(self.buttons) do
if direction == text then
button.tex:SetVertexColor(0.9, 0.9, 0, 1)
else
button.tex:SetVertexColor(0.3, 0.3, 0.3, 1)
end
button:SetNormalTexture(button.tex)
end
self.value = text
end,
["GetValue"] = function(self)
return self.value
end,
["SetLabel"] = function(self, text)
if text and text ~= "" then
self.label:SetText(text);
self.label:Show()
else
self.label:SetText("")
self.label:Hide()
end
end,
["SetList"] = function() end,
["SetDisabled"] = function(self, disabled)
self.disabled = disabled
if disabled then
self.label:SetTextColor(0.5,0.5,0.5)
for _, button in pairs(self.buttons) do
button:EnableMouse(false)
end
else
self.label:SetTextColor(1,.82,0)
for _, button in pairs(self.buttons) do
button:EnableMouse(true)
end
end
end,
}
local function buttonClicked(self)
AceGUI:ClearFocus()
local frame = self:GetParent()
local widget = frame.obj
widget:SetValue(self.value)
widget:Fire("OnValueChanged", self.value)
end
local function Constructor()
local name = "WeakAurasAnchorButtons" .. AceGUI:GetNextWidgetNum(Type)
local frame = CreateFrame("Frame", name, UIParent)
frame:SetSize(frameWidth, frameHeight)
frame:SetFrameStrata("FULLSCREEN_DIALOG")
local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall");
label:SetHeight(titleHeight);
label:SetJustifyH("CENTER");
label:SetPoint("TOP", frame, "TOP");
local background = CreateFrame("Frame", nil, frame)
background:SetSize(frameWidth, frameHeight)
background:SetPoint("TOP", frame, "TOP", 0, -(titleHeight + 4))
background:SetBackdrop({
bgFile = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\Square_FullWhite.tga",
edgeFile = "Interface\\AddOns\\WeakAuras\\Media\\Textures\\Square_FullWhite.tga",
tile = true,
tileEdge = true,
--tileSize = 8,
edgeSize = 2
--insets = { left = 1, right = 1, top = 1, bottom = 1 },
})
background:SetBackdropColor(0.2,0.2,0.2,0.5)
background:SetBackdropBorderColor(1,1,1,0.6)
local buttons = {}
for _, direction in ipairs(directions) do
local button = CreateFrame("Button", nil, frame)
button:SetSize(buttonSize, buttonSize)
button:SetPoint(
"CENTER",
background,
direction
)
local buttonTex = button:CreateTexture()
buttonTex:SetAllPoints()
buttonTex:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\Square_FullWhite.tga")
buttonTex:SetVertexColor(0.3, 0.3, 0.3, 1)
button:SetNormalTexture(buttonTex)
button.tex = buttonTex
button.value = direction
button:SetScript("OnClick", buttonClicked)
buttons[direction] = button
end
--- @type table<string, any>
local widget = {
frame = frame,
type = Type,
buttons = buttons,
label = label
}
for method, func in pairs(methods) do
widget[method] = func
end
return AceGUI:RegisterAsWidget(widget);
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)
@@ -0,0 +1,43 @@
--[[-----------------------------------------------------------------------------
Input Widget that allows to show an alternative text when it does not have focus
-------------------------------------------------------------------------------]]
if not WeakAuras.IsCorrectVersion() then return end
local Type, Version = "WeakAurasInputFocus", 1
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
local OnEditFocusGained = function(self)
local textWithFocus = self.obj.textWithFocus
if textWithFocus and self:GetText() == self.obj.textWithoutFocus then
self:SetText(textWithFocus)
end
AceGUI:SetFocus(self.obj)
end
local function Constructor()
local button = AceGUI:Create("EditBox")
button.type = Type
button.editbox:SetScript("OnEditFocusGained", OnEditFocusGained)
local oldSetText = button.SetText
button.SetText = function(self, text)
text = text or ""
local pos = string.find(text, "\0", nil, true)
if pos then
self.textWithoutFocus = text:sub(1, pos -1)
self.textWithFocus = text:sub(pos + 1)
oldSetText(self, self.textWithoutFocus)
else
self.textWithFocus = nil
self.textWithoutFocus = nil
oldSetText(self, text)
end
end
return button
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)
@@ -0,0 +1,379 @@
if not WeakAuras.IsCorrectVersion() then return end
-- based on the AceGUI widget, overwrites the enter handling
local Type, Version = "WeakAuras-MultiLineEditBoxWithEnter", 1
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
-- Lua APIs
local pairs = pairs
-- WoW APIs
local GetCursorInfo, GetSpellInfo, ClearCursor = GetCursorInfo, GetSpellInfo, ClearCursor
local CreateFrame, UIParent = CreateFrame, UIParent
local _G = _G
--[[-----------------------------------------------------------------------------
Support functions
-------------------------------------------------------------------------------]]
if not AceGUIWeakAurasMultiLineEditBoxWithEnterInsertLink then
-- upgradeable hook
hooksecurefunc("ChatEdit_InsertLink", function(...) return _G.AceGUIWeakAurasMultiLineEditBoxWithEnterInsertLink(...) end)
end
function _G.AceGUIWeakAurasMultiLineEditBoxWithEnterInsertLink(text)
for i = 1, AceGUI:GetWidgetCount(Type) do
local editbox = _G[("MultiLineEditBox%uEdit"):format(i)]
if editbox and editbox:IsVisible() and editbox:HasFocus() then
editbox:Insert(text)
return true
end
end
end
local function Layout(self)
self:SetHeight(self.numlines * 14 + (self.disablebutton and 19 or 41) + self.labelHeight)
if self.labelHeight == 0 then
self.scrollBar:SetPoint("TOP", self.frame, "TOP", 0, -23)
else
self.scrollBar:SetPoint("TOP", self.label, "BOTTOM", 0, -19)
end
if self.disablebutton then
self.scrollBar:SetPoint("BOTTOM", self.frame, "BOTTOM", 0, 21)
self.scrollBG:SetPoint("BOTTOMLEFT", 0, 4)
else
self.scrollBar:SetPoint("BOTTOM", self.button, "TOP", 0, 18)
self.scrollBG:SetPoint("BOTTOMLEFT", self.button, "TOPLEFT")
end
end
--[[-----------------------------------------------------------------------------
Scripts
-------------------------------------------------------------------------------]]
local function OnEnterPressed(self) -- EditBox
self:HighlightText(0, 0)
self.obj:Fire("OnEnterPressed", self:GetText())
end
local function OnClick(self) -- Button
self = self.obj
self.editBox:ClearFocus()
if not self:Fire("OnEnterPressed", self.editBox:GetText()) then
self.button:Disable()
end
end
local function OnCursorChanged(self, _, y, _, cursorHeight) -- EditBox
self, y = self.obj.scrollFrame, -y
local offset = self:GetVerticalScroll()
if y < offset then
self:SetVerticalScroll(y)
else
y = y + cursorHeight - self:GetHeight()
if y > offset then
self:SetVerticalScroll(y)
end
end
end
local function OnEditFocusLost(self) -- EditBox
self:HighlightText(0, 0)
self.obj:Fire("OnEditFocusLost")
end
local function OnEnter(self) -- EditBox / ScrollFrame
self = self.obj
if not self.entered then
self.entered = true
self:Fire("OnEnter")
end
end
local function OnLeave(self) -- EditBox / ScrollFrame
self = self.obj
if self.entered then
self.entered = nil
self:Fire("OnLeave")
end
end
local function OnMouseUp(self) -- ScrollFrame
self = self.obj.editBox
self:SetFocus()
self:SetCursorPosition(self:GetNumLetters())
end
local function OnReceiveDrag(self) -- EditBox / ScrollFrame
local type, id, info = GetCursorInfo()
if type == "spell" then
info = GetSpellInfo(id, info)
elseif type ~= "item" then
return
end
ClearCursor()
self = self.obj
local editBox = self.editBox
if not editBox:HasFocus() then
editBox:SetFocus()
editBox:SetCursorPosition(editBox:GetNumLetters())
end
editBox:Insert(info)
self.button:Enable()
end
local function OnSizeChanged(self, width, height) -- ScrollFrame
self.obj.editBox:SetWidth(width)
end
local function OnTextChanged(self, userInput) -- EditBox
if userInput then
self = self.obj
self:Fire("OnTextChanged", self.editBox:GetText())
self.button:Enable()
end
end
local function OnTextSet(self) -- EditBox
self:HighlightText(0, 0)
self:SetCursorPosition(self:GetNumLetters())
self:SetCursorPosition(0)
self.obj.button:Disable()
end
local function OnVerticalScroll(self, offset) -- ScrollFrame
local editBox = self.obj.editBox
editBox:SetHitRectInsets(0, 0, offset, editBox:GetHeight() - offset - self:GetHeight())
end
local function OnScrollRangeChanged(self, xrange, yrange)
if yrange == 0 then
self.obj.editBox:SetHitRectInsets(0, 0, 0, 0)
else
OnVerticalScroll(self, self:GetVerticalScroll())
end
end
local function OnShowFocus(frame)
frame.obj.editBox:SetFocus()
frame:SetScript("OnShow", nil)
end
local function OnEditFocusGained(frame)
AceGUI:SetFocus(frame.obj)
frame.obj:Fire("OnEditFocusGained")
end
--[[-----------------------------------------------------------------------------
Methods
-------------------------------------------------------------------------------]]
local methods = {
["OnAcquire"] = function(self)
self.editBox:SetText("")
self:SetDisabled(false)
self:SetWidth(200)
self:DisableButton(false)
self:SetNumLines()
self.entered = nil
self:SetMaxLetters(0)
end,
["OnRelease"] = function(self)
self:ClearFocus()
end,
["SetDisabled"] = function(self, disabled)
local editBox = self.editBox
if disabled then
editBox:ClearFocus()
editBox:EnableMouse(false)
editBox:SetTextColor(0.5, 0.5, 0.5)
self.label:SetTextColor(0.5, 0.5, 0.5)
self.scrollFrame:EnableMouse(false)
self.button:Disable()
else
editBox:EnableMouse(true)
editBox:SetTextColor(1, 1, 1)
self.label:SetTextColor(1, 0.82, 0)
self.scrollFrame:EnableMouse(true)
end
end,
["SetLabel"] = function(self, text)
if text and text ~= "" then
self.label:SetText(text)
if self.labelHeight ~= 10 then
self.labelHeight = 10
self.label:Show()
end
elseif self.labelHeight ~= 0 then
self.labelHeight = 0
self.label:Hide()
end
Layout(self)
end,
["SetNumLines"] = function(self, value)
if not value or value < 4 then
value = 4
end
self.numlines = value
Layout(self)
end,
["SetText"] = function(self, text)
self.editBox:SetText(text)
end,
["GetText"] = function(self)
return self.editBox:GetText()
end,
["SetMaxLetters"] = function (self, num)
self.editBox:SetMaxLetters(num or 0)
end,
["DisableButton"] = function(self, disabled)
self.disablebutton = disabled
if disabled then
self.button:Hide()
else
self.button:Show()
end
Layout(self)
end,
["ClearFocus"] = function(self)
self.editBox:ClearFocus()
self.frame:SetScript("OnShow", nil)
end,
["SetFocus"] = function(self)
self.editBox:SetFocus()
if not self.frame:IsShown() then
self.frame:SetScript("OnShow", OnShowFocus)
end
end,
["HighlightText"] = function(self, from, to)
self.editBox:HighlightText(from, to)
end,
["GetCursorPosition"] = function(self)
return self.editBox:GetCursorPosition()
end,
["SetCursorPosition"] = function(self, ...)
return self.editBox:SetCursorPosition(...)
end,
}
--[[-----------------------------------------------------------------------------
Constructor
-------------------------------------------------------------------------------]]
local backdrop = {
bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]], edgeSize = 16,
insets = { left = 4, right = 3, top = 4, bottom = 3 }
}
local function Constructor()
local frame = CreateFrame("Frame", nil, UIParent)
frame:Hide()
local widgetNum = AceGUI:GetNextWidgetNum(Type)
local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
label:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, -4)
label:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, -4)
label:SetJustifyH("LEFT")
label:SetText(ACCEPT)
label:SetHeight(10)
local button = CreateFrame("Button", ("%s%dButton"):format(Type, widgetNum), frame, "UIPanelButtonTemplate")
button:SetPoint("BOTTOMLEFT", 0, 4)
button:SetHeight(22)
button:SetWidth(label:GetStringWidth() + 24)
button:SetText(ACCEPT)
button:SetScript("OnClick", OnClick)
button:Disable()
local text = button:GetFontString()
text:ClearAllPoints()
text:SetPoint("TOPLEFT", button, "TOPLEFT", 5, -5)
text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1)
text:SetJustifyV("MIDDLE")
local scrollBG = CreateFrame("Frame", nil, frame)
scrollBG:SetBackdrop(backdrop)
scrollBG:SetBackdropColor(0, 0, 0)
scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4)
local scrollFrame = CreateFrame("ScrollFrame", ("%s%dScrollFrame"):format(Type, widgetNum), frame, "UIPanelScrollFrameTemplate")
local scrollBar = _G[scrollFrame:GetName() .. "ScrollBar"]
scrollBar:ClearAllPoints()
scrollBar:SetPoint("TOP", label, "BOTTOM", 0, -19)
scrollBar:SetPoint("BOTTOM", button, "TOP", 0, 18)
scrollBar:SetPoint("RIGHT", frame, "RIGHT")
scrollBG:SetPoint("TOPRIGHT", scrollBar, "TOPLEFT", 0, 19)
scrollBG:SetPoint("BOTTOMLEFT", button, "TOPLEFT")
scrollFrame:SetPoint("TOPLEFT", scrollBG, "TOPLEFT", 5, -6)
scrollFrame:SetPoint("BOTTOMRIGHT", scrollBG, "BOTTOMRIGHT", -4, 4)
scrollFrame:SetScript("OnEnter", OnEnter)
scrollFrame:SetScript("OnLeave", OnLeave)
scrollFrame:SetScript("OnMouseUp", OnMouseUp)
scrollFrame:SetScript("OnReceiveDrag", OnReceiveDrag)
scrollFrame:SetScript("OnSizeChanged", OnSizeChanged)
scrollFrame:HookScript("OnVerticalScroll", OnVerticalScroll)
scrollFrame:HookScript("OnScrollRangeChanged", OnScrollRangeChanged)
local editBox = CreateFrame("EditBox", ("%s%dEdit"):format(Type, widgetNum), scrollFrame)
editBox:SetAllPoints()
editBox:SetFontObject(ChatFontNormal)
editBox:SetMultiLine(true)
editBox:EnableMouse(true)
editBox:SetAutoFocus(false)
editBox:SetCountInvisibleLetters(false)
editBox:SetScript("OnCursorChanged", OnCursorChanged)
editBox:SetScript("OnEditFocusLost", OnEditFocusLost)
editBox:SetScript("OnEnter", OnEnter)
editBox:SetScript("OnEscapePressed", editBox.ClearFocus)
editBox:SetScript("OnLeave", OnLeave)
editBox:SetScript("OnMouseDown", OnReceiveDrag)
editBox:SetScript("OnReceiveDrag", OnReceiveDrag)
editBox:SetScript("OnTextChanged", OnTextChanged)
editBox:SetScript("OnTextSet", OnTextSet)
editBox:SetScript("OnEditFocusGained", OnEditFocusGained)
editBox:SetScript("OnEnterPressed", OnEnterPressed)
scrollFrame:SetScrollChild(editBox)
local widget = {
button = button,
editBox = editBox,
frame = frame,
label = label,
labelHeight = 10,
numlines = 4,
scrollBar = scrollBar,
scrollBG = scrollBG,
scrollFrame = scrollFrame,
type = Type
}
for method, func in pairs(methods) do
widget[method] = func
end
button.obj, editBox.obj, scrollFrame.obj = widget, widget, widget
return AceGUI:RegisterAsWidget(widget)
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)
@@ -1,42 +0,0 @@
if not WeakAuras.IsCorrectVersion() then return end
local Type, Version = "WeakAurasSortedDropdown", 1
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
local function Constructor()
local DropDownConstructor = AceGUI.WidgetRegistry["Dropdown"];
if (not DropDownConstructor) then
return nil;
end
local widget = DropDownConstructor();
if (not widget) then
return nil;
end
local oldSetList = widget.SetList
widget.SetList = function(self, list, _, itemType)
local orderTable = {};
for k, v in pairs(list) do
tinsert(orderTable, { key = k, value = v });
end
local order = {};
table.sort(orderTable, function(a, b)
return a.value < b.value;
end);
for i, item in ipairs(orderTable) do
order[i] = item.key;
end
oldSetList(self, list, order, itemType)
end
widget.type = Type;
return widget;
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)
@@ -0,0 +1,374 @@
--[[-----------------------------------------------------------------------------
Spin Box Widget
-------------------------------------------------------------------------------]]
local Type, Version = "WeakAurasSpinBox", 5
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then
return
end
-- Lua APIs
local math_min, math_max, floor = math.min, math.max, math.floor
local tonumber, pairs = tonumber, pairs
-- WoW APIs
local PlaySound = PlaySound
local CreateFrame, UIParent = CreateFrame, UIParent
local progressLeftOffset = -3
local progressExtraWidth = -0
local progressTopOffset = -2
local progressBottomOffset = 2
--[[-----------------------------------------------------------------------------
Support functions
-------------------------------------------------------------------------------]]
local function UpdateText(self)
local value = self:GetValue() or 0
if self.ispercent then
self.editbox:SetText(("%s%%"):format(floor(value * 1000 + 0.5) / 10))
else
self.editbox:SetText(floor(value * 100 + 0.5) / 100)
end
end
local function UpdateButtons(self)
local value = self:GetValue() or 0
if value > self.min then
self.leftbutton:Enable()
else
self.leftbutton:Disable()
end
if value < self.max then
self.rightbutton:Enable()
else
self.rightbutton:Disable()
end
end
local function UpdateProgressBar(self)
local value = self:GetValue() or 0
local p = 0
if self.min and self.max then
if self.min < self.max then
p = (value - self.min) / (self.max - self.min)
end
end
p = Clamp(p, 0, 1)
local w = p * (self.frame:GetWidth() - 45 + progressExtraWidth)
self.progressBar:SetWidth(max(w, 1))
self.progressBar:SetTexCoord(0, p , 0, 1)
end
local function UpdateHandleColor(self)
if self.progressBarHandle.mouseDown then
self.progressBarHandleTexture:SetVertexColor(0.6, 0.6, 0, 1)
--self.progressBarHandleTexture:SetColorTexture(0.6, 0.6, 0, 1)
elseif MouseIsOver(self.progressBarHandle) then
self.progressBarHandleTexture:SetVertexColor(0.8, 0.8, 0, 1)
--self.progressBarHandleTexture:SetColorTexture(0.8, 0.8, 0, 1)
else
self.progressBarHandleTexture:SetVertexColor(0.4, 0.4, 0, 1)
--self.progressBarHandleTexture:SetColorTexture(0.4, 0.4, 0, 1)
end
end
local function UpdateHandleVisibility(self)
if MouseIsOver(self.frame) then
self.progressBarHandle:Show()
UpdateHandleColor(self)
else
self.progressBarHandle:Hide()
end
end
--[[-----------------------------------------------------------------------------
Scripts
-------------------------------------------------------------------------------]]
local function SpinBox_OnValueDown(frame)
local self = frame.obj
--self.editbox:SetFocus()
local value = self.value or 0
local step = self.step or 1
value = math_max(self.min, value - step)
PlaySound("igMainMenuOptionCheckBoxOn")
self:SetValue(value, true)
end
local function SpinBox_OnValueUp(frame)
local self = frame.obj
--self.editbox:SetFocus()
local value = self.value or 0
local step = self.step or 1
value = math_min(self.max, value + step)
PlaySound("igMainMenuOptionCheckBoxOn")
self:SetValue(value, true)
end
local function EditBox_OnEscapePressed(frame)
frame:ClearFocus()
end
local function EditBox_OnEnterPressed(frame)
local self = frame.obj
local value = frame:GetText()
if self.ispercent then
value = value:gsub("%%", "")
value = tonumber(value) / 100
else
value = tonumber(value)
end
if value then
PlaySound("igMainMenuOptionCheckBoxOn")
self:SetValue(value, true)
end
frame:ClearFocus()
end
local function EditBox_OnEnter(frame)
frame.onEntered = true
if not frame.obj.progressBarHandle.mouseDown then
frame.obj:Fire("OnEnter")
end
end
local function EditBox_OnLeave(frame)
if frame.onEntered then
frame.obj:Fire("OnLeave")
end
frame.onEntered = false
end
local function Frame_OnEnter(frame)
UpdateHandleVisibility(frame.obj)
end
local function ProgressBarHandle_OnUpdate(frame, elapsed)
UpdateHandleColor(frame.obj)
if not IsMouseButtonDown("LeftButton") then
if frame.mouseDown then
frame.obj:SetValue(frame.obj:GetValue(), true)
frame.mouseDown = false
end
end
if frame.mouseDown then
frame.timeElapsed = frame.timeElapsed + elapsed
if frame.timeElapsed > 0.1 then
local currentX = GetCursorPosition()
local deltaX = currentX - frame.startX
deltaX = deltaX / frame.obj.editbox:GetEffectiveScale()
local p = deltaX / (frame.obj.frame:GetWidth() - 45 + progressExtraWidth)
local delta = p * (frame.obj.max - frame.obj.min)
local step = frame.obj.step
local v = frame.originalValue + delta
v = v - v % step
v = Clamp(v, frame.obj.min, frame.obj.max)
frame.obj:SetValue(v, false)
frame.timeElapsed = 0
end
else
UpdateHandleVisibility(frame.obj)
end
end
local function ProgressBarHandle_OnMouseDown(frame, button)
if button ~= "LeftButton" then
return
end
frame.startX = GetCursorPosition()
frame.originalValue = frame.obj:GetValue()
frame.timeElapsed = 0
frame.mouseDown = true
end
--[[-----------------------------------------------------------------------------
Methods
-------------------------------------------------------------------------------]]
local methods = {
["OnAcquire"] = function(self)
self:SetWidth(200)
self:SetHeight(44)
self:SetDisabled(false)
self:SetIsPercent(nil)
self:SetSpinBoxValues(0, 100, 1)
self:SetValue(0)
self.progressOpacity = 0
end,
["OnRelease"] = function(self)
self:ClearFocus()
end,
["OnWidthSet"] = function(self, width)
UpdateProgressBar(self)
end,
["SetDisabled"] = function(self, disabled)
self.disabled = disabled
if disabled then
self.label:SetTextColor(0.5, 0.5, 0.5)
self.editbox:SetTextColor(0.5, 0.5, 0.5)
self.editbox:EnableMouse(false)
self.editbox:ClearFocus()
self.leftbutton:Disable()
self.rightbutton:Disable()
else
self.label:SetTextColor(1, 0.82, 0)
self.editbox:SetTextColor(1, 1, 1)
self.editbox:EnableMouse(true)
end
end,
["SetValue"] = function(self, value, reload)
self.value = value
UpdateText(self)
UpdateButtons(self)
UpdateProgressBar(self)
-- In AceOptions the range is treated differently from other widget types
-- Whereas for other widgets OnValueChanged leads to a reload, this is done only
-- on OnMouseUp for ranges. (Probably to not reload the options while dragging)
if reload then
self:Fire("OnMouseUp", value)
else
self:Fire("OnValueChanged", value)
end
end,
["GetValue"] = function(self)
return self.value
end,
["SetLabel"] = function(self, text)
self.label:SetText(text)
end,
["SetSliderValues"] = function(self, ...)
self:SetSpinBoxValues(...)
end,
["SetSpinBoxValues"] = function(self, min, max, step)
self.min = min or 0
self.max = max or 100
self.step = step or 1
UpdateButtons(self)
UpdateProgressBar(self)
end,
["SetIsPercent"] = function(self, value)
self.ispercent = value
UpdateText(self)
end,
["ClearFocus"] = function(self)
self.editbox:ClearFocus()
end,
["SetFocus"] = function(self)
self.editbox:SetFocus()
self.progressBarHandle:Hide()
end,
}
--[[-----------------------------------------------------------------------------
Constructor
-------------------------------------------------------------------------------]]
local function Constructor()
local widgetName = ("%s%d"):format(Type, AceGUI:GetNextWidgetNum(Type)) -- Needs a name for 3.3.5 (InputBoxTemplate ($parent))
local frame = CreateFrame("Frame", widgetName, UIParent)
frame:SetScript("OnEnter", Frame_OnEnter)
local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
label:SetPoint("TOPLEFT")
label:SetPoint("TOPRIGHT")
label:SetJustifyH("LEFT")
label:SetHeight(18)
local leftbutton = CreateFrame("Button", nil, frame)
leftbutton:SetSize(16, 16)
leftbutton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxleft")
leftbutton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxlefth")
leftbutton:SetPushedTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxleftp")
leftbutton:SetDisabledTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxleftp")
leftbutton:SetScript("OnClick", SpinBox_OnValueDown)
local rightbutton = CreateFrame("Button", nil, frame)
rightbutton:SetSize(16, 16)
rightbutton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxright")
rightbutton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxrighth")
rightbutton:SetPushedTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxrightp")
rightbutton:SetDisabledTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxrightp")
rightbutton:SetScript("OnClick", SpinBox_OnValueUp)
local editbox = CreateFrame("EditBox", nil, frame, "InputBoxTemplate")
editbox:SetAutoFocus(false)
editbox:SetFontObject(ChatFontNormal)
editbox:SetHeight(19)
editbox:SetJustifyH("CENTER")
editbox:EnableMouse(true)
editbox:EnableMouseWheel(false)
editbox:SetTextInsets(0, 0, 3, 3)
editbox:SetScript("OnEnter", EditBox_OnEnter)
editbox:SetScript("OnLeave", EditBox_OnLeave)
editbox:SetScript("OnEnterPressed", EditBox_OnEnterPressed)
editbox:SetScript("OnEscapePressed", EditBox_OnEscapePressed)
editbox:SetScript("OnEditFocusGained", function(frame)
AceGUI:SetFocus(frame.obj)
UpdateHandleVisibility(frame.obj)
end)
editbox:SetScript("OnEditFocusLost", function(frame)
UpdateHandleVisibility(frame.obj)
end)
leftbutton:SetPoint("TOPLEFT", 2, -18)
rightbutton:SetPoint("TOPRIGHT", -2, -18)
editbox:SetPoint("LEFT", leftbutton, "RIGHT", 8, 0)
editbox:SetPoint("RIGHT", rightbutton, "LEFT", -2, 0)
local progressBar = editbox:CreateTexture(nil, "ARTWORK", nil)
progressBar:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\spinboxoverlay")
progressBar:SetVertexColor(0.50, 0.50, 0.50, 1)
progressBar:SetPoint("TOPLEFT", editbox, "TOPLEFT", progressLeftOffset, progressTopOffset)
progressBar:SetPoint("BOTTOMLEFT", editbox, "BOTTOMLEFT", progressLeftOffset, progressBottomOffset)
progressBar:SetWidth(0)
local progressBarHandle = CreateFrame("Frame", nil, editbox)
progressBarHandle:SetPoint("TOP", progressBar, "TOP", 0, 2)
progressBarHandle:SetPoint("BOTTOM", progressBar, "BOTTOM", 0, -2)
progressBarHandle:SetPoint("LEFT", progressBar, "RIGHT", -4, 0)
progressBarHandle:SetPoint("RIGHT", progressBar, "RIGHT", 4, 0)
progressBarHandle:EnableMouse(true)
progressBarHandle:Hide()
progressBarHandle:SetScript("OnMouseDown", ProgressBarHandle_OnMouseDown)
progressBarHandle:SetScript("OnUpdate", ProgressBarHandle_OnUpdate)
local progressBarHandleTexture = progressBarHandle:CreateTexture(nil, "ARTWORK")
progressBarHandleTexture:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\Square_White")
progressBarHandleTexture:SetVertexColor(0.8, 0.8, 0, 0.8)
progressBarHandleTexture:SetPoint("TOPLEFT", progressBarHandle, "TOPLEFT", 2, -2)
progressBarHandleTexture:SetPoint("BOTTOMRIGHT", progressBarHandle, "BOTTOMRIGHT", -2, 2)
local widget = {
label = label,
editbox = editbox,
leftbutton = leftbutton,
rightbutton = rightbutton,
progressBar = progressBar,
progressBarHandle = progressBarHandle,
progressBarHandleTexture = progressBarHandleTexture,
type = Type,
frame = frame,
}
for method, func in pairs(methods) do
widget[method] = func
end
editbox.obj, leftbutton.obj, rightbutton.obj, frame.obj, progressBarHandle.obj = widget, widget, widget, widget, widget
return AceGUI:RegisterAsWidget(widget)
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)
+19 -4
View File
@@ -102,8 +102,8 @@ function OptionsPrivate.GetActionOptions(data)
name = L["Message Type"],
order = 2,
values = OptionsPrivate.Private.send_chat_message_types,
sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.send_chat_message_types),
disabled = function() return not data.actions.start.do_message end,
control = "WeakAurasSortedDropdown"
},
start_message_warning = {
type = "description",
@@ -188,6 +188,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_sound_repeat = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Repeat After"],
order = 8.2,
@@ -209,8 +210,8 @@ function OptionsPrivate.GetActionOptions(data)
name = L["Sound"],
order = 8.4,
values = OptionsPrivate.Private.sound_types,
sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.sound_types),
disabled = function() return not data.actions.start.do_sound end,
control = "WeakAurasSortedDropdown"
},
start_sound_channel = {
type = "select",
@@ -344,6 +345,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_lines = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Lines & Particles"],
order = 10.81,
@@ -363,6 +365,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_frequency = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Frequency"],
order = 10.82,
@@ -382,6 +385,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_length = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Length"],
order = 10.83,
@@ -400,6 +404,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_thickness = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Thickness"],
order = 10.84,
@@ -418,6 +423,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_XOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X-Offset"],
order = 10.85,
@@ -434,6 +440,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_YOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y-Offset"],
order = 10.86,
@@ -450,6 +457,7 @@ function OptionsPrivate.GetActionOptions(data)
},
start_glow_scale = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Scale"],
order = 10.87,
@@ -503,8 +511,8 @@ function OptionsPrivate.GetActionOptions(data)
name = L["Message Type"],
order = 22,
values = OptionsPrivate.Private.send_chat_message_types,
sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.send_chat_message_types),
disabled = function() return not data.actions.finish.do_message end,
control = "WeakAurasSortedDropdown"
},
finish_message_warning = {
type = "description",
@@ -583,8 +591,8 @@ function OptionsPrivate.GetActionOptions(data)
name = L["Sound"],
order = 28.1,
values = OptionsPrivate.Private.sound_types,
sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.sound_types),
disabled = function() return not data.actions.finish.do_sound end,
control = "WeakAurasSortedDropdown"
},
finish_sound_channel = {
type = "select",
@@ -721,6 +729,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_lines = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Lines & Particles"],
order = 30.81,
@@ -740,6 +749,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_frequency = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Frequency"],
order = 30.82,
@@ -759,6 +769,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_length = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Length"],
order = 30.83,
@@ -777,6 +788,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_thickness = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Thickness"],
order = 30.84,
@@ -795,6 +807,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_XOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X-Offset"],
order = 30.85,
@@ -811,6 +824,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_YOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y-Offset"],
order = 30.86,
@@ -827,6 +841,7 @@ function OptionsPrivate.GetActionOptions(data)
},
finish_glow_scale = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Scale"],
order = 30.87,
+21
View File
@@ -189,6 +189,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
start_easeStrength = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Ease Strength"],
order = 33.8,
@@ -216,6 +217,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- text editor added below
start_alpha = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.doubleWidth,
name = L["Alpha"],
order = 36,
@@ -243,6 +245,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
start_x = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Offset"],
order = 40,
@@ -254,6 +257,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
start_y = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
order = 41,
@@ -285,6 +289,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
start_scalex = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Scale"],
order = 44,
@@ -296,6 +301,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
start_scaley = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Scale"],
order = 45,
@@ -323,6 +329,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
start_rotate = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.doubleWidth,
name = L["Angle"],
order = 48,
@@ -438,6 +445,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
main_easeStrength = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Ease Strength"],
order = 53.8,
@@ -465,6 +473,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
main_alpha = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.doubleWidth,
name = L["Alpha"],
order = 56,
@@ -492,6 +501,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
main_x = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Offset"],
order = 60,
@@ -503,6 +513,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
main_y = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
order = 61,
@@ -530,6 +541,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
main_scalex = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Scale"],
order = 64,
@@ -541,6 +553,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
main_scaley = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Scale"],
order = 65,
@@ -568,6 +581,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- text editor added below
main_rotate = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.doubleWidth,
name = L["Angle"],
order = 68,
@@ -660,6 +674,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
finish_easeStrength = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Ease Strength"],
order = 73.8,
@@ -687,6 +702,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
finish_alpha = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.doubleWidth,
name = L["Alpha"],
order = 76,
@@ -714,6 +730,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
finish_x = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Offset"],
order = 80,
@@ -725,6 +742,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
finish_y = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
order = 81,
@@ -752,6 +770,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
finish_scalex = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Scale"],
order = 84,
@@ -763,6 +782,7 @@ function OptionsPrivate.GetAnimationOptions(data)
},
finish_scaley = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Scale"],
order = 85,
@@ -790,6 +810,7 @@ function OptionsPrivate.GetAnimationOptions(data)
-- texteditor added below
finish_rotate = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.doubleWidth,
name = L["Angle"],
order = 88,
+5
View File
@@ -606,6 +606,7 @@ typeControlAdders = {
}
args[prefix .. "length"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = name(option, "length", L["Length"]),
desc = desc(option, "length"),
@@ -682,6 +683,7 @@ typeControlAdders = {
step = option.step
args[prefix .. "default"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = name(option, "default", L["Default"]),
desc = desc(option, "default"),
@@ -948,6 +950,7 @@ typeControlAdders = {
args[prefix .. "height"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
order = order(),
name = name(option, "height", L["Height"]),
@@ -1202,6 +1205,7 @@ typeControlAdders = {
}
args[prefix .. "size"] = {
type = "range",
control = "WeakAurasSpinBox",
name = name(option, "limitType", option.limitType == "max" and L["Entry limit"] or L["Number of Entries"]),
desc = desc(option, "limitType"),
order = order(),
@@ -1848,6 +1852,7 @@ function addAuthorModeOption(options, args, data, order, prefix, i)
args[prefix .. "width"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = name(option, "width", L["Width"]),
desc = desc(option, "width"),
+17 -5
View File
@@ -170,7 +170,19 @@ local function CreateNameOptions(aura_options, data, trigger, size, isExactSpell
desc = desc,
order = baseOrder + i / 100 + 0.0003,
hidden = hiddenFunction,
get = function(info) return trigger[optionKey] and trigger[optionKey][i] end,
get = function(info)
local rawString = trigger[optionKey] and trigger[optionKey][i]
if not rawString then return "" end
local spellID = WeakAuras.SafeToNumber(rawString)
local spellName = spellID and GetSpellInfo(spellID)
if spellName and spellID then
return ("%s (%s)"):format(spellID, spellName) .. "\0" .. rawString
elseif spellID then
return ("%s (%s)"):format(rawString, L["Unknown Spell"]) .. "\0" .. rawString
else
return rawString .. "\0" .. rawString
end
end,
set = function(info, v)
trigger[optionKey] = trigger[optionKey] or {}
if v == "" then
@@ -179,10 +191,9 @@ local function CreateNameOptions(aura_options, data, trigger, size, isExactSpell
if isExactSpellId then
trigger[optionKey][i] = v
else
local spellId = tonumber(v)
local _, spellId = WeakAuras.spellCache.CorrectAuraName(v)
if spellId then
WeakAuras.spellCache.CorrectAuraName(v)
trigger[optionKey][i] = v
trigger[optionKey][i] = tostring(spellId)
else
trigger[optionKey][i] = spellCache.BestKeyMatch(v)
end
@@ -193,7 +204,8 @@ local function CreateNameOptions(aura_options, data, trigger, size, isExactSpell
WeakAuras.UpdateThumbnail(data)
WeakAuras.ClearAndUpdateOptions(data.id)
end,
validate = isExactSpellId and WeakAuras.ValidateNumeric or nil
validate = isExactSpellId and WeakAuras.ValidateNumeric or nil,
control = "WeakAurasInputFocus",
}
end
-- VALIDATE ?
+5 -2
View File
@@ -212,14 +212,17 @@ function spellCache.CorrectAuraName(input)
error("spellCache has not been loaded. Call WeakAuras.spellCache.Load(...) first.")
end
local spellId = WeakAuras.SafeToNumber(input);
local spellId = WeakAuras.SafeToNumber(input)
if type(input) == "string" and input:find("|", nil, true) then
spellId = WeakAuras.SafeToNumber(input:match("|Hspell:(%d+)"))
end
if(spellId) then
local name, _, icon = GetSpellInfo(spellId);
if(name) then
spellCache.AddIcon(name, spellId, icon)
return name, spellId;
else
return "Invalid Spell ID";
return "Invalid Spell ID", spellId;
end
else
local ret = spellCache.BestKeyMatch(input);
+121 -73
View File
@@ -949,11 +949,24 @@ local function CreateSetAll(subOption, getAll)
if (childOption and not disabledOrHiddenChild(childOptionTable, info)) then
for i=#childOptionTable,0,-1 do
if(childOptionTable[i].set) then
if (childOptionTable[i].type == "multiselect") then
childOptionTable[i].set(info, ..., not before);
local optionTable = childOptionTable[i]
if(optionTable.set) then
if (optionTable.type == "multiselect") then
local newValue
if optionTable.multiTristate then
if before == true then
newValue = false
elseif before == false then
newValue = nil
elseif before == nil then
newValue = true
end
else
newValue = not before
end
optionTable.set(info, ..., newValue)
else
childOptionTable[i].set(info, ...);
optionTable.set(info, ...);
end
break;
end
@@ -1012,6 +1025,7 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
__order = metaOrder,
width = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Width"],
order = 60,
@@ -1023,6 +1037,7 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
},
height = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Height"],
order = 61,
@@ -1032,62 +1047,44 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
bigStep = 1,
hidden = hideWidthHeight,
},
xOffset = {
type = "range",
width = WeakAuras.normalWidth,
name = L["X Offset"],
order = 62,
softMin = (-1 * screenWidth),
min = (-4 * screenWidth),
softMax = screenWidth,
max = 4 * screenWidth,
bigStep = 10,
get = function() return data.xOffset end,
set = function(info, v)
data.xOffset = v;
WeakAuras.Add(data);
WeakAuras.UpdateThumbnail(data);
OptionsPrivate.ResetMoverSizer();
OptionsPrivate.Private.AddParents(data)
end
},
yOffset = {
type = "range",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
order = 63,
softMin = (-1 * screenHeight),
min = (-4 * screenHeight),
softMax = screenHeight,
max = 4 * screenHeight,
bigStep = 10,
get = function() return data.yOffset end,
set = function(info, v)
data.yOffset = v;
WeakAuras.Add(data);
WeakAuras.UpdateThumbnail(data);
OptionsPrivate.ResetMoverSizer();
OptionsPrivate.Private.AddParents(data)
end
},
selfPoint = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Anchor"],
order = 70,
hidden = IsParentDynamicGroup,
values = OptionsPrivate.Private.point_types,
disabled = disableSelfPoint,
},
anchorFrameType = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Anchored To"],
order = 72,
order = 70,
hidden = function()
return IsParentDynamicGroup() or IsGroupByFrame()
end,
values = (data.regionType == "group" or data.regionType == "dynamicgroup") and OptionsPrivate.Private.anchor_frame_types_group or OptionsPrivate.Private.anchor_frame_types,
values = (data.regionType == "group" or data.regionType == "dynamicgroup")
and OptionsPrivate.Private.anchor_frame_types_group
or OptionsPrivate.Private.anchor_frame_types,
sorting = OptionsPrivate.Private.SortOrderForValues(
(data.regionType == "group" or data.regionType == "dynamicgroup")
and OptionsPrivate.Private.anchor_frame_types_group
or OptionsPrivate.Private.anchor_frame_types),
},
anchorFrameParent = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Set Parent to Anchor"],
desc = L["Sets the anchored frame as the aura's parent, causing the aura to inherit attributes such as visibility and scale."],
order = 71,
get = function()
return data.anchorFrameParent or data.anchorFrameParent == nil;
end,
hidden = function()
return (data.anchorFrameType == "SCREEN" or data.anchorFrameType == "MOUSE" or IsParentDynamicGroup());
end,
},
anchorFrameSpaceOne = {
type = "execute",
width = WeakAuras.normalWidth,
name = "",
order = 72,
image = function() return "", 0, 0 end,
hidden = function()
return IsParentDynamicGroup() or IsGroupByFrame() or not (data.anchorFrameType == "SCREEN" or data.anchorFrameType == "MOUSE")
end,
},
-- Input field to select frame to anchor on
anchorFrameFrame = {
@@ -1107,7 +1104,7 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
type = "execute",
width = WeakAuras.normalWidth,
name = L["Choose"],
order = 72.4,
order = 74,
hidden = function()
if (IsParentDynamicGroup()) then
return true;
@@ -1118,6 +1115,16 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
OptionsPrivate.StartFrameChooser(data, {"anchorFrameFrame"});
end
},
selfPoint = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Anchor"],
order = 75,
hidden = IsParentDynamicGroup,
values = OptionsPrivate.Private.point_types,
disabled = disableSelfPoint,
control = "WeakAurasAnchorButtons",
},
anchorPoint = {
type = "select",
width = WeakAuras.normalWidth,
@@ -1130,7 +1137,7 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
return L["To Frame's"];
end
end,
order = 75,
order = 76,
hidden = function()
if (data.parent) then
if IsGroupByFrame() then
@@ -1141,13 +1148,14 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
return data.anchorFrameType == "MOUSE";
end
end,
values = OptionsPrivate.Private.point_types
values = OptionsPrivate.Private.point_types,
control = "WeakAurasAnchorButtons",
},
anchorPointGroup = {
type = "select",
width = WeakAuras.normalWidth,
name = L["To Group's"],
order = 76,
order = 77,
hidden = function()
if IsGroupByFrame() then
return true
@@ -1162,33 +1170,70 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
end,
disabled = true,
values = {["CENTER"] = L["Anchor Point"]},
get = function() return "CENTER"; end
get = function() return "CENTER"; end,
control = "WeakAurasAnchorButtons",
},
anchorFrameParent = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Set Parent to Anchor"],
desc = L["Sets the anchored frame as the aura's parent, causing the aura to inherit attributes such as visibility and scale."],
order = 77,
get = function()
return data.anchorFrameParent or data.anchorFrameParent == nil;
end,
anchorFramePoints = {
type = "execute",
name = "",
order = 78,
image = function() return "", 0, 0 end,
hidden = function()
return (data.anchorFrameType == "SCREEN" or data.anchorFrameType == "MOUSE" or IsParentDynamicGroup());
end,
return not (data.anchorFrameType == "MOUSE") or IsParentDynamicGroup();
end
},
xOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Offset"],
order = 79,
softMin = (-1 * screenWidth),
min = (-4 * screenWidth),
softMax = screenWidth,
max = 4 * screenWidth,
bigStep = 10,
get = function() return data.xOffset end,
set = function(info, v)
data.xOffset = v;
WeakAuras.Add(data);
WeakAuras.UpdateThumbnail(data);
OptionsPrivate.ResetMoverSizer();
OptionsPrivate.Private.AddParents(data)
end
},
yOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
order = 80,
softMin = (-1 * screenHeight),
min = (-4 * screenHeight),
softMax = screenHeight,
max = 4 * screenHeight,
bigStep = 10,
get = function() return data.yOffset end,
set = function(info, v)
data.yOffset = v;
WeakAuras.Add(data);
WeakAuras.UpdateThumbnail(data);
OptionsPrivate.ResetMoverSizer();
OptionsPrivate.Private.AddParents(data)
end
},
frameStrata = {
type = "select",
width = WeakAuras.normalWidth,
name = L["Frame Strata"],
order = 78,
order = 81,
values = OptionsPrivate.Private.frame_strata_types
},
anchorFrameSpace = {
type = "execute",
width = WeakAuras.normalWidth,
name = "",
order = 79,
order = 82,
image = function() return "", 0, 0 end,
hidden = function()
return not (data.anchorFrameType ~= "SCREEN" or IsParentDynamicGroup());
@@ -1197,7 +1242,7 @@ local function PositionOptions(id, data, _, hideWidthHeight, disableSelfPoint, g
};
OptionsPrivate.commonOptions.AddCodeOption(positionOptions, data, L["Custom Anchor"], "custom_anchor", "https://github.com/WeakAuras/WeakAuras2/wiki/Custom-Code-Blocks#custom-anchor-function",
72.1, function() return not(data.anchorFrameType == "CUSTOM" and not IsParentDynamicGroup()) end, {"customAnchor"}, false, { setOnParent = group })
71.5, function() return not(data.anchorFrameType == "CUSTOM" and not IsParentDynamicGroup()) end, {"customAnchor"}, false, { setOnParent = group })
return positionOptions;
end
@@ -1236,6 +1281,7 @@ local function BorderOptions(id, data, showBackDropOptions, hiddenFunc, order)
},
borderOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Border Offset"],
order = order + 0.3,
@@ -1246,6 +1292,7 @@ local function BorderOptions(id, data, showBackDropOptions, hiddenFunc, order)
},
borderSize = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Border Size"],
order = order + 0.4,
@@ -1256,6 +1303,7 @@ local function BorderOptions(id, data, showBackDropOptions, hiddenFunc, order)
},
borderInset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Border Inset"],
order = order + 0.5,
@@ -1443,6 +1491,7 @@ local function AddCommonTriggerOptions(options, data, triggernum, doubleWidth)
desc = L["The type of trigger"],
order = 1.1,
values = trigger_types,
sorting = OptionsPrivate.Private.SortOrderForValues(trigger_types),
get = function(info)
return trigger.type
end,
@@ -1458,7 +1507,6 @@ local function AddCommonTriggerOptions(options, data, triggernum, doubleWidth)
WeakAuras.UpdateThumbnail(data);
WeakAuras.ClearAndUpdateOptions(data.id);
end,
control = "WeakAurasSortedDropdown"
}
end
+11 -2
View File
@@ -458,6 +458,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
local properties = allProperties.propertyMap[property];
if (properties.min or properties.softMin) and (properties.max or properties.softMax) then
args["condition" .. i .. "value" .. j].type = "range";
args["condition" .. i .. "value" .. j].control = "WeakAurasSpinBox"
args["condition" .. i .. "value" .. j].min = properties.min;
args["condition" .. i .. "value" .. j].softMin = properties.softMin;
args["condition" .. i .. "value" .. j].max = properties.max;
@@ -571,6 +572,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
type = "select",
width = WeakAuras.normalWidth,
values = OptionsPrivate.Private.sound_types,
sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.sound_types),
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "sound", L["Differences"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "sound", propertyType, OptionsPrivate.Private.sound_types),
order = order,
@@ -578,7 +580,6 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
return type(conditions[i].changes[j].value) == "table" and conditions[i].changes[j].value.sound;
end,
set = wrapWithPlaySound(setValueComplex("sound")),
control = "WeakAurasSortedDropdown",
hidden = function() return not (anySoundType("Play") or anySoundType("Loop")) end
}
order = order + 1;
@@ -600,6 +601,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
args["condition" .. i .. "value" .. j .. "sound_repeat"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
min = 0,
softMax = 60,
@@ -674,6 +676,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
type = "select",
width = WeakAuras.normalWidth,
values = OptionsPrivate.Private.send_chat_message_types,
sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.send_chat_message_types),
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "message_type", L["Differences"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "message_type", propertyType, OptionsPrivate.Private.send_chat_message_types),
order = order,
@@ -681,7 +684,6 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
return type(conditions[i].changes[j].value) == "table" and conditions[i].changes[j].value.message_type;
end,
set = setValueComplex("message_type"),
control = "WeakAurasSortedDropdown"
}
order = order + 1;
@@ -1148,6 +1150,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
order = order + 1
args["condition" .. i .. "value" .. j .. "glow_lines"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "glow_lines", L["Lines & Particles"], L["Lines & Particles"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "glow_lines", propertyType),
@@ -1166,6 +1169,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
order = order + 1
args["condition" .. i .. "value" .. j .. "glow_frequency"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "glow_frequency", L["Frequency"], L["Frequency"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "glow_frequency", propertyType),
@@ -1184,6 +1188,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
order = order + 1
args["condition" .. i .. "value" .. j .. "glow_length"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "glow_length", L["Length"], L["Length"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "glow_length", propertyType),
@@ -1202,6 +1207,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
order = order + 1
args["condition" .. i .. "value" .. j .. "glow_thickness"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "glow_thickness", L["Thickness"], L["Thickness"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "glow_thickness", propertyType),
@@ -1220,6 +1226,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
order = order + 1
args["condition" .. i .. "value" .. j .. "glow_XOffset"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "glow_XOffset", L["X-Offset"], L["X-Offset"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "glow_XOffset", propertyType),
@@ -1238,6 +1245,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
order = order + 1
args["condition" .. i .. "value" .. j .. "glow_YOffset"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "glow_YOffset", L["Y-Offset"], L["Y-Offset"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "glow_YOffset", propertyType),
@@ -1256,6 +1264,7 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA
order = order + 1
args["condition" .. i .. "value" .. j .. "glow_scale"] = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = blueIfNoValue2(data, conditions[i].changes[j], "value", "glow_scale", L["Scale"], L["Scale"]),
desc = descIfNoValue2(data, conditions[i].changes[j], "value", "glow_scale", propertyType),
+6
View File
@@ -150,6 +150,12 @@ function OptionsPrivate.GetDisplayOptions(data)
local options = flattenRegionOptions(regionOption, true)
for _, option in pairs(options) do
if option.type == "range" then
option.control = "WeakAurasSpinBox"
end
end
local region = {
type = "group",
name = L["Display"],
+4 -6
View File
@@ -412,9 +412,8 @@ local function GetGenericTriggerOptions(data, triggernum)
name = "",
order = 7.1,
width = WeakAuras.normalWidth,
values = function()
return subtypes
end,
values = subtypes,
sorting = OptionsPrivate.Private.SortOrderForValues(subtypes),
get = function(info)
return trigger.event
end,
@@ -423,7 +422,6 @@ local function GetGenericTriggerOptions(data, triggernum)
WeakAuras.Add(data)
WeakAuras.ClearAndUpdateOptions(data.id)
end,
control = "WeakAurasSortedDropdown",
}
end
@@ -439,7 +437,7 @@ local function GetGenericTriggerOptions(data, triggernum)
width = WeakAuras.normalWidth,
order = 8,
values = OptionsPrivate.Private.subevent_prefix_types,
control = "WeakAurasSortedDropdown",
sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.subevent_prefix_types),
hidden = function() return not (trigger.type == combatLogCategory and trigger.event == "Combat Log"); end,
get = function(info)
return trigger.subeventPrefix
@@ -455,7 +453,7 @@ local function GetGenericTriggerOptions(data, triggernum)
name = L["Message Suffix"],
order = 9,
values = OptionsPrivate.Private.subevent_suffix_types,
control = "WeakAurasSortedDropdown",
sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.subevent_suffix_types),
hidden = function() return not (trigger.type == combatLogCategory and trigger.event == "Combat Log" and OptionsPrivate.Private.subevent_actual_prefix_types[trigger.subeventPrefix]); end,
get = function(info)
return trigger.subeventSuffix
File diff suppressed because it is too large Load Diff
+4
View File
@@ -428,6 +428,8 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
L["Event(s)"] = "Ereignis(se)"
L["Everything"] = "Alles"
--[[Translation missing --]]
L["Exact Item Match"] = "Exact Item Match"
--[[Translation missing --]]
L["Exact Spell ID(s)"] = "Exact Spell ID(s)"
--[[Translation missing --]]
L["Exact Spell Match"] = "Exact Spell Match"
@@ -1059,6 +1061,8 @@ Nur ein Wert kann ausgewählt werden.]=]
L["UnitName Filter"] = "UnitName Filter"
--[[Translation missing --]]
L["Unknown property '%s' found in '%s'"] = "Unknown property '%s' found in '%s'"
--[[Translation missing --]]
L["Unknown Spell"] = "Unknown Spell"
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "Anders als die Start- und Endanimation wird die Hauptanimation immer wieder wiederholt, bis die Anzeige in den Endstatus versetzt wird."
--[[Translation missing --]]
L["Update %s by %s"] = "Update %s by %s"
+2
View File
@@ -448,6 +448,7 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
L["Event(s)"] = "Event(s)"
--[[Translation missing --]]
L["Everything"] = "Everything"
L["Exact Item Match"] = "Coincidencia exacta de objeto"
--[[Translation missing --]]
L["Exact Spell ID(s)"] = "Exact Spell ID(s)"
--[[Translation missing --]]
@@ -1202,6 +1203,7 @@ Sólo un valor coincidente puede ser escogido.]=]
L["UnitName Filter"] = "UnitName Filter"
--[[Translation missing --]]
L["Unknown property '%s' found in '%s'"] = "Unknown property '%s' found in '%s'"
L["Unknown Spell"] = "Hechizo desconocido"
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "Ignorar animaciones de inicio y final: la animación principal se repetirá hasta que el aura se oculte."
--[[Translation missing --]]
L["Update %s by %s"] = "Update %s by %s"
+2
View File
@@ -424,6 +424,7 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
L["Event(s)"] = "Evento(s)"
--[[Translation missing --]]
L["Everything"] = "Everything"
L["Exact Item Match"] = "Coincidencia exacta de objeto"
--[[Translation missing --]]
L["Exact Spell ID(s)"] = "Exact Spell ID(s)"
--[[Translation missing --]]
@@ -1111,6 +1112,7 @@ Sólo un valor coincidente puede ser escogido.]=]
L["UnitName Filter"] = "UnitName Filter"
--[[Translation missing --]]
L["Unknown property '%s' found in '%s'"] = "Unknown property '%s' found in '%s'"
L["Unknown Spell"] = "Hechizo desconocido"
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "Ignorar animaciones de inicio y final: la animación principal se repetirá hasta que el aura se oculte."
--[[Translation missing --]]
L["Update %s by %s"] = "Update %s by %s"
+4
View File
@@ -365,6 +365,8 @@ Ne sautez pas cette version]=]
L["Event Type"] = "Type d'évènement"
L["Event(s)"] = "Évènement(s)"
L["Everything"] = "Tous"
--[[Translation missing --]]
L["Exact Item Match"] = "Exact Item Match"
L["Exact Spell ID(s)"] = "ID(s) de sort exact(s)"
L["Exact Spell Match"] = "Correspondance Exacte du Sort"
L["Expand"] = "Agrandir"
@@ -920,6 +922,8 @@ Seule une unique valeur peut être choisie]=]
L["UnitName Filter"] = "UnitName Filter"
--[[Translation missing --]]
L["Unknown property '%s' found in '%s'"] = "Unknown property '%s' found in '%s'"
--[[Translation missing --]]
L["Unknown Spell"] = "Unknown Spell"
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "Contrairement aux animations de début et de fin, l'animation principale bouclera tant que l'affichage est visible."
--[[Translation missing --]]
L["Update %s by %s"] = "Update %s by %s"
+4
View File
@@ -460,6 +460,8 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
--[[Translation missing --]]
L["Everything"] = "Everything"
--[[Translation missing --]]
L["Exact Item Match"] = "Exact Item Match"
--[[Translation missing --]]
L["Exact Spell ID(s)"] = "Exact Spell ID(s)"
--[[Translation missing --]]
L["Exact Spell Match"] = "Exact Spell Match"
@@ -1310,6 +1312,8 @@ Supports multiple entries, separated by commas
--[[Translation missing --]]
L["Unknown property '%s' found in '%s'"] = "Unknown property '%s' found in '%s'"
--[[Translation missing --]]
L["Unknown Spell"] = "Unknown Spell"
--[[Translation missing --]]
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."
--[[Translation missing --]]
L["Update %s by %s"] = "Update %s by %s"
+2
View File
@@ -358,6 +358,7 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
L["Event Type"] = "이벤트 유형"
L["Event(s)"] = "이벤트"
L["Everything"] = "모두"
L["Exact Item Match"] = "정확한 아이템 일치"
L["Exact Spell ID(s)"] = "정확한 주문 ID"
L["Exact Spell Match"] = "정확한 주문 일치"
L["Expand"] = "확장"
@@ -864,6 +865,7 @@ Supports multiple entries, separated by commas
L["UnitName Filter"] = "유닛명 필터"
--[[Translation missing --]]
L["Unknown property '%s' found in '%s'"] = "Unknown property '%s' found in '%s'"
L["Unknown Spell"] = "알 수 없는 주문"
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "시작 또는 종료 애니메이션과 달리 메인 애니메이션은 디스플레이가 숨겨질 때까지 계속 반복됩니다."
--[[Translation missing --]]
L["Update %s by %s"] = "Update %s by %s"
+4
View File
@@ -403,6 +403,8 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
--[[Translation missing --]]
L["Everything"] = "Everything"
--[[Translation missing --]]
L["Exact Item Match"] = "Exact Item Match"
--[[Translation missing --]]
L["Exact Spell ID(s)"] = "Exact Spell ID(s)"
--[[Translation missing --]]
L["Exact Spell Match"] = "Exact Spell Match"
@@ -1176,6 +1178,8 @@ Supports multiple entries, separated by commas
--[[Translation missing --]]
L["Unknown property '%s' found in '%s'"] = "Unknown property '%s' found in '%s'"
--[[Translation missing --]]
L["Unknown Spell"] = "Unknown Spell"
--[[Translation missing --]]
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."
--[[Translation missing --]]
L["Update %s by %s"] = "Update %s by %s"
+2
View File
@@ -428,6 +428,7 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
L["Event Type"] = "Тип триггера"
L["Event(s)"] = "События"
L["Everything"] = "Всех вкладок"
L["Exact Item Match"] = "Точное совпадение"
L["Exact Spell ID(s)"] = "ID заклинания"
L["Exact Spell Match"] = "Точное совпадение"
L["Expand"] = "Развернуть"
@@ -876,6 +877,7 @@ Supports multiple entries, separated by commas
L["Unit Name Filter"] = "Фильтр по имени единицы"
L["UnitName Filter"] = "Фильтр по имени единицы"
L["Unknown property '%s' found in '%s'"] = "Неизвестное свойство %s в переменной %s."
L["Unknown Spell"] = "Неизвестное заклинание"
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "В отличие от начальной или конечной анимации, основная зациклена и будет повторяться пока индикация не пропадет."
L["Update %s by %s"] = "Обновить %s (автор %s)"
L["Update Auras"] = "Обновить индикации"
+2
View File
@@ -309,6 +309,7 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
L["Event Type"] = "事件类型"
L["Event(s)"] = "事件(复数)"
L["Everything"] = "全部"
L["Exact Item Match"] = "严格物品匹配"
L["Exact Spell ID(s)"] = "精确法术 ID"
L["Exact Spell Match"] = "严格法术匹配"
L["Expand"] = "展开"
@@ -746,6 +747,7 @@ Supports multiple entries, separated by commas
L["Unit Name Filter"] = "单位名称过滤方式"
L["UnitName Filter"] = "单位名称过滤"
L["Unknown property '%s' found in '%s'"] = "发现'%2$s'的未知属性'%1$s'"
L["Unknown Spell"] = "未知法术"
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "不同于开始或结束动画,主动画将不停循环,直到图示被隐藏。"
L["Update %s by %s"] = "更新%s,来自%s"
L["Update Auras"] = "更新光环"
+2
View File
@@ -310,6 +310,7 @@ UNIT_POWER_UPDATE:player, UNIT_AURA:nameplate:group PLAYER_TARGET_CHANGED CLEU:S
L["Event Type"] = "事件類型"
L["Event(s)"] = "事件"
L["Everything"] = "全部"
L["Exact Item Match"] = "完全符合物品"
L["Exact Spell ID(s)"] = "正確的法術 ID"
L["Exact Spell Match"] = "完全符合法術"
L["Expand"] = "展開"
@@ -748,6 +749,7 @@ Supports multiple entries, separated by commas
L["Unit Name Filter"] = "單位名字過濾方式"
L["UnitName Filter"] = "單位名字過濾方式"
L["Unknown property '%s' found in '%s'"] = "發現未知屬性 '%s',在 '%s'"
L["Unknown Spell"] = "未知的法術"
L["Unlike the start or finish animations, the main animation will loop over and over until the display is hidden."] = "不同於開始或結束時的動畫,主要動畫將重複循環直到提醒效果被隱藏。"
L["Update %s by %s"] = "更新 %s 透過 %s"
L["Update Auras"] = "更新提醒效果"
@@ -102,6 +102,7 @@ local function createOptions(id, data)
},
alpha = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Bar Alpha"],
order = 39.3,
@@ -206,6 +207,7 @@ local function createOptions(id, data)
},
zoom = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Zoom"],
order = 40.91,
@@ -292,6 +294,7 @@ local function createOptions(id, data)
},
sparkWidth = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Width"],
order = 44.6,
@@ -303,6 +306,7 @@ local function createOptions(id, data)
},
sparkHeight = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Height"],
order = 44.7,
@@ -314,6 +318,7 @@ local function createOptions(id, data)
},
sparkOffsetX = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Offset"],
order = 44.8,
@@ -325,6 +330,7 @@ local function createOptions(id, data)
},
sparkOffsetY = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
order = 44.9,
@@ -345,6 +351,7 @@ local function createOptions(id, data)
},
sparkRotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Rotation"],
min = 0,
@@ -207,6 +207,7 @@ local function createOptions(id, data)
},
rotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Start Angle"],
order = 5,
@@ -224,6 +225,7 @@ local function createOptions(id, data)
},
arcLength = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Total Angle"],
order = 8,
@@ -235,6 +237,7 @@ local function createOptions(id, data)
},
radius = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Radius"],
order = 9,
@@ -260,6 +263,7 @@ local function createOptions(id, data)
},
gridWidth = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = function()
if not data.gridType then return "" end
@@ -277,6 +281,7 @@ local function createOptions(id, data)
},
rowSpace = {
type = "range",
control = "WeakAurasSpinBox",
name = L["Row Space"],
width = WeakAuras.normalWidth,
order = 10,
@@ -287,6 +292,7 @@ local function createOptions(id, data)
},
columnSpace = {
type = "range",
control = "WeakAurasSpinBox",
name = L["Column Space"],
width = WeakAuras.normalWidth,
order = 11,
@@ -298,6 +304,7 @@ local function createOptions(id, data)
-- generic grow options
space = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Space"],
order = 7,
@@ -312,6 +319,7 @@ local function createOptions(id, data)
},
stagger = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Stagger"],
order = 8,
@@ -387,6 +395,7 @@ local function createOptions(id, data)
},
limit = {
type = "range",
control = "WeakAurasSpinBox",
order = 26,
width = WeakAuras.normalWidth,
name = L["Limit"],
@@ -404,6 +413,7 @@ local function createOptions(id, data)
},
scale = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Group Scale"],
order = 28,
+5
View File
@@ -190,6 +190,7 @@ local function createDistributeAlignOptions(id, data)
},
distribute_h = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Distribute Horizontally"],
order = 20,
@@ -273,6 +274,7 @@ local function createDistributeAlignOptions(id, data)
},
distribute_v = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Distribute Vertically"],
order = 25,
@@ -356,6 +358,7 @@ local function createDistributeAlignOptions(id, data)
},
space_h = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Space Horizontally"],
order = 30,
@@ -439,6 +442,7 @@ local function createDistributeAlignOptions(id, data)
},
space_v = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Space Vertically"],
order = 35,
@@ -560,6 +564,7 @@ local function createOptions(id, data)
-- Alignment/Distribute options are added below
scale = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Group Scale"],
order = 45,
+3
View File
@@ -124,6 +124,7 @@ local function createOptions(id, data)
},
alpha = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["Alpha"],
order = 7.03,
@@ -135,6 +136,7 @@ local function createOptions(id, data)
},
zoom = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Zoom"],
order = 7.04,
@@ -153,6 +155,7 @@ local function createOptions(id, data)
},
iconInset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["Icon Inset"],
order = 7.06,
+5
View File
@@ -39,6 +39,7 @@ local function createOptions(id, data)
},
sequence = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Animation Sequence"],
min = 0,
@@ -50,6 +51,7 @@ local function createOptions(id, data)
},
model_z = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Z Offset"],
softMin = -20,
@@ -60,6 +62,7 @@ local function createOptions(id, data)
},
model_x = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Offset"],
softMin = -20,
@@ -70,6 +73,7 @@ local function createOptions(id, data)
},
model_y = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
softMin = -20,
@@ -80,6 +84,7 @@ local function createOptions(id, data)
},
rotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Rotation"],
min = 0,
@@ -94,6 +94,7 @@ local function createOptions(id, data)
},
backgroundOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Background Offset"],
min = 0,
@@ -137,6 +138,7 @@ local function createOptions(id, data)
},
user_x = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
order = 42,
name = L["Re-center X"],
@@ -147,6 +149,7 @@ local function createOptions(id, data)
},
user_y = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
order = 44,
name = L["Re-center Y"],
@@ -157,6 +160,7 @@ local function createOptions(id, data)
},
startAngle = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
order = 42,
name = L["Start Angle"],
@@ -167,6 +171,7 @@ local function createOptions(id, data)
},
endAngle = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
order = 44,
name = L["End Angle"],
@@ -177,6 +182,7 @@ local function createOptions(id, data)
},
crop_x = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Crop X"],
order = 46,
@@ -194,6 +200,7 @@ local function createOptions(id, data)
},
crop_y = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Crop Y"],
order = 47,
@@ -211,6 +218,7 @@ local function createOptions(id, data)
},
rotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Rotation"],
order = 52,
@@ -220,6 +228,7 @@ local function createOptions(id, data)
},
alpha = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Alpha"],
order = 48,
@@ -244,6 +253,7 @@ local function createOptions(id, data)
},
slant = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Slant Amount"],
order = 55.4,
@@ -281,6 +281,7 @@ local function createOptions(id, data)
},
startPercent = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Animation Start"],
min = 0,
@@ -291,6 +292,7 @@ local function createOptions(id, data)
},
endPercent = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Animation End"],
min = 0,
@@ -301,6 +303,7 @@ local function createOptions(id, data)
},
frameRate = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Frame Rate"],
min = 3,
@@ -518,6 +521,7 @@ local function createOptions(id, data)
},
backgroundPercent = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Selected Frame"],
min = 0,
+4
View File
@@ -55,6 +55,7 @@ local function createOptions(id, data)
},
fontSize = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Size"],
order = 46,
@@ -153,6 +154,7 @@ local function createOptions(id, data)
},
shadowXOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["Shadow X Offset"],
softMin = -15,
@@ -163,6 +165,7 @@ local function createOptions(id, data)
},
shadowYOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Shadow Y Offset"],
softMin = -15,
@@ -215,6 +218,7 @@ local function createOptions(id, data)
width = WeakAuras.normalWidth,
order = 49.1,
type = "range",
control = "WeakAurasSpinBox",
min = 1,
softMax = screenWidth,
bigStep = 1,
@@ -69,6 +69,7 @@ local function createOptions(id, data)
},
alpha = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Alpha"],
order = 25,
@@ -85,6 +86,7 @@ local function createOptions(id, data)
},
rotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Rotation"],
min = 0,
@@ -96,6 +98,7 @@ local function createOptions(id, data)
},
discrete_rotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Discrete Rotation"],
min = 0,
@@ -33,6 +33,7 @@ local function createOptions(parentData, data, index, subIndex)
},
border_offset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Border Offset"],
order = 5,
@@ -42,6 +43,7 @@ local function createOptions(parentData, data, index, subIndex)
},
border_size = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Border Size"],
order = 6,
@@ -134,6 +134,7 @@ local function createOptions(parentData, data, index, subIndex)
},
glowLines = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["Lines & Particles"],
order = 9,
@@ -144,6 +145,7 @@ local function createOptions(parentData, data, index, subIndex)
},
glowFrequency = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Frequency"],
order = 10,
@@ -161,6 +163,7 @@ local function createOptions(parentData, data, index, subIndex)
},
glowLength = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["Length"],
order = 12,
@@ -171,6 +174,7 @@ local function createOptions(parentData, data, index, subIndex)
},
glowThickness = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Thickness"],
order = 13,
@@ -188,6 +192,7 @@ local function createOptions(parentData, data, index, subIndex)
},
glowXOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["X-Offset"],
order = 15,
@@ -198,6 +203,7 @@ local function createOptions(parentData, data, index, subIndex)
},
glowYOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y-Offset"],
order = 16,
@@ -215,6 +221,7 @@ local function createOptions(parentData, data, index, subIndex)
},
glowScale = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["Scale"],
order = 18,
@@ -42,6 +42,7 @@ local function createOptions(parentData, data, index, subIndex)
},
extra_width = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Extra Width"],
order = 12.1,
@@ -52,6 +53,7 @@ local function createOptions(parentData, data, index, subIndex)
},
extra_height = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Extra Height"],
order = 12.2,
@@ -62,6 +64,7 @@ local function createOptions(parentData, data, index, subIndex)
},
model_alpha = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Alpha"],
order = 13,
@@ -71,6 +74,7 @@ local function createOptions(parentData, data, index, subIndex)
},
model_z = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Z Offset"],
softMin = -20,
@@ -81,6 +85,7 @@ local function createOptions(parentData, data, index, subIndex)
},
model_x = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["X Offset"],
softMin = -20,
@@ -91,6 +96,7 @@ local function createOptions(parentData, data, index, subIndex)
},
model_y = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
softMin = -20,
@@ -101,6 +107,7 @@ local function createOptions(parentData, data, index, subIndex)
},
rotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Rotation"],
min = 0,
@@ -68,6 +68,7 @@ local function createOptions(parentData, data, index, subIndex)
},
text_fontSize = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Size"],
order = 14,
@@ -159,6 +160,7 @@ local function createOptions(parentData, data, index, subIndex)
},
text_shadowXOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["Shadow X Offset"],
softMin = -15,
@@ -169,6 +171,7 @@ local function createOptions(parentData, data, index, subIndex)
},
text_shadowYOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Shadow Y Offset"],
softMin = -15,
@@ -227,6 +230,7 @@ local function createOptions(parentData, data, index, subIndex)
width = WeakAuras.normalWidth - indentWidth,
order = 53,
type = "range",
control = "WeakAurasSpinBox",
min = 1,
softMax = 200,
bigStep = 1,
@@ -353,6 +357,7 @@ local function createOptions(parentData, data, index, subIndex)
options.text_anchorXOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth - indentWidth,
name = L["X Offset"],
order = 60.4,
@@ -364,6 +369,7 @@ local function createOptions(parentData, data, index, subIndex)
options.text_anchorYOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Y Offset"],
order = 60.5,
@@ -43,6 +43,7 @@ local function createOptions(parentData, data, index, subIndex)
},
tick_thickness = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Thickness"],
order = 5,
@@ -107,6 +108,7 @@ local function createOptions(parentData, data, index, subIndex)
},
tick_length = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Length"],
order = 8,
@@ -170,6 +172,7 @@ local function createOptions(parentData, data, index, subIndex)
},
tick_rotation = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["Rotation"],
min = 0,
@@ -187,6 +190,7 @@ local function createOptions(parentData, data, index, subIndex)
},
tick_xOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["x-Offset"],
order = 16,
@@ -196,6 +200,7 @@ local function createOptions(parentData, data, index, subIndex)
},
tick_yOffset = {
type = "range",
control = "WeakAurasSpinBox",
width = WeakAuras.normalWidth,
name = L["y-Offset"],
order = 17,
+5 -3
View File
@@ -1,7 +1,7 @@
## Interface: 30300
## Title: WeakAuras Options
## Author: The WeakAuras Team
## Version: 4.0.0
## Version: 4.1.1
## Notes: Options for WeakAuras
## Notes-esES: Opciones para WeakAuras
## Notes-deDE: Optionen für WeakAuras
@@ -81,15 +81,17 @@ AceGUI-Widgets\AceGUIWidget-WeakAurasPendingUpdateButton.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasTextureButton.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasIconButton.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasMultiLineEditBox.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasMultiLineEditBoxWithEnter.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasNewButton.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasImportButton.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasSortedDropDown.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasToolbarButton.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasTwoColumnDropDown.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasSnippetButton.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasAnchorButtons.lua
AceGUI-Widgets\AceGUIContainer-WeakAurasTreeGroup.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasSnippetButton.lua
AceGUI-Widgets\AceGUIContainer-WeakAurasInlineGroup.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasExpandAnchor.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasSpacer.lua
AceGUI-Widgets\AceGuiWidget-WeakAurasProgressBar.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasSpinBox.lua
AceGUI-Widgets\AceGUIWidget-WeakAurasInputFocus.lua