chore: move addon into Chatter/ + add standard .gitignore
Matches the Exiles fork-layout convention (each addon in its own folder).
This commit is contained in:
@@ -0,0 +1,269 @@
|
||||
Chatter = LibStub("AceAddon-3.0"):NewAddon("Chatter", "AceConsole-3.0", "AceHook-3.0") --, "AceHook-3.0", "AceTimer-3.0", "AceConsole-3.0", "AceEvent-3.0", "LibSink-2.0")
|
||||
local L = LibStub("AceLocale-3.0"):GetLocale("Chatter")
|
||||
local AceConfig = LibStub("AceConfig-3.0")
|
||||
local AceConfigDialog = LibStub("AceConfigDialog-3.0")
|
||||
local CreateFrame = _G.CreateFrame
|
||||
local UIParent = _G.UIParent
|
||||
|
||||
local optFrame
|
||||
|
||||
local options = {
|
||||
type = "group",
|
||||
args = {
|
||||
defaultArgs = {
|
||||
type = "group",
|
||||
name = L["Chatter"],
|
||||
args = {
|
||||
aceConfig = {
|
||||
type = "execute",
|
||||
name = L["Standalone Config"],
|
||||
desc = L["Open a standalone config window. You might consider installing |cffffff00BetterBlizzOptions|r to make the Blizzard UI options panel resizable."],
|
||||
func = function()
|
||||
if InterfaceOptionsFrame and InterfaceOptionsFrame_OpenToCategory then
|
||||
InterfaceOptionsFrame:Hide()
|
||||
AceConfigDialog:SetDefaultSize("Chatter", 500, 550)
|
||||
AceConfigDialog:Open("Chatter")
|
||||
else
|
||||
AceConfigDialog:SetDefaultSize("Chatter", 500, 550)
|
||||
AceConfigDialog:Open("Chatter")
|
||||
end
|
||||
end
|
||||
}
|
||||
}
|
||||
},
|
||||
config = {
|
||||
type = "execute",
|
||||
guiHidden = true,
|
||||
name = L["Configure"],
|
||||
desc = L["Configure"],
|
||||
func = Chatter.OpenConfig
|
||||
},
|
||||
modules = {
|
||||
type = "group",
|
||||
name = L["Modules"],
|
||||
desc = L["Modules"],
|
||||
args = {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
local defaults = {
|
||||
profile = {
|
||||
modules = {
|
||||
["Disable Fading"] = false,
|
||||
["Chat Autolog"] = false,
|
||||
["Automatic Whisper Windows"] = false,
|
||||
["Server Positioning"] = false,
|
||||
}
|
||||
}
|
||||
}
|
||||
--[[
|
||||
Creating a prototype for a Decorate/UnDecorate function
|
||||
Adding these in so after everything is loaded we can post decorate/undecorate the popup frames
|
||||
--]]
|
||||
local proto = {
|
||||
Decorate = function(self,chatframe) end,
|
||||
Popout = function(self,chatframe,srcChatFrame) end,
|
||||
TempChatFrames = {},
|
||||
AddTempChat = function(self,name) table.insert(self.TempChatFrames,name) end,
|
||||
AlwaysDecorate = function(self,chatframe) end,
|
||||
}
|
||||
|
||||
Chatter:SetDefaultModulePrototype(proto)
|
||||
Chatter:SetDefaultModuleState(false)
|
||||
|
||||
local optionFrames = {}
|
||||
local ACD3 = LibStub("AceConfigDialog-3.0")
|
||||
|
||||
function Chatter:OnInitialize()
|
||||
self.db = LibStub("AceDB-3.0"):New("ChatterDB", defaults, "Default")
|
||||
|
||||
LibStub("AceConfigRegistry-3.0"):RegisterOptionsTable("Chatter", options)
|
||||
LibStub("AceConfigRegistry-3.0"):RegisterOptionsTable("ChatterModules", options.args.modules)
|
||||
optFrame = ACD3:AddToBlizOptions("Chatter", nil, nil, "defaultArgs")
|
||||
|
||||
for k, v in self:IterateModules() do
|
||||
options.args.modules.args[k:gsub(" ", "_")] = {
|
||||
type = "group",
|
||||
name = (v.modName or k),
|
||||
args = nil
|
||||
}
|
||||
local t
|
||||
if v.GetOptions then
|
||||
t = v:GetOptions()
|
||||
t.settingsHeader = {
|
||||
type = "header",
|
||||
name = L["Settings"],
|
||||
order = 12
|
||||
}
|
||||
end
|
||||
t = t or {}
|
||||
t.toggle = {
|
||||
type = "toggle",
|
||||
name = v.toggleLabel or (L["Enable "] .. (v.modName or k)),
|
||||
width = "double",
|
||||
desc = v.Info and v:Info() or (L["Enable "] .. (v.modName or k)),
|
||||
order = 11,
|
||||
get = function()
|
||||
return Chatter.db.profile.modules[k] ~= false or false
|
||||
end,
|
||||
set = function(info, v)
|
||||
Chatter.db.profile.modules[k] = v
|
||||
if v then
|
||||
Chatter:EnableModule(k)
|
||||
-- L["Module"]
|
||||
Chatter:Print(L["Enabled"], k, L["Module"])
|
||||
else
|
||||
Chatter:DisableModule(k)
|
||||
Chatter:Print(L["Disabled"], k, L["Module"])
|
||||
end
|
||||
end
|
||||
}
|
||||
t.header = {
|
||||
type = "header",
|
||||
name = v.modName or k,
|
||||
order = 9
|
||||
}
|
||||
if v.Info then
|
||||
t.description = {
|
||||
type = "description",
|
||||
name = v:Info() .. "\n\n",
|
||||
order = 10
|
||||
}
|
||||
end
|
||||
options.args.modules.args[k:gsub(" ", "_")].args = t
|
||||
end
|
||||
|
||||
local moduleList = {}
|
||||
local moduleNames = {}
|
||||
for k, v in pairs(options.args.modules.args) do
|
||||
moduleList[v.name] = k
|
||||
tinsert(moduleNames, v.name)
|
||||
end
|
||||
table.sort(moduleNames)
|
||||
for _, name in ipairs(moduleNames) do
|
||||
ACD3:AddToBlizOptions("ChatterModules", name, "Chatter", moduleList[name])
|
||||
end
|
||||
|
||||
self:RegisterChatCommand("chatter", "OpenConfig")
|
||||
|
||||
self.db.RegisterCallback(self, "OnProfileChanged", "SetUpdateConfig")
|
||||
self.db.RegisterCallback(self, "OnProfileCopied", "SetUpdateConfig")
|
||||
self.db.RegisterCallback(self, "OnProfileReset", "SetUpdateConfig")
|
||||
|
||||
self:AddMenuHook(self, {
|
||||
text = L["Chatter Settings"],
|
||||
func = Chatter.OpenConfig,
|
||||
notCheckable = 1
|
||||
})
|
||||
self:RawHook("FCF_Tab_OnClick", true)
|
||||
self:RawHook("FCF_OpenTemporaryWindow",true)
|
||||
end
|
||||
|
||||
do
|
||||
local info = {}
|
||||
local menuHooks = {}
|
||||
function Chatter:AddMenuHook(module, hook)
|
||||
menuHooks[module] = hook
|
||||
end
|
||||
|
||||
function Chatter:RemoveMenuHook(module)
|
||||
menuHooks[module] = nil
|
||||
end
|
||||
|
||||
function Chatter:FCF_Tab_OnClick(...)
|
||||
self.hooks.FCF_Tab_OnClick(...)
|
||||
for module, v in pairs(menuHooks) do
|
||||
local menu
|
||||
if type(v) == "table" then
|
||||
menu = v
|
||||
else
|
||||
menu = module[v](module, ...)
|
||||
end
|
||||
UIDropDownMenu_AddButton(menu)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Chatter:FCF_OpenTemporaryWindow(chatType, chatTarget, sourceChatFrame, selectWindow)
|
||||
local frame = self.hooks.FCF_OpenTemporaryWindow(chatType, chatTarget, sourceChatFrame, selectWindow)
|
||||
if frame then
|
||||
for k, v in self:IterateModules() do
|
||||
if not frame.isDecorated then
|
||||
v:AddTempChat(frame:GetName())
|
||||
end
|
||||
if v:IsEnabled() and not frame.isDecorated then
|
||||
v:Decorate(frame)
|
||||
end
|
||||
if v:IsEnabled() then
|
||||
v:Popout(frame,sourceChatFrame or DEFAULT_CHAT_FRAME)
|
||||
end
|
||||
v:AlwaysDecorate(frame)
|
||||
end
|
||||
frame.isDecorated = true
|
||||
end
|
||||
FCFDock_ForceReanchoring(GENERAL_CHAT_DOCK)
|
||||
return frame
|
||||
end
|
||||
|
||||
function Chatter:OpenConfig(input)
|
||||
if InterfaceOptionsFrame and InterfaceOptionsFrame_OpenToCategory then
|
||||
if input == "config" or not InterfaceOptionsFrame:IsResizable() then
|
||||
options.args.defaultArgs.guiHidden = true
|
||||
InterfaceOptionsFrame:Hide()
|
||||
AceConfigDialog:SetDefaultSize("Chatter", 500, 550)
|
||||
AceConfigDialog:Open("Chatter")
|
||||
else
|
||||
InterfaceOptionsFrame_OpenToCategory(Chatter.lastConfig)
|
||||
options.args.defaultArgs.guiHidden = false
|
||||
InterfaceOptionsFrame_OpenToCategory(optFrame)
|
||||
end
|
||||
else
|
||||
LibStub("AceConfigDialog-3.0"):Open("Chatter")
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local timer, t = nil, 0
|
||||
local function update()
|
||||
t = t + arg1
|
||||
if t > 0.5 then
|
||||
timer:SetScript("OnUpdate", nil)
|
||||
Chatter:UpdateConfig()
|
||||
end
|
||||
end
|
||||
function Chatter:SetUpdateConfig()
|
||||
t = 0
|
||||
timer = timer or CreateFrame("Frame", nil, UIParent)
|
||||
timer:SetScript("OnUpdate", update)
|
||||
end
|
||||
end
|
||||
|
||||
function Chatter:UpdateConfig()
|
||||
for k, v in self:IterateModules() do
|
||||
if v:IsEnabled() then
|
||||
v:Disable()
|
||||
v:Enable()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Chatter:OnEnable()
|
||||
if not self.db.profile.welcomeMessaged then
|
||||
self:Print(L["Welcome to Chatter! Type /chatter to configure."])
|
||||
self.db.profile.welcomeMessaged = true
|
||||
end
|
||||
for k, v in self:IterateModules() do
|
||||
if self.db.profile.modules[k] ~= false then
|
||||
v:Enable()
|
||||
end
|
||||
end
|
||||
|
||||
if not options.args.Profiles then
|
||||
options.args.Profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db)
|
||||
self.lastConfig = ACD3:AddToBlizOptions("Chatter", L["Profiles"], "Chatter", "Profiles")
|
||||
end
|
||||
end
|
||||
|
||||
function Chatter:OnDisable()
|
||||
end
|
||||
Reference in New Issue
Block a user