281 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local AddonName, _ = ...
 | |
| 
 | |
| function Grichelde:CreateOptionsUI()
 | |
|     return {
 | |
|         name = self:Format(self.L.Options_Title, self.L.AddonName),
 | |
|         type = "group",
 | |
|         childGroups = "tab",
 | |
|         set = function(info, val) self:SyncToDatabase(info, val) end,
 | |
|         get = function(info) return self:ReadFromDatabase(info) end,
 | |
|         hidden = false,
 | |
|         disabled = function(info) return self:IsDisabled(info) end,
 | |
|         args = {
 | |
|             enabled = {
 | |
|                 order = 0,
 | |
|                 type = "toggle",
 | |
|                 name = self.L.Options_Enabled_Name,
 | |
|                 desc = self:Format(self.L.Options_Enabled_Desc, self.L.AddonName),
 | |
|                 set = function(info, val) self.db.profile.enabled=val end,
 | |
|                 get = function(info) return self.db.profile.enabled end,
 | |
|                 disabled = false,
 | |
|             },
 | |
| 
 | |
|             channels = {
 | |
|                 order = 2,
 | |
|                 type = "group",
 | |
|                 name = self.L.Options_Channels_Group_Name,
 | |
|                 desc = self:Format(self.L.Options_Channels_Group_Desc, self.L.AddonName),
 | |
|                 args = {
 | |
|                     say = {
 | |
|                         order = 0,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelSay_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelSay_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     emote = {
 | |
|                         order = 1,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelEmote_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelEmote_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     yell = {
 | |
|                         order = 2,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelYell_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelYell_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     party = {
 | |
|                         order = 3,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelParty_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelParty_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     partyLeader = {
 | |
|                         order = 4,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelPartyLeader_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelPartyLeader_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     guild = {
 | |
|                         order = 5,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelGuild_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelGuild_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     officer = {
 | |
|                         order = 6,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelOfficer_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelOfficer_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     raid = {
 | |
|                         order = 7,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelRaid_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelRaid_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     raidLeader = {
 | |
|                         order = 8,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelRaidLeader_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelRaidLeader_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     instance = {
 | |
|                         order = 9,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelInstance_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelInstance_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     battleground = {
 | |
|                         order = 10,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelBattleground_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelBattleground_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                     whisper = {
 | |
|                         order = 11,
 | |
|                         type = "toggle",
 | |
|                         name = self.L.Options_Channels_ChannelWhisper_Name,
 | |
|                         desc = self:Format(self.L.Options_Channels_ChannelWhisper_Desc, self.L.AddonName),
 | |
|                     },
 | |
|                 }
 | |
|             },
 | |
| 
 | |
|             replacements = {
 | |
|                 order = 3,
 | |
|                 type = "group",
 | |
|                 name = self.L.Options_Replacements_Group_Name,
 | |
|                 desc = self.L.Options_Replacements_Group_Desc,
 | |
|                 args = {
 | |
|                     add = {
 | |
|                         order = 0,
 | |
|                         type = "execute",
 | |
|                         name = self.L.Options_Replacements_Add_Name,
 | |
|                         desc = self.L.Options_Replacements_Add_Desc,
 | |
|                     },
 | |
|                     deleteAll = {
 | |
|                         order = 0,
 | |
|                         type = "execute",
 | |
|                         confirm = "",
 | |
|                         name = self.L.Options_Replacements_DeleteAll_Name,
 | |
|                         desc = self.L.Options_Replacements_DeleteAll_Desc,
 | |
|                     },
 | |
|                     replacement_0 = {
 | |
|                         order = 0,
 | |
|                         type = "group",
 | |
|                         name = self.L.Options_Replacement_Group_Name,
 | |
|                         desc = self.L.Options_Replacement_Group_Desc,
 | |
|                         childGroups = "tree",
 | |
|                         args = {
 | |
|                             searchText = {
 | |
|                                 order = 0,
 | |
|                                 type = "input",
 | |
|                                 name = self.L.Options_Replacement_SearchText_Name,
 | |
|                                 desc = self.L.Options_Replacement_SearchText_Desc,
 | |
|                             },
 | |
|                             replaceText = {
 | |
|                                 order = 1,
 | |
|                                 type = "input",
 | |
|                                 name = self.L.Options_Replacement_ReplaceText_Name,
 | |
|                                 desc = self.L.Options_Replacement_ReplaceText_Desc,
 | |
|                             },
 | |
|                             caseSensitive = {
 | |
|                                 order = 2,
 | |
|                                 type = "toggle",
 | |
|                                 name = self.L.Options_Replacement_CaseSensitive_Name,
 | |
|                                 desc = self.L.Options_Replacement_CaseSensitive_Desc,
 | |
|                             },
 | |
|                             consolidate = {
 | |
|                                 order = 3,
 | |
|                                 type = "toggle",
 | |
|                                 name = self.L.Options_Replacement_Consolidate_Name,
 | |
|                                 desc = self.L.Options_Replacement_Consolidate_Desc,
 | |
|                                 width = 2
 | |
|                             },
 | |
|                             deleteAll = {
 | |
|                                 order = 4,
 | |
|                                 type = "execute",
 | |
|                                 confirm = "",
 | |
|                                 name = self.L.Options_Replacement_Delete_Name,
 | |
|                                 desc = self.L.Options_Replacement_Delete_Desc,
 | |
|                             },
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| end
 | |
| 
 | |
| local Grichelde_DefaultConfig = {
 | |
|     global = {},
 | |
|     profile = {
 | |
|         enabled = true,
 | |
|         channels = {
 | |
|             ["*"] = false,
 | |
|             say = true,
 | |
|             emote = false,
 | |
|             yell = true,
 | |
|             party = true,
 | |
|             partyLeader = true,
 | |
|             guild = true,
 | |
|             officer = true,
 | |
|         },
 | |
|         replacements = {
 | |
|             ["**"] = {
 | |
|                 searchText = "",
 | |
|                 replaceText = "",
 | |
|                 caseSensitive = false,
 | |
|                 consolidate = true,
 | |
|             },
 | |
|             replacement_0 = {
 | |
|                 order = 1,
 | |
|                 searchText = "s",
 | |
|                 replaceText = "ch",
 | |
|                 caseSensitive = false,
 | |
|                 consolidate = true,
 | |
|             },
 | |
|             replacement_1 = {
 | |
|                 order = 2,
 | |
|                 searchText = "t",
 | |
|                 replaceText = "ck",
 | |
|                 caseSensitive = false,
 | |
|                 consolidate = true,
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| function Grichelde:LoadDatabase()
 | |
|     -- Called when the addon is loaded
 | |
|     self.db = LibStub("AceDB-3.0"):New(AddonName .."DB", Grichelde_DefaultConfig, true)
 | |
|     self.db.RegisterCallback(self, "OnProfileChanged", "RefreshConfig")
 | |
|     self.db.RegisterCallback(self, "OnProfileCopied", "RefreshConfig")
 | |
|     self.db.RegisterCallback(self, "OnProfileReset", "RefreshConfig")
 | |
| end
 | |
| 
 | |
| function Grichelde:SetupOptions()
 | |
|     -- add DB-backed profiles to UI options
 | |
|     self.options = self:CreateOptionsUI()
 | |
|     self.options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db)
 | |
|     self.options.args.profiles.disabled = false
 | |
| 
 | |
|     local activeProfile = self.db:GetCurrentProfile()
 | |
|     self:PrefixedPrint(self.L.Profiles_Loaded, _G.GREEN_FONT_COLOR_CODE, activeProfile, "|r")
 | |
|     self:tPrint(self.db.profile)
 | |
| 
 | |
|     -- Adding options to blizzard frame
 | |
|     LibStub("AceConfig-3.0"):RegisterOptionsTable(AddonName, self.options)
 | |
|     LibStub("AceConfigDialog-3.0"):AddToBlizOptions(AddonName, self.L.AddonName)
 | |
| end
 | |
| 
 | |
| function Grichelde:SetupSlashCommands()
 | |
|     local function HandleSlashCommand(input)
 | |
|         -- Show the GUI if no input is supplied, otherwise handle the chat input.
 | |
|         if not input or input:trim() == "" then
 | |
|             LibStub("AceConfigDialog-3.0"):Open(AddonName)
 | |
|         else
 | |
|             -- handle slash ourselves
 | |
|             self:Print("Handle slash command: " .. input)
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     self:RegisterChatCommand("grichelde", HandleSlashCommand)
 | |
|     self:RegisterChatCommand("gri", HandleSlashCommand)
 | |
| end
 | |
| 
 | |
| function Grichelde:SyncToDatabase(info, val)
 | |
|     local option = self.db.profile
 | |
|     local path = 1
 | |
|     while ( path < #info) do
 | |
|         option = option[info[path]] -- or nil
 | |
|         path = path + 1
 | |
|     end
 | |
|     local optionPath = strjoin(".", unpack(info, 1, #info))
 | |
|     self:DebugPrint("change option \"%s\" from %s to %s", optionPath, tostring(option[info[path]]), tostring(val))
 | |
|     option[info[path]] = val
 | |
| end
 | |
| 
 | |
| function Grichelde:ReadFromDatabase(info)
 | |
|     local option = self.db.profile
 | |
|     local path = 1
 | |
|     while (path <= #info) do
 | |
|         option = option[info[path]] -- or nil
 | |
|         path = path + 1
 | |
|     end
 | |
|     local optionPath = strjoin(".", unpack(info, 1, #info))
 | |
|     self:DebugPrint("read option \"%s\": %s", optionPath, tostring(option))
 | |
|     return option
 | |
| end
 | |
| 
 | |
| function Grichelde:IsDisabled(info)
 | |
|     if info.option.type == "group" then
 | |
|         return false
 | |
|     end
 | |
|     return not self.db.profile.enabled
 | |
| end
 | |
| 
 | |
| function Grichelde:RefreshConfig(event)
 | |
|     self:Print(self.L.Profiles_Refreshed, _G.GREEN_FONT_COLOR_CODE, self.db:GetCurrentProfile(), "|r")
 | |
| end
 |