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.

778 lines
31 KiB

local _, Cell = ...
local L = Cell.L
local F = Cell.funcs
local U = Cell.uFuncs
local P = Cell.pixelPerfectFuncs
local LCG = LibStub("LibCustomGlow-1.0")
-------------------------------------------------
-- spell request
-------------------------------------------------
local srPane, srTypeOptionsBtn
local ShowSpellEditFrame
local waTips, srEnabledCB, srExistsCB, srKnownOnlyCB, srFreeCDOnlyCB, srReplyCDCB, srReplyCastEB, srResponseDD, srResponseText, srTimeoutDD, srTimeoutText
local srSpellsDD, srSpellsText, srAddBtn, srDeleteBtn, srMacroText, srMacroEB, srTypeDD, srTypeText
local srSelectedSpell, canEdit, srType
local function ShowSpellOptions(index)
5 months ago
U.HideGlowOptions()
U.HideIconOptions()
Cell.StopRainbowText(srTypeOptionsBtn:GetFontString())
srSelectedSpell = index
local responseType = CellDB["spellRequest"]["responseType"]
local spellId = CellDB["spellRequest"]["spells"][index]["spellId"]
local macroText, keywords
if responseType == "all" then
srMacroText:SetText(L["Macro"])
macroText = "/run C_ChatInfo.SendAddonMessage(\"CELL_REQ_S\",\""..spellId.."\",\"RAID\")"
elseif responseType == "me" then
srMacroText:SetText(L["Macro"])
macroText = "/run C_ChatInfo.SendAddonMessage(\"CELL_REQ_S\",\""..spellId..":"..GetUnitName("player").."\",\"RAID\")"
else -- whisper
srMacroText:SetText(L["Contains"])
keywords = CellDB["spellRequest"]["spells"][index]["keywords"]
end
if macroText then
srMacroEB:SetText(macroText)
srMacroEB.gauge:SetText(macroText)
srMacroEB:SetScript("OnTextChanged", function(self, userChanged)
if userChanged then
srMacroEB:SetText(macroText)
srMacroEB:HighlightText()
end
end)
else
srMacroEB:SetText(keywords)
srMacroEB.gauge:SetText(keywords)
srMacroEB:SetScript("OnTextChanged", function(self, userChanged)
if userChanged then
CellDB["spellRequest"]["spells"][index]["keywords"] = strtrim(self:GetText())
5 months ago
Cell.Fire("UpdateRequests", "spellRequest_spells")
end
end)
end
canEdit = not CellDB["spellRequest"]["spells"][index]["isBuiltIn"] -- not built-in
srDeleteBtn:SetEnabled(canEdit)
srMacroText:Show()
srMacroEB:SetCursorPosition(0)
srMacroEB:Show()
srType = CellDB["spellRequest"]["spells"][index]["type"]
srTypeText:Show()
srTypeDD:Show()
srTypeDD:SetSelectedValue(srType)
srTypeOptionsBtn:Show()
if srType == "icon" then
srTypeOptionsBtn:SetText(L["Icon Options"])
else
srTypeOptionsBtn:SetText(L["Glow Options"])
end
end
local function HideSpellOptions()
5 months ago
U.HideGlowOptions()
U.HideIconOptions()
Cell.StopRainbowText(srTypeOptionsBtn:GetFontString())
srSelectedSpell = nil
canEdit = nil
srType = nil
srSpellsDD:ClearSelected()
srDeleteBtn:SetEnabled(false)
srTypeOptionsBtn:Hide()
CellDropdownList:Hide()
srMacroText:Hide()
srMacroEB:Hide()
srTypeDD:Hide()
srTypeText:Hide()
end
local function LoadSpellsDropdown()
local items = {}
for i, t in pairs(CellDB["spellRequest"]["spells"]) do
5 months ago
local name, icon = F.GetSpellInfo(t["spellId"])
tinsert(items, {
["text"] = "|T"..icon..":0::0:0:16:16:1:15:1:15|t "..name,
["value"] = t["spellId"],
["onClick"] = function()
ShowSpellOptions(i)
end
})
end
srSpellsDD:SetItems(items)
end
local function UpdateSRWidgets()
5 months ago
Cell.SetEnabled(CellDB["spellRequest"]["enabled"], waTips, srExistsCB, srKnownOnlyCB, srResponseDD, srResponseText, srTimeoutDD, srTimeoutText, srSpellsDD, srSpellsText, srAddBtn, srDeleteBtn)
Cell.SetEnabled(CellDB["spellRequest"]["enabled"] and CellDB["spellRequest"]["knownSpellsOnly"], srFreeCDOnlyCB)
Cell.SetEnabled(CellDB["spellRequest"]["enabled"] and CellDB["spellRequest"]["knownSpellsOnly"] and CellDB["spellRequest"]["responseType"] ~= "all", srReplyCDCB)
Cell.SetEnabled(CellDB["spellRequest"]["enabled"] and CellDB["spellRequest"]["knownSpellsOnly"], srReplyCastEB)
end
local function CreateSRPane()
if not Cell.frames.utilitiesTab.mask then
5 months ago
Cell.CreateMask(Cell.frames.utilitiesTab, nil, {1, -1, -1, 1})
Cell.frames.utilitiesTab.mask:Hide()
end
5 months ago
srPane = Cell.CreateTitledPane(Cell.frames.utilitiesTab, L["Spell Request"], 422, 250)
srPane:SetPoint("TOPLEFT", 5, -5)
srPane:SetPoint("BOTTOMRIGHT", -5, 5)
srPane:SetScript("OnHide", function()
HideSpellOptions()
end)
5 months ago
waTips = Cell.CreateButton(srPane, "WA", "accent", {50, 17})
waTips:SetPoint("TOPRIGHT")
waTips:HookScript("OnEnter", function()
CellTooltip:SetOwner(waTips, "ANCHOR_NONE")
CellTooltip:SetPoint("TOPLEFT", waTips, "TOPRIGHT", 6, 0)
CellTooltip:AddLine("WeakAuras Custom Events")
CellTooltip:AddLine("|cffffffff"..[[eventName: "CELL_NOTIFY"]])
CellTooltip:AddLine("|cffffffff".."arg1:\n \"SPELL_REQ_RECEIVED\"\n \"SPELL_REQ_APPLIED\"")
CellTooltip:AddLine("|cffffffff".."arg2: unitId")
CellTooltip:AddLine("|cffffffff".."arg3: buffId")
CellTooltip:AddLine("|cffffffff".."arg4: timeout")
CellTooltip:AddLine("|cffffffff".."arg5: caster")
CellTooltip:Show()
end)
waTips:HookScript("OnLeave", function()
CellTooltip:Hide()
end)
local srTips = srPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
srTips:SetPoint("TOPLEFT", 5, -25)
srTips:SetJustifyH("LEFT")
srTips:SetSpacing(5)
5 months ago
srTips:SetText(L["Glow unit button when a group member sends a %s request"]:format(Cell.GetAccentColorString()..L["SPELL"].."|r").."\n"..
L["Shows only one spell request on a unit button at a time"]
)
-- enabled ----------------------------------------------------------------------
5 months ago
srEnabledCB = Cell.CreateCheckButton(srPane, L["Enabled"], function(checked, self)
CellDB["spellRequest"]["enabled"] = checked
UpdateSRWidgets()
HideSpellOptions()
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
end)
srEnabledCB:SetPoint("TOPLEFT", srPane, "TOPLEFT", 5, -100)
---------------------------------------------------------------------------------
-- check exists -----------------------------------------------------------------
5 months ago
srExistsCB = Cell.CreateCheckButton(srPane, L["Check If Exists"], function(checked, self)
CellDB["spellRequest"]["checkIfExists"] = checked
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
end, L["Do nothing if requested spell/buff already exists on requester"])
srExistsCB:SetPoint("TOPLEFT", srEnabledCB, "TOPLEFT", 200, 0)
---------------------------------------------------------------------------------
-- known only -------------------------------------------------------------------
5 months ago
srKnownOnlyCB = Cell.CreateCheckButton(srPane, L["Known Spells Only"], function(checked, self)
CellDB["spellRequest"]["knownSpellsOnly"] = checked
UpdateSRWidgets()
HideSpellOptions()
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
end, L["If disabled, no check, no reply, just glow"])
srKnownOnlyCB:SetPoint("TOPLEFT", srEnabledCB, "BOTTOMLEFT", 0, -15)
---------------------------------------------------------------------------------
-- free cooldown ----------------------------------------------------------------
5 months ago
srFreeCDOnlyCB = Cell.CreateCheckButton(srPane, L["Free Cooldown Only"], function(checked, self)
CellDB["spellRequest"]["freeCooldownOnly"] = checked
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
end)
srFreeCDOnlyCB:SetPoint("TOPLEFT", srKnownOnlyCB, "TOPLEFT", 200, 0)
---------------------------------------------------------------------------------
-- reply cd ---------------------------------------------------------------------
5 months ago
srReplyCDCB = Cell.CreateCheckButton(srPane, L["Reply With Cooldown"], function(checked, self)
CellDB["spellRequest"]["replyCooldown"] = checked
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
end)
srReplyCDCB:SetPoint("TOPLEFT", srKnownOnlyCB, "BOTTOMLEFT", 0, -15)
---------------------------------------------------------------------------------
-- reply after cast -------------------------------------------------------------
5 months ago
srReplyCastEB = Cell.CreateEditBox(srPane, 20, 20)
srReplyCastEB:SetPoint("TOPLEFT", srFreeCDOnlyCB, "BOTTOMLEFT", 0, -12)
srReplyCastEB:SetPoint("RIGHT", -5, 0)
srReplyCastEB:SetScript("OnTextChanged", function(self, userChanged)
if userChanged then
local text = strtrim(self:GetText())
if text ~= "" then
CellDB["spellRequest"]["replyAfterCast"] = text
srReplyCastEB.tip:Hide()
else
CellDB["spellRequest"]["replyAfterCast"] = nil
srReplyCastEB.tip:Show()
end
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
end
end)
srReplyCastEB.tip = srReplyCastEB:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
srReplyCastEB.tip:SetPoint("LEFT", 5, 0)
srReplyCastEB.tip:SetTextColor(0.4, 0.4, 0.4, 1)
srReplyCastEB.tip:SetText(L["Reply After Cast"])
srReplyCastEB.tip:Hide()
---------------------------------------------------------------------------------
-- response ----------------------------------------------------------------------
5 months ago
srResponseDD = Cell.CreateDropdown(srPane, 345)
srResponseDD:SetPoint("TOPLEFT", srReplyCDCB, "BOTTOMLEFT", 0, -37)
srResponseDD:SetItems({
{
["text"] = L["Respond to all requests from group members"],
["value"] = "all",
["onClick"] = function()
HideSpellOptions()
CellDB["spellRequest"]["responseType"] = "all"
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
UpdateSRWidgets()
end
},
{
["text"] = L["Respond to requests that are only sent to me"],
["value"] = "me",
["onClick"] = function()
HideSpellOptions()
CellDB["spellRequest"]["responseType"] = "me"
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
UpdateSRWidgets()
end
},
{
["text"] = L["Respond to whispers"],
["value"] = "whisper",
["onClick"] = function()
HideSpellOptions()
CellDB["spellRequest"]["responseType"] = "whisper"
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
UpdateSRWidgets()
end
},
})
srResponseText = srPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
srResponseText:SetPoint("BOTTOMLEFT", srResponseDD, "TOPLEFT", 0, 1)
srResponseText:SetText(L["Response Type"])
---------------------------------------------------------------------------------
-- timeout ----------------------------------------------------------------------
5 months ago
srTimeoutDD = Cell.CreateDropdown(srPane, 60)
srTimeoutDD:SetPoint("TOPLEFT", srResponseDD, "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["spellRequest"]["timeout"] = s
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
end
})
end
srTimeoutDD:SetItems(items)
srTimeoutText = srPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
srTimeoutText:SetPoint("BOTTOMLEFT", srTimeoutDD, "TOPLEFT", 0, 1)
srTimeoutText:SetText(L["Timeout"])
---------------------------------------------------------------------------------
-- spells -----------------------------------------------------------------------
5 months ago
srSpellsDD = Cell.CreateDropdown(srPane, 268)
srSpellsDD:SetPoint("TOPLEFT", srResponseDD, "BOTTOMLEFT", 0, -37)
srSpellsText = srPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
srSpellsText:SetPoint("BOTTOMLEFT", srSpellsDD, "TOPLEFT", 0, 1)
srSpellsText:SetText(L["Spells"])
---------------------------------------------------------------------------------
-- create -----------------------------------------------------------------------
5 months ago
srAddBtn = Cell.CreateButton(srPane, L["Add"], "green-hover", {65, 20}, nil, nil, nil, nil, nil,
L["Add new spell"], L["[Alt+LeftClick] to edit"], L["The spell is required to apply a buff on the target"], L["SpellId and BuffId are the same in most cases"])
srAddBtn:SetPoint("TOPLEFT", srSpellsDD, "TOPRIGHT", 7, 0)
srAddBtn:SetScript("OnUpdate", function(self, elapsed)
srAddBtn.elapsed = (srAddBtn.elapsed or 0) + elapsed
if srAddBtn.elapsed >= 0.25 then
if IsAltKeyDown() and canEdit then
srAddBtn:SetText(L["Edit"])
else
srAddBtn:SetText(L["Add"])
end
end
end)
srAddBtn:SetScript("OnClick", function()
if IsAltKeyDown() and canEdit then
ShowSpellEditFrame(srSelectedSpell)
else
ShowSpellEditFrame()
end
end)
5 months ago
Cell.RegisterForCloseDropdown(srAddBtn)
---------------------------------------------------------------------------------
-- delete -----------------------------------------------------------------------
5 months ago
srDeleteBtn = Cell.CreateButton(srPane, L["Delete"], "red-hover", {65, 20})
srDeleteBtn:SetPoint("TOPLEFT", srAddBtn, "TOPRIGHT", 7, 0)
srDeleteBtn:SetScript("OnClick", function()
5 months ago
local name, icon = F.GetSpellInfo(CellDB["spellRequest"]["spells"][srSelectedSpell]["spellId"])
local spellEditFrame = Cell.CreateConfirmPopup(Cell.frames.utilitiesTab, 200, L["Delete spell?"].."\n".."|T"..icon..":0::0:0:16:16:1:15:1:15|t "..name, function(self)
tremove(CellDB["spellRequest"]["spells"], srSelectedSpell)
srSpellsDD:RemoveCurrentItem()
HideSpellOptions()
5 months ago
Cell.Fire("UpdateRequests", "spellRequest_spells")
end, nil, true)
spellEditFrame:SetPoint("LEFT", 117, 0)
spellEditFrame:SetPoint("BOTTOM", srDeleteBtn, 0, 0)
end)
5 months ago
Cell.RegisterForCloseDropdown(srDeleteBtn)
---------------------------------------------------------------------------------
-- macro ------------------------------------------------------------------------
5 months ago
srMacroEB = Cell.CreateEditBox(srPane, 412, 20)
srMacroEB:SetPoint("TOPLEFT", srSpellsDD, "BOTTOMLEFT", 0, -27)
srMacroText = srPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
srMacroText:SetPoint("BOTTOMLEFT", srMacroEB, "TOPLEFT", 0, 1)
srMacroText:SetText(L["Macro"])
srMacroEB.gauge = srMacroEB:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
srMacroEB:SetScript("OnEditFocusGained", function()
local requiredWidth = srMacroEB.gauge:GetStringWidth()
if requiredWidth > srMacroEB:GetWidth() then
5 months ago
P.Width(srMacroEB, requiredWidth + 20)
end
srMacroEB:HighlightText()
end)
srMacroEB:SetScript("OnEditFocusLost", function()
5 months ago
P.Width(srMacroEB, 412)
srMacroEB:SetCursorPosition(0)
srMacroEB:HighlightText(0, 0)
end)
---------------------------------------------------------------------------------
-- type -------------------------------------------------------------------------
5 months ago
srTypeDD = Cell.CreateDropdown(srPane, 131)
srTypeDD:SetPoint("TOPLEFT", srMacroEB, "BOTTOMLEFT", 0, -27)
srTypeDD:SetItems({
{
["text"] = L["Icon"],
["value"] = "icon",
["onClick"] = function()
5 months ago
U.HideGlowOptions()
U.HideIconOptions()
Cell.StopRainbowText(srTypeOptionsBtn:GetFontString())
srTypeOptionsBtn:SetText(L["Icon Options"])
CellDB["spellRequest"]["spells"][srSelectedSpell]["type"] = "icon"
srType = "icon"
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
Cell.Fire("UpdateRequests", "spellRequest_spells")
end
},
{
["text"] = L["Glow"],
["value"] = "glow",
["onClick"] = function()
5 months ago
U.HideGlowOptions()
U.HideIconOptions()
Cell.StopRainbowText(srTypeOptionsBtn:GetFontString())
srTypeOptionsBtn:SetText(L["Glow Options"])
CellDB["spellRequest"]["spells"][srSelectedSpell]["type"] = "glow"
srType = "glow"
5 months ago
Cell.Fire("UpdateRequests", "spellRequest")
Cell.Fire("UpdateRequests", "spellRequest_spells")
end
},
})
srTypeText = srPane:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
srTypeText:SetPoint("BOTTOMLEFT", srTypeDD, "TOPLEFT", 0, 1)
srTypeText:SetText(L["Type"])
---------------------------------------------------------------------------------
-- type option ------------------------------------------------------------------
5 months ago
srTypeOptionsBtn = Cell.CreateButton(srPane, L["Glow Options"], "accent", {130, 20})
srTypeOptionsBtn:SetPoint("TOPLEFT", srTypeDD, "TOPRIGHT", 7, 0)
srTypeOptionsBtn:SetScript("OnClick", function()
local fs = srTypeOptionsBtn:GetFontString()
if fs.rainbow then
5 months ago
Cell.StopRainbowText(fs)
else
5 months ago
Cell.StartRainbowText(fs)
end
if srType == "icon" then
5 months ago
U.ShowIconOptions(Cell.frames.utilitiesTab, CellDB["spellRequest"]["spells"][srSelectedSpell]["icon"], CellDB["spellRequest"]["spells"][srSelectedSpell]["iconColor"])
else
5 months ago
U.ShowGlowOptions(Cell.frames.utilitiesTab, CellDB["spellRequest"]["spells"][srSelectedSpell]["glowOptions"])
end
end)
srTypeOptionsBtn:SetScript("OnHide", function()
5 months ago
Cell.StopRainbowText(srTypeOptionsBtn:GetFontString())
end)
5 months ago
Cell.RegisterForCloseDropdown(srTypeOptionsBtn)
---------------------------------------------------------------------------------
end
-------------------------------------------------
-- spell edit frame
-------------------------------------------------
local spellId, buffId, spellName, spellIcon
local spellEditFrame, title, spellIdEB, buffIdEB, addBtn, cancelBtn
local function CreateSpellEditFrame()
spellEditFrame = CreateFrame("Frame", nil, Cell.frames.utilitiesTab, "BackdropTemplate")
spellEditFrame:Hide()
5 months ago
Cell.StylizeFrame(spellEditFrame, {0.1, 0.1, 0.1, 0.95}, Cell.GetAccentColorTable())
spellEditFrame:SetFrameLevel(Cell.frames.utilitiesTab:GetFrameLevel() + 50)
spellEditFrame:SetSize(200, 100)
spellEditFrame:SetPoint("LEFT", 117, 0)
spellEditFrame:SetPoint("BOTTOM", srAddBtn, 0, 0)
spellEditFrame:SetScript("OnHide", function()
CellSpellTooltip:Hide()
Cell.frames.utilitiesTab.mask:Hide()
spellEditFrame:Hide()
spellIdEB:SetText("")
buffIdEB:SetText("")
spellId, buffId, spellName, spellIcon = nil, nil, nil, nil
end)
-- title
title = spellEditFrame:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET_TITLE")
title:SetWordWrap(true)
title:SetJustifyH("CENTER")
title:SetPoint("TOPLEFT", 5, -8)
title:SetPoint("TOPRIGHT", -5, -8)
title:SetText(L["Add new spell"])
-- spllId editbox
5 months ago
spellIdEB = Cell.CreateEditBox(spellEditFrame, 20, 20)
spellIdEB:SetPoint("TOPLEFT", spellEditFrame, 10, -30)
spellIdEB:SetPoint("TOPRIGHT", spellEditFrame, -10, -30)
spellIdEB:SetNumeric(true)
spellIdEB:SetScript("OnTabPressed", function()
buffIdEB:SetFocus()
end)
spellIdEB:SetScript("OnTextChanged", function()
local id = tonumber(spellIdEB:GetText())
if not id then
CellSpellTooltip:Hide()
spellId = nil
addBtn:SetEnabled(false)
spellIdEB.tip:SetTextColor(1, 0, 0, 0.777)
return
end
5 months ago
local name, icon = F.GetSpellInfo(id)
if not name then
CellSpellTooltip:Hide()
spellId = nil
addBtn:SetEnabled(false)
spellIdEB.tip:SetTextColor(1, 0, 0, 0.777)
return
end
C_Timer.After(0.1, function()
CellSpellTooltip:SetOwner(spellEditFrame, "ANCHOR_NONE")
CellSpellTooltip:SetPoint("TOPLEFT", spellEditFrame, "BOTTOMLEFT", 0, -1)
CellSpellTooltip:SetSpellByID(id)
CellSpellTooltip:Show()
end)
spellId = id
spellName = name
spellIcon = icon
addBtn:SetEnabled(spellId and buffId)
spellIdEB.tip:SetTextColor(0, 1, 0, 0.777)
end)
spellIdEB.tip = spellIdEB:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
spellIdEB.tip:SetTextColor(0.4, 0.4, 0.4, 1)
spellIdEB.tip:SetText(L["Spell"].." ID")
spellIdEB.tip:SetPoint("RIGHT", -5, 0)
-- buffId editbox
5 months ago
buffIdEB = Cell.CreateEditBox(spellEditFrame, 20, 20)
buffIdEB:SetPoint("TOPLEFT", spellIdEB, "BOTTOMLEFT", 0, -5)
buffIdEB:SetPoint("TOPRIGHT", spellIdEB, "BOTTOMRIGHT", 0, -5)
buffIdEB:SetNumeric(true)
buffIdEB:SetScript("OnTabPressed", function()
if spellIdEB:IsEnabled() then
spellIdEB:SetFocus()
end
end)
buffIdEB:SetScript("OnTextChanged", function()
local id = tonumber(buffIdEB:GetText())
if not id then
buffId = nil
addBtn:SetEnabled(false)
buffIdEB.tip:SetTextColor(1, 0, 0, 0.777)
return
end
5 months ago
local name = F.GetSpellInfo(id)
if not name then
buffId = nil
addBtn:SetEnabled(false)
buffIdEB.tip:SetTextColor(1, 0, 0, 0.777)
return
end
buffId = id
addBtn:SetEnabled(spellId and buffId)
buffIdEB.tip:SetTextColor(0, 1, 0, 0.777)
end)
buffIdEB.tip = buffIdEB:CreateFontString(nil, "OVERLAY", "CELL_FONT_WIDGET")
buffIdEB.tip:SetTextColor(0.4, 0.4, 0.4, 1)
buffIdEB.tip:SetText(L["Buff"].." ID")
buffIdEB.tip:SetPoint("RIGHT", -5, 0)
-- cancel
5 months ago
cancelBtn = Cell.CreateButton(spellEditFrame, L["Cancel"], "red", {50, 15})
cancelBtn:SetPoint("BOTTOMRIGHT")
5 months ago
cancelBtn:SetBackdropBorderColor(unpack(Cell.GetAccentColorTable()))
cancelBtn:SetScript("OnClick", function()
spellEditFrame:Hide()
end)
-- add
5 months ago
addBtn = Cell.CreateButton(spellEditFrame, L["Add"], "green", {50, 15})
addBtn:SetPoint("BOTTOMRIGHT", cancelBtn, "BOTTOMLEFT", P.Scale(1), 0)
addBtn:SetBackdropBorderColor(unpack(Cell.GetAccentColorTable()))
addBtn:SetScript("OnClick", function()
spellEditFrame:Hide()
end)
end
ShowSpellEditFrame = function(index)
Cell.frames.utilitiesTab.mask:Show()
spellEditFrame:Show()
if not index then -- add
spellIdEB:SetEnabled(true)
spellIdEB:SetFocus()
title:SetText(L["Add new spell"])
addBtn:SetText(L["Add"])
addBtn:SetScript("OnClick", function()
if spellId and buffId then
-- check if exists
for _, t in pairs(CellDB["spellRequest"]["spells"]) do
if t["spellId"] == spellId then
5 months ago
F.Print(L["Spell already exists."])
return
end
end
-- update db
tinsert(CellDB["spellRequest"]["spells"], {
["spellId"] = spellId,
["buffId"] = buffId,
["keywords"] = spellName,
["icon"] = spellIcon,
["type"] = "icon",
["iconColor"] = {1, 1, 0, 1},
["glowOptions"] = {
"pixel", -- [1] glow type
{
{0,1,0.5,1}, -- [1] color
0, -- [2] x
0, -- [3] y
9, -- [4] N
0.25, -- [5] frequency
8, -- [6] length
2 -- [7] thickness
} -- [2] glowOptions
}
})
5 months ago
Cell.Fire("UpdateRequests", "spellRequest_spells")
local index = #CellDB["spellRequest"]["spells"]
-- update dropdown
srSpellsDD:AddItem({
["text"] = "|T"..spellIcon..":0::0:0:16:16:1:15:1:15|t "..spellName,
["value"] = spellId,
["onClick"] = function()
ShowSpellOptions(index)
end
})
srSpellsDD:SetSelectedValue(spellId)
ShowSpellOptions(index)
else
5 months ago
F.Print(L["Invalid spell id."])
end
spellEditFrame:Hide()
end)
else
spellIdEB:SetEnabled(false)
buffIdEB:SetFocus()
spellIdEB:SetText(CellDB["spellRequest"]["spells"][index]["spellId"])
buffIdEB:SetText(CellDB["spellRequest"]["spells"][index]["buffId"])
title:SetText(L["Edit spell"])
addBtn:SetText(L["Save"])
addBtn:SetScript("OnClick", function()
if spellId and buffId then
-- update db
CellDB["spellRequest"]["spells"][index]["buffId"] = buffId
5 months ago
Cell.Fire("UpdateRequests", "spellRequest_spells")
-- update dropdown
srSpellsDD:SetCurrentItem({
["text"] = "|T"..spellIcon..":0::0:0:16:16:1:15:1:15|t "..spellName,
["value"] = spellId,
["onClick"] = function()
ShowSpellOptions(index)
end
})
srSpellsDD:SetSelectedValue(spellId)
ShowSpellOptions(index)
else
5 months ago
F.Print(L["Invalid spell id."])
end
spellEditFrame:Hide()
end)
end
end
-------------------------------------------------
-- create icon
-------------------------------------------------
local function GetValue(progress, start, delta)
local angle = (progress * 2 * math.pi) - (math.pi / 2)
return start + ((math.sin(angle) + 1) / 2) * delta
end
-- local function GetSineValue(progress, scale)
-- return math.sin(progress * 2 * math.pi) * scale
-- end
5 months ago
function U.CreateSpellRequestIcon(parent)
local srIcon = CreateFrame("Frame", parent:GetName().."SpellRequestIcon", parent.widgets.indicatorFrame)
parent.widgets.srIcon = srIcon
srIcon:SetIgnoreParentAlpha(true)
srIcon:SetFrameLevel(parent.widgets.indicatorFrame:GetFrameLevel()+110)
srIcon:Hide()
-- srIcon:SetBackdrop({bgFile = Cell.vars.whiteTexture})
-- srIcon:SetBackdropColor(0, 0, 0, 1)
srIcon.icon = srIcon:CreateTexture(nil, "ARTWORK")
srIcon.icon:SetTexCoord(0.12, 0.88, 0.12, 0.88)
5 months ago
P.Point(srIcon.icon, "TOPLEFT", srIcon, "TOPLEFT", 2, -2)
P.Point(srIcon.icon, "BOTTOMRIGHT", srIcon, "BOTTOMRIGHT", -2, 2)
function srIcon:Display(tex, color)
-- srIcon:SetBackdropColor(unpack(color))
srIcon.icon:SetTexture(tex)
-- reset
srIcon:SetScale(1)
srIcon:SetAlpha(1)
5 months ago
P.Repoint(srIcon)
srIcon.elapsed = 0
LCG.ButtonGlow_Start(srIcon, color)
srIcon:Show()
end
srIcon:SetScript("OnHide", function()
LCG.ButtonGlow_Stop(srIcon)
end)
function srIcon:SetAnimationType(type)
if type == "beat" then
srIcon:SetScript("OnUpdate", function(self, elapsed)
srIcon.elapsed = (srIcon.elapsed or 0) + elapsed * 2
srIcon:SetScale(GetValue(srIcon.elapsed, 0.9, 0.1))
if srIcon.elapsed >= 1 then
srIcon.elapsed = 0
end
end)
elseif type == "bounce" then
srIcon:SetScript("OnUpdate", function(self, elapsed)
srIcon.elapsed = (srIcon.elapsed or 0) + elapsed * 2
srIcon:SetPoint(
CellDB["spellRequest"]["sharedIconOptions"][3],
parent.widgets.srGlowFrame,
CellDB["spellRequest"]["sharedIconOptions"][4],
CellDB["spellRequest"]["sharedIconOptions"][5],
CellDB["spellRequest"]["sharedIconOptions"][6] + GetValue(srIcon.elapsed / 1, 0, 7)
)
end)
elseif type == "blink" then
srIcon:SetScript("OnUpdate", function(self, elapsed)
srIcon.elapsed = (srIcon.elapsed or 0) + elapsed * 2
srIcon:SetAlpha(GetValue(srIcon.elapsed, 0.75, 0.25))
if srIcon.elapsed >= 1 then
srIcon.elapsed = 0
end
end)
else
srIcon:SetScript("OnUpdate", nil)
end
end
function srIcon:UpdatePixelPerfect()
5 months ago
P.Resize(srIcon)
P.Repoint(srIcon)
P.Repoint(srIcon.icon)
end
end
-------------------------------------------------
-- show
-------------------------------------------------
local init
local function ShowUtilitySettings(which)
if which == "spellRequest" then
if not init then
CreateSRPane()
CreateSpellEditFrame()
end
srPane:Show()
if init then return end
init = true
-- spell request
srEnabledCB:SetChecked(CellDB["spellRequest"]["enabled"])
srExistsCB:SetChecked(CellDB["spellRequest"]["checkIfExists"])
srKnownOnlyCB:SetChecked(CellDB["spellRequest"]["knownSpellsOnly"])
srFreeCDOnlyCB:SetChecked(CellDB["spellRequest"]["freeCooldownOnly"])
srReplyCDCB:SetChecked(CellDB["spellRequest"]["replyCooldown"])
srReplyCastEB:SetText(CellDB["spellRequest"]["replyAfterCast"] or "")
if not CellDB["spellRequest"]["replyAfterCast"] then
srReplyCastEB.tip:Show()
end
srResponseDD:SetSelectedValue(CellDB["spellRequest"]["responseType"])
srTimeoutDD:SetSelected(CellDB["spellRequest"]["timeout"])
UpdateSRWidgets()
HideSpellOptions()
LoadSpellsDropdown()
elseif init then
srPane:Hide()
end
end
5 months ago
Cell.RegisterCallback("ShowUtilitySettings", "SpellRequest_ShowUtilitySettings", ShowUtilitySettings)