# HG changeset patch
# User Tercio
# Date 1532124252 10800
# Node ID 0682d738499b9a26c8f6a9523bb4fe6c74bcf8bf
# Parent b1c62eed8999a82c3133bee7f00a37c175c447e9
- 8.0.1 Update.
diff -r b1c62eed8999 -r 0682d738499b Hansgar_And_Franzok_Assist.toc
--- a/Hansgar_And_Franzok_Assist.toc Sun Mar 11 10:50:42 2018 -0300
+++ b/Hansgar_And_Franzok_Assist.toc Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-## Interface: 70300
+## Interface: 80000
## Title: Hansgar And Franzok Assist
## Notes: Helps with Smart Stampers on Mythic during this encounter.
## SavedVariables: Hansgar_And_Franzok_DB
diff -r b1c62eed8999 -r 0682d738499b Libs/AceAddon-3.0/AceAddon-3.0.xml
--- a/Libs/AceAddon-3.0/AceAddon-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceAddon-3.0/AceAddon-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceComm-3.0/AceComm-3.0.lua
--- a/Libs/AceComm-3.0/AceComm-3.0.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceComm-3.0/AceComm-3.0.lua Fri Jul 20 19:04:12 2018 -0300
@@ -9,7 +9,7 @@
-- make into AceComm.
-- @class file
-- @name AceComm-3.0
--- @release $Id: AceComm-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $
+-- @release $Id: AceComm-3.0.lua 1174 2018-05-14 17:29:49Z h.leppkes@gmail.com $
--[[ AceComm-3.0
@@ -20,7 +20,7 @@
local CallbackHandler = LibStub("CallbackHandler-1.0")
local CTL = assert(ChatThrottleLib, "AceComm-3.0 requires ChatThrottleLib")
-local MAJOR, MINOR = "AceComm-3.0", 10
+local MAJOR, MINOR = "AceComm-3.0", 12
local AceComm,oldminor = LibStub:NewLibrary(MAJOR, MINOR)
if not AceComm then return end
@@ -65,7 +65,11 @@
if #prefix > 16 then -- TODO: 15?
error("AceComm:RegisterComm(prefix,method): prefix length is limited to 16 characters")
end
- RegisterAddonMessagePrefix(prefix)
+ if C_ChatInfo then
+ C_ChatInfo.RegisterAddonMessagePrefix(prefix)
+ else
+ RegisterAddonMessagePrefix(prefix)
+ end
return AceComm._RegisterComm(self, prefix, method) -- created by CallbackHandler
end
@@ -85,7 +89,7 @@
if not( type(prefix)=="string" and
type(text)=="string" and
type(distribution)=="string" and
- (target==nil or type(target)=="string") and
+ (target==nil or type(target)=="string" or type(target)=="number") and
(prio=="BULK" or prio=="NORMAL" or prio=="ALERT")
) then
error('Usage: SendCommMessage(addon, "prefix", "text", "distribution"[, "target"[, "prio"[, callbackFn, callbackarg]]])', 2)
diff -r b1c62eed8999 -r 0682d738499b Libs/AceComm-3.0/AceComm-3.0.xml
--- a/Libs/AceComm-3.0/AceComm-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceComm-3.0/AceComm-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -2,4 +2,4 @@
..\FrameXML\UI.xsd">
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceComm-3.0/ChatThrottleLib.lua
--- a/Libs/AceComm-3.0/ChatThrottleLib.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceComm-3.0/ChatThrottleLib.lua Fri Jul 20 19:04:12 2018 -0300
@@ -23,7 +23,7 @@
-- LICENSE: ChatThrottleLib is released into the Public Domain
--
-local CTL_VERSION = 23
+local CTL_VERSION = 24
local _G = _G
@@ -213,9 +213,15 @@
return ChatThrottleLib.Hook_SendChatMessage(...)
end)
--SendAddonMessage
- hooksecurefunc("SendAddonMessage", function(...)
- return ChatThrottleLib.Hook_SendAddonMessage(...)
- end)
+ if _G.C_ChatInfo then
+ hooksecurefunc(_G.C_ChatInfo, "SendAddonMessage", function(...)
+ return ChatThrottleLib.Hook_SendAddonMessage(...)
+ end)
+ else
+ hooksecurefunc("SendAddonMessage", function(...)
+ return ChatThrottleLib.Hook_SendAddonMessage(...)
+ end)
+ end
end
self.nBypass = 0
end
@@ -461,7 +467,7 @@
local nSize = text:len();
- if RegisterAddonMessagePrefix then
+ if C_ChatInfo or RegisterAddonMessagePrefix then
if nSize>255 then
error("ChatThrottleLib:SendAddonMessage(): message length cannot exceed 255 bytes", 2)
end
@@ -478,7 +484,11 @@
if not self.bQueueing and nSize < self:UpdateAvail() then
self.avail = self.avail - nSize
bMyTraffic = true
- _G.SendAddonMessage(prefix, text, chattype, target)
+ if _G.C_ChatInfo then
+ _G.C_ChatInfo.SendAddonMessage(prefix, text, chattype, target)
+ else
+ _G.SendAddonMessage(prefix, text, chattype, target)
+ end
bMyTraffic = false
self.Prio[prio].nTotalSent = self.Prio[prio].nTotalSent + nSize
if callbackFn then
@@ -490,7 +500,7 @@
-- Message needs to be queued
local msg = NewMsg()
- msg.f = _G.SendAddonMessage
+ msg.f = _G.C_ChatInfo and _G.C_ChatInfo.SendAddonMessage or _G.SendAddonMessage
msg[1] = prefix
msg[2] = text
msg[3] = chattype
diff -r b1c62eed8999 -r 0682d738499b Libs/AceConfig-3.0/AceConfig-3.0.xml
--- a/Libs/AceConfig-3.0/AceConfig-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceConfig-3.0/AceConfig-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -5,4 +5,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml
--- a/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua
--- a/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua Fri Jul 20 19:04:12 2018 -0300
@@ -1,13 +1,13 @@
--- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables.
-- @class file
-- @name AceConfigDialog-3.0
--- @release $Id: AceConfigDialog-3.0.lua 1167 2017-08-29 22:08:48Z funkydude $
+-- @release $Id: AceConfigDialog-3.0.lua 1169 2018-02-27 16:18:28Z nevcairiel $
local LibStub = LibStub
local gui = LibStub("AceGUI-3.0")
local reg = LibStub("AceConfigRegistry-3.0")
-local MAJOR, MINOR = "AceConfigDialog-3.0", 64
+local MAJOR, MINOR = "AceConfigDialog-3.0", 66
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
if not AceConfigDialog then return end
@@ -1034,6 +1034,7 @@
entry.value = k
entry.text = GetOptionsMemberValue("name", v, options, path, appName)
entry.icon = GetOptionsMemberValue("icon", v, options, path, appName)
+ entry.iconCoords = GetOptionsMemberValue("iconCoords", v, options, path, appName)
entry.disabled = CheckOptionDisabled(v, options, path, appName)
tinsert(tree,entry)
if recurse and (v.childGroups or "tree") == "tree" then
@@ -1226,6 +1227,8 @@
radio:SetWidth(width_multiplier * 2)
elseif width == "half" then
radio:SetWidth(width_multiplier / 2)
+ elseif (type(width) == "number") then
+ radio:SetWidth(width_multiplier * width)
elseif width == "full" then
radio.width = "fill"
else
@@ -1288,6 +1291,8 @@
control:SetWidth(width_multiplier * 2)
elseif width == "half" then
control:SetWidth(width_multiplier / 2)
+ elseif (type(width) == "number") then
+ control:SetWidth(width_multiplier * width)
elseif width == "full" then
control.width = "fill"
else
@@ -1324,6 +1329,8 @@
check:SetWidth(width_multiplier * 2)
elseif width == "half" then
check:SetWidth(width_multiplier / 2)
+ elseif (type(width) == "number") then
+ control:SetWidth(width_multiplier * width)
elseif width == "full" then
check.width = "fill"
else
@@ -1405,6 +1412,8 @@
control:SetWidth(width_multiplier * 2)
elseif width == "half" then
control:SetWidth(width_multiplier / 2)
+ elseif (type(width) == "number") then
+ control:SetWidth(width_multiplier * width)
elseif width == "full" then
control.width = "fill"
else
diff -r b1c62eed8999 -r 0682d738499b Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml
--- a/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua
--- a/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua Fri Jul 20 19:04:12 2018 -0300
@@ -8,10 +8,10 @@
-- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName".
-- @class file
-- @name AceConfigRegistry-3.0
--- @release $Id: AceConfigRegistry-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $
+-- @release $Id: AceConfigRegistry-3.0.lua 1169 2018-02-27 16:18:28Z nevcairiel $
local CallbackHandler = LibStub("CallbackHandler-1.0")
-local MAJOR, MINOR = "AceConfigRegistry-3.0", 17
+local MAJOR, MINOR = "AceConfigRegistry-3.0", 18
local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR)
if not AceConfigRegistry then return end
@@ -67,6 +67,7 @@
local opttable={["nil"]=true,["table"]=true, _="table"}
local optbool={["nil"]=true,["boolean"]=true, _="boolean"}
local optboolnumber={["nil"]=true,["boolean"]=true,["number"]=true, _="boolean or number"}
+local optstringnumber={["nil"]=true,["string"]=true,["number"]=true, _="string or number"}
local basekeys={
type=isstring,
@@ -90,7 +91,7 @@
set=optmethodfalse,
func=optmethodfalse,
arg={["*"]=true},
- width=optstring,
+ width=optstringnumber,
}
local typedkeys={
diff -r b1c62eed8999 -r 0682d738499b Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml
--- a/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceConsole-3.0/AceConsole-3.0.xml
--- a/Libs/AceConsole-3.0/AceConsole-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceConsole-3.0/AceConsole-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceDB-3.0/AceDB-3.0.xml
--- a/Libs/AceDB-3.0/AceDB-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceDB-3.0/AceDB-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceDBOptions-3.0/AceDBOptions-3.0.xml
--- a/Libs/AceDBOptions-3.0/AceDBOptions-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceDBOptions-3.0/AceDBOptions-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceEvent-3.0/AceEvent-3.0.xml
--- a/Libs/AceEvent-3.0/AceEvent-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceEvent-3.0/AceEvent-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceLocale-3.0/AceLocale-3.0.xml
--- a/Libs/AceLocale-3.0/AceLocale-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceLocale-3.0/AceLocale-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/AceTimer-3.0/AceTimer-3.0.lua
--- a/Libs/AceTimer-3.0/AceTimer-3.0.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceTimer-3.0/AceTimer-3.0.lua Fri Jul 20 19:04:12 2018 -0300
@@ -15,7 +15,7 @@
-- make into AceTimer.
-- @class file
-- @name AceTimer-3.0
--- @release $Id: AceTimer-3.0.lua 1119 2014-10-14 17:23:29Z nevcairiel $
+-- @release $Id: AceTimer-3.0.lua 1170 2018-03-29 17:38:58Z funkydude $
local MAJOR, MINOR = "AceTimer-3.0", 17 -- Bump minor on changes
local AceTimer, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
@@ -34,13 +34,15 @@
delay = 0.01 -- Restrict to the lowest time that the C_Timer API allows us
end
- local timer = {...}
- timer.object = self
- timer.func = func
- timer.looping = loop
- timer.argsCount = select("#", ...)
- timer.delay = delay
- timer.ends = GetTime() + delay
+ local timer = {
+ object = self,
+ func = func,
+ looping = loop,
+ argsCount = select("#", ...),
+ delay = delay,
+ ends = GetTime() + delay,
+ ...
+ }
activeTimers[timer] = timer
@@ -156,7 +158,7 @@
--- Cancels all timers registered to the current addon object ('self')
function AceTimer:CancelAllTimers()
- for k,v in pairs(activeTimers) do
+ for k,v in next, activeTimers do
if v.object == self then
AceTimer.CancelTimer(self, k)
end
@@ -187,8 +189,8 @@
AceTimer.frame:SetScript("OnEvent", nil)
AceTimer.frame:UnregisterAllEvents()
-- convert timers
- for object,timers in pairs(AceTimer.selfs) do
- for handle,timer in pairs(timers) do
+ for object,timers in next, AceTimer.selfs do
+ for handle,timer in next, timers do
if type(timer) == "table" and timer.callback then
local newTimer
if timer.delay then
@@ -214,7 +216,7 @@
-- Clear old timer table and update upvalue
AceTimer.activeTimers = {}
activeTimers = AceTimer.activeTimers
- for handle, timer in pairs(oldTimers) do
+ for handle, timer in next, oldTimers do
local newTimer
-- Stop the old timer animation
local duration, elapsed = timer:GetDuration(), timer:GetElapsed()
@@ -232,7 +234,7 @@
-- Migrate transitional handles
if oldminor < 13 and AceTimer.hashCompatTable then
- for handle, id in pairs(AceTimer.hashCompatTable) do
+ for handle, id in next, AceTimer.hashCompatTable do
local t = activeTimers[id]
if t then
activeTimers[id] = nil
@@ -257,7 +259,7 @@
function AceTimer:Embed(target)
AceTimer.embeds[target] = true
- for _,v in pairs(mixins) do
+ for _,v in next, mixins do
target[v] = AceTimer[v]
end
return target
@@ -271,6 +273,6 @@
target:CancelAllTimers()
end
-for addon in pairs(AceTimer.embeds) do
+for addon in next, AceTimer.embeds do
AceTimer:Embed(addon)
end
diff -r b1c62eed8999 -r 0682d738499b Libs/AceTimer-3.0/AceTimer-3.0.xml
--- a/Libs/AceTimer-3.0/AceTimer-3.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/AceTimer-3.0/AceTimer-3.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml
--- a/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/CallbackHandler-1.0/CallbackHandler-1.0.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/addon.lua
--- a/Libs/DF/addon.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/addon.lua Fri Jul 20 19:04:12 2018 -0300
@@ -59,4 +59,4 @@
return addon
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/all_addons.tga
Binary file Libs/DF/all_addons.tga has changed
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/auras.lua
--- a/Libs/DF/auras.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/auras.lua Fri Jul 20 19:04:12 2018 -0300
@@ -10,6 +10,98 @@
local lower = string.lower
local GetSpellBookItemInfo = GetSpellBookItemInfo
+local CONST_MAX_SPELLS = 300000
+
+function DF:GetAuraByName (unit, spellName, isDebuff)
+ isDebuff = isDebuff and "HARMFUL|PLAYER"
+
+ for i = 1, 40 do
+ local name, texture, count, debuffType, duration, expirationTime, caster, canStealOrPurge, nameplateShowPersonal, spellId, canApplyAura, isBossDebuff, isCastByPlayer, nameplateShowAll = UnitAura (unit, i, isDebuff)
+ if (not name) then
+ return
+ end
+
+ if (name == spellName) then
+ return name, texture, count, debuffType, duration, expirationTime, caster, canStealOrPurge, nameplateShowPersonal, spellId, canApplyAura, isBossDebuff, isCastByPlayer, nameplateShowAll
+ end
+ end
+end
+
+local default_text_for_aura_frame = {
+ AUTOMATIC = "Automatic",
+ MANUAL = "Manual",
+ METHOD = "Aura Tracking Method:",
+ BUFFS_IGNORED = "Buffs Ignored",
+ DEBUFFS_IGNORED = "Debuffs Ignored",
+ BUFFS_TRACKED = "Buffs Tracked",
+ DEBUFFS_TRACKED = "Debuffs Tracked",
+
+ AUTOMATIC_DESC = "Auras are being tracked automatically, the addon controls what to show.\nYou may add auras to the blacklist or add extra auras to track.",
+ MANUAL_DESC = "Auras are being tracked manually, the addon only check for auras you entered below.",
+
+ MANUAL_ADD_BLACKLIST_BUFF = "Add Buff to Blacklist",
+ MANUAL_ADD_BLACKLIST_DEBUFF = "Add Debuff to Blacklist",
+ MANUAL_ADD_TRACKLIST_BUFF = "Add Buff to Tracklist",
+ MANUAL_ADD_TRACKLIST_DEBUFF = "Add Debuff to Tracklist",
+}
+
+function DF:LoadAllSpells (hashMap, indexTable)
+
+ --pre checking which tables to fill to avoid checking if the table exists during the gigantic loop for performance
+
+ if (not DF.LoadingAuraAlertFrame) then
+ DF.LoadingAuraAlertFrame = CreateFrame ("frame", "DetailsFrameworkLoadingAurasAlert", UIParent)
+ DF.LoadingAuraAlertFrame:SetSize (340, 75)
+ DF.LoadingAuraAlertFrame:SetPoint ("center")
+ DF.LoadingAuraAlertFrame:SetFrameStrata ("TOOLTIP")
+ DF:ApplyStandardBackdrop (DF.LoadingAuraAlertFrame)
+ DF.LoadingAuraAlertFrame:SetBackdropBorderColor (1, 0.8, 0.1)
+
+ DF.LoadingAuraAlertFrame.IsLoadingLabel1 = DF:CreateLabel (DF.LoadingAuraAlertFrame, "We are currently loading spell names and spell IDs")
+ DF.LoadingAuraAlertFrame.IsLoadingLabel2 = DF:CreateLabel (DF.LoadingAuraAlertFrame, "This may take only a few seconds")
+ DF.LoadingAuraAlertFrame.IsLoadingImage1 = DF:CreateImage (DF.LoadingAuraAlertFrame, [[Interface\DialogFrame\UI-Dialog-Icon-AlertOther]], 32, 32)
+ DF.LoadingAuraAlertFrame.IsLoadingLabel1.align = "center"
+ DF.LoadingAuraAlertFrame.IsLoadingLabel2.align = "center"
+
+ DF.LoadingAuraAlertFrame.IsLoadingLabel1:SetPoint ("center", 16, 10)
+ DF.LoadingAuraAlertFrame.IsLoadingLabel2:SetPoint ("center", 16, -5)
+ DF.LoadingAuraAlertFrame.IsLoadingImage1:SetPoint ("left", 10, 0)
+ end
+
+ DF.LoadingAuraAlertFrame:Show()
+
+ C_Timer.After (0.1, function()
+ if (hashMap and not indexTable) then
+ for i = 1, CONST_MAX_SPELLS do
+ local spellName = GetSpellInfo (i)
+ if (spellName) then
+ hashMap [lower (spellName)] = i
+ end
+ end
+
+ elseif (not hashMap and indexTable) then
+ for i = 1, CONST_MAX_SPELLS do
+ local spellName = GetSpellInfo (i)
+ if (spellName) then
+ indexTable [#indexTable+1] = lower (spellName)
+ end
+ end
+
+ elseif (hashMap and indexTable) then
+ for i = 1, CONST_MAX_SPELLS do
+ local spellName = GetSpellInfo (i)
+ if (spellName) then
+ indexTable [#indexTable+1] = lower (spellName)
+ hashMap [indexTable [#indexTable]] = i
+ end
+ end
+ end
+
+ DF.LoadingAuraAlertFrame:Hide()
+ end)
+
+end
+
local cleanfunction = function() end
do
@@ -32,10 +124,13 @@
--automatic
self.buff_ignored:SetData (newdb.aura_tracker.buff_banned)
self.debuff_ignored:SetData (newdb.aura_tracker.debuff_banned)
- self.buff_available:Refresh()
+ self.buff_tracked:SetData (newdb.aura_tracker.buff_tracked)
+ self.debuff_tracked:SetData (newdb.aura_tracker.debuff_tracked)
+
self.buff_ignored:Refresh()
- self.debuff_available:Refresh()
self.debuff_ignored:Refresh()
+ self.buff_tracked:Refresh()
+ self.debuff_tracked:Refresh()
--manual
self.buffs_added:SetData (newdb.aura_tracker.buff)
@@ -47,18 +142,29 @@
if (newdb.aura_tracker.track_method == 0x1) then
self.f_auto:Show()
self.f_manual:Hide()
+
+ self.AutomaticTrackingCheckbox:SetValue (true)
+ self.ManualTrackingCheckbox:SetValue (false)
+ self.desc_label.text = texts.AUTOMATIC_DESC
+
elseif (newdb.aura_tracker.track_method == 0x2) then
self.f_auto:Hide()
self.f_manual:Show()
+
+ self.AutomaticTrackingCheckbox:SetValue (false)
+ self.ManualTrackingCheckbox:SetValue (true)
+ self.desc_label.text = texts.MANUAL_DESC
end
end
local aura_panel_defaultoptions = {
height = 400,
- row_height = 16,
+ row_height = 18,
width = 230,
+ button_text_template = "OPTIONS_FONT_TEMPLATE"
}
-function DF:CreateAuraConfigPanel (parent, name, db, method_change_callback, options)
+
+function DF:CreateAuraConfigPanel (parent, name, db, change_callback, options, texts)
local options_text_template = DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE")
local options_dropdown_template = DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")
@@ -81,155 +187,412 @@
f.f_auto = f_auto
f.f_manual = f_manual
- local on_select_tracking_option = function (_, _, method)
+ --check if the texts table is valid and also deploy default values into the table in case some value is nil
+ texts = (type (texts == "table") and texts) or default_text_for_aura_frame
+ DF.table.deploy (texts, default_text_for_aura_frame)
+
+ -------------
+
+ local on_switch_tracking_method = function (self)
+ local method = self.Method
+
f.db.aura_tracker.track_method = method
- if (method_change_callback) then
- method_change_callback (self, method)
+ if (change_callback) then
+ DF:QuickDispatch (change_callback)
end
if (method == 0x1) then
f_auto:Show()
f_manual:Hide()
- f.desc_label.text = "Auras are being tracked automatically, the addon controls what to show. You may entry an aura to ignore.\nCast spells to fill the Buff and Buff available boxes."
- f.desc_label:SetPoint ("topleft", f.tracking_method, "topright", 10, 8)
+ f.AutomaticTrackingCheckbox:SetValue (true)
+ f.ManualTrackingCheckbox:SetValue (false)
+ f.desc_label.text = texts.AUTOMATIC_DESC
+
elseif (method == 0x2) then
f_auto:Hide()
f_manual:Show()
- f.desc_label.text = "Auras are being tracked manually, the addon only check for auras you entered below."
- f.desc_label:SetPoint ("topleft", f.tracking_method, "topright", 10, 1)
+ f.AutomaticTrackingCheckbox:SetValue (false)
+ f.ManualTrackingCheckbox:SetValue (true)
+ f.desc_label.text = texts.MANUAL_DESC
end
end
- local tracking_options = function()
- return {
- {label = "Automatic", value = 0x1, onclick = on_select_tracking_option, desc = "Show all your auras by default, you can exclude those you don't want to show."},
- {label = "Manual", value = 0x2, onclick = on_select_tracking_option, desc = "Do not show any aura by default, you need to manually add each aura you want to track."},
- }
+ local background_method_selection = CreateFrame ("frame", nil, f)
+ background_method_selection:SetHeight (82)
+ background_method_selection:SetPoint ("topleft", f, "topleft", 0, 0)
+ background_method_selection:SetPoint ("topright", f, "topright", 0, 0)
+ DF:ApplyStandardBackdrop (background_method_selection)
+
+ local tracking_method_label = self:CreateLabel (background_method_selection, texts.METHOD, 12, "orange")
+ tracking_method_label:SetPoint ("topleft", background_method_selection, "topleft", 6, -4)
+
+ f.desc_label = self:CreateLabel (background_method_selection, "", 10, "silver")
+ f.desc_label:SetPoint ("left", background_method_selection, "left", 130, 0)
+ f.desc_label:SetJustifyV ("top")
+
+ local automatic_tracking_checkbox = DF:CreateSwitch (background_method_selection, on_switch_tracking_method, f.db.aura_tracker.track_method == 0x1, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, DF:GetTemplate ("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"))
+ automatic_tracking_checkbox.Method = 0x1
+ automatic_tracking_checkbox:SetAsCheckBox()
+ automatic_tracking_checkbox:SetSize (24, 24)
+ f.AutomaticTrackingCheckbox = automatic_tracking_checkbox
+
+ local automatic_tracking_label = DF:CreateLabel (background_method_selection, "Automatic")
+ automatic_tracking_label:SetPoint ("left", automatic_tracking_checkbox, "right", 2, 0)
+
+ local manual_tracking_checkbox = DF:CreateSwitch (background_method_selection, on_switch_tracking_method, f.db.aura_tracker.track_method == 0x2, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, DF:GetTemplate ("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE"))
+ manual_tracking_checkbox.Method = 0x2
+ manual_tracking_checkbox:SetAsCheckBox()
+ manual_tracking_checkbox:SetSize (24, 24)
+ f.ManualTrackingCheckbox = manual_tracking_checkbox
+
+ local manual_tracking_label = DF:CreateLabel (background_method_selection, "Manual")
+ manual_tracking_label:SetPoint ("left", manual_tracking_checkbox, "right", 2, 0)
+
+ automatic_tracking_checkbox:SetPoint ("topleft", tracking_method_label, "bottomleft", 0, -6)
+ manual_tracking_checkbox:SetPoint ("topleft", automatic_tracking_checkbox, "bottomleft", 0, -6)
+
+
+-------- anchors points
+
+ local y = -110
+ local xLocation = 230
+
+
+-------- automatic
+
+ --manual add the buff and ebuff names
+ local AllSpellsMap = {}
+ local AllSpellNames = {}
+
+ local load_all_spells = function (self, capsule)
+ if (not next (AllSpellsMap)) then
+ DF:LoadAllSpells (AllSpellsMap, AllSpellNames)
+
+ f_auto.AddBuffBlacklistTextBox.SpellAutoCompleteList = AllSpellNames
+ f_auto.AddDebuffBlacklistTextBox.SpellAutoCompleteList = AllSpellNames
+ f_auto.AddBuffTracklistTextBox.SpellAutoCompleteList = AllSpellNames
+ f_auto.AddDebuffTracklistTextBox.SpellAutoCompleteList = AllSpellNames
+
+ f_manual.NewBuffTextBox.SpellAutoCompleteList = AllSpellNames
+ f_manual.NewDebuffTextBox.SpellAutoCompleteList = AllSpellNames
+
+ --
+
+ f_auto.AddBuffBlacklistTextBox:SetAsAutoComplete ("SpellAutoCompleteList")
+ f_auto.AddDebuffBlacklistTextBox:SetAsAutoComplete ("SpellAutoCompleteList")
+ f_auto.AddBuffTracklistTextBox:SetAsAutoComplete ("SpellAutoCompleteList")
+ f_auto.AddDebuffTracklistTextBox:SetAsAutoComplete ("SpellAutoCompleteList")
+
+ f_manual.NewBuffTextBox:SetAsAutoComplete ("SpellAutoCompleteList")
+ f_manual.NewDebuffTextBox:SetAsAutoComplete ("SpellAutoCompleteList")
+
+ --
+
+ f_auto.AddBuffBlacklistTextBox.ShouldOptimizeAutoComplete = true
+ f_auto.AddDebuffBlacklistTextBox.ShouldOptimizeAutoComplete = true
+ f_auto.AddBuffTracklistTextBox.ShouldOptimizeAutoComplete = true
+ f_auto.AddDebuffTracklistTextBox.ShouldOptimizeAutoComplete = true
+
+ f_manual.NewBuffTextBox.ShouldOptimizeAutoComplete = true
+ f_manual.NewDebuffTextBox.ShouldOptimizeAutoComplete = true
+ end
end
+
+ local background_add_blacklist = CreateFrame ("frame", nil, f_auto)
+ background_add_blacklist:SetSize (220, 135)
+ DF:ApplyStandardBackdrop (background_add_blacklist)
- local tracking_method_label = self:CreateLabel (f, "Tracking Aura Method:", 12, "orange")
- local tracking_method = self:CreateDropDown (f, tracking_options, f.db.aura_tracker.track_method, 120, 20, "dropdown_tracking_method", _, self:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE"))
+ local background_add_tracklist = CreateFrame ("frame", nil, f_auto)
+ background_add_tracklist:SetSize (220, 135)
+ DF:ApplyStandardBackdrop (background_add_tracklist)
- tracking_method_label:SetPoint ("topleft", f, "topleft", 10, -10)
- tracking_method:SetPoint ("left", tracking_method_label, "right", 2, 0)
- tracking_method:SetFrameStrata ("tooltip")
- tracking_method.tooltip = "Choose which aura tracking method you want to use."
- f.tracking_method = tracking_method
+ --black list
+ local buff_blacklist_label = self:CreateLabel (background_add_blacklist, texts.MANUAL_ADD_BLACKLIST_BUFF, DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+ local debuff_blacklist_label = self:CreateLabel (background_add_blacklist, texts.MANUAL_ADD_BLACKLIST_DEBUFF, DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+
+ local buff_name_blacklist_entry = self:CreateTextEntry (background_add_blacklist, function()end, 200, 20, "AddBuffBlacklistTextBox", _, _, options_dropdown_template)
+ buff_name_blacklist_entry:SetHook ("OnEditFocusGained", load_all_spells)
+ buff_name_blacklist_entry:SetJustifyH ("left")
+ buff_name_blacklist_entry.tooltip = "Enter the buff name using lower case letters."
+ f_auto.AddBuffBlacklistTextBox = buff_name_blacklist_entry
+
+ local debuff_name_blacklist_entry = self:CreateTextEntry (background_add_blacklist, function()end, 200, 20, "AddDebuffBlacklistTextBox", _, _, options_dropdown_template)
+ debuff_name_blacklist_entry:SetHook ("OnEditFocusGained", load_all_spells)
+ debuff_name_blacklist_entry:SetJustifyH ("left")
+ debuff_name_blacklist_entry.tooltip = "Enter the debuff name using lower case letters."
+ f_auto.AddDebuffBlacklistTextBox = debuff_name_blacklist_entry
- f.desc_label = self:CreateLabel (f, "", 10, "silver")
- f.desc_label:SetSize (400, 40)
- f.desc_label:SetPoint ("topleft", tracking_method, "topright", 10, 8)
- f.desc_label:SetJustifyV ("top")
+ local add_blacklist_buff_button = self:CreateButton (background_add_blacklist, function()
+ local text = buff_name_blacklist_entry.text
+ buff_name_blacklist_entry:SetText ("")
+ buff_name_blacklist_entry:ClearFocus()
+
+ if (text ~= "") then
+ text = lower (text)
+
+ --get the spellId
+ local spellId = AllSpellsMap [text]
+ if (not spellId) then
+ print ("spell not found")
+ return
+ end
+
+ --add the spellId to the blacklist
+ f.db.aura_tracker.buff_banned [spellId] = true
+
+ --refresh the buff blacklist frame
+ _G [f_auto:GetName() .. "BuffIgnored"]:Refresh()
+
+ DF:QuickDispatch (change_callback)
+ end
+
+ end, 100, 20, "Add to Blacklist", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
+
+ local add_blacklist_debuff_button = self:CreateButton (background_add_blacklist, function()
+ local text = debuff_name_blacklist_entry.text
+ debuff_name_blacklist_entry:SetText ("")
+ debuff_name_blacklist_entry:ClearFocus()
+
+ if (text ~= "") then
+ text = lower (text)
+
+ --get the spellId
+ local spellId = AllSpellsMap [text]
+ if (not spellId) then
+ print ("spell not found")
+ return
+ end
+
+ --add the spellId to the blacklist
+ f.db.aura_tracker.debuff_banned [spellId] = true
+
+ --refresh the buff blacklist frame
+ _G [f_auto:GetName() .. "DebuffIgnored"]:Refresh()
+
+ DF:QuickDispatch (change_callback)
+ end
+ end, 100, 20, "Add to Blacklist", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
+
+
+ --track list
+ local buff_tracklist_label = self:CreateLabel (background_add_tracklist, texts.MANUAL_ADD_TRACKLIST_BUFF, DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+ local debuff_tracklist_label = self:CreateLabel (background_add_tracklist, texts.MANUAL_ADD_TRACKLIST_DEBUFF, DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+
+ local buff_name_tracklist_entry = self:CreateTextEntry (background_add_tracklist, function()end, 200, 20, "AddBuffTracklistTextBox", _, _, options_dropdown_template)
+ buff_name_tracklist_entry:SetHook ("OnEditFocusGained", load_all_spells)
+ buff_name_tracklist_entry:SetJustifyH ("left")
+ buff_name_tracklist_entry.tooltip = "Enter the buff name using lower case letters."
+ f_auto.AddBuffTracklistTextBox = buff_name_tracklist_entry
+
+ local debuff_name_tracklist_entry = self:CreateTextEntry (background_add_tracklist, function()end, 200, 20, "AddDebuffTracklistTextBox", _, _, options_dropdown_template)
+ debuff_name_tracklist_entry:SetHook ("OnEditFocusGained", load_all_spells)
+ debuff_name_tracklist_entry:SetJustifyH ("left")
+ debuff_name_tracklist_entry.tooltip = "Enter the debuff name using lower case letters."
+ f_auto.AddDebuffTracklistTextBox = debuff_name_tracklist_entry
+
+ local add_tracklist_buff_button = self:CreateButton (background_add_tracklist, function()
+ local text = buff_name_tracklist_entry.text
+ buff_name_tracklist_entry:SetText ("")
+ buff_name_tracklist_entry:ClearFocus()
+
+ if (text ~= "") then
+ text = lower (text)
+
+ --get the spellId
+ local spellId = AllSpellsMap [text]
+ if (not spellId) then
+ print ("spell not found")
+ return
+ end
+
+ --add the spellId to the blacklist
+ f.db.aura_tracker.buff_tracked [spellId] = true
+
+ --refresh the buff blacklist frame
+ _G [f_auto:GetName() .. "BuffTracked"]:Refresh()
+
+ DF:QuickDispatch (change_callback)
+ end
+
+ end, 100, 20, "Add to Tracklist", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
+
+ local add_tracklist_debuff_button = self:CreateButton (background_add_tracklist, function()
+ local text = debuff_name_tracklist_entry.text
+ debuff_name_tracklist_entry:SetText ("")
+ debuff_name_tracklist_entry:ClearFocus()
+
+ if (text ~= "") then
+ text = lower (text)
+
+ --get the spellId
+ local spellId = AllSpellsMap [text]
+ if (not spellId) then
+ print ("spell not found")
+ return
+ end
+
+ --add the spellId to the blacklist
+ f.db.aura_tracker.debuff_tracked [spellId] = true
+
+ --refresh the buff blacklist frame
+ _G [f_auto:GetName() .. "DebuffTracked"]:Refresh()
+
+ DF:QuickDispatch (change_callback)
+ end
+ end, 100, 20, "Add to Tracklist", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", options.button_text_template))
+
+ --anchors:
+ background_add_blacklist:SetPoint ("topleft", f_auto, "topleft", 0, y)
+ background_add_tracklist:SetPoint ("topleft", background_add_blacklist, "bottomleft", 0, -10)
+
+ --debuff blacklist
+ debuff_name_blacklist_entry:SetPoint ("topleft", background_add_blacklist, "topleft", 4, -20)
+ debuff_blacklist_label:SetPoint ("bottomleft", debuff_name_blacklist_entry, "topleft", 0, 2)
+ add_blacklist_debuff_button:SetPoint ("topleft", debuff_name_blacklist_entry, "bottomleft", 0, -2)
+
+ --buff blacklist
+ buff_blacklist_label:SetPoint ("topleft", add_blacklist_debuff_button.widget, "bottomleft", 0, -10)
+ buff_name_blacklist_entry:SetPoint ("topleft", buff_blacklist_label, "bottomleft", 0, -2)
+ add_blacklist_buff_button:SetPoint ("topleft", buff_name_blacklist_entry, "bottomleft", 0, -2)
---------automatic
+
+ --debuff tracklist
+ debuff_name_tracklist_entry:SetPoint ("topleft", background_add_tracklist, "topleft", 4, -20)
+ debuff_tracklist_label:SetPoint ("bottomleft", debuff_name_tracklist_entry, "topleft", 0, 2)
+ add_tracklist_debuff_button:SetPoint ("topleft", debuff_name_tracklist_entry, "bottomleft", 0, -2)
+
+ --buff tracklist
+ buff_tracklist_label:SetPoint ("topleft", add_tracklist_debuff_button.widget, "bottomleft", 0, -10)
+ buff_name_tracklist_entry:SetPoint ("topleft", buff_tracklist_label, "bottomleft", 0, -2)
+ add_tracklist_buff_button:SetPoint ("topleft", buff_name_tracklist_entry, "bottomleft", 0, -2)
local ALL_BUFFS = {}
local ALL_DEBUFFS = {}
+ --options passed to the create aura panel
local width, height, row_height = options.width, options.height, options.row_height
+
- local buff_ignored = self:CreateSimpleListBox (f_auto, "$parentBuffIgnored", "Buffs Ignored", "The list is empty, select a spell from the buff list to ignore it.", f.db.aura_tracker.buff_banned,
- function (spellid)
- f.db.aura_tracker.buff_banned [spellid] = nil;
- end,
- {
- icon = function(spellid) return select (3, GetSpellInfo (spellid)) end,
- text = function(spellid) return select (1, GetSpellInfo (spellid)) end,
- height = height,
- row_height = row_height,
- width = width,
- onenter = function(self, capsule, value) GameTooltip:SetOwner (self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(value); GameTooltip:AddLine (" "); GameTooltip:AddLine ("Click to un-ignore this aura", .2, 1, .2); GameTooltip:Show() end,
- })
+ --Debuffs on the black list
+ local debuff_ignored = self:CreateSimpleListBox (f_auto, "$parentDebuffIgnored", texts.DEBUFFS_IGNORED, "the list is empty", f.db.aura_tracker.debuff_banned, function (spellid)
+ --f.db.aura_tracker.debuff_banned [spellid] = nil; DF:QuickDispatch (change_callback);
+ end,
+ {
+ icon = function(spellid) return select (3, GetSpellInfo (spellid)) end,
+ text = function(spellid) return select (1, GetSpellInfo (spellid)) end,
+ height = height,
+ row_height = row_height,
+ width = width,
+ backdrop_color = {.8, .8, .8, 0.2},
+ panel_border_color = {.01, 0, 0, 1},
+ iconcoords = {.1, .9, .1, .9},
+ onenter = function(self, capsule, value) GameTooltip:SetOwner (self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(value); GameTooltip:AddLine (" "); GameTooltip:Show() end,
+ show_x_button = true,
+ x_button_func = function (spellId)
+ f.db.aura_tracker.debuff_banned [spellId] = nil; DF:QuickDispatch (change_callback);
+ end,
+ })
- local buff_available = self:CreateSimpleListBox (f_auto, "$parentBuffAvailable", "Buffs Available", "The list is empty, cast spells to fill it", ALL_BUFFS, function (spellid)
- f.db.aura_tracker.buff_banned [spellid] = true; buff_ignored:Refresh()
- end,
- {
- icon = function(spellid) return select (3, GetSpellInfo (spellid)) end,
- text = function(spellid) return select (1, GetSpellInfo (spellid)) end,
- height = height,
- row_height = row_height,
- width = width,
- onenter = function(self, capsule, value) GameTooltip:SetOwner (self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(value); GameTooltip:AddLine (" "); GameTooltip:AddLine ("Click to ignore this aura", .2, 1, .2); GameTooltip:Show() end,
- })
-
- local debuff_ignored = self:CreateSimpleListBox (f_auto, "$parentDebuffIgnored", "Debuffs Ignored", "The list is empty, select a spell from the debuff list to ignore it.", f.db.aura_tracker.debuff_banned, function (spellid)
- f.db.aura_tracker.debuff_banned [spellid] = nil;
- end,
- {
- icon = function(spellid) return select (3, GetSpellInfo (spellid)) end,
- text = function(spellid) return select (1, GetSpellInfo (spellid)) end,
- height = height,
- row_height = row_height,
- width = width,
- onenter = function(self, capsule, value) GameTooltip:SetOwner (self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(value); GameTooltip:AddLine (" "); GameTooltip:AddLine ("Click to un-ignore this aura", .2, 1, .2); GameTooltip:Show() end,
- })
-
- local debuff_available = self:CreateSimpleListBox (f_auto, "$parentDebuffAvailable", "Debuffs Available", "The list is empty, cast spells to fill it", ALL_DEBUFFS, function (spellid)
- f.db.aura_tracker.debuff_banned [spellid] = true; debuff_ignored:Refresh()
- end, {
- icon = function(spellid) return select (3, GetSpellInfo (spellid)) end,
- text = function(spellid) return select (1, GetSpellInfo (spellid)) end,
- height = height,
- row_height = row_height,
- width = width,
- onenter = function(self, capsule, value) GameTooltip:SetOwner (self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(value); GameTooltip:AddLine (" "); GameTooltip:AddLine ("Click to ignore this aura", .2, 1, .2); GameTooltip:Show() end,
- })
-
- --como ira preencher ela no inicio e como ficara o lance dos profiles
+ --Buffs on the black list
+ local buff_ignored = self:CreateSimpleListBox (f_auto, "$parentBuffIgnored", texts.BUFFS_IGNORED, "the list is empty", f.db.aura_tracker.buff_banned,
+ function (spellid)
+ --f.db.aura_tracker.buff_banned [spellid] = nil; DF:QuickDispatch (change_callback);
+ end,
+ {
+ icon = function(spellid) return select (3, GetSpellInfo (spellid)) end,
+ text = function(spellid) return select (1, GetSpellInfo (spellid)) end,
+ height = height,
+ row_height = row_height,
+ width = width,
+ backdrop_color = {.8, .8, .8, 0.2},
+ panel_border_color = {.02, 0, 0, 1},
+ iconcoords = {.1, .9, .1, .9},
+ onenter = function(self, capsule, value) GameTooltip:SetOwner (self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(value); GameTooltip:AddLine (" "); GameTooltip:Show() end,
+ show_x_button = true,
+ x_button_func = function (spellId)
+ f.db.aura_tracker.buff_banned [spellId] = nil; DF:QuickDispatch (change_callback);
+ end,
+ })
- local y = -40
- buff_available:SetPoint ("topleft", f_auto, "topleft", 0, y)
- buff_ignored:SetPoint ("topleft", f_auto, "topleft", 6 + width, y)
- debuff_available:SetPoint ("topleft", f_auto, "topleft", 12 + (width*2), y)
- debuff_ignored:SetPoint ("topleft", f_auto, "topleft", 18 + (width*3), y)
-
- f.buff_available = buff_available
+ --Debuffs on the track list
+ local debuff_tracked = self:CreateSimpleListBox (f_auto, "$parentDebuffTracked", texts.DEBUFFS_TRACKED, "the list is empty", f.db.aura_tracker.debuff_tracked, function (spellid)
+ --f.db.aura_tracker.debuff_tracked [spellid] = nil; DF:QuickDispatch (change_callback);
+ end,
+ {
+ icon = function(spellid) return select (3, GetSpellInfo (spellid)) end,
+ text = function(spellid) return select (1, GetSpellInfo (spellid)) end,
+ height = height,
+ row_height = row_height,
+ width = width,
+ backdrop_color = {.8, .8, .8, 0.2},
+ panel_border_color = {0, .02, 0, 1},
+ iconcoords = {.1, .9, .1, .9},
+ onenter = function(self, capsule, value) GameTooltip:SetOwner (self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(value); GameTooltip:AddLine (" "); GameTooltip:Show() end,
+ show_x_button = true,
+ x_button_func = function (spellId)
+ f.db.aura_tracker.debuff_tracked [spellId] = nil; DF:QuickDispatch (change_callback);
+ end,
+ })
+
+ --Buffs on the track list
+ local buff_tracked = self:CreateSimpleListBox (f_auto, "$parentBuffTracked", texts.BUFFS_TRACKED, "the list is empty", f.db.aura_tracker.buff_tracked, function (spellid)
+ --f.db.aura_tracker.buff_tracked [spellid] = nil; DF:QuickDispatch (change_callback);
+ end,
+ {
+ icon = function(spellid) return select (3, GetSpellInfo (spellid)) end,
+ text = function(spellid) return select (1, GetSpellInfo (spellid)) end,
+ height = height,
+ row_height = row_height,
+ width = width,
+ backdrop_color = {.8, .8, .8, 0.2},
+ panel_border_color = {0, .01, 0, 1},
+ iconcoords = {.1, .9, .1, .9},
+ onenter = function(self, capsule, value) GameTooltip:SetOwner (self, "ANCHOR_RIGHT"); GameTooltip:SetSpellByID(value); GameTooltip:AddLine (" "); GameTooltip:Show() end,
+ show_x_button = true,
+ x_button_func = function (spellId)
+ f.db.aura_tracker.buff_tracked [spellId] = nil; DF:QuickDispatch (change_callback);
+ end,
+ })
+
+ debuff_ignored:SetPoint ("topleft", f_auto, "topleft", 0 + xLocation, y)
+ buff_ignored:SetPoint ("topleft", f_auto, "topleft", 8 + width + xLocation, y)
+ debuff_tracked:SetPoint ("topleft", f_auto, "topleft", 16 + (width*2) + xLocation, y)
+ buff_tracked:SetPoint ("topleft", f_auto, "topleft", 24 + (width*3) + xLocation, y)
+
f.buff_ignored = buff_ignored
- f.debuff_available = debuff_available
f.debuff_ignored = debuff_ignored
+ f.buff_tracked = buff_tracked
+ f.debuff_tracked = debuff_tracked
- local readCombatLog = CreateFrame ("frame", nil, f_auto)
- readCombatLog:SetScript ("OnEvent", function (self, event, time, token, hidding, sourceGUID, sourceName, sourceFlag, sourceFlag2, targetGUID, targetName, targetFlag, targetFlag2, spellid, spellname, spellschool, auraType, amount)
- if (auraType == "BUFF" and sourceGUID == readCombatLog.playerGUID) then
- if (not ALL_BUFFS [spellid]) then
- ALL_BUFFS [spellid] = true
- buff_available:Refresh()
- end
- elseif (auraType == "DEBUFF" and sourceGUID == readCombatLog.playerGUID) then
- if (not ALL_DEBUFFS [spellid]) then
- ALL_DEBUFFS [spellid] = true
- debuff_available:Refresh()
- end
- end
- end)
-
f_auto:SetScript ("OnShow", function()
for i = 1, BUFF_MAX_DISPLAY do
- local name, rank, texture, count, debuffType, duration, expirationTime, caster, _, nameplateShowPersonal, spellId, _, _, _, nameplateShowAll = UnitAura ("player", i, "HELPFUL")
+ local name, texture, count, debuffType, duration, expirationTime, caster, _, nameplateShowPersonal, spellId, _, _, _, nameplateShowAll = UnitAura ("player", i, "HELPFUL")
if (name) then
ALL_BUFFS [spellId] = true
end
- local name, rank, texture, count, debuffType, duration, expirationTime, caster, _, nameplateShowPersonal, spellId, _, _, _, nameplateShowAll = UnitAura ("player", i, "HARMFUL")
+ local name, texture, count, debuffType, duration, expirationTime, caster, _, nameplateShowPersonal, spellId, _, _, _, nameplateShowAll = UnitAura ("player", i, "HARMFUL")
if (name) then
ALL_DEBUFFS [spellId] = true
end
end
- buff_available:Refresh()
- buff_ignored:Refresh()
- debuff_available:Refresh()
+ buff_tracked:Refresh()
+ debuff_tracked:Refresh()
+ buff_ignored:Refresh()
debuff_ignored:Refresh()
- readCombatLog.playerGUID = UnitGUID ("player")
- readCombatLog:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
end)
f_auto:SetScript ("OnHide", function()
- readCombatLog:UnregisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
+ --
end)
-
+
--show the frame selecton on the f.db
- on_select_tracking_option (_, _, f.db.aura_tracker.track_method)
+
+ if (f.db.aura_tracker.track_method == 0x1) then
+ on_switch_tracking_method (automatic_tracking_checkbox)
+ elseif (f.db.aura_tracker.track_method == 0x2) then
+ on_switch_tracking_method (manual_tracking_checkbox)
+ end
-------manual
@@ -250,7 +613,6 @@
GameTooltip:SetOwner (self, "ANCHOR_RIGHT");
GameTooltip:SetSpellByID (spellid)
GameTooltip:AddLine (" ")
- GameTooltip:AddLine ("Click to untrack this aura", .2, 1, .2)
GameTooltip:Show()
end
end
@@ -259,9 +621,10 @@
self:SetBackdropColor (unpack (backdrop_color))
GameTooltip:Hide()
end
- local line_onclick = function (self)
- local spell = self.value
- local data = self:GetParent():GetData()
+
+ local onclick_remove_button = function (self)
+ local spell = self:GetParent().value
+ local data = self:GetParent():GetParent():GetData()
for i = 1, #data do
if (data[i] == spell) then
@@ -270,27 +633,36 @@
end
end
- self:GetParent():Refresh()
+ self:GetParent():GetParent():Refresh()
end
local scroll_createline = function (self, index)
local line = CreateFrame ("button", "$parentLine" .. index, self)
- line:SetPoint ("topleft", self, "topleft", 0, -((index-1)*(scroll_line_height+1)))
- line:SetSize (scroll_width, scroll_line_height)
+ line:SetPoint ("topleft", self, "topleft", 1, -((index-1)*(scroll_line_height+1)) - 1)
+ line:SetSize (scroll_width - 2, scroll_line_height)
line:SetScript ("OnEnter", line_onenter)
line:SetScript ("OnLeave", line_onleave)
- line:SetScript ("OnClick", line_onclick)
line:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
line:SetBackdropColor (unpack (backdrop_color))
local icon = line:CreateTexture ("$parentIcon", "overlay")
- icon:SetSize (scroll_line_height, scroll_line_height)
+ icon:SetSize (scroll_line_height - 2, scroll_line_height - 2)
+
local name = line:CreateFontString ("$parentName", "overlay", "GameFontNormal")
+
+ local remove_button = CreateFrame ("button", "$parentRemoveButton", line, "UIPanelCloseButton")
+ remove_button:SetSize (16, 16)
+ remove_button:SetScript ("OnClick", onclick_remove_button)
+ remove_button:SetPoint ("topright", line, "topright")
+ remove_button:GetNormalTexture():SetDesaturated (true)
+
icon:SetPoint ("left", line, "left", 2, 0)
name:SetPoint ("left", icon, "right", 2, 0)
+
line.icon = icon
line.name = name
+ line.removebutton = remove_button
return line
end
@@ -306,6 +678,7 @@
if (name) then
line.name:SetText (name)
line.icon:SetTexture (icon)
+ line.icon:SetTexCoord (.1, .9, .1, .9)
else
line.name:SetText (aura)
line.icon:SetTexture ([[Interface\InventoryItems\WoWUnknownItem01]])
@@ -316,18 +689,16 @@
local buffs_added = self:CreateScrollBox (f_manual, "$parentBuffsAdded", scroll_refresh, f.db.aura_tracker.buff, scroll_width, scroll_height, scroll_lines, scroll_line_height)
buffs_added:SetPoint ("topleft", f_manual, "topleft", 0, y)
- buffs_added:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
- buffs_added:SetBackdropColor (0, 0, 0, 0.2)
- buffs_added:SetBackdropBorderColor (0, 0, 0, 1)
+ DF:ReskinSlider (buffs_added)
+
for i = 1, scroll_lines do
buffs_added:CreateLine (scroll_createline)
end
local debuffs_added = self:CreateScrollBox (f_manual, "$parentDebuffsAdded", scroll_refresh, f.db.aura_tracker.debuff, scroll_width, scroll_height, scroll_lines, scroll_line_height)
debuffs_added:SetPoint ("topleft", f_manual, "topleft", width+30, y)
- debuffs_added:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
- debuffs_added:SetBackdropColor (0, 0, 0, 0.2)
- debuffs_added:SetBackdropBorderColor (0, 0, 0, 1)
+ DF:ReskinSlider (debuffs_added)
+
for i = 1, scroll_lines do
debuffs_added:CreateLine (scroll_createline)
end
@@ -339,6 +710,7 @@
buffs_added_name:SetTemplate (DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
buffs_added_name:SetPoint ("bottomleft", buffs_added, "topleft", 0, 2)
buffs_added.Title = buffs_added_name
+
local debuffs_added_name = DF:CreateLabel (debuffs_added, "Debuffs", 12, "silver")
debuffs_added_name:SetTemplate (DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
debuffs_added_name:SetPoint ("bottomleft", debuffs_added, "topleft", 0, 2)
@@ -347,36 +719,55 @@
--> build the text entry to type the spellname
local new_buff_string = self:CreateLabel (f_manual, "Add Buff")
local new_debuff_string = self:CreateLabel (f_manual, "Add Debuff")
-
local new_buff_entry = self:CreateTextEntry (f_manual, function()end, 200, 20, "NewBuffTextBox", _, _, options_dropdown_template)
local new_debuff_entry = self:CreateTextEntry (f_manual, function()end, 200, 20, "NewDebuffTextBox", _, _, options_dropdown_template)
+ new_buff_entry:SetHook ("OnEditFocusGained", load_all_spells)
+ new_debuff_entry:SetHook ("OnEditFocusGained", load_all_spells)
+ new_buff_entry.tooltip = "Enter the buff name using lower case letters.\n\nYou can add several spells at once using |cFFFFFF00;|r to separate each spell name."
+ new_debuff_entry.tooltip = "Enter the debuff name using lower case letters.\n\nYou can add several spells at once using |cFFFFFF00;|r to separate each spell name."
+
new_buff_entry:SetJustifyH ("left")
new_debuff_entry:SetJustifyH ("left")
- DF:SetAutoCompleteWithSpells (new_buff_entry)
- DF:SetAutoCompleteWithSpells (new_debuff_entry)
+ local add_buff_button = self:CreateButton (f_manual, function()
- local add_buff_button = self:CreateButton (f_manual, function()
local text = new_buff_entry.text
new_buff_entry:SetText ("")
new_buff_entry:ClearFocus()
+
if (text ~= "") then
--> check for more than one spellname
if (text:find (";")) then
- for _, spellname in ipairs ({strsplit (";", text)}) do
- spellname = self:trim (spellname)
- if (string.len (spellname) > 0) then
- tinsert (f.db.aura_tracker.buff, spellname)
+ for _, spellName in ipairs ({strsplit (";", text)}) do
+ spellName = self:trim (spellName)
+ spellName = lower (spellName)
+ if (string.len (spellName) > 0) then
+ local spellId = AllSpellsMap [spellName]
+ if (spellId) then
+ tinsert (f.db.aura_tracker.buff, spellId)
+ else
+ print ("spellId not found for spell:", spellName)
+ end
end
end
else
- tinsert (f.db.aura_tracker.buff, text)
+ --get the spellId
+ local spellName = lower (text)
+ local spellId = AllSpellsMap [spellName]
+ if (not spellId) then
+ print ("spellIs for spell ", spellName, "not found")
+ return
+ end
+
+ tinsert (f.db.aura_tracker.buff, spellId)
end
buffs_added:Refresh()
end
+
end, 100, 20, "Add Buff", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"))
+
local add_debuff_button = self:CreateButton (f_manual, function()
local text = new_debuff_entry.text
new_debuff_entry:SetText ("")
@@ -384,29 +775,47 @@
if (text ~= "") then
--> check for more than one spellname
if (text:find (";")) then
- for _, spellname in ipairs ({strsplit (";", text)}) do
- spellname = self:trim (spellname)
- if (string.len (spellname) > 0) then
- tinsert (f.db.aura_tracker.debuff, spellname)
+ for _, spellName in ipairs ({strsplit (";", text)}) do
+ spellName = self:trim (spellName)
+ spellName = lower (spellName)
+ if (string.len (spellName) > 0) then
+ local spellId = AllSpellsMap [spellName]
+ if (spellId) then
+ tinsert (f.db.aura_tracker.debuff, spellId)
+ else
+ print ("spellId not found for spell:", spellName)
+ end
end
end
else
- tinsert (f.db.aura_tracker.debuff, text)
+ --get the spellId
+ local spellName = lower (text)
+ local spellId = AllSpellsMap [spellName]
+ if (not spellId) then
+ print ("spellIs for spell ", spellName, "not found")
+ return
+ end
+
+ tinsert (f.db.aura_tracker.debuff, spellId)
end
+
debuffs_added:Refresh()
end
end, 100, 20, "Add Debuff", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"))
local multiple_spells_label = DF:CreateLabel (buffs_added, "You can add multiple auras at once by separating them with ';'.\nExample: Fireball; Frostbolt; Flamestrike", 10, "gray")
- multiple_spells_label:SetSize (350, 60)
+ multiple_spells_label:SetSize (350, 24)
multiple_spells_label:SetJustifyV ("top")
local export_box = self:CreateTextEntry (f_manual, function()end, 242, 20, "ExportAuraTextBox", _, _, options_dropdown_template)
local export_buff_button = self:CreateButton (f_manual, function()
local str = ""
- for _, spellname in ipairs (f.db.aura_tracker.buff) do
- str = str .. spellname .. "; "
+ for _, spellId in ipairs (f.db.aura_tracker.buff) do
+ local spellName = GetSpellInfo (spellId)
+ if (spellName) then
+ str = str .. spellName .. "; "
+ end
end
export_box.text = str
export_box:SetFocus (true)
@@ -416,30 +825,34 @@
local export_debuff_button = self:CreateButton (f_manual, function()
local str = ""
- for _, spellname in ipairs (f.db.aura_tracker.debuff) do
- str = str .. spellname .. "; "
+ for _, spellId in ipairs (f.db.aura_tracker.debuff) do
+ local spellName = GetSpellInfo (spellId)
+ if (spellName) then
+ str = str .. spellName .. "; "
+ end
end
+
export_box.text = str
export_box:SetFocus (true)
export_box:HighlightText()
end, 120, 20, "Export Debuffs", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"))
- multiple_spells_label:SetPoint ("topleft", f_manual, "topleft", 480, -120)
-
- export_buff_button:SetPoint ("topleft", f_manual, "topleft", 480, -160)
- export_debuff_button:SetPoint ("left",export_buff_button, "right", 2, 0)
- export_box:SetPoint ("topleft", f_manual, "topleft", 480, -185)
-
- new_buff_string:SetPoint ("topleft", f_manual, "topleft", 480, -40)
- new_buff_entry:SetPoint ("topleft", new_buff_string, "bottomleft", 0, -2)
+ new_buff_entry:SetPoint ("topleft", f_manual, "topleft", 480, y)
+ new_buff_string:SetPoint ("bottomleft", new_buff_entry, "topleft", 0, 2)
add_buff_button:SetPoint ("left", new_buff_entry, "right", 2, 0)
add_buff_button.tooltip = "Add the aura to be tracked.\n\nClick an aura on the list to remove it."
- new_debuff_string:SetPoint ("topleft", f_manual, "topleft", 480, -80)
+ new_debuff_string:SetPoint ("topleft", new_buff_entry, "bottomleft", 0, -6)
new_debuff_entry:SetPoint ("topleft", new_debuff_string, "bottomleft", 0, -2)
add_debuff_button:SetPoint ("left", new_debuff_entry, "right", 2, 0)
add_debuff_button.tooltip = "Add the aura to be tracked.\n\nClick an aura on the list to remove it."
+
+ multiple_spells_label:SetPoint ("topleft", new_debuff_entry, "bottomleft", 0, -6)
+
+ export_buff_button:SetPoint ("topleft", multiple_spells_label, "bottomleft", 0, -12)
+ export_debuff_button:SetPoint ("left",export_buff_button, "right", 2, 0)
+ export_box:SetPoint ("topleft", export_buff_button, "bottomleft", 0, -6)
buffs_added:Refresh()
debuffs_added:Refresh()
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/button.lua
--- a/Libs/DF/button.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/button.lua Fri Jul 20 19:04:12 2018 -0300
@@ -404,6 +404,12 @@
end
-- icon
+ function ButtonMetaFunctions:GetIconTexture()
+ if (self.icon) then
+ return self.icon:GetTexture()
+ end
+ end
+
function ButtonMetaFunctions:SetIcon (texture, width, height, layout, texcoord, overlay, textdistance, leftpadding, textheight, short_method)
if (not self.icon) then
self.icon = self:CreateTexture (nil, "artwork")
@@ -1170,4 +1176,4 @@
return button
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/button.xml
--- a/Libs/DF/button.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/button.xml Fri Jul 20 19:04:12 2018 -0300
@@ -39,4 +39,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/colors.lua
--- a/Libs/DF/colors.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/colors.lua Fri Jul 20 19:04:12 2018 -0300
@@ -164,4 +164,4 @@
["yellow"] = {1, 1, 0, 1},
["yellowgreen"] = {0.603922, 0.803922, 0.196078, 1}
}
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/cooltip.lua
--- a/Libs/DF/cooltip.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/cooltip.lua Fri Jul 20 19:04:12 2018 -0300
@@ -121,6 +121,14 @@
["SelectedRightAnchorMod"] = true,
}
+ CoolTip.AliasList = {
+ ["VerticalOffset"] = "ButtonsYMod",
+ ["VerticalPadding"] = "YSpacingMod",
+ ["LineHeightSizeOffset"] = "ButtonHeightMod",
+ ["FrameHeightSizeOffset"] = "HeighMod",
+
+ }
+
CoolTip.OptionsTable = {}
--cprops
@@ -1824,14 +1832,18 @@
CoolTip:SetOption ("HeightAnchorMod", 0)
end
- function CoolTip:SetOption (option, value)
+ function CoolTip:SetOption (optionName, value)
+
+ --> check for name alias
+ optionName = CoolTip.AliasList [optionName] or optionName
+
--> check if this options exists
- if (not CoolTip.OptionsList [option]) then
+ if (not CoolTip.OptionsList [optionName]) then
return --> error
end
-
+
--> set options
- CoolTip.OptionsTable [option] = value
+ CoolTip.OptionsTable [optionName] = value
end
----------------------------------------------------------------------
@@ -3131,4 +3143,4 @@
end
-DF:CreateCoolTip()
\ No newline at end of file
+DF:CreateCoolTip()
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/cooltip.xml
--- a/Libs/DF/cooltip.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/cooltip.xml Fri Jul 20 19:04:12 2018 -0300
@@ -101,7 +101,7 @@
-
+
@@ -111,7 +111,7 @@
-
+
@@ -315,4 +315,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/dropdown.lua
--- a/Libs/DF/dropdown.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/dropdown.lua Fri Jul 20 19:04:12 2018 -0300
@@ -537,6 +537,10 @@
GameCooltip2:SetOption ("TextFont", frame.table.descfont)
end
+ if (frame.table.tooltipwidth) then
+ GameCooltip2:SetOption ("FixedWidth", frame.table.tooltipwidth)
+ end
+
GameCooltip2:SetHost (frame, "topleft", "topright", 10, 0)
GameCooltip2:ShowCooltip (nil, "tooltip")
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/fw.lua
--- a/Libs/DF/fw.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/fw.lua Fri Jul 20 19:04:12 2018 -0300
@@ -1,5 +1,5 @@
-local dversion = 68
+local dversion = 85
local major, minor = "DetailsFramework-1.0", dversion
local DF, oldminor = LibStub:NewLibrary (major, minor)
@@ -15,6 +15,10 @@
local _type = type
local _unpack = unpack
local upper = string.upper
+local string_match = string.match
+
+SMALL_NUMBER = 0.000001
+ALPHA_BLEND_AMOUNT = 0.8400251
--> will always give a very random name for our widgets
local init_counter = math.random (1, 1000000)
@@ -117,6 +121,12 @@
"CreateBorder",
"FormatNumber",
"IntegerToTimer",
+ "QuickDispatch",
+ "CommaValue",
+ "RemoveRealmName",
+ "Trim",
+ "CreateGlowOverlay",
+ "CreateFrameShake",
}
DF.table = {}
@@ -181,6 +191,7 @@
t1 [key] = value
end
end
+ return t1
end
function DF.table.dump (t, s, deep)
@@ -258,6 +269,22 @@
end
end
+function DF:CommaValue (value)
+ if (not value) then
+ return "0"
+ end
+
+ value = floor (value)
+
+ if (value == 0) then
+ return "0"
+ end
+
+ --source http://richard.warburton.it
+ local left, num, right = string_match (value, '^([^%d]*%d)(%d*)(.-)$')
+ return left .. (num:reverse():gsub ('(%d%d%d)','%1,'):reverse()) .. right
+end
+
function DF:IntegerToTimer (value)
return "" .. floor (value/60) .. ":" .. format ("%02.f", value%60)
end
@@ -328,13 +355,17 @@
fontString:SetFont (fonte, size, outline)
end
+function DF:Trim (s) --hello name conventions!
+ return DF:trim (s)
+end
+
function DF:trim (s)
local from = s:match"^%s*()"
return from > #s and "" or s:match(".*%S", from)
end
function DF:Msg (msg)
- print ("|cFFFFFFAA" .. self.__name .. "|r " .. msg)
+ print ("|cFFFFFFAA" .. (self.__name or "FW Msg:") .. "|r ", msg)
end
function DF:GetNpcIdFromGuid (guid)
@@ -345,6 +376,25 @@
return 0
end
+function DF.SortOrder1 (t1, t2)
+ return t1[1] > t2[1]
+end
+function DF.SortOrder2 (t1, t2)
+ return t1[2] > t2[2]
+end
+function DF.SortOrder3 (t1, t2)
+ return t1[3] > t2[3]
+end
+function DF.SortOrder1R (t1, t2)
+ return t1[1] < t2[1]
+end
+function DF.SortOrder2R (t1, t2)
+ return t1[2] < t2[2]
+end
+function DF.SortOrder3R (t1, t2)
+ return t1[3] < t2[3]
+end
+
local onFinish = function (self)
if (self.showWhenDone) then
self.frame:SetAlpha (1)
@@ -462,6 +512,77 @@
return v1 or "topleft", v2, v3 or "topleft", v4 or 0, v5 or 0
end
+ local anchoring_functions = {
+ function (frame, anchorTo, offSetX, offSetY) --> 1 TOP LEFT
+ frame:ClearAllPoints()
+ frame:SetPoint ("bottomleft", anchorTo, "topleft", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 2 LEFT
+ frame:ClearAllPoints()
+ frame:SetPoint ("right", anchorTo, "left", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 3 BOTTOM LEFT
+ frame:ClearAllPoints()
+ frame:SetPoint ("topleft", anchorTo, "bottomleft", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 4 BOTTOM
+ frame:ClearAllPoints()
+ frame:SetPoint ("top", anchorTo, "bottom", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 5 BOTTOM RIGHT
+ frame:ClearAllPoints()
+ frame:SetPoint ("topright", anchorTo, "bottomright", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 6 RIGHT
+ frame:ClearAllPoints()
+ frame:SetPoint ("left", anchorTo, "right", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 7 TOP RIGHT
+ frame:ClearAllPoints()
+ frame:SetPoint ("bottomright", anchorTo, "topright", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 8 TOP
+ frame:ClearAllPoints()
+ frame:SetPoint ("bottom", anchorTo, "top", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 9 CENTER
+ frame:ClearAllPoints()
+ frame:SetPoint ("center", anchorTo, "center", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 10
+ frame:ClearAllPoints()
+ frame:SetPoint ("left", anchorTo, "left", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 11
+ frame:ClearAllPoints()
+ frame:SetPoint ("right", anchorTo, "right", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 12
+ frame:ClearAllPoints()
+ frame:SetPoint ("top", anchorTo, "top", offSetX, offSetY)
+ end,
+
+ function (frame, anchorTo, offSetX, offSetY) --> 13
+ frame:ClearAllPoints()
+ frame:SetPoint ("bottom", anchorTo, "bottom", offSetX, offSetY)
+ end
+ }
+
+ function DF:SetAnchor (widget, config, anchorTo)
+ anchorTo = anchorTo or widget:GetParent()
+ anchoring_functions [config.side] (widget, anchorTo, config.x, config.y)
+ end
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--> colors
@@ -550,6 +671,7 @@
local cur_x = x_offset
local cur_y = y_offset
local max_x = 0
+ local line_widgets_created = 0 --how many widgets has been created on this line loop pass
height = abs ((height or parent:GetHeight()) - abs (y_offset) + 20)
height = height*-1
@@ -567,6 +689,7 @@
label.widget_type = "label"
label:SetPoint (cur_x, cur_y)
tinsert (parent.widget_list, label)
+ line_widgets_created = line_widgets_created + 1
elseif (widget_table.type == "select" or widget_table.type == "dropdown") then
local dropdown = DF:NewDropDown (parent, nil, "$parentWidget" .. index, nil, 140, 18, widget_table.values, widget_table.get(), dropdown_template)
@@ -584,6 +707,7 @@
tinsert (parent.widget_list, dropdown)
widget_created = dropdown
+ line_widgets_created = line_widgets_created + 1
elseif (widget_table.type == "toggle" or widget_table.type == "switch") then
local switch = DF:NewSwitch (parent, nil, "$parentWidget" .. index, nil, 60, 20, nil, nil, widget_table.get(), nil, nil, nil, nil, switch_template)
@@ -607,6 +731,7 @@
tinsert (parent.widget_list, switch)
widget_created = switch
+ line_widgets_created = line_widgets_created + 1
elseif (widget_table.type == "range" or widget_table.type == "slider") then
local is_decimanls = widget_table.usedecimals
@@ -631,6 +756,7 @@
tinsert (parent.widget_list, slider)
widget_created = slider
+ line_widgets_created = line_widgets_created + 1
elseif (widget_table.type == "color" or widget_table.type == "color") then
local colorpick = DF:NewColorPickButton (parent, "$parentWidget" .. index, nil, widget_table.set, nil, button_template)
@@ -656,6 +782,7 @@
tinsert (parent.widget_list, colorpick)
widget_created = colorpick
+ line_widgets_created = line_widgets_created + 1
elseif (widget_table.type == "execute" or widget_table.type == "button") then
@@ -675,7 +802,7 @@
tinsert (parent.widget_list, button)
widget_created = button
-
+ line_widgets_created = line_widgets_created + 1
elseif (widget_table.type == "textentry") then
local textentry = DF:CreateTextEntry (parent, widget_table.func, 120, 18, nil, "$parentWidget" .. index, nil, button_template)
@@ -697,6 +824,7 @@
tinsert (parent.widget_list, textentry)
widget_created = textentry
+ line_widgets_created = line_widgets_created + 1
end
@@ -713,6 +841,7 @@
if (widget_table.type == "breakline" or cur_y < height) then
cur_y = y_offset
cur_x = cur_x + max_x + 30
+ line_widgets_created = 0
max_x = 0
end
@@ -1303,6 +1432,281 @@
return anim
end
+local frameshake_shake_finished = function (parent, shakeObject)
+ if (shakeObject.IsPlaying) then
+ shakeObject.IsPlaying = false
+
+ --> update the amount of shake running on this frame
+ parent.__frameshakes.enabled = parent.__frameshakes.enabled - 1
+
+ --> restore the default anchors, in case where deltaTime was too small that didn't triggered an update
+ for i = 1, #shakeObject.Anchors do
+ local anchor = shakeObject.Anchors [i]
+
+ if (#anchor == 3) then
+ local anchorTo, point1, point2 = unpack (anchor)
+ parent:SetPoint (anchorTo, point1, point2)
+
+ elseif (#anchor == 5) then
+ local anchorName1, anchorTo, anchorName2, point1, point2 = unpack (anchor)
+ parent:SetPoint (anchorName1, anchorTo, anchorName2, point1, point2)
+ end
+ end
+ end
+end
+
+local frameshake_do_update = function (parent, shakeObject, deltaTime)
+
+ --> check delta time
+ deltaTime = deltaTime or 0
+
+ --> update time left
+ shakeObject.TimeLeft = max (shakeObject.TimeLeft - deltaTime, 0)
+
+ if (shakeObject.TimeLeft > 0) then
+
+ --> update fade in and out
+ if (shakeObject.IsFadingIn) then
+ shakeObject.IsFadingInTime = shakeObject.IsFadingInTime + deltaTime
+ end
+ if (shakeObject.IsFadingOut) then
+ shakeObject.IsFadingOutTime = shakeObject.IsFadingOutTime + deltaTime
+ end
+
+ --> check if can disable fade in
+ if (shakeObject.IsFadingIn and shakeObject.IsFadingInTime > shakeObject.FadeInTime) then
+ shakeObject.IsFadingIn = false
+ end
+
+ --> check if can enable fade out
+ if (not shakeObject.IsFadingOut and shakeObject.TimeLeft < shakeObject.FadeOutTime) then
+ shakeObject.IsFadingOut = true
+ shakeObject.IsFadingOutTime = shakeObject.FadeOutTime - shakeObject.TimeLeft
+ end
+
+ --> update position
+ local scaleShake = min (shakeObject.IsFadingIn and (shakeObject.IsFadingInTime / shakeObject.FadeInTime) or 1, shakeObject.IsFadingOut and (1 - shakeObject.IsFadingOutTime / shakeObject.FadeOutTime) or 1)
+
+ if (scaleShake > 0) then
+
+ --> delate the time by the frequency on both X and Y offsets
+ shakeObject.XSineOffset = shakeObject.XSineOffset + (deltaTime * shakeObject.Frequency)
+ shakeObject.YSineOffset = shakeObject.YSineOffset + (deltaTime * shakeObject.Frequency)
+
+ --> calc the new position
+ local newX, newY
+ if (shakeObject.AbsoluteSineX) then
+ --absoluting only the sine wave, passing a negative scale will reverse the absolute direction
+ newX = shakeObject.Amplitude * abs (math.sin (shakeObject.XSineOffset)) * scaleShake * shakeObject.ScaleX
+ else
+ newX = shakeObject.Amplitude * math.sin (shakeObject.XSineOffset) * scaleShake * shakeObject.ScaleX
+ end
+
+ if (shakeObject.AbsoluteSineY) then
+ newY = shakeObject.Amplitude * abs (math.sin (shakeObject.YSineOffset)) * scaleShake * shakeObject.ScaleY
+ else
+ newY = shakeObject.Amplitude * math.sin (shakeObject.YSineOffset) * scaleShake * shakeObject.ScaleY
+ end
+
+ --> apply the offset to the frame anchors
+ for i = 1, #shakeObject.Anchors do
+ local anchor = shakeObject.Anchors [i]
+
+ if (#anchor == 3) then
+ local anchorTo, point1, point2 = unpack (anchor)
+ parent:SetPoint (anchorTo, point1 + newX, point2 + newY)
+
+ elseif (#anchor == 5) then
+ local anchorName1, anchorTo, anchorName2, point1, point2 = unpack (anchor)
+ parent:SetPoint (anchorName1, anchorTo, anchorName2, point1 + newX, point2 + newY)
+ end
+ end
+
+ end
+ else
+ frameshake_shake_finished (parent, shakeObject)
+ end
+end
+
+local frameshake_update_all = function (parent, deltaTime)
+ --> check if there's a shake running
+ --print ("Shakes Enabled: ", parent.__frameshakes.enabled)
+ if (parent.__frameshakes.enabled > 0) then
+ --update all shakes
+ for i = 1, #parent.__frameshakes do
+ local shakeObject = parent.__frameshakes [i]
+ if (shakeObject.IsPlaying) then
+ frameshake_do_update (parent, shakeObject, deltaTime)
+ end
+ end
+ end
+end
+
+--> scale direction scales the X and Y coordinates, scale strength scales the amplitude and frequency
+local frameshake_play = function (parent, shakeObject, scaleDirection, scaleAmplitude, scaleFrequency, scaleDuration)
+
+ --> check if is already playing
+ if (shakeObject.TimeLeft > 0) then
+ --> reset the time left
+ shakeObject.TimeLeft = shakeObject.Duration
+
+ if (shakeObject.IsFadingOut) then
+ if (shakeObject.FadeInTime > 0) then
+ shakeObject.IsFadingIn = true
+ --> scale the current fade out into fade in, so it starts the fade in at the point where it was fading out
+ shakeObject.IsFadingInTime = shakeObject.FadeInTime * (1 - shakeObject.IsFadingOutTime / shakeObject.FadeOutTime)
+ else
+ shakeObject.IsFadingIn = false
+ shakeObject.IsFadingInTime = 0
+ end
+
+ --> disable fade out and enable fade in
+ shakeObject.IsFadingOut = false
+ shakeObject.IsFadingOutTime = 0
+ end
+
+ else
+ --> create a new random offset
+ shakeObject.XSineOffset = math.pi * 2 * math.random()
+ shakeObject.YSineOffset = math.pi * 2 * math.random()
+
+ --> store the initial position if case it needs a reset
+ shakeObject.StartedXSineOffset = shakeObject.XSineOffset
+ shakeObject.StartedYSineOffset = shakeObject.YSineOffset
+
+ --> check if there's a fade in time
+ if (shakeObject.FadeInTime > 0) then
+ shakeObject.IsFadingIn = true
+ else
+ shakeObject.IsFadingIn = false
+ end
+
+ shakeObject.IsFadingInTime = 0
+ shakeObject.IsFadingOut = false
+ shakeObject.IsFadingOutTime = 0
+
+ --> apply custom scale
+ shakeObject.ScaleX = (scaleDirection or 1) * shakeObject.OriginalScaleX
+ shakeObject.ScaleY = (scaleDirection or 1) * shakeObject.OriginalScaleY
+ shakeObject.Frequency = (scaleFrequency or 1) * shakeObject.OriginalFrequency
+ shakeObject.Amplitude = (scaleAmplitude or 1) * shakeObject.OriginalAmplitude
+ shakeObject.Duration = (scaleDuration or 1) * shakeObject.OriginalDuration
+
+ --> update the time left
+ shakeObject.TimeLeft = shakeObject.Duration
+
+ --> check if is dynamic points
+ if (shakeObject.IsDynamicAnchor) then
+ wipe (shakeObject.Anchors)
+ for i = 1, parent:GetNumPoints() do
+ local p1, p2, p3, p4, p5 = parent:GetPoint (i)
+ shakeObject.Anchors [#shakeObject.Anchors+1] = {p1, p2, p3, p4, p5}
+ end
+ end
+
+ --> update the amount of shake running on this frame
+ parent.__frameshakes.enabled = parent.__frameshakes.enabled + 1
+ end
+
+ shakeObject.IsPlaying = true
+
+ frameshake_do_update (parent, shakeObject)
+end
+
+function DF:CreateFrameShake (parent, duration, amplitude, frequency, absoluteSineX, absoluteSineY, scaleX, scaleY, fadeInTime, fadeOutTime, anchorPoints)
+
+ --> create the shake table
+ local frameShake = {
+ Amplitude = amplitude or 2,
+ Frequency = frequency or 5,
+ Duration = duration or 0.3,
+ FadeInTime = fadeInTime or 0.01,
+ FadeOutTime = fadeOutTime or 0.01,
+ ScaleX = scaleX or 0.2,
+ ScaleY = scaleY or 1,
+ AbsoluteSineX = absoluteSineX,
+ AbsoluteSineY = absoluteSineY,
+ --
+ IsPlaying = false,
+ TimeLeft = 0,
+ }
+
+ frameShake.OriginalScaleX = frameShake.ScaleX
+ frameShake.OriginalScaleY = frameShake.ScaleY
+ frameShake.OriginalFrequency = frameShake.Frequency
+ frameShake.OriginalAmplitude = frameShake.Amplitude
+ frameShake.OriginalDuration = frameShake.Duration
+
+ if (type (anchorPoints) ~= "table") then
+ frameShake.IsDynamicAnchor = true
+ frameShake.Anchors = {}
+ else
+ frameShake.Anchors = anchorPoints
+ end
+
+ --> inject frame shake table into the frame
+ if (not parent.__frameshakes) then
+ parent.__frameshakes = {
+ enabled = 0,
+ }
+ parent.PlayFrameShake = frameshake_play
+ parent.UpdateFrameShake = frameshake_do_update
+ parent.UpdateAllFrameShake = frameshake_update_all
+ parent:HookScript ("OnUpdate", frameshake_update_all)
+ end
+
+ tinsert (parent.__frameshakes, frameShake)
+
+ return frameShake
+end
+
+
+-----------------------------
+--> glow overlay
+
+local play_glow_overlay = function (self)
+ self:Show()
+ if (self.animOut:IsPlaying()) then
+ self.animOut:Stop()
+ end
+ self.animIn:Play()
+end
+
+local stop_glow_overlay = function (self)
+ self.animOut:Stop()
+ self.animIn:Stop()
+ self:Hide()
+end
+
+local defaultColor = {1, 1, 1, 1}
+
+--this is most copied from the wow client code, few changes applied to customize it
+function DF:CreateGlowOverlay (parent, antsColor, glowColor)
+ local glowFrame = CreateFrame ("frame", parent:GetName() and "$parentGlow2" or "OverlayActionGlow" .. math.random (1, 10000000), parent, "ActionBarButtonSpellActivationAlert")
+
+ glowFrame.Play = play_glow_overlay
+ glowFrame.Stop = stop_glow_overlay
+
+ parent.overlay = glowFrame
+ local frameWidth, frameHeight = parent:GetSize()
+
+ local scale = 1.4
+
+ --Make the height/width available before the next frame:
+ parent.overlay:SetSize(frameWidth * scale, frameHeight * scale)
+ parent.overlay:SetPoint("TOPLEFT", parent, "TOPLEFT", -frameWidth * 0.2, frameHeight * 0.2)
+ parent.overlay:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", frameWidth * 0.2, -frameHeight * 0.2)
+
+ local r, g, b, a = DF:ParseColors (antsColor or defaultColor)
+ glowFrame.ants:SetVertexColor (r, g, b, a)
+
+ local r, g, b, a = DF:ParseColors (glowColor or defaultColor)
+ glowFrame.outerGlow:SetVertexColor (r, g, b, a)
+
+ glowFrame.outerGlow:SetScale (1.2)
+
+ return glowFrame
+end
-----------------------------
--> borders
@@ -1327,6 +1731,34 @@
end
end
+local SetBorderColor = function (self, r, g, b)
+ for _, texture in ipairs (self.Borders.Layer1) do
+ texture:SetColorTexture (r, g, b)
+ end
+ for _, texture in ipairs (self.Borders.Layer2) do
+ texture:SetColorTexture (r, g, b)
+ end
+ for _, texture in ipairs (self.Borders.Layer3) do
+ texture:SetColorTexture (r, g, b)
+ end
+end
+
+local SetLayerVisibility = function (self, layer1Shown, layer2Shown, layer3Shown)
+
+ for _, texture in ipairs (self.Borders.Layer1) do
+ texture:SetShown (layer1Shown)
+ end
+
+ for _, texture in ipairs (self.Borders.Layer2) do
+ texture:SetShown (layer2Shown)
+ end
+
+ for _, texture in ipairs (self.Borders.Layer3) do
+ texture:SetShown (layer3Shown)
+ end
+
+end
+
function DF:CreateBorder (parent, alpha1, alpha2, alpha3)
parent.Borders = {
@@ -1339,6 +1771,8 @@
}
parent.SetBorderAlpha = SetBorderAlpha
+ parent.SetBorderColor = SetBorderColor
+ parent.SetLayerVisibility = SetLayerVisibility
local border1 = parent:CreateTexture (nil, "background")
border1:SetPoint ("topleft", parent, "topleft", -1, 1)
@@ -1410,6 +1844,115 @@
end
+
+function DF:CreateBorderWithSpread (parent, alpha1, alpha2, alpha3, size, spread)
+
+ parent.Borders = {
+ Layer1 = {},
+ Layer2 = {},
+ Layer3 = {},
+ Alpha1 = alpha1 or default_border_color1,
+ Alpha2 = alpha2 or default_border_color2,
+ Alpha3 = alpha3 or default_border_color3,
+ }
+
+ parent.SetBorderAlpha = SetBorderAlpha
+ parent.SetBorderColor = SetBorderColor
+ parent.SetLayerVisibility = SetLayerVisibility
+
+ --left
+ local border1 = parent:CreateTexture (nil, "background")
+ border1:SetPoint ("topleft", parent, "topleft", -1 + spread, 1 + (-spread))
+ border1:SetPoint ("bottomleft", parent, "bottomleft", -1 + spread, -1 + spread)
+ border1:SetColorTexture (0, 0, 0, alpha1 or default_border_color1)
+ border1:SetWidth (size)
+
+ local border2 = parent:CreateTexture (nil, "background")
+ border2:SetPoint ("topleft", parent, "topleft", -2 + spread, 2 + (-spread))
+ border2:SetPoint ("bottomleft", parent, "bottomleft", -2 + spread, -2 + spread)
+ border2:SetColorTexture (0, 0, 0, alpha2 or default_border_color2)
+ border2:SetWidth (size)
+
+ local border3 = parent:CreateTexture (nil, "background")
+ border3:SetPoint ("topleft", parent, "topleft", -3 + spread, 3 + (-spread))
+ border3:SetPoint ("bottomleft", parent, "bottomleft", -3 + spread, -3 + spread)
+ border3:SetColorTexture (0, 0, 0, alpha3 or default_border_color3)
+ border3:SetWidth (size)
+
+ tinsert (parent.Borders.Layer1, border1)
+ tinsert (parent.Borders.Layer2, border2)
+ tinsert (parent.Borders.Layer3, border3)
+
+ --top
+ local border1 = parent:CreateTexture (nil, "background")
+ border1:SetPoint ("topleft", parent, "topleft", 0 + spread, 1 + (-spread))
+ border1:SetPoint ("topright", parent, "topright", 1 + (-spread), 1 + (-spread))
+ border1:SetColorTexture (0, 0, 0, alpha1 or default_border_color1)
+ border1:SetHeight (size)
+
+ local border2 = parent:CreateTexture (nil, "background")
+ border2:SetPoint ("topleft", parent, "topleft", -1 + spread, 2 + (-spread))
+ border2:SetPoint ("topright", parent, "topright", 2 + (-spread), 2 + (-spread))
+ border2:SetColorTexture (0, 0, 0, alpha2 or default_border_color2)
+ border2:SetHeight (size)
+
+ local border3 = parent:CreateTexture (nil, "background")
+ border3:SetPoint ("topleft", parent, "topleft", -2 + spread, 3 + (-spread))
+ border3:SetPoint ("topright", parent, "topright", 3 + (-spread), 3 + (-spread))
+ border3:SetColorTexture (0, 0, 0, alpha3 or default_border_color3)
+ border3:SetHeight (size)
+
+ tinsert (parent.Borders.Layer1, border1)
+ tinsert (parent.Borders.Layer2, border2)
+ tinsert (parent.Borders.Layer3, border3)
+
+ --right
+ local border1 = parent:CreateTexture (nil, "background")
+ border1:SetPoint ("topright", parent, "topright", 1 + (-spread), 0 + (-spread))
+ border1:SetPoint ("bottomright", parent, "bottomright", 1 + (-spread), -1 + spread)
+ border1:SetColorTexture (0, 0, 0, alpha1 or default_border_color1)
+ border1:SetWidth (size)
+
+ local border2 = parent:CreateTexture (nil, "background")
+ border2:SetPoint ("topright", parent, "topright", 2 + (-spread), 1 + (-spread))
+ border2:SetPoint ("bottomright", parent, "bottomright", 2 + (-spread), -2 + spread)
+ border2:SetColorTexture (0, 0, 0, alpha2 or default_border_color2)
+ border2:SetWidth (size)
+
+ local border3 = parent:CreateTexture (nil, "background")
+ border3:SetPoint ("topright", parent, "topright", 3 + (-spread), 2 + (-spread))
+ border3:SetPoint ("bottomright", parent, "bottomright", 3 + (-spread), -3 + spread)
+ border3:SetColorTexture (0, 0, 0, alpha3 or default_border_color3)
+ border3:SetWidth (size)
+
+ tinsert (parent.Borders.Layer1, border1)
+ tinsert (parent.Borders.Layer2, border2)
+ tinsert (parent.Borders.Layer3, border3)
+
+ local border1 = parent:CreateTexture (nil, "background")
+ border1:SetPoint ("bottomleft", parent, "bottomleft", 0 + spread, -1 + spread)
+ border1:SetPoint ("bottomright", parent, "bottomright", 0 + (-spread), -1 + spread)
+ border1:SetColorTexture (0, 0, 0, alpha1 or default_border_color1)
+ border1:SetHeight (size)
+
+ local border2 = parent:CreateTexture (nil, "background")
+ border2:SetPoint ("bottomleft", parent, "bottomleft", -1 + spread, -2 + spread)
+ border2:SetPoint ("bottomright", parent, "bottomright", 1 + (-spread), -2 + spread)
+ border2:SetColorTexture (0, 0, 0, alpha2 or default_border_color2)
+ border2:SetHeight (size)
+
+ local border3 = parent:CreateTexture (nil, "background")
+ border3:SetPoint ("bottomleft", parent, "bottomleft", -2 + spread, -3 + spread)
+ border3:SetPoint ("bottomright", parent, "bottomright", 2 + (-spread), -3 + spread)
+ border3:SetColorTexture (0, 0, 0, alpha3 or default_border_color3)
+ border3:SetHeight (size)
+
+ tinsert (parent.Borders.Layer1, border1)
+ tinsert (parent.Borders.Layer2, border2)
+ tinsert (parent.Borders.Layer3, border3)
+
+end
+
function DF:ReskinSlider (slider, heightOffset)
if (slider.slider) then
slider.cima:SetNormalTexture ([[Interface\Buttons\Arrow-Up-Up]])
@@ -1451,49 +1994,76 @@
slider.slider.thumb:SetTexCoord (482/512, 492/512, 104/512, 120/512)
slider.slider.thumb:SetSize (12, 12)
slider.slider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95)
+
else
+ --up button
+ do
+ local normalTexture = slider.ScrollBar.ScrollUpButton.Normal
+ normalTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Up]])
+ normalTexture:SetTexCoord (0, 1, .2, 1)
+
+ normalTexture:SetPoint ("topleft", slider.ScrollBar.ScrollUpButton, "topleft", 1, 0)
+ normalTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", 1, 0)
+
+ local pushedTexture = slider.ScrollBar.ScrollUpButton.Pushed
+ pushedTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Down]])
+ pushedTexture:SetTexCoord (0, 1, .2, 1)
+
+ pushedTexture:SetPoint ("topleft", slider.ScrollBar.ScrollUpButton, "topleft", 1, 0)
+ pushedTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", 1, 0)
- slider.ScrollBar.ScrollUpButton:SetNormalTexture ([[Interface\Buttons\Arrow-Up-Up]])
- slider.ScrollBar.ScrollUpButton:GetNormalTexture():SetTexCoord (0, 1, 0, 1)
- slider.ScrollBar.ScrollUpButton:SetPushedTexture ([[Interface\Buttons\Arrow-Up-Down]])
- slider.ScrollBar.ScrollUpButton:GetPushedTexture():SetTexCoord (0, 1, 0, 1)
- slider.ScrollBar.ScrollUpButton:SetDisabledTexture ([[Interface\Buttons\Arrow-Up-Disabled]])
- slider.ScrollBar.ScrollUpButton:GetDisabledTexture():SetTexCoord (0, 1, 0, 1)
+ local disabledTexture = slider.ScrollBar.ScrollUpButton.Disabled
+ disabledTexture:SetTexture ([[Interface\Buttons\Arrow-Up-Disabled]])
+ disabledTexture:SetTexCoord (0, 1, .2, 1)
+ disabledTexture:SetAlpha (.5)
+
+ disabledTexture:SetPoint ("topleft", slider.ScrollBar.ScrollUpButton, "topleft", 1, 0)
+ disabledTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollUpButton, "bottomright", 1, 0)
+
+ slider.ScrollBar.ScrollUpButton:SetSize (16, 16)
+ slider.ScrollBar.ScrollUpButton:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"})
+ slider.ScrollBar.ScrollUpButton:SetBackdropColor (0, 0, 0, 0.3)
+ slider.ScrollBar.ScrollUpButton:SetBackdropBorderColor (0, 0, 0, 1)
+
+ --it was having problems with the texture anchor when calling ClearAllPoints() and setting new points different from the original
+ --now it is using the same points from the original with small offsets tp align correctly
+ end
+
+ --down button
+ do
+ local normalTexture = slider.ScrollBar.ScrollDownButton.Normal
+ normalTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Up]])
+ normalTexture:SetTexCoord (0, 1, 0, .8)
+
+ normalTexture:SetPoint ("topleft", slider.ScrollBar.ScrollDownButton, "topleft", 1, -4)
+ normalTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", 1, -4)
+
+ local pushedTexture = slider.ScrollBar.ScrollDownButton.Pushed
+ pushedTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Down]])
+ pushedTexture:SetTexCoord (0, 1, 0, .8)
+
+ pushedTexture:SetPoint ("topleft", slider.ScrollBar.ScrollDownButton, "topleft", 1, -4)
+ pushedTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", 1, -4)
+
+ local disabledTexture = slider.ScrollBar.ScrollDownButton.Disabled
+ disabledTexture:SetTexture ([[Interface\Buttons\Arrow-Down-Disabled]])
+ disabledTexture:SetTexCoord (0, 1, 0, .8)
+ disabledTexture:SetAlpha (.5)
+
+ disabledTexture:SetPoint ("topleft", slider.ScrollBar.ScrollDownButton, "topleft", 1, -4)
+ disabledTexture:SetPoint ("bottomright", slider.ScrollBar.ScrollDownButton, "bottomright", 1, -4)
+
+ slider.ScrollBar.ScrollDownButton:SetSize (16, 16)
+ slider.ScrollBar.ScrollDownButton:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"})
+ slider.ScrollBar.ScrollDownButton:SetBackdropColor (0, 0, 0, 0.3)
+ slider.ScrollBar.ScrollDownButton:SetBackdropBorderColor (0, 0, 0, 1)
- slider.ScrollBar.ScrollUpButton:SetSize (16, 16)
- slider.ScrollBar.ScrollUpButton:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"})
- slider.ScrollBar.ScrollUpButton:SetBackdropColor (0, 0, 0, 0.3)
- slider.ScrollBar.ScrollUpButton:SetBackdropBorderColor (0, 0, 0, 1)
-
- slider.ScrollBar.ScrollUpButton:GetNormalTexture():ClearAllPoints()
- slider.ScrollBar.ScrollUpButton:GetPushedTexture():ClearAllPoints()
- slider.ScrollBar.ScrollUpButton:GetDisabledTexture():ClearAllPoints()
- slider.ScrollBar.ScrollUpButton:GetNormalTexture():SetPoint ("center", slider.ScrollBar.ScrollUpButton, "center", 1, 1)
- slider.ScrollBar.ScrollUpButton:GetPushedTexture():SetPoint ("center", slider.ScrollBar.ScrollUpButton, "center", 1, 1)
- slider.ScrollBar.ScrollUpButton:GetDisabledTexture():SetPoint ("center", slider.ScrollBar.ScrollUpButton, "center", 1, 1)
-
+ --
+ --slider.ScrollBar.ScrollDownButton:SetPoint ("top", slider.ScrollBar, "bottom", 0, 0)
+ end
+
--
- slider.ScrollBar.ScrollDownButton:SetNormalTexture ([[Interface\Buttons\Arrow-Down-Up]])
- slider.ScrollBar.ScrollDownButton:GetNormalTexture():SetTexCoord (0, 1, 0, 1)
- slider.ScrollBar.ScrollDownButton:SetPushedTexture ([[Interface\Buttons\Arrow-Down-Down]])
- slider.ScrollBar.ScrollDownButton:GetPushedTexture():SetTexCoord (0, 1, 0, 1)
- slider.ScrollBar.ScrollDownButton:SetDisabledTexture ([[Interface\Buttons\Arrow-Down-Disabled]])
- slider.ScrollBar.ScrollDownButton:GetDisabledTexture():SetTexCoord (0, 1, 0, 1)
-
- slider.ScrollBar.ScrollDownButton:SetSize (16, 16)
- slider.ScrollBar.ScrollDownButton:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"})
- slider.ScrollBar.ScrollDownButton:SetBackdropColor (0, 0, 0, 0.3)
- slider.ScrollBar.ScrollDownButton:SetBackdropBorderColor (0, 0, 0, 1)
-
- slider.ScrollBar.ScrollDownButton:GetNormalTexture():ClearAllPoints()
- slider.ScrollBar.ScrollDownButton:GetPushedTexture():ClearAllPoints()
- slider.ScrollBar.ScrollDownButton:GetDisabledTexture():ClearAllPoints()
- slider.ScrollBar.ScrollDownButton:GetNormalTexture():SetPoint ("center", slider.ScrollBar.ScrollDownButton, "center", 1, -5)
- slider.ScrollBar.ScrollDownButton:GetPushedTexture():SetPoint ("center", slider.ScrollBar.ScrollDownButton, "center", 1, -5)
- slider.ScrollBar.ScrollDownButton:GetDisabledTexture():SetPoint ("center", slider.ScrollBar.ScrollDownButton, "center", 1, -5)
-
- --
slider.ScrollBar:SetPoint ("TOPLEFT", slider, "TOPRIGHT", 6, -16)
slider.ScrollBar:SetPoint ("BOTTOMLEFT", slider, "BOTTOMRIGHT", 6, 16 + (heightOffset and heightOffset*-1 or 0))
@@ -1508,4 +2078,57 @@
end
end
---doo elsee
\ No newline at end of file
+function DF:GetCurrentSpec()
+ local specIndex = GetSpecialization()
+ if (specIndex) then
+ local specID = GetSpecializationInfo (specIndex)
+ if (specID and specID ~= 0) then
+ return specID
+ end
+ end
+end
+
+local specs_per_class = {
+ ["DEMONHUNTER"] = {577, 581},
+ ["DEATHKNIGHT"] = {250, 251, 252},
+ ["WARRIOR"] = {71, 72, 73},
+ ["MAGE"] = {62, 63, 64},
+ ["ROGUE"] = {259, 260, 261},
+ ["DRUID"] = {102, 103, 104, 105},
+ ["HUNTER"] = {253, 254, 255},
+ ["SHAMAN"] = {262, 263, 254},
+ ["PRIEST"] = {256, 257, 258},
+ ["WARLOCK"] = {265, 266, 267},
+ ["PALADIN"] = {65, 66, 70},
+ ["MONK"] = {268, 269, 270},
+}
+
+function DF:GetClassSpecIDs (class)
+ return specs_per_class [class]
+end
+
+local dispatch_error = function (context, errortext)
+ DF:Msg ( (context or "") .. " |cFFFF9900error|r: " .. (errortext or ""))
+end
+
+--> safe call an external func with payload and without telling who is calling
+function DF:QuickDispatch (func, ...)
+ if (type (func) ~= "function") then
+ return
+ end
+
+ local okay, errortext = pcall (func, ...)
+
+ if (not okay) then
+ --> trigger an error msg
+ dispatch_error (_, errortext)
+ return
+ end
+
+ return true
+end
+
+
+
+--doo elsee
+--was doing double loops due to not enought height
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/help.lua
--- a/Libs/DF/help.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/help.lua Fri Jul 20 19:04:12 2018 -0300
@@ -120,4 +120,4 @@
return help
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/label.lua
--- a/Libs/DF/label.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/label.lua Fri Jul 20 19:04:12 2018 -0300
@@ -325,4 +325,4 @@
end
return LabelObject
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/load.xml
--- a/Libs/DF/load.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/load.xml Fri Jul 20 19:04:12 2018 -0300
@@ -8,6 +8,7 @@
+
@@ -21,4 +22,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/math.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Libs/DF/math.lua Fri Jul 20 19:04:12 2018 -0300
@@ -0,0 +1,108 @@
+
+
+local DF = _G ["DetailsFramework"]
+if (not DF or not DetailsFrameworkCanLoad) then
+ return
+end
+
+local UnitExists = UnitExists
+local atan2 = math.atan2
+local pi = math.pi
+local abs = math.abs
+
+SMALL_FLOAT = 0.000001
+
+--find distance between two players
+function DF:GetDistance_Unit (unit1, unit2)
+ if (UnitExists (unit1) and UnitExists (unit2)) then
+ local u1X, u1Y = UnitPosition (unit1)
+ local u2X, u2Y = UnitPosition (unit2)
+
+ local dX = u2X - u1X
+ local dY = u2Y - u1Y
+
+ return ((dX*dX) + (dY*dY)) ^ .5
+ end
+ return 0
+end
+
+--find distance between two points
+function DF:GetDistance_Point (x1, y1, x2, y2)
+ local dx = x2 - x1
+ local dy = y2 - y1
+ return ((dx * dx) + (dy * dy)) ^ .5
+end
+
+--find a rotation for an object from a point to another point
+function DF:FindLookAtRotation (x1, y1, x2, y2)
+ return atan2 (y2 - y1, x2 - x1) + pi
+end
+
+--find the value scale between two given values. e.g: value of 500 in a range 0-100 result in 10 in a scale for 0-10
+function DF:MapRangeClamped (inputX, inputY, outputX, outputY, value)
+ return DF:GetRangeValue (outputX, outputY, Clamp (DF:GetRangePercent (inputX, inputY, value), 0, 1))
+end
+
+--find the value scale between two given values. e.g: value of 75 in a range 0-100 result in 7.5 in a scale for 0-10
+function DF:MapRangeUnclamped (inputX, inputY, outputX, outputY, value)
+ return DF:GetRangeValue (outputX, outputY, DF:GetRangePercent (inputX, inputY, value))
+end
+
+--find the normalized percent of the value in the range. e.g range of 200-400 and a value of 250 result in 0.25
+function DF:GetRangePercent (minValue, maxValue, value)
+ return (value - minValue) / (maxValue - minValue)
+end
+
+--find the value in the range given from a normalized percent. e.g range of 200-400 and a percent of 0.8 result in 360
+function DF:GetRangeValue (minValue, maxValue, percent)
+ return Lerp (minValue, maxValue, percent)
+end
+
+--dot product of two 2D Vectors
+function DF:GetDotProduct (value1, value2)
+ return (value1.x * value2.x) + (value1.y * value2.y)
+end
+
+--normalized value 0-1 result in the value on the range given, e.g 200-400 range with a value of .5 result in 300
+function DF:LerpNorm (minValue, maxValue, value)
+ return (minValue + value * (maxValue - minValue))
+end
+
+--change the color by the deltaTime
+function DF:LerpLinearColor (deltaTime, interpSpeed, r1, g1, b1, r2, g2, b2)
+ deltaTime = deltaTime * interpSpeed
+ local r = r1 + (r2 - r1) * deltaTime
+ local g = g1 + (g2 - g1) * deltaTime
+ local b = b1 + (b2 - b1) * deltaTime
+ return r, g, b
+end
+
+--check if a number is near another number by a tolerance
+function DF:IsNearlyEqual (value1, value2, tolerance)
+ tolerance = tolerance or SMALL_FLOAT
+ return abs (value1 - value2) <= tolerance
+end
+
+--check if a number is near zero
+function DF:IsNearlyZero (value, tolerance)
+ tolerance = tolerance or SMALL_FLOAT
+ return abs (value) <= tolerance
+end
+
+--check if a number is within a two other numbers, if isInclusive is true, it'll include the max value
+function DF:IsWithin (minValue, maxValue, value, isInclusive)
+ if (isInclusive) then
+ return ((value >= minValue) and (value <= maxValue))
+ else
+ return ((value >= minValue) and (value < maxValue))
+ end
+end
+
+--dont allow a number ot be lower or bigger than a certain range
+function DF:Clamp (minValue, maxValue, value)
+ return value < minValue and minValue or value < maxValue and value or maxValue
+end
+
+function DF:ScaleBack ()
+
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/normal_bar.lua
--- a/Libs/DF/normal_bar.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/normal_bar.lua Fri Jul 20 19:04:12 2018 -0300
@@ -212,6 +212,11 @@
return _object._texture:SetVertexColor (_value1, _value2, _value3, _value4)
end
+ --> background color
+ local smember_backgroundcolor = function (_object, _value)
+ local _value1, _value2, _value3, _value4 = DF:ParseColors (_value)
+ return _object.background:SetVertexColor (_value1, _value2, _value3, _value4)
+ end
--> icon
local smember_icon = function (_object, _value)
if (type (_value) == "table") then
@@ -255,6 +260,20 @@
end
return
end
+ --> background texture
+ local smember_backgroundtexture = function (_object, _value)
+ if (_value:find ("\\")) then
+ _object.background:SetTexture (_value)
+ else
+ local file = SharedMedia:Fetch ("statusbar", _value)
+ if (file) then
+ _object.background:SetTexture (file)
+ else
+ _object.background:SetTexture (_value)
+ end
+ end
+ return
+ end
--> font face
local smember_textfont = function (_object, _value)
DF:SetFontFace (_object.textleft, _value)
@@ -286,8 +305,10 @@
BarMetaFunctions.SetMembers["righttext"] = smember_rtext
BarMetaFunctions.SetMembers["lefttext"] = smember_ltext
BarMetaFunctions.SetMembers["color"] = smember_color
+ BarMetaFunctions.SetMembers["backgroundcolor"] = smember_backgroundcolor
BarMetaFunctions.SetMembers["icon"] = smember_icon
BarMetaFunctions.SetMembers["texture"] = smember_texture
+ BarMetaFunctions.SetMembers["backgroundtexture"] = smember_backgroundtexture
BarMetaFunctions.SetMembers["fontsize"] = smember_textsize
BarMetaFunctions.SetMembers["fontface"] = smember_textfont
BarMetaFunctions.SetMembers["fontcolor"] = smember_textcolor
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/normal_bar.xml
--- a/Libs/DF/normal_bar.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/normal_bar.xml Fri Jul 20 19:04:12 2018 -0300
@@ -95,4 +95,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/panel.lua
--- a/Libs/DF/panel.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/panel.lua Fri Jul 20 19:04:12 2018 -0300
@@ -29,6 +29,40 @@
local PanelMetaFunctions = _G [DF.GlobalWidgetControlNames ["panel"]]
+--> mixin for options functions
+DF.OptionsFunctions = {
+ SetOption = function (self, optionName, optionValue)
+ if (self.options) then
+ self.options [optionName] = optionValue
+ else
+ self.options = {}
+ self.options [optionName] = optionValue
+ end
+ end,
+
+ GetOption = function (self, optionName)
+ return self.options and self.options [optionName]
+ end,
+
+ GetAllOptions = function (self)
+ if (self.options) then
+ local optionsTable = {}
+ for key, _ in pairs (self.options) do
+ optionsTable [#optionsTable + 1] = key
+ end
+ return optionsTable
+ else
+ return {}
+ end
+ end,
+
+ BuildOptionsTable = function (self, defaultOptions, userOptions)
+ self.options = self.options or {}
+ DF.table.deploy (self.options, userOptions or {})
+ DF.table.deploy (self.options, defaultOptions or {})
+ end
+}
+
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -1216,19 +1250,21 @@
DF.IconPickFrame = CreateFrame ("frame", "DetailsFrameworkIconPickFrame", UIParent)
tinsert (UISpecialFrames, "DetailsFrameworkIconPickFrame")
- DF.IconPickFrame:SetFrameStrata ("DIALOG")
+ DF.IconPickFrame:SetFrameStrata ("TOOLTIP")
DF.IconPickFrame:SetPoint ("center", UIParent, "center")
DF.IconPickFrame:SetWidth (350)
- DF.IconPickFrame:SetHeight (227)
+ DF.IconPickFrame:SetHeight (277)
DF.IconPickFrame:EnableMouse (true)
DF.IconPickFrame:SetMovable (true)
+ DF:CreateTitleBar (DF.IconPickFrame, "Icon Picker")
+
DF.IconPickFrame:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
DF.IconPickFrame:SetBackdropBorderColor (0, 0, 0)
DF.IconPickFrame:SetBackdropColor (24/255, 24/255, 24/255, .8)
- DF.IconPickFrame:SetFrameLevel (1)
+ DF.IconPickFrame:SetFrameLevel (5000)
DF.IconPickFrame:SetScript ("OnMouseDown", function (self)
if (not self.isMoving) then
@@ -1249,16 +1285,29 @@
DF.IconPickFrame.preview = CreateFrame ("frame", nil, UIParent)
DF.IconPickFrame.preview:SetFrameStrata ("tooltip")
+ DF.IconPickFrame.preview:SetFrameLevel (6001)
DF.IconPickFrame.preview:SetSize (76, 76)
+
+ local preview_image_bg = DF:NewImage (DF.IconPickFrame.preview, nil, 76, 76)
+ preview_image_bg:SetDrawLayer ("background", 0)
+ preview_image_bg:SetAllPoints (DF.IconPickFrame.preview)
+ preview_image_bg:SetColorTexture (0, 0, 0)
+
local preview_image = DF:NewImage (DF.IconPickFrame.preview, nil, 76, 76)
preview_image:SetAllPoints (DF.IconPickFrame.preview)
+
DF.IconPickFrame.preview.icon = preview_image
DF.IconPickFrame.preview:Hide()
+ --serach
DF.IconPickFrame.searchLabel = DF:NewLabel (DF.IconPickFrame, nil, "$parentSearchBoxLabel", nil, "search:", font, size, color)
- DF.IconPickFrame.searchLabel:SetPoint ("topleft", DF.IconPickFrame, "topleft", 12, -20)
+ DF.IconPickFrame.searchLabel:SetPoint ("topleft", DF.IconPickFrame, "topleft", 12, -36)
+ DF.IconPickFrame.searchLabel:SetTemplate (DF:GetTemplate ("font", "ORANGE_FONT_TEMPLATE"))
+
DF.IconPickFrame.search = DF:NewTextEntry (DF.IconPickFrame, nil, "$parentSearchBox", nil, 140, 20)
DF.IconPickFrame.search:SetPoint ("left", DF.IconPickFrame.searchLabel, "right", 2, 0)
+ DF.IconPickFrame.search:SetTemplate (DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE"))
+
DF.IconPickFrame.search:SetHook ("OnTextChanged", function()
DF.IconPickFrame.searching = DF.IconPickFrame.search:GetText()
if (DF.IconPickFrame.searching == "") then
@@ -1273,12 +1322,48 @@
end
end)
+ --manually enter the icon path
+ DF.IconPickFrame.customIcon = DF:CreateLabel (DF.IconPickFrame, "Icon Path:", DF:GetTemplate ("font", "ORANGE_FONT_TEMPLATE"))
+ DF.IconPickFrame.customIcon:SetPoint ("bottomleft", DF.IconPickFrame, "bottomleft", 12, 16)
+
+ DF.IconPickFrame.customIconEntry = DF:CreateTextEntry (DF.IconPickFrame, function()end, 200, 20, "CustomIconEntry", _, _, DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE"))
+ DF.IconPickFrame.customIconEntry:SetPoint ("left", DF.IconPickFrame.customIcon, "right", 2, 0)
+
+ DF.IconPickFrame.customIconEntry:SetHook ("OnTextChanged", function()
+ DF.IconPickFrame.preview:SetPoint ("bottom", DF.IconPickFrame.customIconEntry.widget, "top", 0, 2)
+ DF.IconPickFrame.preview.icon:SetTexture (DF.IconPickFrame.customIconEntry:GetText())
+ DF.IconPickFrame.preview:Show()
+ end)
+
+ DF.IconPickFrame.customIconEntry:SetHook ("OnEnter", function()
+ DF.IconPickFrame.preview:SetPoint ("bottom", DF.IconPickFrame.customIconEntry.widget, "top", 0, 2)
+ DF.IconPickFrame.preview.icon:SetTexture (DF.IconPickFrame.customIconEntry:GetText())
+ DF.IconPickFrame.preview:Show()
+ end)
+
--> close button
local close_button = CreateFrame ("button", nil, DF.IconPickFrame, "UIPanelCloseButton")
close_button:SetWidth (32)
close_button:SetHeight (32)
close_button:SetPoint ("TOPRIGHT", DF.IconPickFrame, "TOPRIGHT", -8, -7)
close_button:SetFrameLevel (close_button:GetFrameLevel()+2)
+ close_button:SetAlpha (0) --just hide, it is used below
+
+ --> accept custom icon button
+ local accept_custom_icon = function()
+ local path = DF.IconPickFrame.customIconEntry:GetText()
+
+ DF:QuickDispatch (DF.IconPickFrame.callback, path, DF.IconPickFrame.param1, DF.IconPickFrame.param2)
+
+ if (DF.IconPickFrame.click_close) then
+ close_button:Click()
+ end
+ end
+
+ DF.IconPickFrame.customIconAccept = DF:CreateButton (DF.IconPickFrame, accept_custom_icon, 82, 20, "Accept", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", "ORANGE_FONT_TEMPLATE"))
+ DF.IconPickFrame.customIconAccept:SetPoint ("left", DF.IconPickFrame.customIconEntry, "right", 2, 0)
+
+ --fill with icons
local MACRO_ICON_FILENAMES = {}
local SPELLNAMES_CACHE = {}
@@ -1320,18 +1405,25 @@
GetLooseMacroIcons (MACRO_ICON_FILENAMES)
GetMacroIcons (MACRO_ICON_FILENAMES)
GetMacroItemIcons (MACRO_ICON_FILENAMES)
-
+
+ --reset the custom icon text entry
+ DF.IconPickFrame.customIconEntry:SetText ("")
+ --reset the search text entry
+ DF.IconPickFrame.search:SetText ("")
end)
DF.IconPickFrame:SetScript ("OnHide", function()
wipe (MACRO_ICON_FILENAMES)
+ DF.IconPickFrame.preview:Hide()
collectgarbage()
end)
DF.IconPickFrame.buttons = {}
local OnClickFunction = function (self)
- DF.IconPickFrame.callback (self.icon:GetTexture(), DF.IconPickFrame.param1, DF.IconPickFrame.param2)
+
+ DF:QuickDispatch (DF.IconPickFrame.callback, self.icon:GetTexture(), DF.IconPickFrame.param1, DF.IconPickFrame.param2)
+
if (DF.IconPickFrame.click_close) then
close_button:Click()
end
@@ -1362,7 +1454,7 @@
newcheck:SetScript ("OnClick", OnClickFunction)
newcheck.param1 = i+1
- newcheck:SetPoint ("topleft", DF.IconPickFrame, "topleft", 12 + (i*30), -40)
+ newcheck:SetPoint ("topleft", DF.IconPickFrame, "topleft", 12 + (i*30), -60)
newcheck:SetID (i+1)
DF.IconPickFrame.buttons [#DF.IconPickFrame.buttons+1] = newcheck
newcheck:SetScript ("OnEnter", onenter)
@@ -1455,6 +1547,7 @@
end
local scroll = CreateFrame ("ScrollFrame", "DetailsFrameworkIconPickFrameScroll", DF.IconPickFrame, "ListScrollFrameTemplate")
+ DF:ReskinSlider (scroll)
local ChecksFrame_Update = function (self)
@@ -1527,7 +1620,7 @@
DF.IconPickFrame.updateFunc = ChecksFrame_Update
- scroll:SetPoint ("topleft", DF.IconPickFrame, "topleft", -18, -37)
+ scroll:SetPoint ("topleft", DF.IconPickFrame, "topleft", -18, -58)
scroll:SetWidth (330)
scroll:SetHeight (178)
scroll:SetScript ("OnVerticalScroll", function (self, offset) FauxScrollFrame_OnVerticalScroll (scroll, offset, 20, ChecksFrame_Update) end)
@@ -1609,9 +1702,12 @@
local SimplePanel_frame_backdrop_color = {0, 0, 0, 0.9}
local SimplePanel_frame_backdrop_border_color = {0, 0, 0, 1}
+--with_label was making the frame stay in place while its parent moves
+--the slider was anchoring to with_label and here here were anchoring the slider again
function DF:CreateScaleBar (frame, config)
- local scaleBar = DF:CreateSlider (frame, 120, 14, 0.6, 1.6, 0.1, config.scale, true, "ScaleBar", nil, "Scale:", DF:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE"), DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
- scaleBar:SetPoint ("right", frame.Close, "left", -26, 0)
+ local scaleBar, text = DF:CreateSlider (frame, 120, 14, 0.6, 1.6, 0.1, config.scale, true, "ScaleBar", nil, "Scale:", DF:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE"), DF:GetTemplate ("font", "ORANGE_FONT_TEMPLATE"))
+ --scaleBar:SetPoint ("right", frame.Close, "left", -26, 0)
+ text:SetPoint ("topleft", frame, "topleft", 12, -7)
scaleBar:SetFrameLevel (DF.FRAMELEVEL_OVERLAY)
scaleBar.OnValueChanged = function (_, _, value)
config.scale = value
@@ -1622,6 +1718,10 @@
scaleBar:SetHook ("OnMouseUp", function()
frame:SetScale (config.scale)
end)
+
+ scaleBar:SetAlpha (0.2)
+
+ return scaleBar
end
local no_options = {}
@@ -3531,15 +3631,20 @@
tabButton.mainFrame = mainFrame
DF.TabContainerFunctions.CreateUnderlineGlow (tabButton)
+ local right_click_to_back
if (i == 1) then
- local right_click_to_back = DF:CreateLabel (f, "right click to close", 10, "gray")
+ right_click_to_back = DF:CreateLabel (f, "right click to close", 10, "gray")
right_click_to_back:SetPoint ("bottomright", f, "bottomright", -1, 0)
f.IsFrontPage = true
else
- local right_click_to_back = DF:CreateLabel (f, "right click to go back to main menu", 10, "gray")
+ right_click_to_back = DF:CreateLabel (f, "right click to go back to main menu", 10, "gray")
right_click_to_back:SetPoint ("bottomright", f, "bottomright", -1, 0)
end
+ if (options_table.hide_click_label) then
+ right_click_to_back:Hide()
+ end
+
f:SetScript ("OnMouseDown", DF.TabContainerFunctions.OnMouseDown)
f:SetScript ("OnMouseUp", DF.TabContainerFunctions.OnMouseUp)
@@ -3607,6 +3712,18 @@
widget:SetHook ("OnEnter", simple_list_box_onenter)
widget:SetHook ("OnLeave", simple_list_box_onleave)
widget.textcolor = self.options.textcolor
+ widget.textsize = self.options.text_size
+ widget.onleave_backdrop = self.options.backdrop_color
+
+ widget.XButton = DF:CreateButton (widget, function()end, 16, 16)
+ widget.XButton:SetPoint ("topright", widget.widget, "topright")
+ widget.XButton:SetIcon ([[Interface\BUTTONS\UI-Panel-MinimizeButton-Up]], 16, 16, "overlay", nil, nil, 0, -4, 0, false)
+ widget.XButton.icon:SetDesaturated (true)
+
+ if (not self.options.show_x_button) then
+ widget.XButton:Hide()
+ end
+
tinsert (self.widgets, widget)
end
self.nextWidget = self.nextWidget + 1
@@ -3620,16 +3737,29 @@
local widget = self:GetOrCreateWidget()
widget:SetPoint ("topleft", self, "topleft", 1, -self.options.row_height * (self.nextWidget-2) - 4)
widget:SetPoint ("topright", self, "topright", -1, -self.options.row_height * (self.nextWidget-2) - 4)
+
widget:SetClickFunction (self.func, value)
+
+ if (self.options.show_x_button) then
+ widget.XButton:SetClickFunction (self.options.x_button_func, value)
+ widget.XButton.value = value
+ widget.XButton:Show()
+ else
+ widget.XButton:Hide()
+ end
+
widget.value = value
if (self.options.icon) then
if (type (self.options.icon) == "string" or type (self.options.icon) == "number") then
- widget:SetIcon (self.options.icon, self.options.row_height, self.options.row_height)
+ local coords = type (self.options.iconcoords) == "table" and self.options.iconcoords or {0, 1, 0, 1}
+ widget:SetIcon (self.options.icon, self.options.row_height - 2, self.options.row_height - 2, "overlay", coords)
+
elseif (type (self.options.icon) == "function") then
local icon = self.options.icon (value)
if (icon) then
- widget:SetIcon (icon, self.options.row_height, self.options.row_height)
+ local coords = type (self.options.iconcoords) == "table" and self.options.iconcoords or {0, 1, 0, 1}
+ widget:SetIcon (icon, self.options.row_height - 2, self.options.row_height - 2, "overlay", coords)
end
end
else
@@ -3652,6 +3782,10 @@
end
widget.value = value
+
+ local r, g, b, a = DF:ParseColors (self.options.backdrop_color)
+ widget:SetBackdropColor (r, g, b, a)
+
widget:Show()
amt = amt + 1
end
@@ -3669,7 +3803,12 @@
width = 230,
icon = false,
text = "",
+ text_size = 10,
textcolor = "wheat",
+
+ backdrop_color = {1, 1, 1, .5},
+ panel_border_color = {0, 0, 0, 0.5},
+
onenter = function (self, capsule)
if (capsule) then
capsule.textcolor = "white"
@@ -3697,16 +3836,27 @@
f.nextWidget = 1
f.list_table = list_table
f.func = function (self, button, value)
- onclick (value)
+ --onclick (value)
+ DF:QuickDispatch (onclick, value)
f:Refresh()
end
f.widgets = {}
- f:SetBackdrop (backdrop)
- f:SetBackdropColor (0, 0, 0, 0.3)
- f:SetBackdropBorderColor (0, 0, 0, 0.5)
+
+ DF:ApplyStandardBackdrop (f)
+
f.options = options or {}
self.table.deploy (f.options, default_options)
+ if (f.options.x_button_func) then
+ local original_X_function = f.options.x_button_func
+ f.options.x_button_func = function (self, button, value)
+ DF:QuickDispatch (original_X_function, value)
+ f:Refresh()
+ end
+ end
+
+ f:SetBackdropBorderColor (unpack (f.options.panel_border_color))
+
f:SetSize (f.options.width + 2, f.options.height)
local name = DF:CreateLabel (f, title, 12, "silver")
@@ -3899,6 +4049,8 @@
function DF:CreateScrollBox (parent, name, refresh_func, data, width, height, line_amount, line_height, create_line_func, auto_amount, no_scroll)
local scroll = CreateFrame ("scrollframe", name, parent, "FauxScrollFrameTemplate")
+ DF:ApplyStandardBackdrop (scroll)
+
scroll:SetSize (width, height)
scroll.LineAmount = line_amount
scroll.LineHeight = line_height
@@ -3950,3 +4102,833 @@
return leftResizer, rightResizer
end
end
+
+
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- ~keybind
+
+
+--------------------------------
+--> keybind frame ~key
+
+
+local ignoredKeys = {
+ ["LSHIFT"] = true,
+ ["RSHIFT"] = true,
+ ["LCTRL"] = true,
+ ["RCTRL"] = true,
+ ["LALT"] = true,
+ ["RALT"] = true,
+ ["UNKNOWN"] = true,
+}
+
+local mouseKeys = {
+ ["LeftButton"] = "type1",
+ ["RightButton"] = "type2",
+ ["MiddleButton"] = "type3",
+ ["Button4"] = "type4",
+ ["Button5"] = "type5",
+ ["Button6"] = "type6",
+ ["Button7"] = "type7",
+ ["Button8"] = "type8",
+ ["Button9"] = "type9",
+ ["Button10"] = "type10",
+ ["Button11"] = "type11",
+ ["Button12"] = "type12",
+ ["Button13"] = "type13",
+ ["Button14"] = "type14",
+ ["Button15"] = "type15",
+ ["Button16"] = "type16",
+}
+
+local keysToMouse = {
+ ["type1"] = "LeftButton",
+ ["type2"] = "RightButton",
+ ["type3"] = "MiddleButton",
+ ["type4"] = "Button4",
+ ["type5"] = "Button5",
+ ["type6"] = "Button6",
+ ["type7"] = "Button7",
+ ["type8"] = "Button8",
+ ["type9"] = "Button9",
+ ["type10"] = "Button10",
+ ["type11"] = "Button11",
+ ["type12"] = "Button12",
+ ["type13"] = "Button13",
+ ["type14"] = "Button14",
+ ["type15"] = "Button15",
+ ["type16"] = "Button16",
+}
+
+local keybind_set_data = function (self, new_data_table)
+ self.Data = new_data_table
+ self.keybindScroll:UpdateScroll()
+end
+
+function DF:CreateKeybindBox (parent, name, data, callback, width, height, line_amount, line_height)
+
+ local options_text_template = DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE")
+ local options_dropdown_template = DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")
+ local options_switch_template = DF:GetTemplate ("switch", "OPTIONS_CHECKBOX_TEMPLATE")
+ local options_slider_template = DF:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE")
+ local options_button_template = DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE")
+
+ local SCROLL_ROLL_AMOUNT = line_amount
+
+ --keybind set frame
+ local new_keybind_frame = CreateFrame ("frame", name, parent)
+ new_keybind_frame:SetSize (width, height)
+
+ -- keybind scrollframe
+ local keybindScroll = CreateFrame ("scrollframe", "$parentScrollFrame", new_keybind_frame, "FauxScrollFrameTemplate")
+ keybindScroll:SetSize (1019, 348)
+ keybindScroll.Frames = {}
+ new_keybind_frame.keybindScroll = keybindScroll
+
+ --waiting the player to press a key
+ new_keybind_frame.IsListening = false
+
+ --check for valid data table
+ if (type (data) ~= "table") then
+ print ("error: data must be a table. DF > CreateKeybindBox()")
+ return
+ end
+
+ if (not next (data)) then
+ --> build data table for the character class
+ local _, unitClass = UnitClass ("player")
+ if (unitClass) then
+ local specIds = DF:GetClassSpecIDs (unitClass)
+ if (specIds) then
+ for _, specId in ipairs (specIds) do
+ data [specId] = {}
+ end
+ end
+ end
+ end
+
+ new_keybind_frame.Data = data
+ new_keybind_frame.SetData = keybind_set_data
+
+ new_keybind_frame.EditingSpec = DF:GetCurrentSpec()
+ new_keybind_frame.CurrentKeybindEditingSet = new_keybind_frame.Data [new_keybind_frame.EditingSpec]
+
+ local allSpecButtons = {}
+ local switch_spec = function (self, button, specID)
+ new_keybind_frame.EditingSpec = specID
+ new_keybind_frame.CurrentKeybindEditingSet = new_keybind_frame.Data [specID]
+
+ for _, button in ipairs (allSpecButtons) do
+ button.selectedTexture:Hide()
+ end
+ self.MyObject.selectedTexture:Show()
+
+ --feedback ao jogador uma vez que as keybinds podem ter o mesmo valor
+ C_Timer.After (.04, function() new_keybind_frame:Hide() end)
+ C_Timer.After (.06, function() new_keybind_frame:Show() end)
+
+ --atualiza a scroll
+ keybindScroll:UpdateScroll()
+ end
+
+ --choose which spec to use
+ local spec1 = DF:CreateButton (new_keybind_frame, switch_spec, 160, 20, "Spec1 Placeholder Text", 1, _, _, "SpecButton1", _, 0, options_button_template, options_text_template)
+ local spec2 = DF:CreateButton (new_keybind_frame, switch_spec, 160, 20, "Spec2 Placeholder Text", 1, _, _, "SpecButton2", _, 0, options_button_template, options_text_template)
+ local spec3 = DF:CreateButton (new_keybind_frame, switch_spec, 160, 20, "Spec3 Placeholder Text", 1, _, _, "SpecButton3", _, 0, options_button_template, options_text_template)
+ local spec4 = DF:CreateButton (new_keybind_frame, switch_spec, 160, 20, "Spec4 Placeholder Text", 1, _, _, "SpecButton4", _, 0, options_button_template, options_text_template)
+
+ --format the button label and icon with the spec information
+ local className, class = UnitClass ("player")
+ local i = 1
+ local specIds = DF:GetClassSpecIDs (class)
+
+ for index, specId in ipairs (specIds) do
+ local button = new_keybind_frame ["SpecButton" .. index]
+ local spec_id, spec_name, spec_description, spec_icon, spec_background, spec_role, spec_class = GetSpecializationInfoByID (specId)
+ button.text = spec_name
+ button:SetClickFunction (switch_spec, specId)
+ button:SetIcon (spec_icon)
+ button.specID = specId
+
+ local selectedTexture = button:CreateTexture (nil, "background")
+ selectedTexture:SetAllPoints()
+ selectedTexture:SetColorTexture (1, 1, 1, 0.5)
+ if (specId ~= new_keybind_frame.EditingSpec) then
+ selectedTexture:Hide()
+ end
+ button.selectedTexture = selectedTexture
+
+ tinsert (allSpecButtons, button)
+ i = i + 1
+ end
+
+ local specsTitle = DF:CreateLabel (new_keybind_frame, "Config keys for spec:", 12, "silver")
+ specsTitle:SetPoint ("topleft", new_keybind_frame, "topleft", 10, mainStartY)
+
+ keybindScroll:SetPoint ("topleft", specsTitle.widget, "bottomleft", 0, -120)
+
+ spec1:SetPoint ("topleft", specsTitle, "bottomleft", 0, -10)
+ spec2:SetPoint ("topleft", specsTitle, "bottomleft", 0, -30)
+ spec3:SetPoint ("topleft", specsTitle, "bottomleft", 0, -50)
+ if (class == "DRUID") then
+ spec4:SetPoint ("topleft", specsTitle, "bottomleft", 0, -70)
+ end
+
+ local enter_the_key = CreateFrame ("frame", nil, new_keybind_frame)
+ enter_the_key:SetFrameStrata ("tooltip")
+ enter_the_key:SetSize (200, 60)
+ enter_the_key:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1})
+ enter_the_key:SetBackdropColor (0, 0, 0, 1)
+ enter_the_key:SetBackdropBorderColor (1, 1, 1, 1)
+ enter_the_key.text = DF:CreateLabel (enter_the_key, "- Press a keyboard key to bind.\n- Click to bind a mouse button.\n- Press escape to cancel.", 11, "orange")
+ enter_the_key.text:SetPoint ("center", enter_the_key, "center")
+ enter_the_key:Hide()
+
+ local registerKeybind = function (self, key)
+ if (ignoredKeys [key]) then
+ return
+ end
+ if (key == "ESCAPE") then
+ enter_the_key:Hide()
+ new_keybind_frame.IsListening = false
+ new_keybind_frame:SetScript ("OnKeyDown", nil)
+ return
+ end
+
+ local bind = (IsShiftKeyDown() and "SHIFT-" or "") .. (IsControlKeyDown() and "CTRL-" or "") .. (IsAltKeyDown() and "ALT-" or "")
+ bind = bind .. key
+
+ --adiciona para a tabela de keybinds
+ local keybind = new_keybind_frame.CurrentKeybindEditingSet [self.keybindIndex]
+ keybind.key = bind
+
+ new_keybind_frame.IsListening = false
+ new_keybind_frame:SetScript ("OnKeyDown", nil)
+
+ enter_the_key:Hide()
+ new_keybind_frame.keybindScroll:UpdateScroll()
+
+ DF:QuickDispatch (callback)
+ end
+
+ local set_keybind_key = function (self, button, keybindIndex)
+ if (new_keybind_frame.IsListening) then
+ key = mouseKeys [button] or button
+ return registerKeybind (new_keybind_frame, key)
+ end
+ new_keybind_frame.IsListening = true
+ new_keybind_frame.keybindIndex = keybindIndex
+ new_keybind_frame:SetScript ("OnKeyDown", registerKeybind)
+
+ enter_the_key:Show()
+ enter_the_key:SetPoint ("bottom", self, "top")
+ end
+
+ local new_key_bind = function (self, button, specID)
+ tinsert (new_keybind_frame.CurrentKeybindEditingSet, {key = "-none-", action = "_target", actiontext = ""})
+ FauxScrollFrame_SetOffset (new_keybind_frame.keybindScroll, max (#new_keybind_frame.CurrentKeybindEditingSet-SCROLL_ROLL_AMOUNT, 0))
+ new_keybind_frame.keybindScroll:UpdateScroll()
+ end
+
+ local set_action_text = function (keybindIndex, _, text)
+ local keybind = new_keybind_frame.CurrentKeybindEditingSet [keybindIndex]
+ keybind.actiontext = text
+ DF:QuickDispatch (callback)
+ end
+
+ local set_action_on_espace_press = function (textentry, capsule)
+ capsule = capsule or textentry.MyObject
+ local keybind = new_keybind_frame.CurrentKeybindEditingSet [capsule.CurIndex]
+ textentry:SetText (keybind.actiontext)
+ DF:QuickDispatch (callback)
+ end
+
+ local lock_textentry = {
+ ["_target"] = true,
+ ["_taunt"] = true,
+ ["_interrupt"] = true,
+ ["_dispel"] = true,
+ ["_spell"] = false,
+ ["_macro"] = false,
+ }
+
+ local change_key_action = function (self, keybindIndex, value)
+ local keybind = new_keybind_frame.CurrentKeybindEditingSet [keybindIndex]
+ keybind.action = value
+ new_keybind_frame.keybindScroll:UpdateScroll()
+ DF:QuickDispatch (callback)
+ end
+ local fill_action_dropdown = function()
+
+ local locClass, class = UnitClass ("player")
+
+ local taunt = ""
+ local interrupt = ""
+ local dispel = ""
+
+ if (type (dispel) == "table") then
+ local dispelString = "\n"
+ for specID, spellid in pairs (dispel) do
+ local specid, specName = GetSpecializationInfoByID (specID)
+ local spellName = GetSpellInfo (spellid)
+ dispelString = dispelString .. "|cFFE5E5E5" .. specName .. "|r: |cFFFFFFFF" .. spellName .. "\n"
+ end
+ dispel = dispelString
+ else
+ dispel = ""
+ end
+
+ return {
+ --{value = "_target", label = "Target", onclick = change_key_action, desc = "Target the unit"},
+ --{value = "_taunt", label = "Taunt", onclick = change_key_action, desc = "Cast the taunt spell for your class\n\n|cFFFFFFFFSpell: " .. taunt},
+ --{value = "_interrupt", label = "Interrupt", onclick = change_key_action, desc = "Cast the interrupt spell for your class\n\n|cFFFFFFFFSpell: " .. interrupt},
+ --{value = "_dispel", label = "Dispel", onclick = change_key_action, desc = "Cast the interrupt spell for your class\n\n|cFFFFFFFFSpell: " .. dispel},
+ {value = "_spell", label = "Cast Spell", onclick = change_key_action, desc = "Type the spell name in the text box"},
+ {value = "_macro", label = "Run Macro", onclick = change_key_action, desc = "Type your macro in the text box"},
+ }
+ end
+
+ local copy_keybind = function (self, button, keybindIndex)
+ local keybind = new_keybind_frame.CurrentKeybindEditingSet [keybindIndex]
+ for specID, t in pairs (new_keybind_frame.Data) do
+ if (specID ~= new_keybind_frame.EditingSpec) then
+ local key = CopyTable (keybind)
+ local specid, specName = GetSpecializationInfoByID (specID)
+ tinsert (new_keybind_frame.Data [specID], key)
+ DF:Msg ("Keybind copied to " .. specName)
+ end
+ end
+ DF:QuickDispatch (callback)
+ end
+
+ local delete_keybind = function (self, button, keybindIndex)
+ tremove (new_keybind_frame.CurrentKeybindEditingSet, keybindIndex)
+ new_keybind_frame.keybindScroll:UpdateScroll()
+ DF:QuickDispatch (callback)
+ end
+
+ local newTitle = DF:CreateLabel (new_keybind_frame, "Create a new Keybind:", 12, "silver")
+ newTitle:SetPoint ("topleft", new_keybind_frame, "topleft", 200, mainStartY)
+ local createNewKeybind = DF:CreateButton (new_keybind_frame, new_key_bind, 160, 20, "New Key Bind", 1, _, _, "NewKeybindButton", _, 0, options_button_template, options_text_template)
+ createNewKeybind:SetPoint ("topleft", newTitle, "bottomleft", 0, -10)
+ --createNewKeybind:SetIcon ([[Interface\Buttons\UI-GuildButton-PublicNote-Up]])
+
+ local update_keybind_list = function (self)
+
+ local keybinds = new_keybind_frame.CurrentKeybindEditingSet
+ FauxScrollFrame_Update (self, #keybinds, SCROLL_ROLL_AMOUNT, 21)
+ local offset = FauxScrollFrame_GetOffset (self)
+
+ for i = 1, SCROLL_ROLL_AMOUNT do
+ local index = i + offset
+ local f = self.Frames [i]
+ local data = keybinds [index]
+
+ if (data) then
+ --index
+ f.Index.text = index
+ --keybind
+ local keyBindText = keysToMouse [data.key] or data.key
+
+ keyBindText = keyBindText:gsub ("type1", "LeftButton")
+ keyBindText = keyBindText:gsub ("type2", "RightButton")
+ keyBindText = keyBindText:gsub ("type3", "MiddleButton")
+
+ f.KeyBind.text = keyBindText
+ f.KeyBind:SetClickFunction (set_keybind_key, index, nil, "left")
+ f.KeyBind:SetClickFunction (set_keybind_key, index, nil, "right")
+ --action
+ f.ActionDrop:SetFixedParameter (index)
+ f.ActionDrop:Select (data.action)
+ --action text
+ f.ActionText.text = data.actiontext
+ f.ActionText:SetEnterFunction (set_action_text, index)
+ f.ActionText.CurIndex = index
+
+ if (lock_textentry [data.action]) then
+ f.ActionText:Disable()
+ else
+ f.ActionText:Enable()
+ end
+
+ --copy
+ f.Copy:SetClickFunction (copy_keybind, index)
+ --delete
+ f.Delete:SetClickFunction (delete_keybind, index)
+
+ f:Show()
+ else
+ f:Hide()
+ end
+ end
+
+ self:Show()
+ end
+
+
+
+ keybindScroll:SetScript ("OnVerticalScroll", function (self, offset)
+ FauxScrollFrame_OnVerticalScroll (self, offset, 21, update_keybind_list)
+ end)
+ keybindScroll.UpdateScroll = update_keybind_list
+
+ local backdropColor = {.3, .3, .3, .3}
+ local backdropColorOnEnter = {.6, .6, .6, .6}
+ local on_enter = function (self)
+ self:SetBackdropColor (unpack (backdropColorOnEnter))
+ end
+ local on_leave = function (self)
+ self:SetBackdropColor (unpack (backdropColor))
+ end
+
+ local font = "GameFontHighlightSmall"
+
+ for i = 1, SCROLL_ROLL_AMOUNT do
+ local f = CreateFrame ("frame", "$KeyBindFrame" .. i, keybindScroll)
+ f:SetSize (1009, 20)
+ f:SetPoint ("topleft", keybindScroll, "topleft", 0, -(i-1)*29)
+ f:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
+ f:SetBackdropColor (unpack (backdropColor))
+ f:SetScript ("OnEnter", on_enter)
+ f:SetScript ("OnLeave", on_leave)
+ tinsert (keybindScroll.Frames, f)
+
+ f.Index = DF:CreateLabel (f, "1")
+ f.KeyBind = DF:CreateButton (f, set_key_bind, 100, 20, "", _, _, _, "SetNewKeybindButton", _, 0, options_button_template, options_text_template)
+ f.ActionDrop = DF:CreateDropDown (f, fill_action_dropdown, 0, 120, 20, "ActionDropdown", _, options_dropdown_template)
+ f.ActionText = DF:CreateTextEntry (f, function()end, 660, 20, "TextBox", _, _, options_dropdown_template)
+ f.Copy = DF:CreateButton (f, copy_keybind, 20, 20, "", _, _, _, "CopyKeybindButton", _, 0, options_button_template, options_text_template)
+ f.Delete = DF:CreateButton (f, delete_keybind, 16, 20, "", _, _, _, "DeleteKeybindButton", _, 2, options_button_template, options_text_template)
+
+ f.Index:SetPoint ("left", f, "left", 10, 0)
+ f.KeyBind:SetPoint ("left", f, "left", 43, 0)
+ f.ActionDrop:SetPoint ("left", f, "left", 150, 0)
+ f.ActionText:SetPoint ("left", f, "left", 276, 0)
+ f.Copy:SetPoint ("left", f, "left", 950, 0)
+ f.Delete:SetPoint ("left", f, "left", 990, 0)
+
+ f.Copy:SetIcon ([[Interface\Buttons\UI-GuildButton-PublicNote-Up]], nil, nil, nil, nil, nil, nil, 4)
+ f.Delete:SetIcon ([[Interface\Buttons\UI-StopButton]], nil, nil, nil, nil, nil, nil, 4)
+
+ f.Copy.tooltip = "copy this keybind to other specs"
+ f.Delete.tooltip = "erase this keybind"
+
+ --editbox
+ f.ActionText:SetJustifyH ("left")
+ f.ActionText:SetHook ("OnEscapePressed", set_action_on_espace_press)
+ f.ActionText:SetHook ("OnEditFocusGained", function()
+ local playerSpells = {}
+ local tab, tabTex, offset, numSpells = GetSpellTabInfo (2)
+ for i = 1, numSpells do
+ local index = offset + i
+ local spellType, spellId = GetSpellBookItemInfo (index, "player")
+ if (spellType == "SPELL") then
+ local spellName = GetSpellInfo (spellId)
+ tinsert (playerSpells, spellName)
+ end
+ end
+ f.ActionText.WordList = playerSpells
+ end)
+
+ f.ActionText:SetAsAutoComplete ("WordList")
+ end
+
+ local header = CreateFrame ("frame", "$parentOptionsPanelFrameHeader", keybindScroll)
+ header:SetPoint ("bottomleft", keybindScroll, "topleft", 0, 2)
+ header:SetPoint ("bottomright", keybindScroll, "topright", 0, 2)
+ header:SetHeight (16)
+
+ header.Index = DF:CreateLabel (header, "Index", DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+ header.Key = DF:CreateLabel (header, "Key", DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+ header.Action = DF:CreateLabel (header, "Action", DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+ header.Macro = DF:CreateLabel (header, "Spell Name / Macro", DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+ header.Copy = DF:CreateLabel (header, "Copy", DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+ header.Delete = DF:CreateLabel (header, "Delete", DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+
+ header.Index:SetPoint ("left", header, "left", 10, 0)
+ header.Key:SetPoint ("left", header, "left", 43, 0)
+ header.Action:SetPoint ("left", header, "left", 150, 0)
+ header.Macro:SetPoint ("left", header, "left", 276, 0)
+ header.Copy:SetPoint ("left", header, "left", 950, 0)
+ header.Delete:SetPoint ("left", header, "left", 990, 0)
+
+ new_keybind_frame:SetScript ("OnShow", function()
+
+ --new_keybind_frame.EditingSpec = EnemyGrid.CurrentSpec
+ --new_keybind_frame.CurrentKeybindEditingSet = EnemyGrid.CurrentKeybindSet
+
+ for _, button in ipairs (allSpecButtons) do
+ if (new_keybind_frame.EditingSpec ~= button.specID) then
+ button.selectedTexture:Hide()
+ else
+ button.selectedTexture:Show()
+ end
+ end
+
+ keybindScroll:UpdateScroll()
+ end)
+
+ new_keybind_frame:SetScript ("OnHide", function()
+ if (new_keybind_frame.IsListening) then
+ new_keybind_frame.IsListening = false
+ new_keybind_frame:SetScript ("OnKeyDown", nil)
+ end
+ end)
+
+ return new_keybind_frame
+end
+
+function DF:BuildKeybindFunctions (data, prefix)
+
+ --~keybind
+ local classLoc, class = UnitClass ("player")
+ local bindingList = data
+
+ local bindString = "self:ClearBindings();"
+ local bindKeyBindTypeFunc = [[local unitFrame = ...;]]
+ local bindMacroTextFunc = [[local unitFrame = ...;]]
+ local isMouseBinding
+
+ for i = 1, #bindingList do
+ local bind = bindingList [i]
+ local bindType
+
+ --which button to press
+ if (bind.key:find ("type")) then
+ local keyNumber = tonumber (bind.key:match ("%d"))
+ bindType = keyNumber
+ isMouseBinding = true
+ else
+ bindType = prefix .. "" .. i
+ bindString = bindString .. "self:SetBindingClick (0, '" .. bind.key .. "', self:GetName(), '" .. bindType .. "');"
+ bindType = "-" .. prefix .. "" .. i
+ isMouseBinding = nil
+ end
+
+ --keybind type
+ local shift, alt, ctrl = bind.key:match ("SHIFT"), bind.key:match ("ALT"), bind.key:match ("CTRL")
+ local CommandKeys = alt and alt .. "-" or ""
+ CommandKeys = ctrl and CommandKeys .. ctrl .. "-" or CommandKeys
+ CommandKeys = shift and CommandKeys .. shift .. "-" or CommandKeys
+
+ local keyBindType
+ if (isMouseBinding) then
+ keyBindType = [[unitFrame:SetAttribute ("@COMMANDtype@BINDTYPE", "macro");]]
+ else
+ keyBindType = [[unitFrame:SetAttribute ("type@BINDTYPE", "macro");]]
+ end
+
+ keyBindType = keyBindType:gsub ("@BINDTYPE", bindType)
+ keyBindType = keyBindType:gsub ("@COMMAND", CommandKeys)
+ bindKeyBindTypeFunc = bindKeyBindTypeFunc .. keyBindType
+
+ --spell or macro
+ if (bind.action == "_spell") then
+ local macroTextLine
+ if (isMouseBinding) then
+ macroTextLine = [[unitFrame:SetAttribute ("@COMMANDmacrotext@BINDTYPE", "/cast [@mouseover] @SPELL");]]
+ else
+ macroTextLine = [[unitFrame:SetAttribute ("macrotext@BINDTYPE", "/cast [@mouseover] @SPELL");]]
+ end
+ macroTextLine = macroTextLine:gsub ("@BINDTYPE", bindType)
+ macroTextLine = macroTextLine:gsub ("@SPELL", bind.actiontext)
+ macroTextLine = macroTextLine:gsub ("@COMMAND", CommandKeys)
+ bindMacroTextFunc = bindMacroTextFunc .. macroTextLine
+
+ elseif (bind.action == "_macro") then
+ local macroTextLine
+ if (isMouseBinding) then
+ macroTextLine = [[unitFrame:SetAttribute ("@COMMANDmacrotext@BINDTYPE", "@MACRO");]]
+ else
+ macroTextLine = [[unitFrame:SetAttribute ("macrotext@BINDTYPE", "@MACRO");]]
+ end
+ macroTextLine = macroTextLine:gsub ("@BINDTYPE", bindType)
+ macroTextLine = macroTextLine:gsub ("@MACRO", bind.actiontext)
+ macroTextLine = macroTextLine:gsub ("@COMMAND", CommandKeys)
+ bindMacroTextFunc = bindMacroTextFunc .. macroTextLine
+
+ end
+ end
+
+ --~key
+ local bindTypeFuncLoaded = loadstring (bindKeyBindTypeFunc)
+ local bindMacroFuncLoaded = loadstring (bindMacroTextFunc)
+
+ if (not bindMacroFuncLoaded or not bindTypeFuncLoaded) then
+ return
+ end
+
+ return bindString, bindTypeFuncLoaded, bindMacroFuncLoaded
+end
+
+
+function DF:SetKeybindsOnProtectedFrame (frame, bind_string, bind_type_func, bind_macro_func)
+
+ bind_type_func (frame)
+ bind_macro_func (frame)
+ frame:SetAttribute ("_onenter", bind_string)
+
+end
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- ~standard backdrop
+
+function DF:ApplyStandardBackdrop (f, darkTheme, alphaScale)
+ alphaScale = alphaScale or 1.0
+
+ if (darkTheme) then
+ f:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Cooldown\cooldown2]], tileSize = 32, tile = true})
+ f:SetBackdropBorderColor (0, 0, 0, 1)
+ f:SetBackdropColor (.54, .54, .54, .54 * alphaScale)
+ else
+ f:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
+ f:SetBackdropBorderColor (0, 0, 0, 1)
+ f:SetBackdropColor (0, 0, 0, 0.2 * alphaScale)
+ end
+
+ if (not f.__background) then
+ f.__background = f:CreateTexture (nil, "background")
+ end
+
+ f.__background:SetColorTexture (0.2317647, 0.2317647, 0.2317647)
+ f.__background:SetVertexColor (0.27, 0.27, 0.27)
+ f.__background:SetAlpha (0.8 * alphaScale)
+ f.__background:SetVertTile (true)
+ f.__background:SetHorizTile (true)
+ f.__background:SetAllPoints()
+end
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- ~title bar
+
+DF.TitleFunctions = {
+
+ SetTitle = function (self, titleText, titleColor, font, size)
+ self.TitleLabel:SetText (titleText or self.TitleLabel:GetText())
+
+ if (titleColor) then
+ local r, g, b, a = DF:ParseColors (titleColor)
+ self.TitleLabel:SetTextColor (r, g, b, a)
+ end
+
+ if (font) then
+ DF:SetFontFace (self.TitleLabel, font)
+ end
+
+ if (size) then
+ DF:SetFontSize (self.TitleLabel, size)
+ end
+ end
+
+
+}
+
+function DF:CreateTitleBar (f, titleText)
+
+ local titleBar = CreateFrame ("frame", f:GetName() and f:GetName() .. "TitleBar" or nil, f)
+ titleBar:SetPoint ("topleft", f, "topleft", 2, -3)
+ titleBar:SetPoint ("topright", f, "topright", -2, -3)
+ titleBar:SetHeight (20)
+ titleBar:SetBackdrop (SimplePanel_frame_backdrop) --it's an upload from this file
+ titleBar:SetBackdropColor (.2, .2, .2, 1)
+ titleBar:SetBackdropBorderColor (0, 0, 0, 1)
+
+ local closeButton = CreateFrame ("button", titleBar:GetName() and titleBar:GetName() .. "CloseButton" or nil, titleBar)
+ closeButton:SetSize (16, 16)
+ closeButton:SetNormalTexture (DF.folder .. "icons")
+ closeButton:SetHighlightTexture (DF.folder .. "icons")
+ closeButton:SetPushedTexture (DF.folder .. "icons")
+ closeButton:GetNormalTexture():SetTexCoord (0, 16/128, 0, 1)
+ closeButton:GetHighlightTexture():SetTexCoord (0, 16/128, 0, 1)
+ closeButton:GetPushedTexture():SetTexCoord (0, 16/128, 0, 1)
+ closeButton:SetAlpha (0.7)
+ closeButton:SetScript ("OnClick", simple_panel_close_click) --upvalue from this file
+
+ local titleLabel = titleBar:CreateFontString (titleBar:GetName() and titleBar:GetName() .. "TitleText" or nil, "overlay", "GameFontNormal")
+ titleLabel:SetTextColor (.8, .8, .8, 1)
+ titleLabel:SetText (titleText or "")
+
+ --anchors
+ closeButton:SetPoint ("right", titleBar, "right", -2, 0)
+ titleLabel:SetPoint ("center", titleBar, "center")
+
+ --members
+ f.TitleBar = titleBar
+ f.CloseButton = closeButton
+ f.TitleLabel = titleLabel
+
+ DF:Mixin (f, DF.TitleFunctions)
+
+ return titleBar
+end
+
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- ~icon row
+
+DF.IconRowFunctions = {
+
+ GetIcon = function (self)
+ local iconFrame = self.IconPool [self.NextIcon]
+
+ if (not iconFrame) then
+ local newIconFrame = CreateFrame ("cooldown", "$parentIconCooldown" .. self.NextIcon, self, "CooldownFrameTemplate")
+ newIconFrame:SetSize (self.options.icon_width, self.options.icon_height)
+
+ newIconFrame.Texture = newIconFrame:CreateTexture (nil, "background")
+ newIconFrame.Texture:SetAllPoints()
+
+ newIconFrame.Text = newIconFrame:CreateFontString (nil, "overlay", "GameFontNormal")
+ newIconFrame.Text:SetPoint ("center")
+ newIconFrame.Text:Hide()
+
+ newIconFrame:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1})
+ newIconFrame:SetBackdropBorderColor (0, 0, 0, 0)
+ newIconFrame:EnableMouse (false)
+
+ self.IconPool [self.NextIcon] = newIconFrame
+ iconFrame = newIconFrame
+ end
+
+ iconFrame:ClearAllPoints()
+
+ local anchor = self.options.anchor
+ local anchorTo = self.NextIcon == 1 and self or self.IconPool [self.NextIcon - 1]
+ local xPadding = self.NextIcon == 1 and self.options.left_padding or self.options.icon_padding
+ local growDirection = self.options.grow_direction
+
+ if (growDirection == 1) then --grow to right
+ if (self.NextIcon == 1) then
+ iconFrame:SetPoint ("left", anchorTo, "left", xPadding, 0)
+ else
+ iconFrame:SetPoint ("left", anchorTo, "right", xPadding, 0)
+ end
+
+ elseif (growDirection == 2) then --grow to left
+ if (self.NextIcon == 1) then
+ iconFrame:SetPoint ("right", anchorTo, "right", xPadding, 0)
+ else
+ iconFrame:SetPoint ("right", anchorTo, "left", xPadding, 0)
+ end
+
+ end
+
+ DF:SetFontColor (iconFrame.Text, self.options.text_color)
+
+ self.NextIcon = self.NextIcon + 1
+ return iconFrame
+ end,
+
+ SetIcon = function (self, spellId, borderColor, startTime, duration)
+ local spellName, _, spellIcon = GetSpellInfo (spellId)
+
+ if (spellIcon) then
+ local iconFrame = self:GetIcon()
+ iconFrame.Texture:SetTexture (spellIcon)
+ iconFrame.Texture:SetTexCoord (unpack (self.options.texcoord))
+
+ if (borderColor) then
+ iconFrame:SetBackdropBorderColor (Plater:ParseColors (borderColor))
+ else
+ iconFrame:SetBackdropBorderColor (0, 0, 0 ,0)
+ end
+
+ if (startTime) then
+ CooldownFrame_Set (iconFrame, startTime, duration, true, true)
+
+ if (self.options.show_text) then
+ iconFrame.Text:Show()
+ iconFrame.Text:SetText (floor (startTime + duration - GetTime()))
+ else
+ iconFrame.Text:Hide()
+ end
+ else
+ iconFrame.Text:Hide()
+ end
+
+ iconFrame:Show()
+
+ --> update the size of the frame
+ self:SetWidth ((self.options.left_padding * 2) + (self.options.icon_padding * (self.NextIcon-2)) + (self.options.icon_width * (self.NextIcon - 1)))
+
+ --> show the frame
+ self:Show()
+
+ return iconFrame
+ end
+ end,
+
+ ClearIcons = function (self)
+ for i = 1, self.NextIcon -1 do
+ self.IconPool [i]:Hide()
+ end
+ self.NextIcon = 1
+ self:Hide()
+ end,
+
+ GetIconGrowDirection = function (self)
+ local side = self.options.anchor.side
+
+ if (side == 1) then
+ return 1
+ elseif (side == 2) then
+ return 2
+ elseif (side == 3) then
+ return 1
+ elseif (side == 4) then
+ return 1
+ elseif (side == 5) then
+ return 2
+ elseif (side == 6) then
+ return 1
+ elseif (side == 7) then
+ return 2
+ elseif (side == 8) then
+ return 1
+ elseif (side == 9) then
+ return 1
+ elseif (side == 10) then
+ return 1
+ elseif (side == 11) then
+ return 2
+ elseif (side == 12) then
+ return 1
+ elseif (side == 13) then
+ return 1
+ end
+ end
+}
+
+local default_icon_row_options = {
+ icon_width = 20,
+ icon_height = 20,
+ texcoord = {.1, .9, .1, .9},
+ show_text = true,
+ text_color = {1, 1, 1, 1},
+ left_padding = 2, --distance between right and left
+ top_padding = 2, --distance between top and bottom
+ icon_padding = 2, --distance between each icon
+ backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
+ backdrop_color = {0, 0, 0, 0.5},
+ backdrop_border_color = {0, 0, 0, 1},
+ anchor = {side = 6, x = 2, y = 0},
+ grow_direction = 1, --1 = to right 2 = to left
+}
+
+function DF:CreateIconRow (parent, name, options)
+ local f = CreateFrame ("frame", name, parent)
+ f.IconPool = {}
+ f.NextIcon = 1
+
+ DF:Mixin (f, DF.IconRowFunctions)
+ DF:Mixin (f, DF.OptionsFunctions)
+
+ f:BuildOptionsTable (default_icon_row_options, options)
+
+ f:SetSize (f.options.icon_width, f.options.icon_height + (f.options.top_padding * 2))
+ f:SetBackdrop (f.options.backdrop)
+ f:SetBackdropColor (unpack (f.options.backdrop_color))
+ f:SetBackdropBorderColor (unpack (f.options.backdrop_border_color))
+
+ return f
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/panel.xml
--- a/Libs/DF/panel.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/panel.xml Fri Jul 20 19:04:12 2018 -0300
@@ -29,4 +29,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/picture.lua
--- a/Libs/DF/picture.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/picture.lua Fri Jul 20 19:04:12 2018 -0300
@@ -295,4 +295,4 @@
setmetatable (ImageObject, ImageMetaFunctions)
return ImageObject
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/pictureedit.lua
--- a/Libs/DF/pictureedit.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/pictureedit.lua Fri Jul 20 19:04:12 2018 -0300
@@ -598,4 +598,4 @@
end
end
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/scrollbar.lua
--- a/Libs/DF/scrollbar.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/scrollbar.lua Fri Jul 20 19:04:12 2018 -0300
@@ -126,7 +126,7 @@
self.precionado = false
self:SetScript ("OnUpdate", nil)
end)
- --> isso aqui pra quando o slider ativar, o scroll fica na posição zero
+ --> isso aqui pra quando o slider ativar, o scroll fica na posi��o zero
botao_cima:SetScript ("OnEnable", function (self)
local current = new_slider:GetValue()
if (current == 0) then
@@ -232,4 +232,4 @@
end
return new_slider
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/slider.lua
--- a/Libs/DF/slider.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/slider.lua Fri Jul 20 19:04:12 2018 -0300
@@ -338,7 +338,6 @@
--> scripts
local OnEnter = function (slider)
-
if (_rawget (slider.MyObject, "lockdown")) then
return
end
@@ -362,8 +361,8 @@
GameCooltip2:AddLine (slider.MyObject.have_tooltip)
GameCooltip2:ShowCooltip (slider, "tooltip")
else
- GameCooltip2:Preset (1)
- GameCooltip2:AddLine ("Right Click to Type the Value")
+ GameCooltip2:Preset (2)
+ GameCooltip2:AddLine ("Right Click to Type the Value", "", 1, "", "", 10)
GameCooltip2:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 16, 16, 0.015625, 0.15671875, 0.640625, 0.798828125)
GameCooltip2:ShowCooltip (slider, "tooltip")
end
@@ -396,7 +395,6 @@
local f = CreateFrame ("frame", "DetailsFrameworkSliderButtons1", UIParent)
f:Hide()
- --f:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], tile = true, tileSize = 5})
f:SetHeight (18)
local t = 0
@@ -413,8 +411,9 @@
function f:ShowMe (host)
f:SetPoint ("bottomleft", host, "topleft", -3, -5)
f:SetPoint ("bottomright", host, "topright", 3, -5)
- f:SetFrameStrata (host:GetFrameStrata())
- f:SetFrameLevel (host:GetFrameLevel())
+ --f:SetFrameStrata (host:GetFrameStrata())
+ f:SetFrameStrata ("FULLSCREEN")
+ f:SetFrameLevel (host:GetFrameLevel() + 1000)
f:Show()
if (f.is_going_hide) then
f:SetScript ("OnUpdate", nil)
@@ -1146,7 +1145,6 @@
SliderObject.slider:SetBackdrop ({edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", edgeSize = 8})
SliderObject.slider:SetBackdropColor (0.9, 0.7, 0.7, 1.0)
- --SliderObject.slider:SetBackdropColor (0, 0, 0, 1)
SliderObject.thumb = SliderObject.slider:CreateTexture (nil, "artwork")
SliderObject.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob")
@@ -1218,4 +1216,4 @@
return SliderObject, with_label
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/spells.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Libs/DF/spells.lua Fri Jul 20 19:04:12 2018 -0300
@@ -0,0 +1,596 @@
+
+local DF = _G ["DetailsFramework"]
+if (not DF or not DetailsFrameworkCanLoad) then
+ return
+end
+
+DF.CooldownsBySpec = {
+ -- 1 attack cooldown
+ -- 2 personal defensive cooldown
+ -- 3 targetted defensive cooldown
+ -- 4 raid defensive cooldown
+ -- 5 personal utility cooldown
+
+ --MAGE
+ --arcane
+ [62] = {
+ [12042] = 1, --Arcane Power
+ [55342] = 1, --Mirror Image
+ [45438] = 2, --Ice Block
+ [12051] = 5, --Evocation
+ [110960] = 5, --Greater Invisibility
+ },
+ --fire
+ [63] = {
+ [190319] = 1, --Combustion
+ [55342] = 1, --Mirror Image
+ [45438] = 2, --Ice Block
+ [66] = 5, --Invisibility
+ },
+ --frost
+ [64] = {
+ [12472] = 1, --Icy Veins
+ [205021] = 1, --Ray of Frost
+ [55342] = 1, --Mirror Image
+ [45438] = 2, --Ice Block
+ [66] = 5, --Invisibility
+ [235219] = 5, --Cold Snap
+ },
+
+ --PRIEST
+ --discipline
+ [256] = {
+ [34433] = 1, --Shadowfiend
+ [123040] = 1, --Mindbender
+ [33206] = 3, --Pain Suppression
+ [62618] = 4, --Power Word: Barrier
+ [271466] = 4, --Luminous Barrier (talent)
+ [47536] = 5, --Rapture
+ [19236] = 5, --Desperate Prayer
+ [8122] = 5, --Psychic Scream
+ },
+ --holy
+ [257] = {
+ [200183] = 2, --Apotheosis
+ [47788] = 3, --Guardian Spirit
+ [64844] = 4, --Divine Hymn
+ [64901] = 4, --Symbol of Hope
+ [265202] = 4, --Holy Word: Salvation
+ [88625] = 5, --Holy Word: Chastise
+ [34861] = 5, --Holy Word: Sanctify
+ [2050] = 5, --Holy Word: Serenity
+ [19236] = 5, --Desperate Prayer
+ [8122] = 5, --Psychic Scream
+ },
+ --shadow priest
+ [258] = {
+ [34433] = 1, --Shadowfiend
+ [200174] = 1, --Mindbender
+ [193223] = 1, --Surrender to Madness
+ [47585] = 2, --Dispersion
+ [15286] = 4, --Vampiric Embrace
+ [64044] = 5, --Psychic Horror
+ [8122] = 5, --Psychic Scream
+ },
+
+ --ROGUE
+ --assassination
+ [259] = {
+ [79140] = 1, --Vendetta
+ [1856] = 2, --Vanish
+ [5277] = 2, --Evasion
+ [31224] = 2, --Cloak of Shadows
+ [2094] = 5, --Blind
+ [114018] = 5, --Shroud of Concealment
+ },
+ --outlaw
+ [260] = {
+ [13750] = 1, --Adrenaline Rush
+ [51690] = 1, --Killing Spree (talent)
+ [199754] = 2, --Riposte
+ [31224] = 2, --Cloak of Shadows
+ [1856] = 2, --Vanish
+ [2094] = 5, --Blind
+ [114018] = 5, --Shroud of Concealment
+ },
+ --subtlety
+ [261] = {
+ [121471] = 1, --Shadow Blades
+ [31224] = 2, --Cloak of Shadows
+ [1856] = 2, --Vanish
+ [5277] = 2, --Evasion
+ [2094] = 5, --Blind
+ [114018] = 5, --Shroud of Concealment
+ },
+
+ --WARLOCK
+ --affliction
+ [265] = {
+ [205180] = 1, --Summon Darkglare
+ [113860] = 1, --Dark Soul: Misery
+ [104773] = 2, --Unending Resolve
+
+ [108416] = 2, --Dark Pact
+
+ [30283] = 5, --Shadowfury
+ [6789] = 5, --Mortal Coil
+ },
+ --demo
+ [266] = {
+ [265187] = 1, --Summon Demonic Tyrant
+ [111898] = 1, --Grimoire: Felguard
+ [267217] = 1, --Nether Portal
+
+ [104773] = 2, --Unending Resolve
+ [108416] = 2, --Dark Pact
+
+ [30283] = 5, --Shadowfury
+ [6789] = 5, --Mortal Coil
+ },
+ --destro
+ [267] = {
+ [1122] = 1, --Summon Infernal
+ [113858] = 1, --Dark Soul: Instability
+
+ [104773] = 2, --Unending Resolve
+ [108416] = 2, --Dark Pact
+
+ [6789] = 5, --Mortal Coil
+ [30283] = 5, --Shadowfury
+ },
+
+ --WARRIOR
+ --Arms
+ [71] = {
+ [107574] = 1, --Avatar
+ [227847] = 1, --Bladestorm
+ [152277] = 1, --Ravager (talent)
+
+ [118038] = 2, --Die by the Sword
+
+ [97462] = 4, --Rallying Cry
+
+ [18499] = 5, --Berserker Rage
+ [5246] = 5, --Intimidating Shout
+ },
+ --Fury
+ [72] = {
+ [1719] = 1, --Recklessness
+ [46924] = 1, --Bladestorm (talent)
+
+ [184364] = 2, --Enraged Regeneration
+
+ [97462] = 4, --Rallying Cry
+
+ [18499] = 5, --Berserker Rage
+ [5246] = 5, --Intimidating Shout
+ },
+ --Protection
+ [73] = {
+ [228920] = 1, --Ravager (talent)
+ [107574] = 1, --Avatar
+
+ [12975] = 2, --Last Stand
+ [871] = 2, --Shield Wall
+
+ [97462] = 4, --Rallying Cry
+
+ [18499] = 5, --Berserker Rage
+ [5246] = 5, --Intimidating Shout
+ },
+
+ --PALADIN
+ --holy
+ [65] = {
+ [31884] = 1, --Avenging Wrath
+ [216331] = 1, --Avenging Crusader (talent)
+
+ [498] = 2, --Divine Protection
+ [642] = 2, --Divine Shield
+ [105809] = 2, --Holy Avenger (talent)
+
+ [1022] = 3, --Blessing of Protection
+ [633] = 3, --Lay on Hands
+
+ [31821] = 4, --Aura Mastery
+
+ [1044] = 5, --Blessing of Freedom
+ [853] = 5, --Hammer of Justice
+ [115750] = 5, --Blinding Light (talent)
+ },
+
+ --protection
+ [66] = {
+ [31884] = 1, --Avenging Wrath
+
+ [31850] = 2, --Ardent Defender
+ [86659] = 2, --Guardian of Ancient Kings
+
+ [1022] = 3, --Blessing of Protection
+ [204018] = 3, --Blessing of Spellwarding (talent)
+ [6940] = 3, --Blessing of Sacrifice
+
+ [204150] = 4, --Aegis of Light (talent)
+
+ [1044] = 5, --Blessing of Freedom
+ [853] = 5, --Hammer of Justice
+ [115750] = 5, --Blinding Light (talent)
+ },
+
+ --retribution
+ [70] = {
+ [31884] = 1, --Avenging Wrath
+ [231895] = 1, --Crusade (talent)
+
+ [184662] = 2, --Shield of Vengeance
+ [642] = 2, --Divine Shield
+
+ [1022] = 3, --Blessing of Protection
+ [633] = 3, --Lay on Hands
+
+ [1044] = 5, --Blessing of Freedom
+ [853] = 5, --Hammer of Justice
+ [115750] = 5, --Blinding Light (talent)
+ },
+
+ --DEMON HUNTER
+ --havoc
+ [577] = {
+ [200166] = 1, --Metamorphosis
+ [206491] = 1, --Nemesis (talent)
+
+ [196555] = 2, --Netherwalk (talent)
+
+ [196718] = 4, --Darkness
+ },
+ --vengeance
+ [581] = {
+ [187827] = 2, --Metamorphosis
+
+ [207684] = 5, --Sigil of Misery
+ [202137] = 5, --Sigil of Silence
+ [202138] = 5, --Sigil of Chains (talent)
+ },
+
+ --DEATH KNIGHT
+ --unholy
+ [252] = {
+ [275699] = 1, --Apocalypse
+ [42650] = 1, --Army of the Dead
+ [49206] = 1, --Summon Gargoyle (talent)
+
+ [48792] = 2, --Icebound Fortitude
+ [48743] = 2, --Death Pact (talent)
+
+ },
+ --frost
+ [251] = {
+ [152279] = 1, --Breath of Sindragosa (talent)
+ [47568] = 1, --Empower Rune Weapon
+ [279302] = 1, --Frostwyrm's Fury (talent)
+
+ [48792] = 2, --Icebound Fortitude
+ [48743] = 2, --Death Pact (talent)
+
+ [207167] = 5, --Blinding Sleet (talent)
+ },
+ --blood
+ [250] = {
+ [49028] = 1, --Dancing Rune Weapon
+
+ [55233] = 2, --Vampiric Blood
+ [48792] = 2, --Icebound Fortitude
+
+ [108199] = 5, --Gorefiend's Grasp
+ },
+
+ --DRUID
+ --balance
+ [102] = {
+ [194223] = 1, --Celestial Alignment
+ [102560] = 1, --Incarnation: Chosen of Elune (talent)
+
+ [22812] = 2, --Barkskin
+ [108238] = 2, --Renewal (talent)
+
+ [29166] = 3, --Innervate
+
+ [78675] = 5, --Solar Beam
+ },
+ --feral
+ [103] = {
+ [106951] = 1, --Berserk
+ [102543] = 1, --Incarnation: King of the Jungle (talent)
+
+ [61336] = 2, --Survival Instincts
+ [108238] = 2, --Renewal (talent)
+
+ [77764] = 4, --Stampeding Roar
+ },
+ --guardian
+ [104] = {
+ [22812] = 2, --Barkskin
+ [61336] = 2, --Survival Instincts
+ [102558] = 2, --Incarnation: Guardian of Ursoc (talent)
+
+ [77761] = 4, --Stampeding Roar
+
+ [99] = 5, --Incapacitating Roar
+ },
+ --restoration
+ [105] = {
+
+ [22812] = 2, --Barkskin
+ [108238] = 2, --Renewal (talent)
+ [33891] = 2, --Incarnation: Tree of Life (talent)
+
+ [102342] = 3, --Ironbark
+ [29166] = 3, --Innervate
+
+ [740] = 4, --Tranquility
+ [197721] = 4, --Flourish (talent)
+
+ [102793] = 5, --Ursol's Vortex
+ },
+
+ --HUNTER
+ --beast mastery
+ [253] = {
+ [193530] = 1, --Aspect of the Wild
+ [19574] = 1, --Bestial Wrath
+ [201430] = 1, --Stampede (talent)
+ [194407] = 1, --Spitting Cobra (talent)
+
+ [186265] = 2, --Aspect of the Turtle
+
+ [19577] = 5, --Intimidation
+ },
+ --marksmanship
+ [254] = {
+ [193526] = 1, --Trueshot
+
+ [186265] = 2, --Aspect of the Turtle
+ [109304] = 2, --Exhilaration
+ [281195] = 2, --Survival of the Fittest
+
+ [187650] = 5, --Freezing Trap
+ },
+ --survival
+ [255] = {
+ [266779] = 1, --Coordinated Assault
+
+ [186265] = 2, --Aspect of the Turtle
+ [109304] = 2, --Exhilaration
+
+ [19577] = 5, --Intimidation
+ },
+
+ --MONK
+ --brewmaster
+ [268] = {
+ [115203] = 2, --Fortifying Brew
+ [115176] = 2, --Zen Meditation
+ [122278] = 2, --Dampen Harm (talent)
+ },
+ --windwalker
+ [269] = {
+ [137639] = 1, --Storm, Earth, and Fire
+ [123904] = 1, --Invoke Xuen, the White Tiger (talent)
+ [152173] = 1, --Serenity (talent)
+
+ [122470] = 2, --Touch of Karma
+ [122278] = 2, --Dampen Harm (talent)
+ [122783] = 2, --Diffuse Magic (talent)
+
+ [119381] = 5, --Leg Sweep
+ },
+ --mistweaver
+ [270] = {
+ [122278] = 2, --Dampen Harm (talent)
+ [198664] = 2, --Invoke Chi-Ji, the Red Crane (talent)
+ [243435] = 2, --Fortifying Brew
+ [122783] = 2, --Diffuse Magic (talent)
+
+ [116849] = 3, --Life Cocoon
+
+ [115310] = 4, --Revival
+ },
+
+ --SHAMAN
+ --elemental
+ [262] = {
+ [198067] = 1, --Fire Elemental
+ [192249] = 1, --Storm Elemental (talent)
+ [114050] = 1, --Ascendance (talent)
+
+ [108271] = 2, --Astral Shift
+
+ [108281] = 4, --Ancestral Guidance (talent)
+ },
+ --enhancement
+ [263] = {
+ [51533] = 1, --Feral Spirit
+ [114051] = 1, --Ascendance (talent)
+
+ [108271] = 2, --Astral Shift
+ },
+ --restoration
+ [263] = {
+ [108271] = 2, --Astral Shift
+ [114052] = 2, --Ascendance (talent)
+ [98008] = 4, --Spirit Link Totem
+ [108280] = 4, --Healing Tide Totem
+ [207399] = 4, --Ancestral Protection Totem (talent)
+ },
+}
+
+DF.CrowdControlSpells = {
+ [5246] = "WARRIOR", --Intimidating Shout
+ [132168] = "WARRIOR", --Shockwave (debuff spellid)
+ [132169] = "WARRIOR", --Storm Bolt (talent debuff spellid)
+
+ [118699] = "WARLOCK", --Fear (debuff spellid)
+ [6789] = "WARLOCK", --Mortal Coil
+ [30283] = "WARLOCK", --Shadowfury
+ [710] = "WARLOCK", --Banish
+
+ [118] = "MAGE", --Polymorph
+ [82691] = "MAGE", --Ring of Frost (debuff spellid)
+ [122] = "MAGE", --Frost Nova
+ [157997] = "MAGE", --Ice Nova
+ [31661] = "MAGE", --Dragon's Breath
+
+ [205364] = "PRIEST", --Mind Control (talent)
+ [605] = "PRIEST", --Mind Control
+ [8122] = "PRIEST", --Psychic Scream
+ [9484] = "PRIEST", --Shackle Undead
+ [200196] = "PRIEST", --Holy Word: Chastise (debuff spellid)
+ [200200] = "PRIEST", --Holy Word: Chastise (talent debuff spellid)
+ [226943] = "PRIEST", --Mind Bomb (talent)
+ [64044] = "PRIEST", --Psychic Horror (talent)
+
+ [2094] = "ROGUE", --Blind
+ [1833] = "ROGUE", --Cheap Shot
+ [408] = "ROGUE", --Kidney Shot
+ [6770] = "ROGUE", --Sap
+ [1776] = "ROGUE", --Gouge
+
+ [853] = "PALADIN", --Hammer of Justice
+ [20066] = "PALADIN", --Repentance (talent)
+ [105421] = "PALADIN", --Blinding Light (talent)
+
+ [221562] = "DEATHKNIGHT", --Asphyxiate
+ [108194] = "DEATHKNIGHT", --Asphyxiate (talent)
+ [207167] = "DEATHKNIGHT", --Blinding Sleet
+
+ [339] = "DRUID", --Entangling Roots
+ [2637] = "DRUID", --Hibernate
+ [61391] = "DRUID", --Typhoon
+ [102359] = "DRUID", --Mass Entanglement
+ [99] = "DRUID", --Incapacitating Roar
+ [236748] = "DRUID", --Intimidating Roar
+ [5211] = "DRUID", --Mighty Bash
+ [45334] = "DRUID", --Immobilized
+ [203123] = "DRUID", --Maim
+ [50259] = "DRUID", --Dazed (from Wild Charge)
+ [209753] = "DRUID", --Cyclone (from pvp talent)
+
+ [3355] = "HUNTER", --Freezing Trap
+ [19577] = "HUNTER", --Intimidation
+ [190927] = "HUNTER", --Harpoon
+ [162480] = "HUNTER", --Steel Trap
+
+ [119381] = "MONK", --Leg Sweep
+ [115078] = "MONK", --Paralysis
+ [198909] = "MONK", --Song of Chi-Ji (talent)
+ [116706] = "MONK", --Disable
+
+ [118905] = "SHAMAN", --Static Charge (Capacitor Totem)
+ [51514] = "SHAMAN", --Hex
+ [64695] = "SHAMAN", --Earthgrab (talent)
+
+ [179057] = "DEMONHUNTER", --Chaos Nova
+ [217832] = "DEMONHUNTER", --Imprison
+ [200166] = "DEMONHUNTER", --Metamorphosis
+ [207685] = "DEMONHUNTER", --Sigil of Misery
+}
+
+DF.SpecIds = {
+ [577] = "DEMONHUNTER",
+ [581] = "DEMONHUNTER",
+
+ [250] = "DEATHKNIGHT",
+ [251] = "DEATHKNIGHT",
+ [252] = "DEATHKNIGHT",
+
+ [71] = "WARRIOR",
+ [72] = "WARRIOR",
+ [73] = "WARRIOR",
+
+ [62] = "MAGE",
+ [63] = "MAGE",
+ [64] = "MAGE",
+
+ [259] = "ROGUE",
+ [260] = "ROGUE",
+ [261] = "ROGUE",
+
+ [102] = "DRUID",
+ [103] = "DRUID",
+ [104] = "DRUID",
+ [105] = "DRUID",
+
+ [253] = "HUNTER",
+ [254] = "HUNTER",
+ [255] = "HUNTER",
+
+ [262] = "SHAMAN",
+ [263] = "SHAMAN",
+ [254] = "SHAMAN",
+
+ [256] = "PRIEST",
+ [257] = "PRIEST",
+ [258] = "PRIEST",
+
+ [265] = "WARLOCK",
+ [266] = "WARLOCK",
+ [267] = "WARLOCK",
+
+ [65] = "PALADIN",
+ [66] = "PALADIN",
+ [70] = "PALADIN",
+
+ [268] = "MONK",
+ [269] = "MONK",
+ [270] = "MONK",
+}
+
+DF.CooldownToClass = {}
+
+DF.CooldownsAttack = {}
+DF.CooldownsDeffense = {}
+DF.CooldownsExternals = {}
+DF.CooldownsRaid = {}
+
+DF.CooldownsAllDeffensive = {}
+
+for specId, cooldownTable in pairs (DF.CooldownsBySpec) do
+
+ for spellId, cooldownType in pairs (cooldownTable) do
+
+ if (cooldownType == 1) then
+ DF.CooldownsAttack [spellId] = true
+
+ elseif (cooldownType == 2) then
+ DF.CooldownsDeffense [spellId] = true
+ DF.CooldownsAllDeffensive [spellId] = true
+
+ elseif (cooldownType == 3) then
+ DF.CooldownsExternals [spellId] = true
+ DF.CooldownsAllDeffensive [spellId] = true
+
+ elseif (cooldownType == 4) then
+ DF.CooldownsRaid [spellId] = true
+ DF.CooldownsAllDeffensive [spellId] = true
+
+ elseif (cooldownType == 5) then
+
+
+ end
+
+ DF.CooldownToClass [spellId] = DF.SpecIds [spellId]
+
+ end
+
+end
+
+
+function DF:FindClassForCooldown (spellId)
+ for specId, cooldownTable in pairs (DF.CooldownsBySpec) do
+ local hasCooldown = cooldownTable [spellId]
+ if (hasCooldown) then
+ return DF.SpecIds [specId]
+ end
+ end
+end
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/split_bar.lua
--- a/Libs/DF/split_bar.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/split_bar.lua Fri Jul 20 19:04:12 2018 -0300
@@ -618,4 +618,4 @@
_setmetatable (SplitBarObject, SplitBarMetaFunctions)
return SplitBarObject
-end
\ No newline at end of file
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/split_bar.xml
--- a/Libs/DF/split_bar.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/split_bar.xml Fri Jul 20 19:04:12 2018 -0300
@@ -79,4 +79,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/textentry.lua
--- a/Libs/DF/textentry.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/textentry.lua Fri Jul 20 19:04:12 2018 -0300
@@ -14,6 +14,7 @@
local loadstring = loadstring --> lua local
local _string_len = string.len --> lua local
+
local cleanfunction = function() end
local APITextEntryFunctions = false
@@ -712,69 +713,7 @@
return self.editbox:SetFocus (true)
end
-function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent)
-
- if (name:find ("$parent")) then
- local parentName = DF.GetParentName (parent)
- name = name:gsub ("$parent", parentName)
- end
-
- local borderframe = CreateFrame ("Frame", name, parent)
- borderframe:SetSize (w, h)
-
- if (member) then
- parent [member] = borderframe
- end
-
- local scrollframe = CreateFrame ("ScrollFrame", name, borderframe, "DetailsFrameworkEditBoxMultiLineTemplate")
-
- scrollframe:SetScript ("OnSizeChanged", function (self)
- scrollframe.editbox:SetSize (self:GetSize())
- end)
-
- scrollframe:SetPoint ("topleft", borderframe, "topleft", 10, -10)
- scrollframe:SetPoint ("bottomright", borderframe, "bottomright", -30, 10)
-
- scrollframe.editbox:SetMultiLine (true)
- scrollframe.editbox:SetJustifyH ("left")
- scrollframe.editbox:SetJustifyV ("top")
- scrollframe.editbox:SetMaxBytes (1024000)
- scrollframe.editbox:SetMaxLetters (128000)
-
- borderframe.GetText = function_gettext
- borderframe.SetText = function_settext
- borderframe.ClearFocus = function_clearfocus
- borderframe.SetFocus = function_setfocus
-
- borderframe.Enable = TextEntryMetaFunctions.Enable
- borderframe.Disable = TextEntryMetaFunctions.Disable
-
- borderframe.SetTemplate = TextEntryMetaFunctions.SetTemplate
-
- if (not nointent) then
- IndentationLib.enable (scrollframe.editbox, nil, 4)
- end
-
- borderframe:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
- tile = 1, tileSize = 16, edgeSize = 16, insets = {left = 5, right = 5, top = 5, bottom = 5}})
-
- scrollframe.editbox.current_bordercolor = {1, 1, 1, 0.7}
- borderframe:SetBackdropBorderColor (1, 1, 1, 0.7)
- borderframe:SetBackdropColor (0.090195, 0.090195, 0.188234, 1)
-
- borderframe.enabled_border_color = {borderframe:GetBackdropBorderColor()}
- borderframe.enabled_backdrop_color = {borderframe:GetBackdropColor()}
- borderframe.enabled_text_color = {scrollframe.editbox:GetTextColor()}
- borderframe.onleave_backdrop = {scrollframe.editbox:GetBackdropColor()}
- borderframe.onleave_backdrop_border_color = {scrollframe.editbox:GetBackdropBorderColor()}
-
- borderframe.scroll = scrollframe
- borderframe.editbox = scrollframe.editbox
- borderframe.editbox.borderframe = borderframe
-
- return borderframe
-end
------------------------------------------------------------------------------------
@@ -893,6 +832,7 @@
local character = text:sub (i, i)
if (character:match ("%a")) then
self.lastword = character .. self.lastword
+ --print (self.lastword)
else
break
end
@@ -901,7 +841,7 @@
--On Text Changed
local AutoComplete_OnTextChanged = function (editboxWidget, byUser, capsule)
- capsule = capsule or editboxWidget.MyObject
+ capsule = capsule or editboxWidget.MyObject or editboxWidget
local chars_now = editboxWidget:GetText():len()
if (not editboxWidget.ignore_textchange) then
@@ -921,7 +861,7 @@
end
local AutoComplete_OnSpacePressed = function (editboxWidget, capsule)
- capsule = capsule or editboxWidget.MyObject
+ capsule = capsule or editboxWidget.MyObject or editboxWidget
-- if (not gotMatch) then
--editboxWidget.end_selection = nil
@@ -934,12 +874,12 @@
local AutoComplete_OnEnterPressed = function (editboxWidget)
- local capsule = editboxWidget.MyObject
+ local capsule = editboxWidget.MyObject or editboxWidget
if (editboxWidget.end_selection) then
editboxWidget:SetCursorPosition (editboxWidget.end_selection)
editboxWidget:HighlightText (0, 0)
editboxWidget.end_selection = nil
- --editboxWidget:Insert (" ") --estava causando a adição de uma palavra a mais quando o próximo catactere for um espaço
+ --editboxWidget:Insert (" ") --estava causando a adi��o de uma palavra a mais quando o pr�ximo catactere for um espa�o
else
if (editboxWidget:IsMultiLine()) then
editboxWidget:Insert ("\n")
@@ -959,26 +899,58 @@
end
local AutoComplete_OnEditFocusGained = function (editboxWidget)
- local capsule = editboxWidget.MyObject
+ local capsule = editboxWidget.MyObject or editboxWidget
capsule:GetLastWord()
+ --print ("last word:", editboxWidget.lastword)
editboxWidget.end_selection = nil
editboxWidget.focusGained = true
capsule.characters_count = editboxWidget:GetText():len()
end
+local OptimizeAutoCompleteTable = function (self, wordList)
+ local optimizedTable = {}
+
+ local lower = string.lower
+ local sub = string.sub
+ local len = string.len
+
+ local subTables = 0
+
+ for i = 1, #wordList do
+ local thisWord = wordList [i]
+ if (len (thisWord) > 0) then
+ thisWord = lower (thisWord)
+
+ local firstCharacter = sub (thisWord, 1, 1)
+
+ local charTable = optimizedTable [firstCharacter]
+ if (not charTable) then
+ charTable = {}
+ optimizedTable [firstCharacter] = charTable
+
+ subTables = subTables + 1
+ end
+
+ charTable [#charTable+1] = thisWord
+ end
+ end
+
+ wordList.Optimized = optimizedTable
+end
+
local AutoComplete_OnChar = function (editboxWidget, char, capsule)
if (char == "") then
return
end
- capsule = capsule or editboxWidget.MyObject
+ capsule = capsule or editboxWidget.MyObject or editboxWidget
editboxWidget.end_selection = nil
if (editboxWidget.ignore_input) then
return
end
- --reseta a palavra se acabou de ganhar focus e apertou espaço
+ --reseta a palavra se acabou de ganhar focus e apertou espa�o
if (editboxWidget.focusGained and char == " ") then
capsule.lastword = ""
editboxWidget.focusGained = nil
@@ -993,13 +965,41 @@
end
editboxWidget.ignore_input = true
+
if (capsule.lastword:len() >= 2) then
local wordList = capsule [capsule.poolName]
if (not wordList) then
- if (DF.debug) then
- error ("Details! Framework: Invalid word list table.")
+ error ("Details! Framework: TextEntry has AutoComplete but no word list table.")
+ return
+ end
+
+ if (capsule.ShouldOptimizeAutoComplete) then
+ if (not wordList.Optimized) then
+ OptimizeAutoCompleteTable (capsule, wordList)
end
+
+ local firstCharacter = string.lower (string.sub (capsule.lastword, 1, 1))
+ wordList = wordList.Optimized [firstCharacter]
+
+ if (wordList) then
+ for i = 1, #wordList do
+ local thisWord = wordList [i]
+ if (thisWord and (thisWord:find ("^" .. capsule.lastword) or thisWord:lower():find ("^" .. capsule.lastword))) then
+ local rest = thisWord:gsub (capsule.lastword, "")
+ rest = rest:lower():gsub (capsule.lastword, "")
+ local cursor_pos = editboxWidget:GetCursorPosition()
+ editboxWidget:Insert (rest)
+ editboxWidget:HighlightText (cursor_pos, cursor_pos + rest:len())
+ editboxWidget:SetCursorPosition (cursor_pos)
+ editboxWidget.end_selection = cursor_pos + rest:len()
+ editboxWidget.ignore_textchange = true
+ break
+ end
+ end
+ end
+
+ editboxWidget.ignore_input = false
return
end
@@ -1017,32 +1017,1420 @@
break
end
end
+ end
- end
editboxWidget.ignore_input = false
end
-function TextEntryMetaFunctions:SetAsAutoComplete (poolName)
+function TextEntryMetaFunctions:SetAsAutoComplete (poolName, poolTable, shouldOptimize)
- self.lastword = ""
- self.characters_count = 0
- self.poolName = poolName
- self.GetLastWord = get_last_word --editbox:GetLastWord()
- self.NoClearFocusOnEnterPressed = true --avoid auto clear focus
-
- self:SetHook ("OnEditFocusGained", AutoComplete_OnEditFocusGained)
- self.editbox:HookScript ("OnEscapePressed", AutoComplete_OnEscapePressed)
-
--- self:SetHook ("OnTextChanged", AutoComplete_OnTextChanged)
- self:SetHook ("OnEnterPressed", AutoComplete_OnEnterPressed)
--- self:SetHook ("OnChar", AutoComplete_OnChar)
--- self:SetHook ("OnSpacePressed", AutoComplete_OnSpacePressed)
-
- self.editbox:SetScript ("OnTextChanged", AutoComplete_OnTextChanged)
--- self.editbox:SetScript ("OnEnterPressed", AutoComplete_OnEnterPressed)
- self.editbox:SetScript ("OnChar", AutoComplete_OnChar)
- self.editbox:SetScript ("OnSpacePressed", AutoComplete_OnSpacePressed)
+ if (not self.SetHook) then
+ --self is borderframe
+ self = self.editbox
+ self.editbox = self --compatible with fw functions
+
+ self.lastword = ""
+ self.characters_count = 0
+ self.poolName = poolName
+ self.GetLastWord = get_last_word --editbox:GetLastWord()
+ self.NoClearFocusOnEnterPressed = true --avoid auto clear focus
+ self.ShouldOptimizeAutoComplete = shouldOptimize
+
+ if (poolTable) then
+ self [poolName] = poolTable
+ end
+
+ self:HookScript ("OnEditFocusGained", AutoComplete_OnEditFocusGained)
+ self:HookScript ("OnEnterPressed", AutoComplete_OnEnterPressed)
+ self:HookScript ("OnEscapePressed", AutoComplete_OnEscapePressed)
+ self:HookScript ("OnTextChanged", AutoComplete_OnTextChanged)
+ self:HookScript ("OnChar", AutoComplete_OnChar)
+ self:HookScript ("OnSpacePressed", AutoComplete_OnSpacePressed)
+ else
+ --fw textfield
+ self.lastword = ""
+ self.characters_count = 0
+ self.poolName = poolName
+ self.GetLastWord = get_last_word --editbox:GetLastWord()
+ self.NoClearFocusOnEnterPressed = true --avoid auto clear focus
+ self.ShouldOptimizeAutoComplete = shouldOptimize
+
+ self:SetHook ("OnEditFocusGained", AutoComplete_OnEditFocusGained)
+ self:SetHook ("OnEnterPressed", AutoComplete_OnEnterPressed)
+ self.editbox:HookScript ("OnEscapePressed", AutoComplete_OnEscapePressed)
+ self.editbox:SetScript ("OnTextChanged", AutoComplete_OnTextChanged)
+ self.editbox:SetScript ("OnChar", AutoComplete_OnChar)
+ self.editbox:SetScript ("OnSpacePressed", AutoComplete_OnSpacePressed)
+ end
end
--- endp
\ No newline at end of file
+function DF:NewSpecialLuaEditorEntry (parent, w, h, member, name, nointent)
+
+ if (name:find ("$parent")) then
+ local parentName = DF.GetParentName (parent)
+ name = name:gsub ("$parent", parentName)
+ end
+
+ local borderframe = CreateFrame ("Frame", name, parent)
+ borderframe:SetSize (w, h)
+
+ if (member) then
+ parent [member] = borderframe
+ end
+
+ local scrollframe = CreateFrame ("ScrollFrame", name, borderframe, "DetailsFrameworkEditBoxMultiLineTemplate")
+
+ borderframe.SetAsAutoComplete = TextEntryMetaFunctions.SetAsAutoComplete
+
+ scrollframe:SetScript ("OnSizeChanged", function (self)
+ scrollframe.editbox:SetSize (self:GetSize())
+ end)
+
+ scrollframe:SetPoint ("topleft", borderframe, "topleft", 10, -10)
+ scrollframe:SetPoint ("bottomright", borderframe, "bottomright", -30, 10)
+
+ scrollframe.editbox:SetMultiLine (true)
+ scrollframe.editbox:SetJustifyH ("left")
+ scrollframe.editbox:SetJustifyV ("top")
+ scrollframe.editbox:SetMaxBytes (1024000)
+ scrollframe.editbox:SetMaxLetters (128000)
+
+ borderframe.GetText = function_gettext
+ borderframe.SetText = function_settext
+ borderframe.ClearFocus = function_clearfocus
+ borderframe.SetFocus = function_setfocus
+
+ borderframe.Enable = TextEntryMetaFunctions.Enable
+ borderframe.Disable = TextEntryMetaFunctions.Disable
+
+ borderframe.SetTemplate = TextEntryMetaFunctions.SetTemplate
+
+ if (not nointent) then
+ IndentationLib.enable (scrollframe.editbox, nil, 4)
+ end
+
+ borderframe:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
+ tile = 1, tileSize = 16, edgeSize = 16, insets = {left = 5, right = 5, top = 5, bottom = 5}})
+
+ scrollframe.editbox.current_bordercolor = {1, 1, 1, 0.7}
+ borderframe:SetBackdropBorderColor (1, 1, 1, 0.7)
+ borderframe:SetBackdropColor (0.090195, 0.090195, 0.188234, 1)
+
+ borderframe.enabled_border_color = {borderframe:GetBackdropBorderColor()}
+ borderframe.enabled_backdrop_color = {borderframe:GetBackdropColor()}
+ borderframe.enabled_text_color = {scrollframe.editbox:GetTextColor()}
+
+ borderframe.onleave_backdrop = {scrollframe.editbox:GetBackdropColor()}
+ borderframe.onleave_backdrop_border_color = {scrollframe.editbox:GetBackdropBorderColor()}
+
+ borderframe.scroll = scrollframe
+ borderframe.editbox = scrollframe.editbox
+ borderframe.editbox.borderframe = borderframe
+
+ return borderframe
+end
+
+-- encryption table
+local base64chars = {[0]='A',[1]='B',[2]='C',[3]='D',[4]='E',[5]='F',[6]='G',[7]='H',[8]='I',[9]='J',[10]='K',[11]='L',[12]='M',[13]='N',[14]='O',[15]='P',[16]='Q',[17]='R',[18]='S',[19]='T',[20]='U',[21]='V',[22]='W',[23]='X',[24]='Y',[25]='Z',[26]='a',[27]='b',[28]='c',[29]='d',[30]='e',[31]='f',[32]='g',[33]='h',[34]='i',[35]='j',[36]='k',[37]='l',[38]='m',[39]='n',[40]='o',[41]='p',[42]='q',[43]='r',[44]='s',[45]='t',[46]='u',[47]='v',[48]='w',[49]='x',[50]='y',[51]='z',[52]='0',[53]='1',[54]='2',[55]='3',[56]='4',[57]='5',[58]='6',[59]='7',[60]='8',[61]='9',[62]='-',[63]='_'}
+
+-- decryption table
+local base64bytes = {['A']=0,['B']=1,['C']=2,['D']=3,['E']=4,['F']=5,['G']=6,['H']=7,['I']=8,['J']=9,['K']=10,['L']=11,['M']=12,['N']=13,['O']=14,['P']=15,['Q']=16,['R']=17,['S']=18,['T']=19,['U']=20,['V']=21,['W']=22,['X']=23,['Y']=24,['Z']=25,['a']=26,['b']=27,['c']=28,['d']=29,['e']=30,['f']=31,['g']=32,['h']=33,['i']=34,['j']=35,['k']=36,['l']=37,['m']=38,['n']=39,['o']=40,['p']=41,['q']=42,['r']=43,['s']=44,['t']=45,['u']=46,['v']=47,['w']=48,['x']=49,['y']=50,['z']=51,['0']=52,['1']=53,['2']=54,['3']=55,['4']=56,['5']=57,['6']=58,['7']=59,['8']=60,['9']=61,['-']=62,['_']=63,['=']=nil}
+
+-- shift left
+local function lsh (value,shift)
+ return (value*(2^shift)) % 256
+end
+
+-- shift right
+local function rsh (value,shift)
+ return math.floor(value/2^shift) % 256
+end
+
+-- return single bit (for OR)
+local function bit (x,b)
+ return (x % 2^b - x % 2^(b-1) > 0)
+end
+
+local function lor (x,y)
+ result = 0
+ for p=1,8 do result = result + (((bit(x,p) or bit(y,p)) == true) and 2^(p-1) or 0) end
+ return result
+end
+
+function DF.EncodeString (data)
+ local bytes = {}
+ local result = ""
+ for spos=0,string.len(data)-1,3 do
+ for byte=1,3 do bytes[byte] = string.byte(string.sub(data,(spos+byte))) or 0 end
+ result = string.format('%s%s%s%s%s',result,base64chars[rsh(bytes[1],2)],base64chars[lor(lsh((bytes[1] % 4),4), rsh(bytes[2],4))] or "=",((#data-spos) > 1) and base64chars[lor(lsh(bytes[2] % 16,2), rsh(bytes[3],6))] or "=",((#data-spos) > 2) and base64chars[(bytes[3] % 64)] or "=")
+ end
+ return result
+end
+
+function DF.DecodeString (data)
+ local chars = {}
+ local result=""
+ for dpos=0,string.len(data)-1,4 do
+ for char=1,4 do chars[char] = base64bytes[(string.sub(data,(dpos+char),(dpos+char)) or "=")] end
+ result = string.format('%s%s%s%s',result,string.char(lor(lsh(chars[1],2), rsh(chars[2],4))),(chars[3] ~= nil) and string.char(lor(lsh(chars[2],4), rsh(chars[3],2))) or "",(chars[4] ~= nil) and string.char(lor(lsh(chars[3],6) % 192, (chars[4]))) or "")
+ end
+ return result
+end
+
+
+DF.AutoCompleteAPI = {
+ "local",
+ "AddTrackedAchievement", -- [1]
+ "CanShowAchievementUI", -- [2]
+ "ClearAchievementComparisonUnit", -- [3]
+ "GetAchievementCategory", -- [4]
+ "GetAchievementComparisonInfo", -- [5]
+ "GetAchievementCriteriaInfo", -- [6]
+ "GetAchievementInfo", -- [7]
+ "GetAchievementInfoFromCriteria", -- [8]
+ "GetAchievementLink", -- [9]
+ "GetAchievementNumCriteria", -- [10]
+ "GetAchievementNumRewards", -- [11]
+ "GetCategoryInfo", -- [12]
+ "GetCategoryList", -- [13]
+ "GetCategoryNumAchievements", -- [14]
+ "GetComparisonAchievementPoints", -- [15]
+ "GetComparisonCategoryNumAchievements", -- [16]
+ "GetComparisonStatistic", -- [17]
+ "GetLatestCompletedAchievements", -- [18]
+ "GetLatestCompletedComparisonAchievements", -- [19]
+ "GetLatestUpdatedComparisonStatsGetLatestUpdatedStats", -- [20]
+ "GetNextAchievement", -- [21]
+ "GetNumComparisonCompletedAchievements", -- [22]
+ "GetNumCompletedAchievements", -- [23]
+ "GetPreviousAchievement", -- [24]
+ "GetStatistic", -- [25]
+ "GetStatisticsCategoryList", -- [26]
+ "GetTotalAchievementPoints", -- [27]
+ "GetTrackedAchievements", -- [28]
+ "GetNumTrackedAchievements", -- [29]
+ "RemoveTrackedAchievement", -- [30]
+ "SetAchievementComparisonUnit", -- [31]
+ "ActionButtonDown", -- [32]
+ "ActionButtonUp", -- [33]
+ "ActionHasRange", -- [34]
+ "CameraOrSelectOrMoveStart", -- [35]
+ "CameraOrSelectOrMoveStop", -- [36]
+ "ChangeActionBarPage", -- [37]
+ "GetActionBarPage", -- [38]
+ "GetActionBarToggles", -- [39]
+ "GetActionCooldown", -- [40]
+ "GetActionCount", -- [41]
+ "GetActionInfo", -- [42]
+ "GetActionText", -- [43]
+ "GetActionTexture", -- [44]
+ "GetBonusBarOffset", -- [45]
+ "GetMouseButtonClicked", -- [46]
+ "GetMultiCastBarOffset", -- [47]
+ "GetPossessInfo", -- [48]
+ "HasAction", -- [49]
+ "IsActionInRange", -- [50]
+ "IsAttackAction", -- [51]
+ "IsAutoRepeatAction", -- [52]
+ "IsCurrentAction", -- [53]
+ "IsConsumableAction", -- [54]
+ "IsEquippedAction", -- [55]
+ "IsUsableAction", -- [56]
+ "PetHasActionBar", -- [57]
+ "PickupAction", -- [58]
+ "PickupPetAction", -- [59]
+ "PlaceAction", -- [60]
+ "SetActionBarToggles", -- [61]
+ "StopAttack", -- [62]
+ "TurnOrActionStart", -- [63]
+ "TurnOrActionStop", -- [64]
+ "UseAction", -- [65]
+ "AcceptDuel", -- [66]
+ "AttackTarget", -- [67]
+ "CancelDuel", -- [68]
+ "CancelLogout", -- [69]
+ "ClearTutorials", -- [70]
+ "CancelSummon", -- [71]
+ "ConfirmSummon", -- [72]
+ "DescendStop", -- [73]
+ "Dismount", -- [74]
+ "FlagTutorial", -- [75]
+ "ForceQuit", -- [76]
+ "GetPVPTimer", -- [77]
+ "GetSummonConfirmAreaName", -- [78]
+ "GetSummonConfirmSummoner", -- [79]
+ "GetSummonConfirmTimeLeft", -- [80]
+ "RandomRoll", -- [81]
+ "SetPVP", -- [82]
+ "StartDuel", -- [84]
+ "TogglePVP", -- [85]
+ "ToggleSheath", -- [86]
+ "UseSoulstone", -- [87]
+ "CanSolveArtifact", -- [89]
+ "UIParent", -- [90]
+ "GetArtifactInfoByRace", -- [91]
+ "GetArtifactProgress", -- [92]
+ "GetNumArtifactsByRace", -- [93]
+ "GetSelectedArtifactInfo", -- [94]
+ "IsArtifactCompletionHistoryAvailable", -- [95]
+ "ItemAddedToArtifact", -- [96]
+ "RemoveItemFromArtifact", -- [97]
+ "RequestArtifactCompletionHistory", -- [98]
+ "SocketItemToArtifact", -- [99]
+ "AcceptArenaTeam", -- [101]
+ "ArenaTeamInviteByName", -- [102]
+ "ArenaTeamSetLeaderByName", -- [103]
+ "ArenaTeamLeave", -- [104]
+ "ArenaTeamRoster", -- [105]
+ "ArenaTeamUninviteByName", -- [106]
+ "ArenaTeamDisband", -- [107]
+ "DeclineArenaTeam", -- [108]
+ "GetArenaTeam", -- [109]
+ "GetArenaTeamGdfInf", -- [110]
+ "oGetArenaTeamRosterInfo", -- [111]
+ "GetBattlefieldTeamInfo", -- [112]
+ "GetCurrentArenaSeason", -- [113]
+ "GetInspectArenaTeamData", -- [114]
+ "GetNumArenaTeamMembers", -- [115]
+ "GetPreviousArenaSeason", -- [116]
+ "IsActiveBattlefieldArena", -- [117]
+ "IsArenaTeamCaptain", -- [118]
+ "IsInArenaTeam", -- [119]
+ "CalculateAuctionDeposit", -- [121]
+ "CanCancelAuction", -- [122]
+ "CancelSell", -- [123]
+ "CanSendAuctionQuery", -- [124]
+ "CancelAuction", -- [125]
+ "ClickAuctionSellItemButton", -- [126]
+ "CloseAuctionHouse", -- [127]
+ "GetAuctionHouseDepositRate", -- [128]
+ "GetAuctionInvTypes", -- [129]
+ "GetAuctionItemClasses", -- [130]
+ "GetAuctionItemInfo", -- [131]
+ "GetAuctionItemLink", -- [132]
+ "GetAuctionItemSubClasses", -- [133]
+ "GetAuctionItemTimeLeft", -- [134]
+ "GetAuctionSellItemInfo", -- [135]
+ "GetBidderAuctionItems", -- [136]
+ "GetNumAuctionItems", -- [137]
+ "GetOwnerAuctionItems", -- [138]
+ "GetSelectedAuctionItem", -- [139]
+ "IsAuctionSortReversed", -- [140]
+ "PlaceAuctionBid", -- [141]
+ "QueryAuctionItems", -- [142]
+ "SetAuctionsTabShowing", -- [143]
+ "SetSelectedAuctionItem", -- [144]
+ "SortAuctionItems", -- [145]
+ "StartAuction", -- [146]
+ "BankButtonIDToInvSlotID", -- [148]
+ "CloseBankFrame", -- [149]
+ "GetBankSlotCost", -- [150]
+ "GetNumBankSlots", -- [151]
+ "PurchaseSlot", -- [152]
+ "AcceptAreaSpiritHeal", -- [154]
+ "AcceptBattlefieldPort", -- [155]
+ "CancelAreaSpiritHeal", -- [156]
+ "CanJoinBattlefieldAsGroup", -- [157]
+ "CheckSpiritHealerDist", -- [158]
+ "GetAreaSpiritHealerTime", -- [159]
+ "GetBattlefieldEstimatedWaitTime", -- [160]
+ "GetBattlefieldFlagPosition", -- [161]
+ "GetBattlefieldInstanceExpiration", -- [162]
+ "GetBattlefieldInstanceRunTime", -- [163]
+ "GetBattlefieldMapIconScale", -- [164]
+ "GetBattlefieldPortExpiration", -- [165]
+ "GetBattlefieldPosition", -- [166]
+ "GetBattlefieldScore", -- [167]
+ "GetBattlefieldStatData", -- [168]
+ "GetBattlefieldStatInfo", -- [169]
+ "GetBattlefieldStatus", -- [170]
+ "GetBattlefieldTimeWaited", -- [171]
+ "GetBattlefieldWinner", -- [172]
+ "GetBattlegroundInfo", -- [173]
+ "GetNumBattlefieldFlagPositions", -- [174]
+ "GetNumBattlefieldPositions", -- [175]
+ "GetNumBattlefieldScores", -- [176]
+ "GetNumBattlefieldStats", -- [177]
+ "GetNumWorldStateUI", -- [178]
+ "GetWintergraspWaitTime", -- [179]
+ "GetWorldStateUIInfo", -- [180]
+ "IsPVPTimerRunning", -- [181]
+ "JoinBattlefield", -- [182]
+ "LeaveBattlefield", -- [183]
+ "ReportPlayerIsPVPAFK", -- [184]
+ "RequestBattlefieldPositions", -- [185]
+ "RequestBattlefieldScoreData", -- [186]
+ "RequestBattlegroundInstanceInfo", -- [187]
+ "SetBattlefieldScoreFaction", -- [188]
+ "GetBinding", -- [190]
+ "GetBindingAction", -- [191]
+ "GetBindingKey", -- [192]
+ "GetBindingText", -- [193]
+ "GetCurrentBindingSet", -- [194]
+ "GetNumBindings", -- [195]
+ "LoadBindings", -- [196]
+ "RunBinding", -- [197]
+ "SaveBindings", -- [198]
+ "SetBinding", -- [199]
+ "SetBindingSpell", -- [200]
+ "SetBindingClick", -- [201]
+ "SetBindingItem", -- [202]
+ "SetBindingMacro", -- [203]
+ "SetConsoleKey", -- [204]
+ "SetOverrideBinding", -- [205]
+ "SetOverrideBindingSpell", -- [206]
+ "SetOverrideBindingClick", -- [207]
+ "SetOverrideBindingItem", -- [208]
+ "SetOverrideBindingMacro", -- [209]
+ "ClearOverrideBindings", -- [210]
+ "SetMouselookOverrideBinding", -- [211]
+ "IsModifierKeyDown", -- [212]
+ "IsModifiedClick", -- [213]
+ "IsMouseButtonDown", -- [214]
+ "CancelUnitBuff", -- [216]
+ "CancelShapeshiftForm", -- [217]
+ "CancelItemTempEnchantment", -- [218]
+ "GetWeaponEnchantInfo", -- [219]
+ "UnitAura", -- [220]
+ "UnitBuff", -- [221]
+ "UnitDebuff", -- [222]
+ "AddChatWindowChannel", -- [224]
+ "ChannelBan", -- [225]
+ "ChannelInvite", -- [226]
+ "ChannelKick", -- [227]
+ "ChannelModerator", -- [228]
+ "ChannelMute", -- [229]
+ "ChannelToggleAnnouncements", -- [230]
+ "ChannelUnban", -- [231]
+ "ChannelUnmoderator", -- [232]
+ "ChannelUnmute", -- [233]
+ "DisplayChannelOwner", -- [234]
+ "DeclineInvite", -- [235]
+ "EnumerateServerChannels", -- [236]
+ "GetChannelList", -- [237]
+ "GetChannelName", -- [238]
+ "GetChatWindowChannels", -- [239]
+ "JoinChannelByName", -- [240]
+ "LeaveChannelByName", -- [241]
+ "ListChannelByName", -- [242]
+ "ListChannels", -- [243]
+ "RemoveChatWindowChannel", -- [244]
+ "SendChatMessage", -- [245]
+ "SetChannelOwner", -- [246]
+ "SetChannelPassword", -- [247]
+ "AcceptResurrect", -- [249]
+ "AcceptXPLoss", -- [250]
+ "CheckBinderDist", -- [251]
+ "ConfirmBinder", -- [252]
+ "DeclineResurrect", -- [253]
+ "DestroyTotem", -- [254]
+ "GetBindLocation", -- [255]
+ "GetComboPoints", -- [256]
+ "GetCorpseRecoveryDelay", -- [257]
+ "GetCurrentTitle", -- [258]
+ "GetMirrorTimerInfo", -- [259]
+ "GetMirrorTimerProgress", -- [260]
+ "GetMoney", -- [261]
+ "GetNumTitles", -- [262]
+ "GetPlayerFacing", -- [263]
+ "GetPVPDesired", -- [264]
+ "GetReleaseTimeRemaining", -- [265]
+ "GetResSicknessDuration", -- [266]
+ "GetRestState", -- [267]
+ "GetRuneCooldown", -- [268]
+ "GetRuneCount", -- [269]
+ "GetRuneType", -- [270]
+ "GetTimeToWellRested", -- [271]
+ "GetTitleName", -- [272]
+ "GetUnitPitch", -- [273]
+ "GetXPExhaustion", -- [274]
+ "HasFullControl", -- [275]
+ "HasSoulstone", -- [276]
+ "IsFalling", -- [277]
+ "IsFlying", -- [278]
+ "IsFlyableArea", -- [279]
+ "IsIndoors", -- [280]
+ "IsMounted", -- [281]
+ "IsOutdoors", -- [282]
+ "IsOutOfBounds", -- [283]
+ "IsResting", -- [284]
+ "IsStealthed", -- [285]
+ "IsSwimming", -- [286]
+ "IsTitleKnown", -- [287]
+ "IsXPUserDisabled", -- [288]
+ "NotWhileDeadError", -- [289]
+ "ResurrectHasSickness", -- [290]
+ "ResurrectHasTimer", -- [291]
+ "ResurrectGetOfferer", -- [292]
+ "RetrieveCorpse", -- [293]
+ "SetCurrentTitle", -- [294]
+ "TargetTotem", -- [295]
+ "GetArmorPenetration", -- [296]
+ "GetAttackPowerForStat", -- [297]
+ "GetAverageItemLevel", -- [298]
+ "GetBlockChance", -- [299]
+ "GetCombatRating", -- [300]
+ "GetCombatRatingBonus", -- [301]
+ "GetCritChance", -- [302]
+ "GetCritChanceFromAgility", -- [303]
+ "GetDodgeChance", -- [304]
+ "GetExpertise", -- [305]
+ "GetExpertisePercent", -- [306]
+ "GetManaRegen", -- [307]
+ "GetMaxCombatRatingBonus", -- [308]
+ "GetParryChance", -- [309]
+ "GetPetSpellBonusDamage", -- [310]
+ "GetPowerRegen", -- [311]
+ "GetSpellBonusDamage", -- [312]
+ "GetRangedCritChance", -- [313]
+ "GetSpellBonusHealing", -- [314]
+ "GetSpellCritChance", -- [315]
+ "GetShieldBlock", -- [316]
+ "GetSpellCritChanceFromIntellect", -- [317]
+ "GetSpellPenetration", -- [318]
+ "AddChatWindowChannel", -- [319]
+ "ChangeChatColor", -- [320]
+ "ChatFrame_AddChannel", -- [321]
+ "ChatFrame_AddMessageEventFilter", -- [322]
+ "ChatFrame_GetMessageEventFilters", -- [323]
+ "ChatFrame_OnHyperlinkShow", -- [324]
+ "ChatFrame_RemoveMessageEventFilter", -- [325]
+ "GetAutoCompleteResults", -- [326]
+ "GetChatTypeIndex", -- [327]
+ "GetChatWindowChannels", -- [328]
+ "GetChatWindowInfo", -- [329]
+ "GetChatWindowMessages", -- [330]
+ "JoinChannelByName", -- [331]
+ "LoggingChat", -- [332]
+ "LoggingCombat", -- [333]
+ "RemoveChatWindowChannel", -- [334]
+ "RemoveChatWindowMessages", -- [335]
+ "SetChatWindowAlpha", -- [336]
+ "SetChatWindowColor", -- [337]
+ "SetChatWindowDocked", -- [338]
+ "SetChatWindowLocked", -- [339]
+ "SetChatWindowName", -- [340]
+ "SetChatWindowShown", -- [341]
+ "SetChatWindowSize", -- [342]
+ "SetChatWindowUninteractable", -- [343]
+ "DoEmote", -- [345]
+ "GetDefaultLanguage", -- [346]
+ "GetLanguageByIndex", -- [347]
+ "GetNumLanguages", -- [348]
+ "GetRegisteredAddonMessagePrefixes", -- [349]
+ "IsAddonMessagePrefixRegistered", -- [350]
+ "RegisterAddonMessagePrefix", -- [352]
+ "SendAddonMessage", -- [353]
+ "SendChatMessage", -- [354]
+ "CallCompanion", -- [356]
+ "DismissCompanion", -- [357]
+ "GetCompanionInfo", -- [358]
+ "GetNumCompanions", -- [359]
+ "GetCompanionCooldown", -- [360]
+ "PickupCompanion", -- [361]
+ "SummonRandomCritter", -- [362]
+ "ContainerIDToInventoryID", -- [364]
+ "GetBagName", -- [365]
+ "GetContainerItemCooldown", -- [366]
+ "GetContainerItemDurability", -- [367]
+ "GetContainerItemGems", -- [368]
+ "GetContainerItemID", -- [369]
+ "GetContainerItemInfo", -- [370]
+ "GetContainerItemLink", -- [371]
+ "GetContainerNumSlots", -- [372]
+ "GetContainerItemQuestInfo", -- [373]
+ "GetContainerNumFreeSlots", -- [374]
+ "OpenAllBags", -- [376]
+ "CloseAllBags", -- [377]
+ "PickupBagFromSlot", -- [378]
+ "PickupContainerItem", -- [379]
+ "PutItemInBackpack", -- [380]
+ "PutItemInBag", -- [381]
+ "PutKeyInKeyRing", -- [382]
+ "SplitContainerItem", -- [383]
+ "ToggleBackpack", -- [384]
+ "ToggleBag", -- [385]
+ "GetCoinText", -- [388]
+ "GetCoinTextureString", -- [389]
+ "GetCurrencyInfo", -- [390]
+ "GetCurrencyListSize", -- [391]
+ "GetCurrencyListInfo", -- [392]
+ "ExpandCurrencyList", -- [393]
+ "SetCurrencyUnused", -- [394]
+ "GetNumWatchedTokens", -- [395]
+ "GetBackpackCurrencyInfo", -- [396]
+ "SetCurrencyBackpack", -- [397]
+ "AutoEquipCursorItem", -- [399]
+ "ClearCursor", -- [400]
+ "CursorCanGoInSlot", -- [401]
+ "CursorHasItem", -- [402]
+ "CursorHasMoney", -- [403]
+ "CursorHasSpell", -- [404]
+ "DeleteCursorItem", -- [405]
+ "DropCursorMoney", -- [406]
+ "DropItemOnUnit", -- [407]
+ "EquipCursorItem", -- [408]
+ "GetCursorInfo", -- [409]
+ "GetCursorPosition", -- [410]
+ "HideRepairCursor", -- [411]
+ "InRepairMode", -- [412]
+ "PickupAction", -- [413]
+ "PickupBagFromSlot", -- [414]
+ "PickupContainerItem", -- [415]
+ "PickupInventoryItem", -- [416]
+ "PickupItem", -- [417]
+ "PickupMacro", -- [418]
+ "PickupMerchantItem", -- [419]
+ "PickupPetAction", -- [420]
+ "PickupSpell", -- [421]
+ "PickupStablePet", -- [422]
+ "PickupTradeMoney", -- [423]
+ "PlaceAction", -- [424]
+ "PutItemInBackpack", -- [425]
+ "PutItemInBag", -- [426]
+ "ResetCursor", -- [427]
+ "SetCursor", -- [428]
+ "ShowContainerSellCursor", -- [429]
+ "ShowInspectCursor", -- [430]
+ "ShowInventorySellCursor", -- [431]
+ "ShowMerchantSellCursor", -- [432]
+ "ShowRepairCursor", -- [433]
+ "SplitContainerItem", -- [434]
+ "GetWeaponEnchantInfo", -- [435]
+ "ReplaceEnchant", -- [436]
+ "ReplaceTradeEnchant", -- [437]
+ "BindEnchant", -- [438]
+ "CollapseFactionHeader", -- [439]
+ "CollapseAllFactionHeaders", -- [440]
+ "ExpandFactionHeader", -- [441]
+ "ExpandAllFactionHeaders", -- [442]
+ "FactionToggleAtWar", -- [443]
+ "GetFactionInfo", -- [444]
+ "GetNumFactions", -- [445]
+ "GetSelectedFaction", -- [446]
+ "GetWatchedFactionInfo", -- [447]
+ "IsFactionInactive", -- [448]
+ "SetFactionActive", -- [449]
+ "SetFactionInactive", -- [450]
+ "SetSelectedFaction", -- [451]
+ "SetWatchedFactionIndex", -- [452]
+ "UnitFactionGroup", -- [453]
+ "CreateFrame", -- [454]
+ "CreateFont", -- [455]
+ "GetFramesRegisteredForEvent", -- [456]
+ "GetNumFrames", -- [457]
+ "EnumerateFrames", -- [458]
+ "GetMouseFocus", -- [459]
+ "ToggleDropDownMenu", -- [460]
+ "UIFrameFadeIn", -- [461]
+ "UIFrameFadeOut", -- [462]
+ "UIFrameFlash", -- [463]
+ "EasyMenu", -- [464]
+ "AddFriend", -- [466]
+ "AddOrRemoveFriend", -- [467]
+ "GetFriendInfo", -- [468]
+ "SetFriendNotes", -- [469]
+ "GetNumFriends", -- [470]
+ "GetSelectedFriend", -- [471]
+ "RemoveFriend", -- [472]
+ "SetSelectedFriend", -- [473]
+ "ShowFriends", -- [474]
+ "ToggleFriendsFrame", -- [475]
+ "GetNumGlyphSockets", -- [477]
+ "GetGlyphSocketInfo", -- [478]
+ "GetGlyphLink", -- [479]
+ "GlyphMatchesSocket", -- [480]
+ "PlaceGlyphInSocket", -- [481]
+ "RemoveGlyphFromSocket", -- [482]
+ "SpellCanTargetGlyph", -- [483]
+ "CanComplainChat", -- [485]
+ "CanComplainInboxItem", -- [486]
+ "ComplainChat", -- [487]
+ "ComplainInboxItem", -- [488]
+ "CloseGossip", -- [501]
+ "ForceGossip", -- [502]
+ "GetGossipActiveQuests", -- [503]
+ "GetGossipAvailableQuests", -- [504]
+ "GetGossipOptions", -- [505]
+ "GetGossipText", -- [506]
+ "GetNumGossipActiveQuests", -- [507]
+ "GetNumGossipAvailableQuests", -- [508]
+ "GetNumGossipOptions", -- [509]
+ "SelectGossipActiveQuest", -- [510]
+ "SelectGossipAvailableQuest", -- [511]
+ "SelectGossipOption", -- [512]
+ "AcceptGroup", -- [514]
+ "ConfirmReadyCheck", -- [515]
+ "ConvertToRaid", -- [516]
+ "DeclineGroup", -- [517]
+ "DoReadyCheck", -- [518]
+ "GetLootMethod", -- [519]
+ "GetLootThreshold", -- [520]
+ "GetMasterLootCandidate", -- [521]
+ "GetNumPartyMembers", -- [522]
+ "GetRealNumPartyMembers", -- [523]
+ "GetPartyLeaderIndex", -- [524]
+ "GetPartyMember", -- [525]
+ "InviteUnit", -- [526]
+ "IsPartyLeader", -- [527]
+ "LeaveParty", -- [528]
+ "PromoteToLeader", -- [529]
+ "SetLootMethod", -- [530]
+ "SetLootThreshold", -- [531]
+ "UninviteUnit", -- [532]
+ "UnitInParty", -- [533]
+ "UnitIsPartyLeader", -- [534]
+ "AcceptGuild", -- [536]
+ "BuyGuildCharter", -- [537]
+ "CanEditGuildEvent", -- [538]
+ "CanEditGuildInfo", -- [539]
+ "CanEditMOTD", -- [540]
+ "CanEditOfficerNote", -- [541]
+ "CanEditPublicNote", -- [542]
+ "CanGuildDemote", -- [543]
+ "CanGuildInvite", -- [544]
+ "CanGuildPromote", -- [545]
+ "CanGuildRemove", -- [546]
+ "CanViewOfficerNote", -- [547]
+ "CloseGuildRegistrar", -- [548]
+ "CloseGuildRoster", -- [549]
+ "CloseTabardCreation", -- [550]
+ "DeclineGuild", -- [551]
+ "GetGuildCharterCost", -- [552]
+ "GetGuildEventInfo", -- [553]
+ "GetGuildInfo", -- [554]
+ "GetGuildInfoText", -- [555]
+ "GetGuildRosterInfo", -- [556]
+ "GetGuildRosterLastOnline", -- [557]
+ "GetGuildRosterMOTD", -- [558]
+ "GetGuildRosterSelection", -- [559]
+ "GetGuildRosterShowOffline", -- [560]
+ "GetNumGuildEvents", -- [561]
+ "GetNumGuildMembers", -- [562]
+ "GetTabardCreationCost", -- [563]
+ "GetTabardInfo", -- [564]
+ "GuildControlAddRank", -- [565]
+ "GuildControlDelRank", -- [566]
+ "GuildControlGetNumRanks", -- [567]
+ "GuildControlGetRankFlags", -- [568]
+ "GuildControlGetRankName", -- [569]
+ "GuildControlSaveRank", -- [570]
+ "GuildControlSetRank", -- [571]
+ "GuildControlSetRankFlag", -- [572]
+ "GuildDemote", -- [573]
+ "GuildDisband", -- [574]
+ "GuildInfo", -- [575]
+ "GuildInvite", -- [576]
+ "GuildLeave", -- [577]
+ "GuildPromote", -- [578]
+ "GuildRoster", -- [579]
+ "GuildRosterSetOfficerNote", -- [580]
+ "GuildRosterSetPublicNote", -- [581]
+ "GuildSetMOTD", -- [582]
+ "GuildSetLeader", -- [583]
+ "GuildUninvite", -- [584]
+ "IsGuildLeader", -- [585]
+ "IsInGuild", -- [586]
+ "QueryGuildEventLog", -- [587]
+ "SetGuildInfoText", -- [588]
+ "SetGuildRosterSelection", -- [589]
+ "SetGuildRosterShowOffline", -- [590]
+ "SortGuildRoster", -- [591]
+ "UnitGetGuildXP", -- [592]
+ "AutoStoreGuildBankItem", -- [593]
+ "BuyGuildBankTab", -- [594]
+ "CanGuildBankRepair", -- [595]
+ "CanWithdrawGuildBankMoney", -- [596]
+ "CloseGuildBankFrame", -- [597]
+ "DepositGuildBankMoney", -- [598]
+ "GetCurrentGuildBankTab", -- [599]
+ "GetGuildBankItemInfo", -- [600]
+ "GetGuildBankItemLink", -- [601]
+ "GetGuildBankMoney", -- [602]
+ "GetGuildBankMoneyTransaction", -- [603]
+ "GetGuildBankTabCost", -- [604]
+ "GetGuildBankTabInfo", -- [605]
+ "GetGuildBankTabPermissions", -- [606]
+ "GetGuildBankText", -- [607]
+ "GetGuildBankTransaction", -- [608]
+ "GetGuildTabardFileNames", -- [611]
+ "GetNumGuildBankMoneyTransactions", -- [612]
+ "GetNumGuildBankTabs", -- [613]
+ "GetNumGuildBankTransactions", -- [614]
+ "PickupGuildBankItem", -- [615]
+ "PickupGuildBankMoney", -- [616]
+ "QueryGuildBankLog", -- [617]
+ "QueryGuildBankTab", -- [618]
+ "SetCurrentGuildBankTab", -- [619]
+ "SetGuildBankTabInfo", -- [620]
+ "SetGuildBankTabPermissions", -- [621]
+ "SplitGuildBankItem", -- [624]
+ "WithdrawGuildBankMoney", -- [625]
+ "GetHolidayBGHonorCurrencyBonuses", -- [627]
+ "GetInspectHonorData", -- [628]
+ "GetPVPLifetimeStats", -- [629]
+ "GetPVPRankInfo", -- [630]
+ "GetPVPRankProgress", -- [631]
+ "GetPVPSessionStats", -- [632]
+ "GetPVPYesterdayStats", -- [633]
+ "GetRandomBGHonorCurrencyBonuses", -- [634]
+ "HasInspectHonorData", -- [635]
+ "RequestInspectHonorData", -- [636]
+ "UnitPVPName", -- [637]
+ "UnitPVPRank", -- [638]
+ "AddIgnore", -- [640]
+ "AddOrDelIgnore", -- [641]
+ "DelIgnore", -- [642]
+ "GetIgnoreName", -- [643]
+ "GetNumIgnores", -- [644]
+ "GetSelectedIgnore", -- [645]
+ "SetSelectedIgnore", -- [646]
+ "CanInspect", -- [648]
+ "CheckInteractDistance", -- [649]
+ "ClearInspectPlayer", -- [650]
+ "GetInspectArenaTeamData", -- [651]
+ "HasInspectHonorData", -- [652]
+ "RequestInspectHonorData", -- [653]
+ "GetInspectHonorData", -- [654]
+ "NotifyInspect", -- [655]
+ "InspectUnit", -- [656]
+ "CanShowResetInstances", -- [658]
+ "GetBattlefieldInstanceExpiration", -- [659]
+ "GetBattlefieldInstanceInfo", -- [660]
+ "GetBattlefieldInstanceRunTime", -- [661]
+ "GetInstanceBootTimeRemaining", -- [662]
+ "GetInstanceInfo", -- [663]
+ "GetNumSavedInstances", -- [664]
+ "GetSavedInstanceInfo", -- [665]
+ "IsInInstance", -- [666]
+ "ResetInstances", -- [667]
+ "GetDungeonDifficulty", -- [668]
+ "SetDungeonDifficulty", -- [669]
+ "GetInstanceDifficulty", -- [670]
+ "GetInstanceLockTimeRemaining", -- [671]
+ "GetInstanceLockTimeRemainingEncounter", -- [672]
+ "AutoEquipCursorItem", -- [674]
+ "BankButtonIDToInvSlotID", -- [675]
+ "CancelPendingEquip", -- [676]
+ "ConfirmBindOnUse", -- [677]
+ "ContainerIDToInventoryID", -- [678]
+ "CursorCanGoInSlot", -- [679]
+ "EquipCursorItem", -- [680]
+ "EquipPendingItem", -- [681]
+ "GetInventoryAlertStatus", -- [682]
+ "GetInventoryItemBroken", -- [683]
+ "GetInventoryItemCooldown", -- [684]
+ "GetInventoryItemCount", -- [685]
+ "GetInventoryItemDurability", -- [686]
+ "GetInventoryItemGems", -- [687]
+ "GetInventoryItemID", -- [688]
+ "GetInventoryItemLink", -- [689]
+ "GetInventoryItemQuality", -- [690]
+ "GetInventoryItemTexture", -- [691]
+ "GetInventorySlotInfo", -- [692]
+ "GetWeaponEnchantInfo", -- [693]
+ "HasWandEquipped", -- [694]
+ "IsInventoryItemLocked", -- [695]
+ "KeyRingButtonIDToInvSlotID", -- [696]
+ "PickupBagFromSlot", -- [697]
+ "PickupInventoryItem", -- [698]
+ "UpdateInventoryAlertStatus", -- [699]
+ "UseInventoryItem", -- [700]
+ "EquipItemByName", -- [702]
+ "GetAuctionItemLink", -- [703]
+ "GetContainerItemLink", -- [704]
+ "GetItemCooldown", -- [705]
+ "GetItemCount", -- [706]
+ "GetItemFamily", -- [707]
+ "GetItemIcon", -- [708]
+ "GetItemInfo", -- [709]
+ "GetItemQualityColor", -- [710]
+ "GetItemSpell", -- [711]
+ "GetItemStats", -- [712]
+ "GetMerchantItemLink", -- [713]
+ "GetQuestItemLink", -- [714]
+ "GetQuestLogItemLink", -- [715]
+ "GetTradePlayerItemLink", -- [716]
+ "GetTradeSkillItemLink", -- [717]
+ "GetTradeSkillReagentItemLink", -- [718]
+ "GetTradeTargetItemLink", -- [719]
+ "IsUsableItem", -- [720]
+ "IsConsumableItem", -- [721]
+ "IsCurrentItem", -- [722]
+ "IsEquippedItem", -- [723]
+ "IsEquippableItem", -- [724]
+ "IsEquippedItemType", -- [725]
+ "IsItemInRange", -- [726]
+ "ItemHasRange", -- [727]
+ "OffhandHasWeapon", -- [728]
+ "SplitContainerItem", -- [729]
+ "SetItemRef", -- [730]
+ "AcceptSockets", -- [731]
+ "ClickSocketButton", -- [732]
+ "CloseSocketInfo", -- [733]
+ "GetSocketItemInfo", -- [734]
+ "GetSocketItemRefundable", -- [735]
+ "GetSocketItemBoundTradeable", -- [736]
+ "GetNumSockets", -- [737]
+ "GetSocketTypes", -- [738]
+ "GetExistingSocketInfo", -- [739]
+ "GetExistingSocketLink", -- [740]
+ "GetNewSocketInfo", -- [741]
+ "GetNewSocketLink", -- [742]
+ "SocketInventoryItem", -- [743]
+ "SocketContainerItem", -- [744]
+ "CloseItemText", -- [745]
+ "ItemTextGetCreator", -- [746]
+ "ItemTextGetItem", -- [747]
+ "ItemTextGetMaterial", -- [748]
+ "ItemTextGetPage", -- [749]
+ "ItemTextGetText", -- [750]
+ "ItemTextHasNextPage", -- [751]
+ "ItemTextNextPage", -- [752]
+ "ItemTextPrevPage", -- [753]
+ "GetMinimapZoneText", -- [755]
+ "GetRealZoneText", -- [756]
+ "GetSubZoneText", -- [757]
+ "GetZonePVPInfo", -- [758]
+ "GetZoneText", -- [759]
+ "CompleteLFGRoleCheck", -- [760]
+ "GetLFGDeserterExpiration", -- [761]
+ "GetLFGRandomCooldownExpiration", -- [762]
+ "GetLFGBootProposal", -- [763]
+ "GetLFGMode", -- [764]
+ "GetLFGQueueStats", -- [765]
+ "GetLFGRoles", -- [766]
+ "GetLFGRoleUpdate", -- [767]
+ "GetLFGRoleUpdateSlot", -- [768]
+ "SetLFGBootVote", -- [769]
+ "SetLFGComment", -- [770]
+ "SetLFGRoles", -- [771]
+ "UninviteUnit", -- [772]
+ "UnitGroupRolesAssigned", -- [773]
+ "UnitHasLFGDeserter", -- [774]
+ "UnitHasLFGRandomCooldown", -- [775]
+ "CloseLoot", -- [777]
+ "ConfirmBindOnUse", -- [778]
+ "ConfirmLootRoll", -- [779]
+ "ConfirmLootSlot", -- [780]
+ "GetLootMethod", -- [781]
+ "GetLootRollItemInfo", -- [782]
+ "GetLootRollItemLink", -- [783]
+ "GetLootRollTimeLeft", -- [784]
+ "GetLootSlotInfo", -- [785]
+ "GetLootSlotLink", -- [786]
+ "GetLootThreshold", -- [787]
+ "GetMasterLootCandidate", -- [788]
+ "GetNumLootItems", -- [789]
+ "GetOptOutOfLoot", -- [790]
+ "GiveMasterLoot", -- [791]
+ "IsFishingLoot", -- [792]
+ "LootSlot", -- [793]
+ "LootSlotIsCoin", -- [794]
+ "LootSlotIsCurrency", -- [795]
+ "LootSlotIsItem", -- [796]
+ "RollOnLoot", -- [797]
+ "SetLootMethod", -- [798]
+ "SetLootPortrait", -- [799]
+ "SetLootThreshold", -- [800]
+ "SetOptOutOfLoot", -- [801]
+ "CursorHasMacro", -- [804]
+ "DeleteMacro", -- [805]
+ "GetMacroBody", -- [807]
+ "GetMacroIconInfo", -- [808]
+ "GetMacroItemIconInfo", -- [809]
+ "GetMacroIndexByName", -- [810]
+ "GetMacroInfo", -- [811]
+ "GetNumMacroIcons", -- [812]
+ "GetNumMacroItemIcons", -- [813]
+ "GetNumMacros", -- [814]
+ "PickupMacro", -- [815]
+ "RunMacro", -- [816]
+ "RunMacroText", -- [817]
+ "SecureCmdOptionParse", -- [818]
+ "StopMacro", -- [819]
+ "AutoLootMailItem", -- [821]
+ "CheckInbox", -- [822]
+ "ClearSendMail", -- [823]
+ "ClickSendMailItemButton", -- [824]
+ "CloseMail", -- [825]
+ "DeleteInboxItem", -- [826]
+ "GetCoinIcon", -- [827]
+ "GetInboxHeaderInfo", -- [828]
+ "GetInboxItem", -- [829]
+ "GetInboxItemLink", -- [830]
+ "GetInboxNumItems", -- [831]
+ "GetInboxText", -- [832]
+ "GetInboxInvoiceInfo", -- [833]
+ "GetNumPackages", -- [834]
+ "GetNumStationeries", -- [835]
+ "GetPackageInfo", -- [836]
+ "GetSelectedStationeryTexture", -- [837]
+ "GetSendMailCOD", -- [838]
+ "GetSendMailItem", -- [839]
+ "GetSendMailItemLink", -- [840]
+ "GetSendMailMoney", -- [841]
+ "GetSendMailPrice", -- [842]
+ "GetStationeryInfo", -- [843]
+ "HasNewMail", -- [844]
+ "InboxItemCanDelete", -- [845]
+ "ReturnInboxItem", -- [846]
+ "SelectPackage", -- [847]
+ "SelectStationery", -- [848]
+ "SendMail", -- [849]
+ "SetSendMailCOD", -- [850]
+ "SetSendMailMoney", -- [851]
+ "TakeInboxItem", -- [852]
+ "TakeInboxMoney", -- [853]
+ "TakeInboxTextItem", -- [854]
+ "ClickLandmark", -- [856]
+ "GetCorpseMapPosition", -- [857]
+ "GetCurrentMapContinent", -- [858]
+ "GetCurrentMapDungeonLevel", -- [859]
+ "GetNumDungeonMapLevels", -- [860]
+ "GetCurrentMapAreaID", -- [861]
+ "GetCurrentMapZone", -- [862]
+ "GetMapContinents", -- [863]
+ "GetMapDebugObjectInfo", -- [864]
+ "GetMapInfo", -- [865]
+ "GetMapLandmarkInfo", -- [866]
+ "GetMapOverlayInfo", -- [867]
+ "GetMapZones", -- [868]
+ "GetNumMapDebugObjects", -- [869]
+ "GetNumMapLandmarks", -- [870]
+ "GetNumMapOverlays", -- [871]
+ "GetPlayerMapPosition", -- [872]
+ "ProcessMapClick", -- [873]
+ "RequestBattlefieldPositions", -- [874]
+ "SetDungeonMapLevel", -- [875]
+ "SetMapByID", -- [876]
+ "SetMapToCurrentZone", -- [877]
+ "SetMapZoom", -- [878]
+ "SetupFullscreenScale", -- [879]
+ "UpdateMapHighlight", -- [880]
+ "CreateWorldMapArrowFrame", -- [881]
+ "UpdateWorldMapArrowFrames", -- [882]
+ "ShowWorldMapArrowFrame", -- [883]
+ "PositionWorldMapArrowFrame", -- [884]
+ "ZoomOut", -- [885]
+ "BuyMerchantItem", -- [887]
+ "BuybackItem", -- [888]
+ "CanMerchantRepair", -- [889]
+ "CloseMerchant", -- [890]
+ "GetBuybackItemInfo", -- [891]
+ "GetBuybackItemLink", -- [892]
+ "GetMerchantItemCostInfo", -- [893]
+ "GetMerchantItemCostItem", -- [894]
+ "GetMerchantItemInfo", -- [895]
+ "GetMerchantItemLink", -- [896]
+ "GetMerchantItemMaxStack", -- [897]
+ "GetMerchantNumItems", -- [898]
+ "GetRepairAllCost", -- [899]
+ "HideRepairCursor", -- [900]
+ "InRepairMode", -- [901]
+ "PickupMerchantItem", -- [902]
+ "RepairAllItems", -- [903]
+ "ShowMerchantSellCursor", -- [904]
+ "ShowRepairCursor", -- [905]
+ "GetNumBuybackItems", -- [906]
+ "CastPetAction", -- [908]
+ "ClosePetStables", -- [909]
+ "DropItemOnUnit", -- [910]
+ "GetPetActionCooldown", -- [911]
+ "GetPetActionInfo", -- [912]
+ "GetPetActionSlotUsable", -- [913]
+ "GetPetActionsUsable", -- [914]
+ "GetPetExperience", -- [915]
+ "GetPetFoodTypes", -- [916]
+ "GetPetHappiness", -- [917]
+ "GetPetIcon", -- [918]
+ "GetPetTimeRemaining", -- [919]
+ "GetStablePetFoodTypes", -- [920]
+ "GetStablePetInfo", -- [921]
+ "HasPetSpells", -- [922]
+ "HasPetUI", -- [923]
+ "PetAbandon", -- [924]
+ "PetAggressiveMode", -- [925]
+ "PetAttack", -- [926]
+ "IsPetAttackActive", -- [927]
+ "PetStopAttack", -- [928]
+ "PetCanBeAbandoned", -- [929]
+ "PetCanBeDismissed", -- [930]
+ "PetCanBeRenamed", -- [931]
+ "PetDefensiveMode", -- [932]
+ "PetDismiss", -- [933]
+ "PetFollow", -- [934]
+ "PetHasActionBar", -- [935]
+ "PetPassiveMode", -- [936]
+ "PetRename", -- [937]
+ "PetWait", -- [938]
+ "PickupPetAction", -- [939]
+ "PickupStablePet", -- [940]
+ "SetPetStablePaperdoll", -- [941]
+ "TogglePetAutocast", -- [942]
+ "ToggleSpellAutocast", -- [943]
+ "GetSpellAutocast", -- [944]
+ "AddQuestWatch", -- [946]
+ "GetActiveLevel", -- [947]
+ "GetActiveTitle", -- [948]
+ "GetAvailableLevel", -- [949]
+ "GetAvailableTitle", -- [950]
+ "GetAvailableQuestInfo", -- [951]
+ "GetGreetingText", -- [952]
+ "GetNumQuestLeaderBoards", -- [953]
+ "GetNumQuestWatches", -- [954]
+ "GetObjectiveText", -- [955]
+ "GetProgressText", -- [956]
+ "GetQuestGreenRange", -- [957]
+ "GetQuestIndexForWatch", -- [958]
+ "GetQuestLink", -- [959]
+ "GetQuestLogGroupNum", -- [960]
+ "GetQuestLogLeaderBoard", -- [961]
+ "GetQuestLogTitle", -- [962]
+ "GetQuestReward", -- [963]
+ "GetRewardArenaPoints", -- [964]
+ "GetRewardHonor", -- [965]
+ "GetRewardMoney", -- [966]
+ "GetRewardSpell", -- [967]
+ "GetRewardTalents", -- [968]
+ "GetRewardText", -- [969]
+ "GetRewardTitle", -- [970]
+ "GetRewardXP", -- [971]
+ "IsQuestWatched", -- [972]
+ "IsUnitOnQuest", -- [973]
+ "QuestFlagsPVP", -- [974]
+ "QuestGetAutoAccept", -- [975]
+ "RemoveQuestWatch", -- [976]
+ "ShiftQuestWatches", -- [977]
+ "SortQuestWatches", -- [978]
+ "QueryQuestsCompleted", -- [979]
+ "GetQuestsCompleted", -- [980]
+ "QuestIsDaily", -- [981]
+ "QuestIsWeekly", -- [982]
+ "ClearRaidMarker", -- [984]
+ "ConvertToRaid", -- [985]
+ "ConvertToParty", -- [986]
+ "DemoteAssistant", -- [987]
+ "GetAllowLowLevelRaid", -- [988]
+ "GetNumRaidMembers", -- [989]
+ "GetRealNumRaidMembers", -- [990]
+ "GetPartyAssignment", -- [991]
+ "GetPartyAssignment", -- [992]
+ "GetRaidRosterInfo", -- [993]
+ "GetRaidTargetIndex", -- [994]
+ "GetReadyCheckStatus", -- [995]
+ "InitiateRolePoll", -- [996]
+ "IsRaidLeader", -- [997]
+ "IsRaidOfficer", -- [998]
+ "PlaceRaidMarker", -- [999]
+ "PromoteToAssistant", -- [1000]
+ "RequestRaidInfo", -- [1001]
+ "SetPartyAssignment", -- [1002]
+ "SetAllowLowLevelRaid", -- [1003]
+ "SetRaidRosterSelection", -- [1004]
+ "SetRaidSubgroup", -- [1005]
+ "SwapRaidSubgroup", -- [1006]
+ "SetRaidTarget", -- [1007]
+ "UnitInRaid", -- [1008]
+ "LFGGetDungeonInfoByID", -- [1009]
+ "GetInstanceLockTimeRemainingEncounter", -- [1010]
+ "RefreshLFGList", -- [1011]
+ "SearchLFGGetEncounterResults", -- [1012]
+ "SearchLFGGetJoinedID", -- [1013]
+ "SearchLFGGetNumResults", -- [1014]
+ "SearchLFGGetPartyResults", -- [1015]
+ "SearchLFGGetResults", -- [1016]
+ "SearchLFGJoin", -- [1017]
+ "SearchLFGLeave", -- [1018]
+ "SearchLFGSort", -- [1019]
+ "SetLFGComment", -- [1020]
+ "ClearAllLFGDungeons", -- [1021]
+ "JoinLFG", -- [1022]
+ "LeaveLFG", -- [1023]
+ "RequestLFDPartyLockInfo", -- [1024]
+ "RequestLFDPlayerLockInfo", -- [1025]
+ "SetLFGDungeon", -- [1026]
+ "SetLFGDungeonEnabled", -- [1027]
+ "SetLFGHeaderCollapsed", -- [1028]
+ "GetAddOnCPUUsage", -- [1029]
+ "GetAddOnMemoryUsage", -- [1030]
+ "GetEventCPUUsage", -- [1031]
+ "GetFrameCPUUsage", -- [1032]
+ "GetFunctionCPUUsage", -- [1033]
+ "GetScriptCPUUsage", -- [1034]
+ "ResetCPUUsage", -- [1035]
+ "UpdateAddOnCPUUsage", -- [1036]
+ "UpdateAddOnMemoryUsage", -- [1037]
+ "issecure", -- [1038]
+ "forceinsecure", -- [1039]
+ "issecurevariable", -- [1040]
+ "securecall", -- [1041]
+ "hooksecurefunc", -- [1042]
+ "InCombatLockdown", -- [1043]
+ "CombatTextSetActiveUnit", -- [1046]
+ "DownloadSettings", -- [1047]
+ "GetCVar", -- [1048]
+ "GetCVarDefault", -- [1049]
+ "GetCVarBool", -- [1050]
+ "GetCVarInfo", -- [1051]
+ "GetCurrentMultisampleFormat", -- [1052]
+ "GetCurrentResolution", -- [1053]
+ "GetGamma", -- [1054]
+ "GetMultisampleFormats", -- [1055]
+ "GetRefreshRates", -- [1056]
+ "GetScreenResolutions", -- [1057]
+ "GetVideoCaps", -- [1058]
+ "IsThreatWarningEnabled", -- [1059]
+ "RegisterCVar", -- [1060]
+ "ResetPerformanceValues", -- [1061]
+ "ResetTutorials", -- [1062]
+ "SetCVar", -- [1063]
+ "SetEuropeanNumbers", -- [1064]
+ "SetGamma", -- [1065]
+ "SetLayoutMode", -- [1066]
+ "SetMultisampleFormat", -- [1067]
+ "SetScreenResolution", -- [1068]
+ "ShowCloak", -- [1069]
+ "ShowHelm", -- [1070]
+ "ShowNumericThreat", -- [1071]
+ "ShowingCloak", -- [1072]
+ "ShowingHelm", -- [1073]
+ "UploadSettings", -- [1074]
+ "AbandonSkill", -- [1076]
+ "CastShapeshiftForm", -- [1078]
+ "CastSpell", -- [1079]
+ "CastSpellByName", -- [1080]
+ "GetMultiCastTotemSpells", -- [1081]
+ "GetNumShapeshiftForms", -- [1082]
+ "GetNumSpellTabs", -- [1083]
+ "GetShapeshiftForm", -- [1084]
+ "GetShapeshiftFormCooldown", -- [1085]
+ "GetShapeshiftFormInfo", -- [1086]
+ "GetSpellAutocast", -- [1087]
+ "GetSpellBookItemInfo", -- [1088]
+ "GetSpellBookItemName", -- [1089]
+ "GetSpellCooldown", -- [1090]
+ "GetSpellDescription", -- [1091]
+ "GetSpellInfo", -- [1092]
+ "GetSpellLink", -- [1093]
+ "GetSpellTabInfo", -- [1094]
+ "GetSpellTexture", -- [1095]
+ "GetTotemInfo", -- [1096]
+ "IsAttackSpell", -- [1097]
+ "IsAutoRepeatSpell", -- [1098]
+ "IsPassiveSpell", -- [1099]
+ "IsSpellInRange", -- [1100]
+ "IsUsableSpell", -- [1101]
+ "PickupSpell", -- [1102]
+ "QueryCastSequence", -- [1103]
+ "SetMultiCastSpell", -- [1104]
+ "SpellCanTargetUnit", -- [1105]
+ "SpellHasRange", -- [1106]
+ "SpellIsTargeting", -- [1107]
+ "SpellStopCasting", -- [1108]
+ "SpellStopTargeting", -- [1109]
+ "SpellTargetUnit", -- [1110]
+ "ToggleSpellAutocast", -- [1111]
+ "UnitCastingInfo", -- [1112]
+ "UnitChannelInfo", -- [1113]
+ "ConsoleExec", -- [1115]
+ "DetectWowMouse", -- [1116]
+ "GetBuildInfo", -- [1117]
+ "geterrorhandler", -- [1118]
+ "GetCurrentKeyBoardFocus", -- [1119]
+ "GetExistingLocales", -- [1120]
+ "GetFramerate", -- [1121]
+ "GetGameTime", -- [1122]
+ "GetLocale", -- [1123]
+ "GetCursorPosition", -- [1124]
+ "GetNetStats", -- [1125]
+ "GetRealmName", -- [1126]
+ "GetScreenHeight", -- [1127]
+ "GetScreenWidth", -- [1128]
+ "GetText", -- [1129]
+ "GetTime", -- [1130]
+ "IsAltKeyDown", -- [1131]
+ "InCinematic", -- [1132]
+ "IsControlKeyDown", -- [1133]
+ "IsDebugBuild", -- [1134]
+ "IsDesaturateSupported", -- [1135]
+ "IsLeftAltKeyDown", -- [1136]
+ "IsLeftControlKeyDown", -- [1137]
+ "IsLeftShiftKeyDown", -- [1138]
+ "IsLinuxClient", -- [1139]
+ "IsLoggedIn", -- [1140]
+ "IsMacClient", -- [1141]
+ "IsRightAltKeyDown", -- [1142]
+ "IsRightControlKeyDown", -- [1143]
+ "IsRightShiftKeyDown", -- [1144]
+ "IsShiftKeyDown", -- [1145]
+ "IsStereoVideoAvailable", -- [1146]
+ "IsWindowsClient", -- [1147]
+ "OpeningCinematic", -- [1148]
+ "PlayMusic", -- [1149]
+ "PlaySound", -- [1150]
+ "PlaySoundFile", -- [1151]
+ "ReloadUI", -- [1152]
+ "RepopMe", -- [1153]
+ "RequestTimePlayed", -- [1154]
+ "RestartGx", -- [1155]
+ "RunScript", -- [1156]
+ "Screenshot", -- [1157]
+ "SetAutoDeclineGuildInvites", -- [1158]
+ "seterrorhandler", -- [1159]
+ "StopCinematic", -- [1160]
+ "StopMusic", -- [1161]
+ "UIParentLoadAddOn", -- [1162]
+ "TakeScreenshot", -- [1163]
+ "BuyTrainerService", -- [1168]
+ "CheckTalentMasterDist", -- [1169]
+ "ConfirmTalentWipe", -- [1170]
+ "GetActiveTalentGroup", -- [1171]
+ "GetNumTalentTabs", -- [1172]
+ "GetNumTalents", -- [1173]
+ "GetTalentInfo", -- [1174]
+ "GetTalentLink", -- [1175]
+ "GetTalentPrereqs", -- [1176]
+ "GetTalentTabInfo", -- [1177]
+ "LearnTalent", -- [1178]
+ "SetActiveTalentGroup", -- [1179]
+ "GetNumTalentGroups", -- [1180]
+ "GetActiveTalentGroup", -- [1181]
+ "AddPreviewTalentPoints", -- [1182]
+ "GetGroupPreviewTalentPointsSpent", -- [1183]
+ "GetPreviewTalentPointsSpent", -- [1184]
+ "GetUnspentTalentPoints", -- [1185]
+ "LearnPreviewTalents", -- [1186]
+ "ResetGroupPreviewTalentPoints", -- [1187]
+ "ResetPreviewTalentPoints", -- [1188]
+ "AssistUnit", -- [1190]
+ "AttackTarget", -- [1191]
+ "ClearTarget", -- [1192]
+ "ClickTargetTradeButton", -- [1193]
+ "TargetLastEnemy", -- [1194]
+ "TargetLastTarget", -- [1195]
+ "TargetNearestEnemy", -- [1196]
+ "TargetNearestEnemyPlayer", -- [1197]
+ "TargetNearestFriend", -- [1198]
+ "TargetNearestFriendPlayer", -- [1199]
+ "TargetNearestPartyMember", -- [1200]
+ "TargetNearestRaidMember", -- [1201]
+ "TargetUnit", -- [1202]
+ "ToggleBackpack", -- [1204]
+ "ToggleBag", -- [1205]
+ "ToggleCharacter", -- [1206]
+ "ToggleFriendsFrame", -- [1207]
+ "ToggleSpellBook", -- [1208]
+ "TradeSkill", -- [1209]
+ "CloseTradeSkill", -- [1210]
+ "CollapseTradeSkillSubClass", -- [1211]
+ "PickupPlayerMoney", -- [1212]
+ "PickupTradeMoney", -- [1213]
+ "SetTradeMoney", -- [1214]
+ "ReplaceTradeEnchant", -- [1215]
+ "AssistUnit", -- [1217]
+ "CheckInteractDistance", -- [1218]
+ "DropItemOnUnit", -- [1219]
+ "FollowUnit", -- [1220]
+ "FocusUnit", -- [1221]
+ "ClearFocus", -- [1222]
+ "GetUnitName", -- [1223]
+ "GetUnitPitch", -- [1224]
+ "GetUnitSpeed", -- [1225]
+ "InviteUnit", -- [1226]
+ "IsUnitOnQuest", -- [1227]
+ "SpellCanTargetUnit", -- [1228]
+ "SpellTargetUnit", -- [1229]
+ "TargetUnit", -- [1230]
+ "UnitAffectingCombat", -- [1231]
+ "UnitArmor", -- [1232]
+ "UnitAttackBothHands", -- [1233]
+ "UnitAttackPower", -- [1234]
+ "UnitAttackSpeed", -- [1235]
+ "UnitAura", -- [1236]
+ "UnitBuff", -- [1237]
+ "UnitCanAssist", -- [1238]
+ "UnitCanAttack", -- [1239]
+ "UnitCanCooperate", -- [1240]
+ "UnitClass", -- [1241]
+ "UnitClassification", -- [1242]
+ "UnitCreatureFamily", -- [1243]
+ "UnitCreatureType", -- [1244]
+ "UnitDamage", -- [1245]
+ "UnitDebuff", -- [1246]
+ "UnitDefense", -- [1247]
+ "UnitDetailedThreatSituation", -- [1248]
+ "UnitExists", -- [1249]
+ "UnitFactionGroup", -- [1250]
+ "UnitGroupRolesAssigned", -- [1251]
+ "UnitGUID", -- [1252]
+ "GetPlayerInfoByGUID", -- [1253]
+ "UnitHasLFGDeserter", -- [1254]
+ "UnitHasLFGRandomCooldown", -- [1255]
+ "UnitHasRelicSlot", -- [1256]
+ "UnitHealth", -- [1257]
+ "UnitHealthMax", -- [1258]
+ "UnitInParty", -- [1259]
+ "UnitInRaid", -- [1260]
+ "UnitInBattleground", -- [1261]
+ "UnitIsInMyGuild", -- [1262]
+ "UnitInRange", -- [1263]
+ "UnitIsAFK", -- [1264]
+ "UnitIsCharmed", -- [1265]
+ "UnitIsConnected", -- [1266]
+ "UnitIsCorpse", -- [1267]
+ "UnitIsDead", -- [1268]
+ "UnitIsDeadOrGhost", -- [1269]
+ "UnitIsDND", -- [1270]
+ "UnitIsEnemy", -- [1271]
+ "UnitIsFeignDeath", -- [1272]
+ "UnitIsFriend", -- [1273]
+ "UnitIsGhost", -- [1274]
+ "UnitIsPVP", -- [1275]
+ "UnitIsPVPFreeForAll", -- [1276]
+ "UnitIsPVPSanctuary", -- [1277]
+ "UnitIsPartyLeader", -- [1278]
+ "UnitIsPlayer", -- [1279]
+ "UnitIsPossessed", -- [1280]
+ "UnitIsRaidOfficer", -- [1281]
+ "UnitIsSameServer", -- [1282]
+ "UnitIsTapped", -- [1283]
+ "UnitIsTappedByPlayer", -- [1284]
+ "UnitIsTappedByAllThreatList", -- [1285]
+ "UnitIsTrivial", -- [1286]
+ "UnitIsUnit", -- [1287]
+ "UnitIsVisible", -- [1288]
+ "UnitLevel", -- [1289]
+ "UnitMana", -- [1290]
+ "UnitManaMax", -- [1291]
+ "UnitName", -- [1292]
+ "UnitOnTaxi", -- [1293]
+ "UnitPlayerControlled", -- [1294]
+ "UnitPlayerOrPetInParty", -- [1295]
+ "UnitPlayerOrPetInRaid", -- [1296]
+ "UnitPVPName", -- [1297]
+ "UnitPVPRank", -- [1298]
+ "UnitPower", -- [1299]
+ "UnitPowerMax", -- [1300]
+ "UnitPowerType", -- [1301]
+ "UnitRace", -- [1302]
+ "UnitRangedAttack", -- [1303]
+ "UnitRangedAttackPower", -- [1304]
+ "UnitRangedDamage", -- [1305]
+ "UnitReaction", -- [1306]
+ "UnitResistance", -- [1307]
+ "UnitSelectionColor", -- [1308]
+ "UnitSex", -- [1309]
+ "UnitStat", -- [1310]
+ "UnitThreatSituation", -- [1311]
+ "UnitUsingVehicle", -- [1312]
+ "GetThreatStatusColor", -- [1313]
+ "UnitXP", -- [1314]
+ "UnitXPMax", -- [1315]
+ "SetPortraitTexture", -- [1316]
+ "SetPortraitToTexture", -- [1317]
+ "tinsert", -- [1318]
+}
+
+-- endp
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/textentry.xml
--- a/Libs/DF/textentry.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/textentry.xml Fri Jul 20 19:04:12 2018 -0300
@@ -59,4 +59,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/DF/tutorial_alert.xml
--- a/Libs/DF/tutorial_alert.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/DF/tutorial_alert.xml Fri Jul 20 19:04:12 2018 -0300
@@ -244,4 +244,4 @@
-
\ No newline at end of file
+
diff -r b1c62eed8999 -r 0682d738499b Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua
--- a/Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/LibDBIcon-1.0/LibDBIcon-1.0.lua Fri Jul 20 19:04:12 2018 -0300
@@ -1,39 +1,12 @@
---[[
-Name: DBIcon-1.0
-Revision: $Rev: 34 $
-Author(s): Rabbit (rabbit.magtheridon@gmail.com)
-Description: Allows addons to register to recieve a lightweight minimap icon as an alternative to more heavy LDB displays.
-Dependencies: LibStub
-License: GPL v2 or later.
-]]
-
---[[
-Copyright (C) 2008-2011 Rabbit
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-]]
-----------------------------------------------------------------------
--- DBIcon-1.0
+-- LibDBIcon-1.0
--
--- Disclaimer: Most of this code was ripped from Barrel but fixed, streamlined
--- and cleaned up a lot so that it no longer sucks.
+-- Allows addons to easily create a lightweight minimap icon as an alternative to heavier LDB displays.
--
local DBICON10 = "LibDBIcon-1.0"
-local DBICON10_MINOR = tonumber(("$Rev: 34 $"):match("(%d+)"))
+local DBICON10_MINOR = 36 -- Bump on changes
if not LibStub then error(DBICON10 .. " requires LibStub.") end
local ldb = LibStub("LibDataBroker-1.1", true)
if not ldb then error(DBICON10 .. " requires LibDataBroker-1.1.") end
@@ -45,8 +18,9 @@
lib.callbackRegistered = lib.callbackRegistered or nil
lib.callbacks = lib.callbacks or LibStub("CallbackHandler-1.0"):New(lib)
lib.notCreated = lib.notCreated or {}
+lib.tooltip = lib.tooltip or CreateFrame("GameTooltip", "LibDBIconTooltip", UIParent, "GameTooltipTemplate")
-function lib:IconCallback(event, name, key, value, dataobj)
+function lib:IconCallback(event, name, key, value)
if lib.objects[name] then
if key == "icon" then
lib.objects[name].icon:SetTexture(value)
@@ -73,7 +47,6 @@
lib.callbackRegistered = true
end
--- Tooltip code ripped from StatBlockCore by Funkydude
local function getAnchors(frame)
local x, y = frame:GetCenter()
if not x or not y then return "CENTER" end
@@ -86,10 +59,10 @@
if self.isMoving then return end
local obj = self.dataObject
if obj.OnTooltipShow then
- GameTooltip:SetOwner(self, "ANCHOR_NONE")
- GameTooltip:SetPoint(getAnchors(self))
- obj.OnTooltipShow(GameTooltip)
- GameTooltip:Show()
+ lib.tooltip:SetOwner(self, "ANCHOR_NONE")
+ lib.tooltip:SetPoint(getAnchors(self))
+ obj.OnTooltipShow(lib.tooltip)
+ lib.tooltip:Show()
elseif obj.OnEnter then
obj.OnEnter(self)
end
@@ -97,13 +70,13 @@
local function onLeave(self)
local obj = self.dataObject
- GameTooltip:Hide()
+ lib.tooltip:Hide()
if obj.OnLeave then obj.OnLeave(self) end
end
--------------------------------------------------------------------------------
-local onClick, onMouseUp, onMouseDown, onDragStart, onDragStop, onDragEnd, updatePosition
+local onClick, onMouseUp, onMouseDown, onDragStart, onDragStop, updatePosition
do
local minimapShapes = {
@@ -165,7 +138,7 @@
self.icon:UpdateCoord()
self:SetScript("OnUpdate", onUpdate)
self.isMoving = true
- GameTooltip:Hide()
+ lib.tooltip:Hide()
end
end
@@ -197,14 +170,14 @@
button:SetFrameLevel(8)
button:RegisterForClicks("anyUp")
button:RegisterForDrag("LeftButton")
- button:SetHighlightTexture("Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight")
+ button:SetHighlightTexture(136477) --"Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight"
local overlay = button:CreateTexture(nil, "OVERLAY")
overlay:SetSize(53, 53)
- overlay:SetTexture("Interface\\Minimap\\MiniMap-TrackingBorder")
+ overlay:SetTexture(136430) --"Interface\\Minimap\\MiniMap-TrackingBorder"
overlay:SetPoint("TOPLEFT")
local background = button:CreateTexture(nil, "BACKGROUND")
background:SetSize(20, 20)
- background:SetTexture("Interface\\Minimap\\UI-Minimap-Background")
+ background:SetTexture(136467) --"Interface\\Minimap\\UI-Minimap-Background"
background:SetPoint("TOPLEFT", 7, -5)
local icon = button:CreateTexture(nil, "ARTWORK")
icon:SetSize(17, 17)
diff -r b1c62eed8999 -r 0682d738499b Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua
--- a/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua Fri Jul 20 19:04:12 2018 -0300
@@ -2,7 +2,7 @@
assert(LibStub, "LibDataBroker-1.1 requires LibStub")
assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0")
-local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 3)
+local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4)
if not lib then return end
oldminor = oldminor or 0
@@ -64,3 +64,27 @@
return self.namestorage[dataobject]
end
end
+
+if oldminor < 4 then
+ local next = pairs(attributestorage)
+ function lib:pairs(dataobject_or_name)
+ local t = type(dataobject_or_name)
+ assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)")
+
+ local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
+ assert(attributestorage[dataobj], "Data object not found")
+
+ return next, attributestorage[dataobj], nil
+ end
+
+ local ipairs_iter = ipairs(attributestorage)
+ function lib:ipairs(dataobject_or_name)
+ local t = type(dataobject_or_name)
+ assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)")
+
+ local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
+ assert(attributestorage[dataobj], "Data object not found")
+
+ return ipairs_iter, attributestorage[dataobj], 0
+ end
+end
diff -r b1c62eed8999 -r 0682d738499b Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua
--- a/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua Fri Jul 20 19:04:12 2018 -0300
@@ -1,6 +1,6 @@
--[[
Name: LibSharedMedia-3.0
-Revision: $Revision: 69 $
+Revision: $Revision: 91 $
Author: Elkano (elkano@gmx.de)
Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com)
Website: http://www.wowace.com/projects/libsharedmedia-3-0/
@@ -9,7 +9,7 @@
License: LGPL v2.1
]]
-local MAJOR, MINOR = "LibSharedMedia-3.0", 4030402 -- increase manualy on changes
+local MAJOR, MINOR = "LibSharedMedia-3.0", 6010002 -- 6.1.0 v2 / increase manually on changes
local lib = LibStub:NewLibrary(MAJOR, MINOR)
if not lib then return end
@@ -60,9 +60,13 @@
-- BACKGROUND
if not lib.MediaTable.background then lib.MediaTable.background = {} end
lib.MediaTable.background["None"] = [[]]
+lib.MediaTable.background["Blizzard Collections Background"] = [[Interface\Collections\CollectionsBackgroundTile]]
lib.MediaTable.background["Blizzard Dialog Background"] = [[Interface\DialogFrame\UI-DialogBox-Background]]
lib.MediaTable.background["Blizzard Dialog Background Dark"] = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]]
lib.MediaTable.background["Blizzard Dialog Background Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Background]]
+lib.MediaTable.background["Blizzard Garrison Background"] = [[Interface\Garrison\GarrisonUIBackground]]
+lib.MediaTable.background["Blizzard Garrison Background 2"] = [[Interface\Garrison\GarrisonUIBackground2]]
+lib.MediaTable.background["Blizzard Garrison Background 3"] = [[Interface\Garrison\GarrisonMissionUIInfoBoxBackgroundTile]]
lib.MediaTable.background["Blizzard Low Health"] = [[Interface\FullScreenTextures\LowHealth]]
lib.MediaTable.background["Blizzard Marble"] = [[Interface\FrameGeneral\UI-Background-Marble]]
lib.MediaTable.background["Blizzard Out of Control"] = [[Interface\FullScreenTextures\OutOfControl]]
@@ -88,6 +92,36 @@
-- FONT
if not lib.MediaTable.font then lib.MediaTable.font = {} end
local SML_MT_font = lib.MediaTable.font
+--[[
+All font files are currently in all clients, the following table depicts which font supports which charset as of 5.0.4
+Fonts were checked using langcover.pl from DejaVu fonts (http://sourceforge.net/projects/dejavu/) and FontForge (http://fontforge.org/)
+latin means check for: de, en, es, fr, it, pt
+
+file name latin koKR ruRU zhCN zhTW
+2002.ttf 2002 X X X - -
+2002B.ttf 2002 Bold X X X - -
+ARHei.ttf AR CrystalzcuheiGBK Demibold X - X X X
+ARIALN.TTF Arial Narrow X - X - -
+ARKai_C.ttf AR ZhongkaiGBK Medium (Combat) X - X X X
+ARKai_T.ttf AR ZhongkaiGBK Medium X - X X X
+bHEI00M.ttf AR Heiti2 Medium B5 - - - - X
+bHEI01B.ttf AR Heiti2 Bold B5 - - - - X
+bKAI00M.ttf AR Kaiti Medium B5 - - - - X
+bLEI00D.ttf AR Leisu Demi B5 - - - - X
+FRIZQT__.TTF Friz Quadrata TT X - - - -
+FRIZQT___CYR.TTF FrizQuadrataCTT x - X - -
+K_Damage.TTF YDIWingsM - X X - -
+K_Pagetext.TTF MoK X X X - -
+MORPHEUS.TTF Morpheus X - - - -
+MORPHEUS_CYR.TTF Morpheus X - X - -
+NIM_____.ttf Nimrod MT X - X - -
+SKURRI.TTF Skurri X - - - -
+SKURRI_CYR.TTF Skurri X - X - -
+
+WARNING: Although FRIZQT___CYR is available on western clients, it doesn't support special European characters e.g. é, ï, ö
+Due to this, we cannot use it as a replacement for FRIZQT__.TTF
+]]
+
if locale == "koKR" then
LOCALE_MASK = lib.LOCALE_BIT_koKR
--
@@ -120,11 +154,17 @@
elseif locale == "ruRU" then
LOCALE_MASK = lib.LOCALE_BIT_ruRU
--
- SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
- SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
- SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS.TTF]]
- SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]]
- SML_MT_font["Skurri"] = [[Fonts\SKURRI.TTF]]
+ SML_MT_font["2002"] = [[Fonts\2002.TTF]]
+ SML_MT_font["2002 Bold"] = [[Fonts\2002B.TTF]]
+ SML_MT_font["AR CrystalzcuheiGBK Demibold"] = [[Fonts\ARHei.TTF]]
+ SML_MT_font["AR ZhongkaiGBK Medium (Combat)"] = [[Fonts\ARKai_C.TTF]]
+ SML_MT_font["AR ZhongkaiGBK Medium"] = [[Fonts\ARKai_T.TTF]]
+ SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
+ SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT___CYR.TTF]]
+ SML_MT_font["MoK"] = [[Fonts\K_Pagetext.TTF]]
+ SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS_CYR.TTF]]
+ SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]]
+ SML_MT_font["Skurri"] = [[Fonts\SKURRI_CYR.TTF]]
--
lib.DefaultMedia.font = "Friz Quadrata TT"
--
@@ -132,10 +172,17 @@
LOCALE_MASK = lib.LOCALE_BIT_western
locale_is_western = true
--
- SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
- SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
- SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS.TTF]]
- SML_MT_font["Skurri"] = [[Fonts\SKURRI.TTF]]
+ SML_MT_font["2002"] = [[Fonts\2002.TTF]]
+ SML_MT_font["2002 Bold"] = [[Fonts\2002B.TTF]]
+ SML_MT_font["AR CrystalzcuheiGBK Demibold"] = [[Fonts\ARHei.TTF]]
+ SML_MT_font["AR ZhongkaiGBK Medium (Combat)"] = [[Fonts\ARKai_C.TTF]]
+ SML_MT_font["AR ZhongkaiGBK Medium"] = [[Fonts\ARKai_T.TTF]]
+ SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
+ SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
+ SML_MT_font["MoK"] = [[Fonts\K_Pagetext.TTF]]
+ SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS_CYR.TTF]]
+ SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]]
+ SML_MT_font["Skurri"] = [[Fonts\SKURRI_CYR.TTF]]
--
lib.DefaultMedia.font = "Friz Quadrata TT"
--
@@ -145,6 +192,7 @@
if not lib.MediaTable.statusbar then lib.MediaTable.statusbar = {} end
lib.MediaTable.statusbar["Blizzard"] = [[Interface\TargetingFrame\UI-StatusBar]]
lib.MediaTable.statusbar["Blizzard Character Skills Bar"] = [[Interface\PaperDollInfoFrame\UI-Character-Skills-Bar]]
+lib.MediaTable.statusbar["Blizzard Raid Bar"] = [[Interface\RaidFrame\Raid-Bar-Hp-Fill]]
lib.DefaultMedia.statusbar = "Blizzard"
-- SOUND
@@ -174,7 +222,14 @@
error(MAJOR..":Register(mediatype, key, data, langmask) - key must be string, got "..type(key))
end
mediatype = mediatype:lower()
- if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end
+ if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end
+ if mediatype == lib.MediaType.SOUND and type(data) == "string" then
+ local path = data:lower()
+ -- Only ogg and mp3 are valid sounds.
+ if not path:find(".ogg", nil, true) and not path:find(".mp3", nil, true) then
+ return false
+ end
+ end
if not mediaTable[mediatype] then mediaTable[mediatype] = {} end
local mtable = mediaTable[mediatype]
if mtable[key] then return false end
diff -r b1c62eed8999 -r 0682d738499b Libs/LibSharedMedia-3.0/lib.xml
--- a/Libs/LibSharedMedia-3.0/lib.xml Sun Mar 11 10:50:42 2018 -0300
+++ b/Libs/LibSharedMedia-3.0/lib.xml Fri Jul 20 19:04:12 2018 -0300
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+