Fixed reports to Battle.net friends; Fixes on Custom displays
This commit is contained in:
+79
-10
@@ -3,32 +3,101 @@ local DF = _G ["DetailsFramework"]
|
||||
local _
|
||||
|
||||
if (not DF or not DetailsFrameworkCanLoad) then
|
||||
return
|
||||
return
|
||||
end
|
||||
|
||||
function DF:CreateAddOn (name, global_saved, global_table, options_table, broker)
|
||||
--runs when the addon received addon_loaded
|
||||
local addonPreLoad = function(addonFrame, event, ...)
|
||||
--check if the saved variables table is created, if not create one
|
||||
_G[addonFrame.__savedVarsName] = _G[addonFrame.__savedVarsName] or {}
|
||||
|
||||
if (addonFrame.__savedVarsDefaultTemplate) then
|
||||
--load saved vars for this character
|
||||
DF.SavedVars.LoadSavedVarsForPlayer(addonFrame)
|
||||
end
|
||||
|
||||
if (addonFrame.OnLoad) then
|
||||
DF:Dispatch(addonFrame.OnLoad, addonFrame, ...)
|
||||
end
|
||||
end
|
||||
|
||||
--runs when the addon received player_login
|
||||
local addonInit = function(addonFrame, event, ...)
|
||||
if (addonFrame.OnInit) then
|
||||
DF:Dispatch(addonFrame.OnInit, addonFrame, ...)
|
||||
end
|
||||
end
|
||||
|
||||
--when the player logout or reloadUI
|
||||
local addonUnload = function(addonFrame, event, ...)
|
||||
--close saved tables
|
||||
|
||||
end
|
||||
|
||||
local addonEvents = {
|
||||
["ADDON_LOADED"] = addonPreLoad,
|
||||
["PLAYER_LOGIN"] = addonInit,
|
||||
["PLAYER_LOGOUT"] = addonUnload,
|
||||
}
|
||||
|
||||
local addonOnEvent = function(addonFrame, event, ...)
|
||||
local func = addonEvents[event]
|
||||
if (func) then
|
||||
func(addonFrame, event, ...)
|
||||
else
|
||||
--might be a registered event from the user
|
||||
if (addonFrame.event) then
|
||||
DF:CoreDispatch(addonFrame.__name, addonFrame.event, addonFrame, event, ...)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local getAddonName = function(addonFrame)
|
||||
return addonFrame:GetName()
|
||||
end
|
||||
|
||||
function DF:CreateNewAddOn(addonName, globalSavedVariablesName, savedVarsTemplate)
|
||||
local newAddon = CreateFrame("frame", addonName, UIParent)
|
||||
newAddon.__name = addonName
|
||||
newAddon.__savedVarsName = globalSavedVariablesName
|
||||
newAddon.__savedVarsDefaultTemplate = savedVarsTemplate
|
||||
|
||||
newAddon.GetAddonName = getAddonName
|
||||
|
||||
newAddon:RegisterEvent("ADDON_LOADED")
|
||||
newAddon:RegisterEvent("PLAYER_LOGIN")
|
||||
newAddon:SetScript("OnEvent", addonOnEvent)
|
||||
|
||||
return newAddon
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--old create addon
|
||||
function DF:CreateAddOn (name, global_saved, global_table, options_table, broker)
|
||||
|
||||
local addon = LibStub ("AceAddon-3.0"):NewAddon (name, "AceConsole-3.0", "AceEvent-3.0", "AceTimer-3.0", "DetailsFramework-1.0", "AceComm-3.0")
|
||||
_G [name] = addon
|
||||
addon.__name = name
|
||||
|
||||
|
||||
function addon:OnInitialize()
|
||||
|
||||
|
||||
if (global_saved) then
|
||||
if (broker and broker.Minimap and not global_table.Minimap) then
|
||||
DF:Msg (name, "broker.Minimap is true but no global.Minimap declared.")
|
||||
end
|
||||
self.db = LibStub ("AceDB-3.0"):New (global_saved, global_table or {}, true)
|
||||
end
|
||||
|
||||
|
||||
if (options_table) then
|
||||
LibStub ("AceConfig-3.0"):RegisterOptionsTable (name, options_table)
|
||||
addon.OptionsFrame1 = LibStub ("AceConfigDialog-3.0"):AddToBlizOptions (name, name)
|
||||
|
||||
|
||||
LibStub ("AceConfig-3.0"):RegisterOptionsTable (name .. "-Profiles", LibStub ("AceDBOptions-3.0"):GetOptionsTable (self.db))
|
||||
addon.OptionsFrame2 = LibStub ("AceConfigDialog-3.0"):AddToBlizOptions (name .. "-Profiles", "Profiles", name)
|
||||
end
|
||||
|
||||
|
||||
if (broker) then
|
||||
local broker_click_function = broker.OnClick
|
||||
if (not broker_click_function and options_table) then
|
||||
@@ -37,7 +106,7 @@ function DF:CreateAddOn (name, global_saved, global_table, options_table, broker
|
||||
InterfaceOptionsFrame_OpenToCategory (name)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local databroker = LibStub ("LibDataBroker-1.1"):NewDataObject (name, {
|
||||
type = broker.type or "launcher",
|
||||
icon = broker.icon or [[Interface\PvPRankBadges\PvPRank15]],
|
||||
@@ -45,12 +114,12 @@ function DF:CreateAddOn (name, global_saved, global_table, options_table, broker
|
||||
OnTooltipShow = broker.OnTooltipShow,
|
||||
OnClick = broker_click_function
|
||||
})
|
||||
|
||||
|
||||
if (databroker and broker.Minimap and global_table.Minimap) then
|
||||
LibStub ("LibDBIcon-1.0"):Register (name, databroker, addon.db.profile.Minimap)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if (addon.OnInit) then
|
||||
xpcall (addon.OnInit, geterrorhandler(), addon)
|
||||
end
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
|
||||
|
||||
local DF = _G ["DetailsFramework"]
|
||||
if (not DF or not DetailsFrameworkCanLoad) then
|
||||
return
|
||||
end
|
||||
|
||||
--create namespace
|
||||
DF.Language = {
|
||||
registeredLanguages = {},
|
||||
}
|
||||
|
||||
function DF.Language.GetWordsFromLanguage(self, language, addonGlobalName)
|
||||
|
||||
end
|
||||
|
||||
function DF.Language.RegisterLanguage(self, addonGlobalName, language)
|
||||
local addonObject = _G[addonGlobalName]
|
||||
addonObject.__language = addonObject.__language or {}
|
||||
addonObject.__language[language] = {}
|
||||
return addonObject.__language[language]
|
||||
end
|
||||
@@ -10,6 +10,8 @@
|
||||
<Script file="scrollbar.lua"/>
|
||||
<Script file="spells.lua"/>
|
||||
<Script file="math.lua"/>
|
||||
<Script file="savedvars.lua"/>
|
||||
<Script file="languages.lua"/>
|
||||
|
||||
<Include file="tutorial_alert.xml"/>
|
||||
<Include file="split_bar.xml"/>
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
|
||||
--stopped doing the duplicate savedTable
|
||||
|
||||
local DF = _G ["DetailsFramework"]
|
||||
if (not DF or not DetailsFrameworkCanLoad) then
|
||||
return
|
||||
end
|
||||
|
||||
--create namespace
|
||||
DF.SavedVars = {}
|
||||
|
||||
function DF.SavedVars.CreateNewSavedTable(dbTable, savedTableName)
|
||||
local defaultVars = dbTable.defaultSavedVars
|
||||
local newSavedTable = DF.table.deploy({}, defaultVars)
|
||||
|
||||
dbTable.profiles[savedTableName] = newSavedTable
|
||||
return newSavedTable
|
||||
end
|
||||
|
||||
function DF.SavedVars.GetOrCreateAddonSavedTablesPlayerList(addonFrame)
|
||||
local addonGlobalSavedTable = _G[addonFrame.savedVarsName]
|
||||
local playerList = addonGlobalSavedTable.__savedVarsByGUID
|
||||
if (not playerList) then
|
||||
addonGlobalSavedTable.__savedVarsByGUID = {}
|
||||
end
|
||||
|
||||
return addonGlobalSavedTable.__savedVarsByGUID
|
||||
end
|
||||
|
||||
function DF.SavedVars.LoadSavedVarsForPlayer(addonFrame)
|
||||
local playerSerial = UnitGUID("player")
|
||||
|
||||
--savedTableObject is equivalent of "addon.db"
|
||||
local dbTable = DF.SavedVars.CreateSavedVarsTable(addonFrame, addonFrame.__savedVarsDefaultTemplate)
|
||||
addonFrame.__savedVarsDefaultTemplate = nil
|
||||
addonFrame.db = dbTable
|
||||
|
||||
--load players list
|
||||
local savedVarsName = DF.SavedVars.GetOrCreateAddonSavedTablesPlayerList(addonFrame)
|
||||
|
||||
local playerSavedTableName = savedVarsName[playerSerial]
|
||||
if (not playerSavedTableName) then
|
||||
savedVarsName[playerSerial] = "Default"
|
||||
playerSavedTableName = savedVarsName[playerSerial]
|
||||
end
|
||||
|
||||
local savedTable = addonFrame.db:GetSavedTable(playerSavedTableName)
|
||||
if (not savedTable) then
|
||||
--create a new saved table for this character
|
||||
savedTable = addonFrame.db:CreateNewSavedTable(playerSavedTableName)
|
||||
end
|
||||
|
||||
addonFrame.db.profile = savedTable
|
||||
addonFrame.db.currentSavedTableName = playerSavedTableName
|
||||
|
||||
return savedTable
|
||||
end
|
||||
|
||||
|
||||
--base functions
|
||||
function DF.SavedVars.SetSavedTable(dbTable, savedTableName, createIfNonExistant)
|
||||
local savedTableToBeApplied = dbTable:GetSavedTable(savedTableName)
|
||||
|
||||
if (savedTableToBeApplied) then
|
||||
--callback unload profile table
|
||||
local currentSavedTable = dbTable:GetSavedTable(dbTable:GetCurrentSavedTableName())
|
||||
dbTable:TriggerCallback("OnProfileUnload", currentSavedTable)
|
||||
|
||||
dbTable.profile = savedTableToBeApplied
|
||||
dbTable:TriggerCallback("OnProfileLoad", savedTableToBeApplied)
|
||||
|
||||
else
|
||||
if (createIfNonExistant) then
|
||||
local newSavedTable = dbTable:CreateNewSavedTable(savedTableName)
|
||||
|
||||
--callback unload profile table
|
||||
local currentSavedTable = dbTable:GetSavedTable(dbTable:GetCurrentSavedTableName())
|
||||
dbTable:TriggerCallback("OnProfileUnload", currentSavedTable)
|
||||
|
||||
dbTable.profile = newSavedTable
|
||||
dbTable:TriggerCallback("OnProfileLoad", newSavedTable)
|
||||
|
||||
else
|
||||
DF:Msg("profile does not exists", savedTableName)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function DF.SavedVars.GetSavedTables(dbTable)
|
||||
return dbTable.profiles
|
||||
end
|
||||
|
||||
function DF.SavedVars.GetSavedTable(dbTable, savedTableName)
|
||||
local profiles = dbTable:GetSavedTables()
|
||||
return profiles[savedTableName]
|
||||
end
|
||||
|
||||
function DF.SavedVars.GetCurrentSavedTableName(dbTable)
|
||||
return dbTable.currentSavedTableName
|
||||
end
|
||||
|
||||
--duplicate savedTable
|
||||
function DF.SavedVars.DuplicateSavedTable(dbTable, savedTableName)
|
||||
local originalSavedTable = dbTable:GetSavedTable(savedTableName)
|
||||
if (originalSavedTable) then
|
||||
local newSavedTable = DF.table.copy({}, originalSavedTable)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
--callbacks
|
||||
function DF.SavedVars.TriggerCallback(dbTable, callbackName, savedTable)
|
||||
local registeredCallbacksTable = dbTable.registeredCallbacks[callbackName]
|
||||
for i = 1, #registeredCallbacksTable do
|
||||
local callback = registeredCallbacksTable[i]
|
||||
DF:CoreDispatch(dbTable.addonFrame.__name, callback.func, savedTable, unpack(callback.payload))
|
||||
end
|
||||
end
|
||||
|
||||
function DF.SavedVars.RegisterCallback(dbTable, callbackName, func, ...)
|
||||
local registeredCallbacksTable = dbTable.registeredCallbacks[callbackName]
|
||||
if (registeredCallbacksTable) then
|
||||
--check for duplicates
|
||||
for i = 1, #registeredCallbacksTable do
|
||||
if (registeredCallbacksTable[i].func == func) then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
--register
|
||||
registeredCallbacksTable[#registeredCallbacksTable+1] = {func = func, payload = {...}}
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function DF.SavedVars.UnregisterCallback(dbTable, callbackName, func)
|
||||
local registeredCallbacksTable = dbTable.registeredCallbacks[callbackName]
|
||||
if (registeredCallbacksTable) then
|
||||
for i = 1, #registeredCallbacksTable do
|
||||
if (registeredCallbacksTable[i].func == func) then
|
||||
tremove(registeredCallbacksTable, i)
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function DF.SavedVars.CreateSavedVarsTable(addonFrame, templateTable)
|
||||
local dbTable = {
|
||||
profiles = {},
|
||||
defaultSavedVars = templateTable,
|
||||
currentSavedTableName = "",
|
||||
addonFrame = addonFrame,
|
||||
|
||||
--methods
|
||||
GetSavedTable = DF.SavedVars.GetSavedTable,
|
||||
SetSavedTable = DF.SavedVars.SetSavedTable,
|
||||
GetSavedTables = DF.SavedVars.GetSavedTables,
|
||||
GetCurrentSavedTableName = DF.SavedVars.GetCurrentSavedTableName,
|
||||
CreateNewSavedTable = DF.SavedVars.CreateNewSavedTable,
|
||||
TriggerCallback = DF.SavedVars.TriggerCallback,
|
||||
|
||||
--back compatibility with ace3DB
|
||||
GetCurrentProfile = DF.SavedVars.GetCurrentSavedTableName,
|
||||
GetProfile = DF.SavedVars.GetSavedTable,
|
||||
GetProfiles = DF.SavedVars.GetSavedTables,
|
||||
SetProfile = DF.SavedVars.SetSavedTable,
|
||||
RegisterCallback = DF.SavedVars.RegisterCallback,
|
||||
|
||||
registeredCallbacks = {
|
||||
["OnProfileLoad"] = {},
|
||||
["OnProfileUnload"] = {},
|
||||
["OnProfileCopied"] = {},
|
||||
["OnProfileReset"] = {},
|
||||
["OnDatabaseLoad"] = {},
|
||||
["OnDatabaseShutdown"] = {},
|
||||
},
|
||||
}
|
||||
|
||||
return dbTable
|
||||
end
|
||||
Reference in New Issue
Block a user