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.
479 lines
19 KiB
479 lines
19 KiB
local _, Cell = ...
|
|
local L = Cell.L
|
|
local F = Cell.funcs
|
|
local U = Cell.uFuncs
|
|
local P = Cell.pixelPerfectFuncs
|
|
|
|
local debuffItems = {}
|
|
local LoadList
|
|
|
|
-------------------------------------------------
|
|
-- dispel request
|
|
-------------------------------------------------
|
|
local drPane
|
|
local drEnabledCB, drDispellableCB, drResponseDD, drResponseText, drTimeoutDD, drTimeoutText, drMacroText, drMacroEB, drDebuffsText, drDebuffsList, drTypeDD, drTypeText, drTypeOptionsBtn
|
|
local drType
|
|
|
|
local function UpdateDRWidgets()
|
|
Cell.SetEnabled(CellDB["dispelRequest"]["enabled"], drDispellableCB, drResponseDD, drResponseText, drTimeoutDD, drTimeoutText, drMacroText, drMacroEB, drTypeDD, drTypeText, drTypeOptionsBtn)
|
|
Cell.SetEnabled(CellDB["dispelRequest"]["enabled"] and CellDB["dispelRequest"]["responseType"] == "specific", drDebuffsText)
|
|
if CellDB["dispelRequest"]["enabled"] and CellDB["dispelRequest"]["responseType"] == "specific" then
|
|
drDebuffsList.mask:Hide()
|
|
else
|
|
drDebuffsList.mask:Show()
|
|
end
|
|
end
|
|
|
|
local function CreateDRPane()
|
|
drPane = Cell.CreateTitledPane(Cell.frames.utilitiesTab, L["Dispel Request"], 422, 183)
|
|
drPane:SetPoint("TOPLEFT", 5, -5)
|
|
drPane:SetPoint("BOTTOMRIGHT", -5, 5)
|
|
drPane:SetScript("OnHide", function()
|
|
U.HideGlowOptions()
|
|
U.HideTextOptions()
|
|
end)
|
|
|
|
local drTips = drPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
drTips:SetPoint("TOPLEFT", 5, -25)
|
|
drTips:SetJustifyH("LEFT")
|
|
drTips:SetSpacing(5)
|
|
drTips:SetText(L["Glow unit button when a group member sends a %s request"]:format(Cell.GetAccentColorString()..L["DISPEL"].."|r"))
|
|
|
|
-- enabled ----------------------------------------------------------------------
|
|
drEnabledCB = Cell.CreateCheckButton(drPane, L["Enabled"], function(checked, self)
|
|
CellDB["dispelRequest"]["enabled"] = checked
|
|
UpdateDRWidgets()
|
|
Cell.Fire("UpdateRequests", "dispelRequest")
|
|
CellDropdownList:Hide()
|
|
|
|
U.HideGlowOptions()
|
|
U.HideTextOptions()
|
|
Cell.StopRainbowText(drTypeOptionsBtn:GetFontString())
|
|
end)
|
|
drEnabledCB:SetPoint("TOPLEFT", drPane, "TOPLEFT", 5, -80)
|
|
---------------------------------------------------------------------------------
|
|
|
|
-- dispellable ------------------------------------------------------------------
|
|
drDispellableCB = Cell.CreateCheckButton(drPane, L["Dispellable By Me"], function(checked, self)
|
|
CellDB["dispelRequest"]["dispellableByMe"] = checked
|
|
Cell.Fire("UpdateRequests", "dispelRequest")
|
|
end)
|
|
drDispellableCB:SetPoint("TOPLEFT", drEnabledCB, "TOPLEFT", 200, 0)
|
|
---------------------------------------------------------------------------------
|
|
|
|
-- response ---------------------------------------------------------------------
|
|
drResponseDD = Cell.CreateDropdown(drPane, 345)
|
|
drResponseDD:SetPoint("TOPLEFT", drEnabledCB, "BOTTOMLEFT", 0, -37)
|
|
drResponseDD:SetItems({
|
|
{
|
|
["text"] = L["Respond to all dispellable debuffs"],
|
|
["value"] = "all",
|
|
["onClick"] = function()
|
|
CellDB["dispelRequest"]["responseType"] = "all"
|
|
UpdateDRWidgets()
|
|
Cell.Fire("UpdateRequests", "dispelRequest")
|
|
end
|
|
},
|
|
{
|
|
["text"] = L["Respond to specific dispellable debuffs"],
|
|
["value"] = "specific",
|
|
["onClick"] = function()
|
|
CellDB["dispelRequest"]["responseType"] = "specific"
|
|
UpdateDRWidgets()
|
|
Cell.Fire("UpdateRequests", "dispelRequest")
|
|
end
|
|
},
|
|
})
|
|
|
|
drResponseText = drPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
drResponseText:SetPoint("BOTTOMLEFT", drResponseDD, "TOPLEFT", 0, 1)
|
|
drResponseText:SetText(L["Response Type"])
|
|
---------------------------------------------------------------------------------
|
|
|
|
-- timeout ----------------------------------------------------------------------
|
|
drTimeoutDD = Cell.CreateDropdown(drPane, 60)
|
|
drTimeoutDD:SetPoint("TOPLEFT", drResponseDD, "TOPRIGHT", 7, 0)
|
|
|
|
local items = {}
|
|
local secs = {1, 2, 3, 4, 5, 10, 15, 20, 25, 30}
|
|
for _, s in ipairs(secs) do
|
|
tinsert(items, {
|
|
["text"] = s,
|
|
["value"] = s,
|
|
["onClick"] = function()
|
|
CellDB["dispelRequest"]["timeout"] = s
|
|
Cell.Fire("UpdateRequests", "dispelRequest")
|
|
end
|
|
})
|
|
end
|
|
drTimeoutDD:SetItems(items)
|
|
|
|
drTimeoutText = drPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
drTimeoutText:SetPoint("BOTTOMLEFT", drTimeoutDD, "TOPLEFT", 0, 1)
|
|
drTimeoutText:SetText(L["Timeout"])
|
|
---------------------------------------------------------------------------------
|
|
|
|
-- macro ------------------------------------------------------------------------
|
|
drMacroEB = Cell.CreateEditBox(drPane, 412, 20)
|
|
drMacroEB:SetPoint("TOPLEFT", drResponseDD, "BOTTOMLEFT", 0, -27)
|
|
|
|
drMacroEB:SetText("/run C_ChatInfo.SendAddonMessage(\"CELL_REQ_D\",\"D\",\"RAID\")")
|
|
drMacroEB:SetCursorPosition(0)
|
|
|
|
drMacroEB:SetScript("OnTextChanged", function(self, userChanged)
|
|
if userChanged then
|
|
drMacroEB:SetText("/run C_ChatInfo.SendAddonMessage(\"CELL_REQ_D\",\"D\",\"RAID\")")
|
|
drMacroEB:SetCursorPosition(0)
|
|
drMacroEB:HighlightText()
|
|
end
|
|
end)
|
|
|
|
drMacroEB.gauge = drMacroEB:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
drMacroEB.gauge:SetText(drMacroEB:GetText())
|
|
|
|
drMacroEB:SetScript("OnEditFocusGained", function()
|
|
local requiredWidth = drMacroEB.gauge:GetStringWidth()
|
|
if requiredWidth > drMacroEB:GetWidth() then
|
|
P.Width(drMacroEB, requiredWidth + 20)
|
|
end
|
|
drMacroEB:HighlightText()
|
|
end)
|
|
|
|
drMacroEB:SetScript("OnEditFocusLost", function()
|
|
P.Width(drMacroEB, 412)
|
|
drMacroEB:SetCursorPosition(0)
|
|
drMacroEB:HighlightText(0, 0)
|
|
end)
|
|
|
|
drMacroText = drPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
drMacroText:SetPoint("BOTTOMLEFT", drMacroEB, "TOPLEFT", 0, 1)
|
|
drMacroText:SetText(L["Macro"])
|
|
|
|
---------------------------------------------------------------------------------
|
|
|
|
-- debuffs ----------------------------------------------------------------------
|
|
drDebuffsList = CreateFrame("Frame", nil, drPane)
|
|
drDebuffsList:SetPoint("TOPLEFT", drMacroEB, "BOTTOMLEFT", 0, -35)
|
|
drDebuffsList:SetSize(270, 172)
|
|
Cell.CreateScrollFrame(drDebuffsList)
|
|
Cell.StylizeFrame(drDebuffsList.scrollFrame)
|
|
drDebuffsList.scrollFrame:SetScrollStep(19)
|
|
|
|
Cell.CreateMask(drDebuffsList)
|
|
drDebuffsList.mask:Hide()
|
|
|
|
local popup = Cell.CreatePopupEditBox(drDebuffsList)
|
|
popup:SetNumeric(true)
|
|
popup:SetScript("OnTextChanged", function()
|
|
local spellId = tonumber(popup:GetText())
|
|
if not spellId then
|
|
CellSpellTooltip:Hide()
|
|
return
|
|
end
|
|
|
|
local name, tex = F.GetSpellInfo(spellId)
|
|
if not name then
|
|
CellSpellTooltip:Hide()
|
|
return
|
|
end
|
|
|
|
CellSpellTooltip:SetOwner(popup, "ANCHOR_NONE")
|
|
CellSpellTooltip:SetPoint("TOPLEFT", popup, "BOTTOMLEFT", 0, -1)
|
|
CellSpellTooltip:SetSpellByID(spellId, tex)
|
|
CellSpellTooltip:Show()
|
|
end)
|
|
|
|
popup:HookScript("OnHide", function()
|
|
CellSpellTooltip:Hide()
|
|
end)
|
|
|
|
debuffItems[0] = Cell.CreateButton(drDebuffsList.scrollFrame.content, "", "transparent-accent", {20, 20})
|
|
debuffItems[0]:SetTexture("Interface\\AddOns\\Cell\\Media\\Icons\\new", {16, 16}, {"RIGHT", -1, 0})
|
|
debuffItems[0]:SetScript("OnClick", function(self)
|
|
local popup = Cell.CreatePopupEditBox(drDebuffsList, function(text)
|
|
local spellId = tonumber(text)
|
|
local spellName = F.GetSpellInfo(spellId)
|
|
if spellId and spellName then
|
|
-- update db
|
|
tinsert(CellDB["dispelRequest"]["debuffs"], spellId)
|
|
LoadList(true)
|
|
else
|
|
F.Print(L["Invalid spell id."])
|
|
end
|
|
end)
|
|
popup:SetPoint("TOPLEFT", self)
|
|
popup:SetPoint("BOTTOMRIGHT", self)
|
|
popup:ShowEditBox("")
|
|
popup:SetFrameStrata("DIALOG")
|
|
popup:SetTips("|cffababab"..L["Input spell id"])
|
|
end)
|
|
|
|
drDebuffsText = drPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
drDebuffsText:SetPoint("BOTTOMLEFT", drDebuffsList, "TOPLEFT", 0, 1)
|
|
drDebuffsText:SetText(L["Debuffs"])
|
|
---------------------------------------------------------------------------------
|
|
|
|
-- type -------------------------------------------------------------------------
|
|
drTypeDD = Cell.CreateDropdown(drPane, 135)
|
|
drTypeDD:SetPoint("TOPLEFT", drDebuffsList, "TOPRIGHT", 7, 0)
|
|
drTypeDD:SetItems({
|
|
{
|
|
["text"] = L["Text"],
|
|
["value"] = "text",
|
|
["onClick"] = function()
|
|
U.HideGlowOptions()
|
|
U.HideTextOptions()
|
|
Cell.StopRainbowText(drTypeOptionsBtn:GetFontString())
|
|
drTypeOptionsBtn:SetText(L["Text Options"])
|
|
CellDB["dispelRequest"]["type"] = "text"
|
|
drType = "text"
|
|
Cell.Fire("UpdateRequests", "dispelRequest")
|
|
end
|
|
},
|
|
{
|
|
["text"] = L["Glow"],
|
|
["value"] = "glow",
|
|
["onClick"] = function()
|
|
U.HideGlowOptions()
|
|
U.HideTextOptions()
|
|
Cell.StopRainbowText(drTypeOptionsBtn:GetFontString())
|
|
drTypeOptionsBtn:SetText(L["Glow Options"])
|
|
CellDB["dispelRequest"]["type"] = "glow"
|
|
drType = "glow"
|
|
Cell.Fire("UpdateRequests", "dispelRequest")
|
|
end
|
|
},
|
|
})
|
|
|
|
drTypeText = drPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
drTypeText:SetPoint("BOTTOMLEFT", drTypeDD, "TOPLEFT", 0, 1)
|
|
drTypeText:SetText(L["Type"])
|
|
|
|
---------------------------------------------------------------------------------
|
|
|
|
-- type option ------------------------------------------------------------------
|
|
drTypeOptionsBtn = Cell.CreateButton(drPane, L["Glow Options"], "accent", {135, 20})
|
|
drTypeOptionsBtn:SetPoint("TOPLEFT", drTypeDD, "BOTTOMLEFT", 0, -15)
|
|
drTypeOptionsBtn:SetScript("OnClick", function()
|
|
local fs = drTypeOptionsBtn:GetFontString()
|
|
if fs.rainbow then
|
|
Cell.StopRainbowText(fs)
|
|
else
|
|
Cell.StartRainbowText(fs)
|
|
end
|
|
|
|
if drType == "text" then
|
|
U.ShowTextOptions(Cell.frames.utilitiesTab)
|
|
else
|
|
U.ShowGlowOptions(Cell.frames.utilitiesTab, CellDB["dispelRequest"]["glowOptions"])
|
|
end
|
|
end)
|
|
drTypeOptionsBtn:SetScript("OnHide", function()
|
|
Cell.StopRainbowText(drTypeOptionsBtn:GetFontString())
|
|
end)
|
|
Cell.RegisterForCloseDropdown(drTypeOptionsBtn)
|
|
---------------------------------------------------------------------------------
|
|
end
|
|
|
|
LoadList = function(scrollToBottom)
|
|
drDebuffsList.scrollFrame:Reset()
|
|
|
|
debuffItems[0]:SetParent(drDebuffsList.scrollFrame.content)
|
|
debuffItems[0]:Show()
|
|
debuffItems[0]:SetPoint("BOTTOMLEFT")
|
|
debuffItems[0]:SetPoint("RIGHT")
|
|
|
|
for i, id in ipairs(CellDB["dispelRequest"]["debuffs"]) do
|
|
if not debuffItems[i] then
|
|
debuffItems[i] = Cell.CreateButton(drDebuffsList.scrollFrame.content, "", "transparent-accent", {20, 20})
|
|
|
|
-- icon
|
|
debuffItems[i].spellIconBg = debuffItems[i]:CreateTexture(nil, "BORDER")
|
|
debuffItems[i].spellIconBg:SetSize(16, 16)
|
|
debuffItems[i].spellIconBg:SetPoint("TOPLEFT", 2, -2)
|
|
debuffItems[i].spellIconBg:SetColorTexture(0, 0, 0, 1)
|
|
debuffItems[i].spellIconBg:Hide()
|
|
|
|
debuffItems[i].spellIcon = debuffItems[i]:CreateTexture(nil, "OVERLAY")
|
|
debuffItems[i].spellIcon:SetPoint("TOPLEFT", debuffItems[i].spellIconBg, 1, -1)
|
|
debuffItems[i].spellIcon:SetPoint("BOTTOMRIGHT", debuffItems[i].spellIconBg, -1, 1)
|
|
debuffItems[i].spellIcon:SetTexCoord(0.08, 0.92, 0.08, 0.92)
|
|
debuffItems[i].spellIcon:Hide()
|
|
|
|
-- spellId text
|
|
debuffItems[i].spellIdText = debuffItems[i]:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
debuffItems[i].spellIdText:SetPoint("LEFT", debuffItems[i].spellIconBg, "RIGHT", 5, 0)
|
|
debuffItems[i].spellIdText:SetPoint("RIGHT", debuffItems[i], "LEFT", 80, 0)
|
|
debuffItems[i].spellIdText:SetWordWrap(false)
|
|
debuffItems[i].spellIdText:SetJustifyH("LEFT")
|
|
|
|
-- spellName text
|
|
debuffItems[i].spellNameText = debuffItems[i]:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
|
|
debuffItems[i].spellNameText:SetPoint("LEFT", debuffItems[i].spellIdText, "RIGHT", 5, 0)
|
|
debuffItems[i].spellNameText:SetPoint("RIGHT", -20, 0)
|
|
debuffItems[i].spellNameText:SetWordWrap(false)
|
|
debuffItems[i].spellNameText:SetJustifyH("LEFT")
|
|
|
|
-- del
|
|
debuffItems[i].del = Cell.CreateButton(debuffItems[i], "", "none", {18, 20}, true, true)
|
|
debuffItems[i].del:SetTexture("Interface\\AddOns\\Cell\\Media\\Icons\\delete", {16, 16}, {"CENTER", 0, 0})
|
|
debuffItems[i].del:SetPoint("RIGHT")
|
|
debuffItems[i].del.tex:SetVertexColor(0.6, 0.6, 0.6, 1)
|
|
debuffItems[i].del:SetScript("OnEnter", function()
|
|
debuffItems[i]:GetScript("OnEnter")(debuffItems[i])
|
|
debuffItems[i].del.tex:SetVertexColor(1, 1, 1, 1)
|
|
end)
|
|
debuffItems[i].del:SetScript("OnLeave", function()
|
|
debuffItems[i]:GetScript("OnLeave")(debuffItems[i])
|
|
debuffItems[i].del.tex:SetVertexColor(0.6, 0.6, 0.6, 1)
|
|
end)
|
|
|
|
-- tooltip
|
|
debuffItems[i]:HookScript("OnEnter", function(self)
|
|
if not drDebuffsList.popupEditBox:IsShown() then
|
|
local name, icon = F.GetSpellInfo(self.spellId)
|
|
if not name then
|
|
CellSpellTooltip:Hide()
|
|
return
|
|
end
|
|
|
|
CellSpellTooltip:SetOwner(debuffItems[i], "ANCHOR_NONE")
|
|
CellSpellTooltip:SetPoint("TOPRIGHT", debuffItems[i], "TOPLEFT", -1, 0)
|
|
CellSpellTooltip:SetSpellByID(self.spellId, icon)
|
|
CellSpellTooltip:Show()
|
|
end
|
|
end)
|
|
debuffItems[i]:HookScript("OnLeave", function()
|
|
if not drDebuffsList.popupEditBox:IsShown() then
|
|
CellSpellTooltip:Hide()
|
|
end
|
|
end)
|
|
end
|
|
|
|
local name, icon = F.GetSpellInfo(id)
|
|
|
|
debuffItems[i].spellId = id
|
|
debuffItems[i].spellIdText:SetText(id)
|
|
debuffItems[i].spellNameText:SetText(name or "|cffff2222"..L["Invalid"])
|
|
|
|
if icon then
|
|
debuffItems[i].spellIcon:SetTexture(icon)
|
|
debuffItems[i].spellIcon:Show()
|
|
debuffItems[i].spellIconBg:Show()
|
|
else
|
|
debuffItems[i].spellIcon:Hide()
|
|
debuffItems[i].spellIconBg:Hide()
|
|
end
|
|
|
|
|
|
debuffItems[i].del:SetScript("OnClick", function()
|
|
tremove(CellDB["dispelRequest"]["debuffs"], i)
|
|
Cell.Fire("UpdateRequests", "dispelRequest")
|
|
LoadList()
|
|
end)
|
|
|
|
debuffItems[i]:SetParent(drDebuffsList.scrollFrame.content)
|
|
debuffItems[i]:Show()
|
|
|
|
debuffItems[i]:SetPoint("RIGHT")
|
|
if i == 1 then
|
|
debuffItems[i]:SetPoint("TOPLEFT")
|
|
else
|
|
debuffItems[i]:SetPoint("TOPLEFT", debuffItems[i-1], "BOTTOMLEFT", 0, 1)
|
|
end
|
|
end
|
|
|
|
drDebuffsList.scrollFrame:SetContentHeight(20, #CellDB["dispelRequest"]["debuffs"]+1, -1)
|
|
|
|
if scrollToBottom then
|
|
drDebuffsList.scrollFrame:ScrollToBottom()
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- create text
|
|
-------------------------------------------------
|
|
local flipBookFrames = {
|
|
["A"] = 31,
|
|
["B"] = 30,
|
|
["C"] = 25,
|
|
}
|
|
|
|
function U.CreateDispelRequestText(parent)
|
|
local drText = CreateFrame("Frame", parent:GetName().."DispelRequestText", parent.widgets.indicatorFrame)
|
|
parent.widgets.drText = drText
|
|
drText:SetIgnoreParentAlpha(true)
|
|
drText:SetFrameLevel(parent.widgets.indicatorFrame:GetFrameLevel()+110)
|
|
drText:Hide()
|
|
|
|
local tex = drText:CreateTexture(nil, "ARTWORK")
|
|
-- tex:SetTexture("Interface/AddOns/Cell/Media/FlipBooks/dispel.png")
|
|
--tex:SetAtlas("UI-HUD-ActionBar-GCD-Flipbook")
|
|
--tex:SetTexture("interface/hud/uiactionbarfx")
|
|
--tex:SetTexCoord(0.412598, 0.458496, 0.393555, 0.898438) -- NOTE: SetTexCoord will NOT work
|
|
tex:SetAllPoints(drText)
|
|
tex:SetParentKey("Flipbook")
|
|
|
|
local ag = drText:CreateAnimationGroup()
|
|
ag:SetLooping("REPEAT")
|
|
|
|
local flip = ag:CreateAnimation("FlipBook")
|
|
flip:SetDuration(1)
|
|
flip:SetFlipBookRows(8)
|
|
flip:SetFlipBookColumns(4)
|
|
flip:SetFlipBookFrames(31)
|
|
--flip:SetFlipBookFrameWidth(0)
|
|
--flip:SetFlipBookFrameHeight(0)
|
|
flip:SetChildKey("Flipbook")
|
|
|
|
function drText:Display()
|
|
drText:Show()
|
|
ag:Play()
|
|
end
|
|
|
|
function drText:SetType(type)
|
|
tex:SetTexture("Interface/AddOns/Cell/Media/FlipBooks/dispel_"..type..".png")
|
|
flip:SetFlipBookFrames(flipBookFrames[type])
|
|
end
|
|
|
|
function drText:SetColor(color)
|
|
tex:SetVertexColor(unpack(color))
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- show
|
|
-------------------------------------------------
|
|
local init
|
|
local function ShowUtilitySettings(which)
|
|
if which == "dispelRequest" then
|
|
if not init then
|
|
CreateDRPane()
|
|
end
|
|
|
|
drPane:Show()
|
|
|
|
if init then return end
|
|
init = true
|
|
|
|
-- dispel request
|
|
drEnabledCB:SetChecked(CellDB["dispelRequest"]["enabled"])
|
|
drDispellableCB:SetChecked(CellDB["dispelRequest"]["dispellableByMe"])
|
|
drResponseDD:SetSelectedValue(CellDB["dispelRequest"]["responseType"])
|
|
drTimeoutDD:SetSelected(CellDB["dispelRequest"]["timeout"])
|
|
drTypeDD:SetSelectedValue(CellDB["dispelRequest"]["type"])
|
|
UpdateDRWidgets()
|
|
LoadList()
|
|
|
|
drType = CellDB["dispelRequest"]["type"]
|
|
if drType == "text" then
|
|
drTypeOptionsBtn:SetText(L["Text Options"])
|
|
else
|
|
drTypeOptionsBtn:SetText(L["Glow Options"])
|
|
end
|
|
|
|
elseif init then
|
|
drPane:Hide()
|
|
end
|
|
end
|
|
Cell.RegisterCallback("ShowUtilitySettings", "DispelRequest_ShowUtilitySettings", ShowUtilitySettings)
|