annotate libs/AceAddon-2.0/AceAddon-2.0.lua @ 1:c11ca1d8ed91

Version 0.1
author Flick <flickerstreak@gmail.com>
date Tue, 20 Mar 2007 21:03:57 +0000
parents
children
rev   line source
flickerstreak@1 1 --[[
flickerstreak@1 2 Name: AceAddon-2.0
flickerstreak@1 3 Revision: $Rev: 19844 $
flickerstreak@1 4 Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
flickerstreak@1 5 Inspired By: Ace 1.x by Turan (turan@gryphon.com)
flickerstreak@1 6 Website: http://www.wowace.com/
flickerstreak@1 7 Documentation: http://www.wowace.com/index.php/AceAddon-2.0
flickerstreak@1 8 SVN: http://svn.wowace.com/root/trunk/Ace2/AceAddon-2.0
flickerstreak@1 9 Description: Base for all Ace addons to inherit from.
flickerstreak@1 10 Dependencies: AceLibrary, AceOO-2.0, AceEvent-2.0, (optional) AceConsole-2.0
flickerstreak@1 11 ]]
flickerstreak@1 12
flickerstreak@1 13 local MAJOR_VERSION = "AceAddon-2.0"
flickerstreak@1 14 local MINOR_VERSION = "$Revision: 19844 $"
flickerstreak@1 15
flickerstreak@1 16 -- This ensures the code is only executed if the libary doesn't already exist, or is a newer version
flickerstreak@1 17 if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary.") end
flickerstreak@1 18 if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end
flickerstreak@1 19
flickerstreak@1 20 if not AceLibrary:HasInstance("AceOO-2.0") then error(MAJOR_VERSION .. " requires AceOO-2.0.") end
flickerstreak@1 21
flickerstreak@1 22 local function safecall(func,...)
flickerstreak@1 23 local success, err = pcall(func,...)
flickerstreak@1 24 if not success then geterrorhandler()(err) end
flickerstreak@1 25 end
flickerstreak@1 26 -- Localization
flickerstreak@1 27 local STANDBY, TITLE, NOTES, VERSION, AUTHOR, DATE, CATEGORY, EMAIL, CREDITS, WEBSITE, CATEGORIES, ABOUT, PRINT_ADDON_INFO
flickerstreak@1 28 if GetLocale() == "deDE" then
flickerstreak@1 29 STANDBY = "|cffff5050(Standby)|r" -- capitalized
flickerstreak@1 30
flickerstreak@1 31 TITLE = "Titel"
flickerstreak@1 32 NOTES = "Anmerkung"
flickerstreak@1 33 VERSION = "Version"
flickerstreak@1 34 AUTHOR = "Autor"
flickerstreak@1 35 DATE = "Datum"
flickerstreak@1 36 CATEGORY = "Kategorie"
flickerstreak@1 37 EMAIL = "E-mail"
flickerstreak@1 38 WEBSITE = "Webseite"
flickerstreak@1 39 CREDITS = "Credits" -- fix
flickerstreak@1 40
flickerstreak@1 41 ABOUT = "\195\188ber"
flickerstreak@1 42 PRINT_ADDON_INFO = "Gibt Addondaten aus"
flickerstreak@1 43
flickerstreak@1 44 CATEGORIES = {
flickerstreak@1 45 ["Action Bars"] = "Aktionsleisten",
flickerstreak@1 46 ["Auction"] = "Auktion",
flickerstreak@1 47 ["Audio"] = "Audio",
flickerstreak@1 48 ["Battlegrounds/PvP"] = "Schlachtfeld/PvP",
flickerstreak@1 49 ["Buffs"] = "Buffs",
flickerstreak@1 50 ["Chat/Communication"] = "Chat/Kommunikation",
flickerstreak@1 51 ["Druid"] = "Druide",
flickerstreak@1 52 ["Hunter"] = "J?r",
flickerstreak@1 53 ["Mage"] = "Magier",
flickerstreak@1 54 ["Paladin"] = "Paladin",
flickerstreak@1 55 ["Priest"] = "Priester",
flickerstreak@1 56 ["Rogue"] = "Schurke",
flickerstreak@1 57 ["Shaman"] = "Schamane",
flickerstreak@1 58 ["Warlock"] = "Hexenmeister",
flickerstreak@1 59 ["Warrior"] = "Krieger",
flickerstreak@1 60 ["Healer"] = "Heiler",
flickerstreak@1 61 ["Tank"] = "Tank", -- noone use "Brecher"...
flickerstreak@1 62 ["Caster"] = "Caster",
flickerstreak@1 63 ["Combat"] = "Kampf",
flickerstreak@1 64 ["Compilations"] = "Compilations", -- whats that o_O
flickerstreak@1 65 ["Data Export"] = "Datenexport",
flickerstreak@1 66 ["Development Tools"] = "Entwicklungs Tools",
flickerstreak@1 67 ["Guild"] = "Gilde",
flickerstreak@1 68 ["Frame Modification"] = "Frame Modifikation",
flickerstreak@1 69 ["Interface Enhancements"] = "Interface Verbesserungen",
flickerstreak@1 70 ["Inventory"] = "Inventar",
flickerstreak@1 71 ["Library"] = "Library",
flickerstreak@1 72 ["Map"] = "Map",
flickerstreak@1 73 ["Mail"] = "Mail",
flickerstreak@1 74 ["Miscellaneous"] = "Diverses",
flickerstreak@1 75 ["Quest"] = "Quest",
flickerstreak@1 76 ["Raid"] = "Schlachtzug",
flickerstreak@1 77 ["Tradeskill"] = "Handelsf\195\164higkeit",
flickerstreak@1 78 ["UnitFrame"] = "UnitFrame",
flickerstreak@1 79 }
flickerstreak@1 80 elseif GetLocale() == "frFR" then
flickerstreak@1 81 STANDBY = "|cffff5050(attente)|r"
flickerstreak@1 82
flickerstreak@1 83 TITLE = "Titre"
flickerstreak@1 84 NOTES = "Notes"
flickerstreak@1 85 VERSION = "Version"
flickerstreak@1 86 AUTHOR = "Auteur"
flickerstreak@1 87 DATE = "Date"
flickerstreak@1 88 CATEGORY = "Cat\195\169gorie"
flickerstreak@1 89 EMAIL = "E-mail"
flickerstreak@1 90 WEBSITE = "Site web"
flickerstreak@1 91 CREDITS = "Credits" -- fix
flickerstreak@1 92
flickerstreak@1 93 ABOUT = "A propos"
flickerstreak@1 94 PRINT_ADDON_INFO = "Afficher les informations sur l'addon"
flickerstreak@1 95
flickerstreak@1 96 CATEGORIES = {
flickerstreak@1 97 ["Action Bars"] = "Barres d'action",
flickerstreak@1 98 ["Auction"] = "H\195\180tel des ventes",
flickerstreak@1 99 ["Audio"] = "Audio",
flickerstreak@1 100 ["Battlegrounds/PvP"] = "Champs de bataille/JcJ",
flickerstreak@1 101 ["Buffs"] = "Buffs",
flickerstreak@1 102 ["Chat/Communication"] = "Chat/Communication",
flickerstreak@1 103 ["Druid"] = "Druide",
flickerstreak@1 104 ["Hunter"] = "Chasseur",
flickerstreak@1 105 ["Mage"] = "Mage",
flickerstreak@1 106 ["Paladin"] = "Paladin",
flickerstreak@1 107 ["Priest"] = "Pr\195\170tre",
flickerstreak@1 108 ["Rogue"] = "Voleur",
flickerstreak@1 109 ["Shaman"] = "Chaman",
flickerstreak@1 110 ["Warlock"] = "D\195\169moniste",
flickerstreak@1 111 ["Warrior"] = "Guerrier",
flickerstreak@1 112 ["Healer"] = "Soigneur",
flickerstreak@1 113 ["Tank"] = "Tank",
flickerstreak@1 114 ["Caster"] = "Casteur",
flickerstreak@1 115 ["Combat"] = "Combat",
flickerstreak@1 116 ["Compilations"] = "Compilations",
flickerstreak@1 117 ["Data Export"] = "Exportation de donn\195\169es",
flickerstreak@1 118 ["Development Tools"] = "Outils de d\195\169veloppement",
flickerstreak@1 119 ["Guild"] = "Guilde",
flickerstreak@1 120 ["Frame Modification"] = "Modification des fen\195\170tres",
flickerstreak@1 121 ["Interface Enhancements"] = "Am\195\169liorations de l'interface",
flickerstreak@1 122 ["Inventory"] = "Inventaire",
flickerstreak@1 123 ["Library"] = "Biblioth\195\168ques",
flickerstreak@1 124 ["Map"] = "Carte",
flickerstreak@1 125 ["Mail"] = "Courrier",
flickerstreak@1 126 ["Miscellaneous"] = "Divers",
flickerstreak@1 127 ["Quest"] = "Qu\195\170tes",
flickerstreak@1 128 ["Raid"] = "Raid",
flickerstreak@1 129 ["Tradeskill"] = "M\195\169tiers",
flickerstreak@1 130 ["UnitFrame"] = "Fen\195\170tres d'unit\195\169",
flickerstreak@1 131 }
flickerstreak@1 132 elseif GetLocale() == "koKR" then
flickerstreak@1 133 STANDBY = "|cffff5050(????)|r"
flickerstreak@1 134
flickerstreak@1 135 TITLE = "??"
flickerstreak@1 136 NOTES = "??"
flickerstreak@1 137 VERSION = "??"
flickerstreak@1 138 AUTHOR = "???"
flickerstreak@1 139 DATE = "??"
flickerstreak@1 140 CATEGORY = "??"
flickerstreak@1 141 EMAIL = "E-mail"
flickerstreak@1 142 WEBSITE = "????"
flickerstreak@1 143 CREDITS = "Credits" -- fix
flickerstreak@1 144
flickerstreak@1 145 ABOUT = "??"
flickerstreak@1 146 PRINT_ADDON_INFO = "??? ?? ??"
flickerstreak@1 147
flickerstreak@1 148 CATEGORIES = {
flickerstreak@1 149 ["Action Bars"] = "???",
flickerstreak@1 150 ["Auction"] = "??",
flickerstreak@1 151 ["Audio"] = "??",
flickerstreak@1 152 ["Battlegrounds/PvP"] = "??/PvP",
flickerstreak@1 153 ["Buffs"] = "??",
flickerstreak@1 154 ["Chat/Communication"] = "??/????",
flickerstreak@1 155 ["Druid"] = "????",
flickerstreak@1 156 ["Hunter"] = "???",
flickerstreak@1 157 ["Mage"] = "???",
flickerstreak@1 158 ["Paladin"] = "???",
flickerstreak@1 159 ["Priest"] = "??",
flickerstreak@1 160 ["Rogue"] = "??",
flickerstreak@1 161 ["Shaman"] = "???",
flickerstreak@1 162 ["Warlock"] = "????",
flickerstreak@1 163 ["Warrior"] = "??",
flickerstreak@1 164 ["Healer"] = "??",
flickerstreak@1 165 ["Tank"] = "??",
flickerstreak@1 166 ["Caster"] = "???",
flickerstreak@1 167 ["Combat"] = "??",
flickerstreak@1 168 ["Compilations"] = "??",
flickerstreak@1 169 ["Data Export"] = "?? ??",
flickerstreak@1 170 ["Development Tools"] = "?? ??",
flickerstreak@1 171 ["Guild"] = "??",
flickerstreak@1 172 ["Frame Modification"] = "?? ??",
flickerstreak@1 173 ["Interface Enhancements"] = "????? ??",
flickerstreak@1 174 ["Inventory"] = "????",
flickerstreak@1 175 ["Library"] = "?????",
flickerstreak@1 176 ["Map"] = "??",
flickerstreak@1 177 ["Mail"] = "??",
flickerstreak@1 178 ["Miscellaneous"] = "??",
flickerstreak@1 179 ["Quest"] = "???",
flickerstreak@1 180 ["Raid"] = "???",
flickerstreak@1 181 ["Tradeskill"] = "????",
flickerstreak@1 182 ["UnitFrame"] = "?? ???",
flickerstreak@1 183 }
flickerstreak@1 184 elseif GetLocale() == "zhTW" then
flickerstreak@1 185 STANDBY = "|cffff5050(??)|r"
flickerstreak@1 186
flickerstreak@1 187 TITLE = "??"
flickerstreak@1 188 NOTES = "??"
flickerstreak@1 189 VERSION = "??"
flickerstreak@1 190 AUTHOR = "??"
flickerstreak@1 191 DATE = "??"
flickerstreak@1 192 CATEGORY = "??"
flickerstreak@1 193 EMAIL = "E-mail"
flickerstreak@1 194 WEBSITE = "??"
flickerstreak@1 195 CREDITS = "Credits" -- fix
flickerstreak@1 196
flickerstreak@1 197 ABOUT = "??"
flickerstreak@1 198 PRINT_ADDON_INFO = "??????"
flickerstreak@1 199
flickerstreak@1 200 CATEGORIES = {
flickerstreak@1 201 ["Action Bars"] = "???",
flickerstreak@1 202 ["Auction"] = "??",
flickerstreak@1 203 ["Audio"] = "??",
flickerstreak@1 204 ["Battlegrounds/PvP"] = "??/PvP",
flickerstreak@1 205 ["Buffs"] = "??",
flickerstreak@1 206 ["Chat/Communication"] = "??/??",
flickerstreak@1 207 ["Druid"] = "???",
flickerstreak@1 208 ["Hunter"] = "??",
flickerstreak@1 209 ["Mage"] = "??",
flickerstreak@1 210 ["Paladin"] = "???",
flickerstreak@1 211 ["Priest"] = "??",
flickerstreak@1 212 ["Rogue"] = "??",
flickerstreak@1 213 ["Shaman"] = "??",
flickerstreak@1 214 ["Warlock"] = "??",
flickerstreak@1 215 ["Warrior"] = "??",
flickerstreak@1 216 ["Healer"] = "???",
flickerstreak@1 217 ["Tank"] = "??",
flickerstreak@1 218 ["Caster"] = "???",
flickerstreak@1 219 ["Combat"] = "??",
flickerstreak@1 220 ["Compilations"] = "??",
flickerstreak@1 221 ["Data Export"] = "????",
flickerstreak@1 222 ["Development Tools"] = "????",
flickerstreak@1 223 ["Guild"] = "??",
flickerstreak@1 224 ["Frame Modification"] = "????",
flickerstreak@1 225 ["Interface Enhancements"] = "????",
flickerstreak@1 226 ["Inventory"] = "??",
flickerstreak@1 227 ["Library"] = "???",
flickerstreak@1 228 ["Map"] = "??",
flickerstreak@1 229 ["Mail"] = "??",
flickerstreak@1 230 ["Miscellaneous"] = "??",
flickerstreak@1 231 ["Quest"] = "??",
flickerstreak@1 232 ["Raid"] = "??",
flickerstreak@1 233 ["Tradeskill"] = "????",
flickerstreak@1 234 ["UnitFrame"] = "????",
flickerstreak@1 235 }
flickerstreak@1 236 elseif GetLocale() == "zhCN" then
flickerstreak@1 237 STANDBY = "|cffff5050(\230\154\130\230\140\130)|r"
flickerstreak@1 238
flickerstreak@1 239 TITLE = "\230\160\135\233\162\152"
flickerstreak@1 240 NOTES = "\233\153\132\230\179\168"
flickerstreak@1 241 VERSION = "\231\137\136\230\156\172"
flickerstreak@1 242 AUTHOR = "\228\189\156\232\128\133"
flickerstreak@1 243 DATE = "\230\151\165\230\156\159"
flickerstreak@1 244 CATEGORY = "\229\136\134\231\177\187"
flickerstreak@1 245 EMAIL = "\231\148\181\229\173\144\233\130\174\228\187\182"
flickerstreak@1 246 WEBSITE = "\231\189\145\231\171\153"
flickerstreak@1 247 CREDITS = "Credits" -- fix
flickerstreak@1 248
flickerstreak@1 249 ABOUT = "\229\133\179\228\186\142"
flickerstreak@1 250 PRINT_ADDON_INFO = "\229\141\176\229\136\151\229\135\186\230\143\146\228\187\182\228\191\161\230\129\175"
flickerstreak@1 251
flickerstreak@1 252 CATEGORIES = {
flickerstreak@1 253 ["Action Bars"] = "\229\138\168\228\189\156\230\157\161",
flickerstreak@1 254 ["Auction"] = "\230\139\141\229\141\150",
flickerstreak@1 255 ["Audio"] = "\233\159\179\233\162\145",
flickerstreak@1 256 ["Battlegrounds/PvP"] = "\230\136\152\229\156\186/PvP",
flickerstreak@1 257 ["Buffs"] = "\229\162\158\231\155\138\233\173\148\230\179\149",
flickerstreak@1 258 ["Chat/Communication"] = "\232\129\138\229\164\169/\228\186\164\230\181\129",
flickerstreak@1 259 ["Druid"] = "\229\190\183\233\178\129\228\188\138",
flickerstreak@1 260 ["Hunter"] = "\231\140\142\228\186\186",
flickerstreak@1 261 ["Mage"] = "\230\179\149\229\184\136",
flickerstreak@1 262 ["Paladin"] = "\229\156\163\233\170\145\229\163\171",
flickerstreak@1 263 ["Priest"] = "\231\137\167\229\184\136",
flickerstreak@1 264 ["Rogue"] = "\231\155\151\232\180\188",
flickerstreak@1 265 ["Shaman"] = "\232\144\168\230\187\161\231\165\173\229\143\184",
flickerstreak@1 266 ["Warlock"] = "\230\156\175\229\163\171",
flickerstreak@1 267 ["Warrior"] = "\230\136\152\229\163\171",
flickerstreak@1 268 -- ["Healer"] = "\230\178\187\231\150\151\228\191\157\233\154\156",
flickerstreak@1 269 -- ["Tank"] = "\232\191\145\230\136\152\230\142\167\229\136\182",
flickerstreak@1 270 -- ["Caster"] = "\232\191\156\231\168\139\232\190\147\229\135\186",
flickerstreak@1 271 ["Combat"] = "\230\136\152\230\150\151",
flickerstreak@1 272 ["Compilations"] = "\231\188\150\232\175\145",
flickerstreak@1 273 ["Data Export"] = "\230\149\176\230\141\174\229\175\188\229\135\186",
flickerstreak@1 274 ["Development Tools"] = "\229\188\128\229\143\145\229\183\165\229\133\183",
flickerstreak@1 275 ["Guild"] = "\229\133\172\228\188\154",
flickerstreak@1 276 ["Frame Modification"] = "\230\161\134\230\158\182\228\191\174\230\148\185",
flickerstreak@1 277 ["Interface Enhancements"] = "\231\149\140\233\157\162\229\162\158\229\188\186",
flickerstreak@1 278 ["Inventory"] = "\232\131\140\229\140\133",
flickerstreak@1 279 ["Library"] = "\229\186\147",
flickerstreak@1 280 ["Map"] = "\229\156\176\229\155\190",
flickerstreak@1 281 ["Mail"] = "\233\130\174\228\187\182",
flickerstreak@1 282 ["Miscellaneous"] = "\230\157\130\233\161\185",
flickerstreak@1 283 ["Quest"] = "\228\187\187\229\138\161",
flickerstreak@1 284 ["Raid"] = "\229\155\162\233\152\159",
flickerstreak@1 285 ["Tradeskill"] = "\229\149\134\228\184\154\230\138\128\232\131\189",
flickerstreak@1 286 ["UnitFrame"] = "\229\164\180\229\131\143\230\161\134\230\158\182",
flickerstreak@1 287 }
flickerstreak@1 288 else -- enUS
flickerstreak@1 289 STANDBY = "|cffff5050(standby)|r"
flickerstreak@1 290
flickerstreak@1 291 TITLE = "Title"
flickerstreak@1 292 NOTES = "Notes"
flickerstreak@1 293 VERSION = "Version"
flickerstreak@1 294 AUTHOR = "Author"
flickerstreak@1 295 DATE = "Date"
flickerstreak@1 296 CATEGORY = "Category"
flickerstreak@1 297 EMAIL = "E-mail"
flickerstreak@1 298 WEBSITE = "Website"
flickerstreak@1 299 CREDITS = "Credits"
flickerstreak@1 300
flickerstreak@1 301 ABOUT = "About"
flickerstreak@1 302 PRINT_ADDON_INFO = "Show information about the addon."
flickerstreak@1 303
flickerstreak@1 304 CATEGORIES = {
flickerstreak@1 305 ["Action Bars"] = "Action Bars",
flickerstreak@1 306 ["Auction"] = "Auction",
flickerstreak@1 307 ["Audio"] = "Audio",
flickerstreak@1 308 ["Battlegrounds/PvP"] = "Battlegrounds/PvP",
flickerstreak@1 309 ["Buffs"] = "Buffs",
flickerstreak@1 310 ["Chat/Communication"] = "Chat/Communication",
flickerstreak@1 311 ["Druid"] = "Druid",
flickerstreak@1 312 ["Hunter"] = "Hunter",
flickerstreak@1 313 ["Mage"] = "Mage",
flickerstreak@1 314 ["Paladin"] = "Paladin",
flickerstreak@1 315 ["Priest"] = "Priest",
flickerstreak@1 316 ["Rogue"] = "Rogue",
flickerstreak@1 317 ["Shaman"] = "Shaman",
flickerstreak@1 318 ["Warlock"] = "Warlock",
flickerstreak@1 319 ["Warrior"] = "Warrior",
flickerstreak@1 320 ["Healer"] = "Healer",
flickerstreak@1 321 ["Tank"] = "Tank",
flickerstreak@1 322 ["Caster"] = "Caster",
flickerstreak@1 323 ["Combat"] = "Combat",
flickerstreak@1 324 ["Compilations"] = "Compilations",
flickerstreak@1 325 ["Data Export"] = "Data Export",
flickerstreak@1 326 ["Development Tools"] = "Development Tools",
flickerstreak@1 327 ["Guild"] = "Guild",
flickerstreak@1 328 ["Frame Modification"] = "Frame Modification",
flickerstreak@1 329 ["Interface Enhancements"] = "Interface Enhancements",
flickerstreak@1 330 ["Inventory"] = "Inventory",
flickerstreak@1 331 ["Library"] = "Library",
flickerstreak@1 332 ["Map"] = "Map",
flickerstreak@1 333 ["Mail"] = "Mail",
flickerstreak@1 334 ["Miscellaneous"] = "Miscellaneous",
flickerstreak@1 335 ["Quest"] = "Quest",
flickerstreak@1 336 ["Raid"] = "Raid",
flickerstreak@1 337 ["Tradeskill"] = "Tradeskill",
flickerstreak@1 338 ["UnitFrame"] = "UnitFrame",
flickerstreak@1 339 }
flickerstreak@1 340 end
flickerstreak@1 341
flickerstreak@1 342 setmetatable(CATEGORIES, { __index = function(self, key) -- case-insensitive
flickerstreak@1 343 local lowerKey = key:lower()
flickerstreak@1 344 for k,v in pairs(CATEGORIES) do
flickerstreak@1 345 if k:lower() == lowerKey then
flickerstreak@1 346 return v
flickerstreak@1 347 end
flickerstreak@1 348 end
flickerstreak@1 349 end })
flickerstreak@1 350
flickerstreak@1 351 -- Create the library object
flickerstreak@1 352
flickerstreak@1 353 local AceOO = AceLibrary("AceOO-2.0")
flickerstreak@1 354 local AceAddon = AceOO.Class()
flickerstreak@1 355 local AceEvent
flickerstreak@1 356 local AceConsole
flickerstreak@1 357 local AceModuleCore
flickerstreak@1 358
flickerstreak@1 359 function AceAddon:GetLocalizedCategory(name)
flickerstreak@1 360 self:argCheck(name, 2, "string")
flickerstreak@1 361 return CATEGORIES[name] or UNKNOWN
flickerstreak@1 362 end
flickerstreak@1 363
flickerstreak@1 364 function AceAddon:ToString()
flickerstreak@1 365 return "AceAddon"
flickerstreak@1 366 end
flickerstreak@1 367
flickerstreak@1 368 local function print(text)
flickerstreak@1 369 DEFAULT_CHAT_FRAME:AddMessage(text)
flickerstreak@1 370 end
flickerstreak@1 371
flickerstreak@1 372 function AceAddon:ADDON_LOADED(name)
flickerstreak@1 373 while table.getn(self.nextAddon) > 0 do
flickerstreak@1 374 local addon = table.remove(self.nextAddon, 1)
flickerstreak@1 375 table.insert(self.addons, addon)
flickerstreak@1 376 if not self.addons[name] then
flickerstreak@1 377 self.addons[name] = addon
flickerstreak@1 378 end
flickerstreak@1 379 self:InitializeAddon(addon, name)
flickerstreak@1 380 end
flickerstreak@1 381 end
flickerstreak@1 382
flickerstreak@1 383 local function RegisterOnEnable(self)
flickerstreak@1 384 if DEFAULT_CHAT_FRAME and DEFAULT_CHAT_FRAME.defaultLanguage then -- HACK
flickerstreak@1 385 AceAddon.playerLoginFired = true
flickerstreak@1 386 end
flickerstreak@1 387 if AceAddon.playerLoginFired then
flickerstreak@1 388 AceAddon.addonsStarted[self] = true
flickerstreak@1 389 if (type(self.IsActive) ~= "function" or self:IsActive()) and (not AceModuleCore or not AceModuleCore:IsModule(self) or AceModuleCore:IsModuleActive(self)) then
flickerstreak@1 390 local current = self.class
flickerstreak@1 391 while true do
flickerstreak@1 392 if current == AceOO.Class then
flickerstreak@1 393 break
flickerstreak@1 394 end
flickerstreak@1 395 if current.mixins then
flickerstreak@1 396 for mixin in pairs(current.mixins) do
flickerstreak@1 397 if type(mixin.OnEmbedEnable) == "function" then
flickerstreak@1 398 safecall(mixin.OnEmbedEnable,mixin,self)
flickerstreak@1 399 end
flickerstreak@1 400 end
flickerstreak@1 401 end
flickerstreak@1 402 current = current.super
flickerstreak@1 403 end
flickerstreak@1 404 if type(self.OnEnable) == "function" then
flickerstreak@1 405 safecall(self.OnEnable,self)
flickerstreak@1 406 end
flickerstreak@1 407 if AceEvent then
flickerstreak@1 408 AceEvent:TriggerEvent("Ace2_AddonEnabled", self)
flickerstreak@1 409 end
flickerstreak@1 410 end
flickerstreak@1 411 else
flickerstreak@1 412 if not AceAddon.addonsToOnEnable then
flickerstreak@1 413 AceAddon.addonsToOnEnable = {}
flickerstreak@1 414 end
flickerstreak@1 415 table.insert(AceAddon.addonsToOnEnable, self)
flickerstreak@1 416 end
flickerstreak@1 417 end
flickerstreak@1 418
flickerstreak@1 419 local function stripSpaces(text)
flickerstreak@1 420 if type(text) == "string" then
flickerstreak@1 421 return strtrim(text)
flickerstreak@1 422 end
flickerstreak@1 423 return text
flickerstreak@1 424 end
flickerstreak@1 425
flickerstreak@1 426 function AceAddon:InitializeAddon(addon, name)
flickerstreak@1 427 if addon.name == nil then
flickerstreak@1 428 addon.name = name
flickerstreak@1 429 end
flickerstreak@1 430 if GetAddOnMetadata then
flickerstreak@1 431 -- TOC checks
flickerstreak@1 432 if addon.title == nil then
flickerstreak@1 433 addon.title = GetAddOnMetadata(name, "Title")
flickerstreak@1 434 end
flickerstreak@1 435 if type(addon.title) == "string" then
flickerstreak@1 436 local num = addon.title:find(" |cff7fff7f %-Ace2%-|r$")
flickerstreak@1 437 if num then
flickerstreak@1 438 addon.title = addon.title:sub(1, num - 1)
flickerstreak@1 439 end
flickerstreak@1 440 addon.title = addon.title:trim()
flickerstreak@1 441 end
flickerstreak@1 442 if addon.notes == nil then
flickerstreak@1 443 addon.notes = GetAddOnMetadata(name, "Notes")
flickerstreak@1 444 end
flickerstreak@1 445 if type(addon.notes) == "string" then
flickerstreak@1 446 addon.notes = addon.notes:trim()
flickerstreak@1 447 end
flickerstreak@1 448 if addon.version == nil then
flickerstreak@1 449 addon.version = GetAddOnMetadata(name, "Version")
flickerstreak@1 450 end
flickerstreak@1 451 if type(addon.version) == "string" then
flickerstreak@1 452 if addon.version:find("%$Revision: (%d+) %$") then
flickerstreak@1 453 addon.version = addon.version:gsub("%$Revision: (%d+) %$", "%1")
flickerstreak@1 454 elseif addon.version:find("%$Rev: (%d+) %$") then
flickerstreak@1 455 addon.version = addon.version:gsub("%$Rev: (%d+) %$", "%1")
flickerstreak@1 456 elseif addon.version:find("%$LastChangedRevision: (%d+) %$") then
flickerstreak@1 457 addon.version = addon.version:gsub("%$LastChangedRevision: (%d+) %$", "%1")
flickerstreak@1 458 end
flickerstreak@1 459 addon.version = addon.version:trim()
flickerstreak@1 460 end
flickerstreak@1 461 if addon.author == nil then
flickerstreak@1 462 addon.author = GetAddOnMetadata(name, "Author")
flickerstreak@1 463 end
flickerstreak@1 464 if type(addon.author) == "string" then
flickerstreak@1 465 addon.author = addon.author:trim()
flickerstreak@1 466 end
flickerstreak@1 467 if addon.credits == nil then
flickerstreak@1 468 addon.credits = GetAddOnMetadata(name, "X-Credits")
flickerstreak@1 469 end
flickerstreak@1 470 if type(addon.credits) == "string" then
flickerstreak@1 471 addon.credits = addon.credits:trim()
flickerstreak@1 472 end
flickerstreak@1 473 if addon.date == nil then
flickerstreak@1 474 addon.date = GetAddOnMetadata(name, "X-Date") or GetAddOnMetadata(name, "X-ReleaseDate")
flickerstreak@1 475 end
flickerstreak@1 476 if type(addon.date) == "string" then
flickerstreak@1 477 if addon.date:find("%$Date: (.-) %$") then
flickerstreak@1 478 addon.date = addon.date:gsub("%$Date: (.-) %$", "%1")
flickerstreak@1 479 elseif addon.date:find("%$LastChangedDate: (.-) %$") then
flickerstreak@1 480 addon.date = addon.date:gsub("%$LastChangedDate: (.-) %$", "%1")
flickerstreak@1 481 end
flickerstreak@1 482 addon.date = addon.date:trim()
flickerstreak@1 483 end
flickerstreak@1 484
flickerstreak@1 485 if addon.category == nil then
flickerstreak@1 486 addon.category = GetAddOnMetadata(name, "X-Category")
flickerstreak@1 487 end
flickerstreak@1 488 if type(addon.category) == "string" then
flickerstreak@1 489 addon.category = addon.category:trim()
flickerstreak@1 490 end
flickerstreak@1 491 if addon.email == nil then
flickerstreak@1 492 addon.email = GetAddOnMetadata(name, "X-eMail") or GetAddOnMetadata(name, "X-Email")
flickerstreak@1 493 end
flickerstreak@1 494 if type(addon.email) == "string" then
flickerstreak@1 495 addon.email = addon.email:trim()
flickerstreak@1 496 end
flickerstreak@1 497 if addon.website == nil then
flickerstreak@1 498 addon.website = GetAddOnMetadata(name, "X-Website")
flickerstreak@1 499 end
flickerstreak@1 500 if type(addon.website) == "string" then
flickerstreak@1 501 addon.website = addon.website:trim()
flickerstreak@1 502 end
flickerstreak@1 503 end
flickerstreak@1 504 local current = addon.class
flickerstreak@1 505 while true do
flickerstreak@1 506 if current == AceOO.Class then
flickerstreak@1 507 break
flickerstreak@1 508 end
flickerstreak@1 509 if current.mixins then
flickerstreak@1 510 for mixin in pairs(current.mixins) do
flickerstreak@1 511 if type(mixin.OnEmbedInitialize) == "function" then
flickerstreak@1 512 mixin:OnEmbedInitialize(addon, name)
flickerstreak@1 513 end
flickerstreak@1 514 end
flickerstreak@1 515 end
flickerstreak@1 516 current = current.super
flickerstreak@1 517 end
flickerstreak@1 518 if type(addon.OnInitialize) == "function" then
flickerstreak@1 519 safecall(addon.OnInitialize, addon, name)
flickerstreak@1 520 end
flickerstreak@1 521 if AceEvent then
flickerstreak@1 522 AceEvent:TriggerEvent("Ace2_AddonInitialized", addon)
flickerstreak@1 523 end
flickerstreak@1 524 RegisterOnEnable(addon)
flickerstreak@1 525 end
flickerstreak@1 526
flickerstreak@1 527 function AceAddon.prototype:PrintAddonInfo()
flickerstreak@1 528 local x
flickerstreak@1 529 if self.title then
flickerstreak@1 530 x = "|cffffff7f" .. tostring(self.title) .. "|r"
flickerstreak@1 531 elseif self.name then
flickerstreak@1 532 x = "|cffffff7f" .. tostring(self.name) .. "|r"
flickerstreak@1 533 else
flickerstreak@1 534 x = "|cffffff7f<" .. tostring(self.class) .. " instance>|r"
flickerstreak@1 535 end
flickerstreak@1 536 if type(self.IsActive) == "function" then
flickerstreak@1 537 if not self:IsActive() then
flickerstreak@1 538 x = x .. " " .. STANDBY
flickerstreak@1 539 end
flickerstreak@1 540 end
flickerstreak@1 541 if self.version then
flickerstreak@1 542 x = x .. " - |cffffff7f" .. tostring(self.version) .. "|r"
flickerstreak@1 543 end
flickerstreak@1 544 if self.notes then
flickerstreak@1 545 x = x .. " - " .. tostring(self.notes)
flickerstreak@1 546 end
flickerstreak@1 547 print(x)
flickerstreak@1 548 if self.author then
flickerstreak@1 549 print(" - |cffffff7f" .. AUTHOR .. ":|r " .. tostring(self.author))
flickerstreak@1 550 end
flickerstreak@1 551 if self.credits then
flickerstreak@1 552 print(" - |cffffff7f" .. CREDITS .. ":|r " .. tostring(self.credits))
flickerstreak@1 553 end
flickerstreak@1 554 if self.date then
flickerstreak@1 555 print(" - |cffffff7f" .. DATE .. ":|r " .. tostring(self.date))
flickerstreak@1 556 end
flickerstreak@1 557 if self.category then
flickerstreak@1 558 local category = CATEGORIES[self.category]
flickerstreak@1 559 if category then
flickerstreak@1 560 print(" - |cffffff7f" .. CATEGORY .. ":|r " .. category)
flickerstreak@1 561 end
flickerstreak@1 562 end
flickerstreak@1 563 if self.email then
flickerstreak@1 564 print(" - |cffffff7f" .. EMAIL .. ":|r " .. tostring(self.email))
flickerstreak@1 565 end
flickerstreak@1 566 if self.website then
flickerstreak@1 567 print(" - |cffffff7f" .. WEBSITE .. ":|r " .. tostring(self.website))
flickerstreak@1 568 end
flickerstreak@1 569 end
flickerstreak@1 570
flickerstreak@1 571 local options
flickerstreak@1 572 function AceAddon:GetAceOptionsDataTable(target)
flickerstreak@1 573 if not options then
flickerstreak@1 574 options = {
flickerstreak@1 575 about = {
flickerstreak@1 576 name = ABOUT,
flickerstreak@1 577 desc = PRINT_ADDON_INFO,
flickerstreak@1 578 type = "execute",
flickerstreak@1 579 func = "PrintAddonInfo",
flickerstreak@1 580 order = -1,
flickerstreak@1 581 }
flickerstreak@1 582 }
flickerstreak@1 583 end
flickerstreak@1 584 return options
flickerstreak@1 585 end
flickerstreak@1 586
flickerstreak@1 587 function AceAddon:PLAYER_LOGIN()
flickerstreak@1 588 self.playerLoginFired = true
flickerstreak@1 589 if self.addonsToOnEnable then
flickerstreak@1 590 while table.getn(self.addonsToOnEnable) > 0 do
flickerstreak@1 591 local addon = table.remove(self.addonsToOnEnable, 1)
flickerstreak@1 592 self.addonsStarted[addon] = true
flickerstreak@1 593 if (type(addon.IsActive) ~= "function" or addon:IsActive()) and (not AceModuleCore or not AceModuleCore:IsModule(addon) or AceModuleCore:IsModuleActive(addon)) then
flickerstreak@1 594 local current = addon.class
flickerstreak@1 595 while true do
flickerstreak@1 596 if current == AceOO.Class then
flickerstreak@1 597 break
flickerstreak@1 598 end
flickerstreak@1 599 if current.mixins then
flickerstreak@1 600 for mixin in pairs(current.mixins) do
flickerstreak@1 601 if type(mixin.OnEmbedEnable) == "function" then
flickerstreak@1 602 safecall(mixin.OnEmbedEnable,mixin,addon)
flickerstreak@1 603 end
flickerstreak@1 604 end
flickerstreak@1 605 end
flickerstreak@1 606 current = current.super
flickerstreak@1 607 end
flickerstreak@1 608 if type(addon.OnEnable) == "function" then
flickerstreak@1 609 safecall(addon.OnEnable,addon)
flickerstreak@1 610 end
flickerstreak@1 611 if AceEvent then
flickerstreak@1 612 AceEvent:TriggerEvent("Ace2_AddonEnabled", addon)
flickerstreak@1 613 end
flickerstreak@1 614 end
flickerstreak@1 615 end
flickerstreak@1 616 self.addonsToOnEnable = nil
flickerstreak@1 617 end
flickerstreak@1 618 end
flickerstreak@1 619
flickerstreak@1 620 function AceAddon.prototype:Inject(t)
flickerstreak@1 621 AceAddon:argCheck(t, 2, "table")
flickerstreak@1 622 for k,v in pairs(t) do
flickerstreak@1 623 self[k] = v
flickerstreak@1 624 end
flickerstreak@1 625 end
flickerstreak@1 626
flickerstreak@1 627 function AceAddon.prototype:init()
flickerstreak@1 628 if not AceEvent then
flickerstreak@1 629 error(MAJOR_VERSION .. " requires AceEvent-2.0", 4)
flickerstreak@1 630 end
flickerstreak@1 631 AceAddon.super.prototype.init(self)
flickerstreak@1 632
flickerstreak@1 633 self.super = self.class.prototype
flickerstreak@1 634
flickerstreak@1 635 AceAddon:RegisterEvent("ADDON_LOADED", "ADDON_LOADED", true)
flickerstreak@1 636 table.insert(AceAddon.nextAddon, self)
flickerstreak@1 637 end
flickerstreak@1 638
flickerstreak@1 639 function AceAddon.prototype:ToString()
flickerstreak@1 640 local x
flickerstreak@1 641 if type(self.title) == "string" then
flickerstreak@1 642 x = self.title
flickerstreak@1 643 elseif type(self.name) == "string" then
flickerstreak@1 644 x = self.name
flickerstreak@1 645 else
flickerstreak@1 646 x = "<" .. tostring(self.class) .. " instance>"
flickerstreak@1 647 end
flickerstreak@1 648 if (type(self.IsActive) == "function" and not self:IsActive()) or (AceModuleCore and AceModuleCore:IsModule(addon) and AceModuleCore:IsModuleActive(addon)) then
flickerstreak@1 649 x = x .. " " .. STANDBY
flickerstreak@1 650 end
flickerstreak@1 651 return x
flickerstreak@1 652 end
flickerstreak@1 653
flickerstreak@1 654 AceAddon.new = function(self, ...)
flickerstreak@1 655 local class = AceAddon:pcall(AceOO.Classpool, self, ...)
flickerstreak@1 656 return class:new()
flickerstreak@1 657 end
flickerstreak@1 658
flickerstreak@1 659 local function external(self, major, instance)
flickerstreak@1 660 if major == "AceEvent-2.0" then
flickerstreak@1 661 AceEvent = instance
flickerstreak@1 662
flickerstreak@1 663 AceEvent:embed(self)
flickerstreak@1 664
flickerstreak@1 665 self:RegisterEvent("PLAYER_LOGIN", "PLAYER_LOGIN", true)
flickerstreak@1 666 elseif major == "AceConsole-2.0" then
flickerstreak@1 667 AceConsole = instance
flickerstreak@1 668
flickerstreak@1 669 local slashCommands = { "/ace2" }
flickerstreak@1 670 local _,_,_,enabled,loadable = GetAddOnInfo("Ace")
flickerstreak@1 671 if not enabled or not loadable then
flickerstreak@1 672 table.insert(slashCommands, "/ace")
flickerstreak@1 673 end
flickerstreak@1 674 local function listAddon(addon, depth)
flickerstreak@1 675 if not depth then
flickerstreak@1 676 depth = 0
flickerstreak@1 677 end
flickerstreak@1 678
flickerstreak@1 679 local s = (" "):rep(depth) .. " - " .. tostring(addon)
flickerstreak@1 680 if rawget(addon, 'version') then
flickerstreak@1 681 s = s .. " - |cffffff7f" .. tostring(addon.version) .. "|r"
flickerstreak@1 682 end
flickerstreak@1 683 if rawget(addon, 'slashCommand') then
flickerstreak@1 684 s = s .. " |cffffff7f(" .. tostring(addon.slashCommand) .. ")|r"
flickerstreak@1 685 end
flickerstreak@1 686 print(s)
flickerstreak@1 687 if type(rawget(addon, 'modules')) == "table" then
flickerstreak@1 688 local i = 0
flickerstreak@1 689 for k,v in pairs(addon.modules) do
flickerstreak@1 690 i = i + 1
flickerstreak@1 691 if i == 6 then
flickerstreak@1 692 print((" "):rep(depth + 1) .. " - more...")
flickerstreak@1 693 break
flickerstreak@1 694 else
flickerstreak@1 695 listAddon(v, depth + 1)
flickerstreak@1 696 end
flickerstreak@1 697 end
flickerstreak@1 698 end
flickerstreak@1 699 end
flickerstreak@1 700 local function listNormalAddon(i)
flickerstreak@1 701 local name,_,_,enabled,loadable = GetAddOnInfo(i)
flickerstreak@1 702 if not loadable then
flickerstreak@1 703 enabled = false
flickerstreak@1 704 end
flickerstreak@1 705 if self.addons[name] then
flickerstreak@1 706 local addon = self.addons[name]
flickerstreak@1 707 if not AceCoreAddon or not AceCoreAddon:IsModule(addon) then
flickerstreak@1 708 listAddon(addon)
flickerstreak@1 709 end
flickerstreak@1 710 else
flickerstreak@1 711 local s = " - " .. tostring(GetAddOnMetadata(i, "Title") or name)
flickerstreak@1 712 local version = GetAddOnMetadata(i, "Version")
flickerstreak@1 713 if version then
flickerstreak@1 714 if version:find("%$Revision: (%d+) %$") then
flickerstreak@1 715 version = version:gsub("%$Revision: (%d+) %$", "%1")
flickerstreak@1 716 elseif version:find("%$Rev: (%d+) %$") then
flickerstreak@1 717 version = version:gsub("%$Rev: (%d+) %$", "%1")
flickerstreak@1 718 elseif version:find("%$LastChangedRevision: (%d+) %$") then
flickerstreak@1 719 version = version:gsub("%$LastChangedRevision: (%d+) %$", "%1")
flickerstreak@1 720 end
flickerstreak@1 721 s = s .. " - |cffffff7f" .. version .. "|r"
flickerstreak@1 722 end
flickerstreak@1 723 if not enabled then
flickerstreak@1 724 s = s .. " |cffff0000(disabled)|r"
flickerstreak@1 725 end
flickerstreak@1 726 if IsAddOnLoadOnDemand(i) then
flickerstreak@1 727 s = s .. " |cff00ff00[LoD]|r"
flickerstreak@1 728 end
flickerstreak@1 729 print(s)
flickerstreak@1 730 end
flickerstreak@1 731 end
flickerstreak@1 732 local function mySort(alpha, bravo)
flickerstreak@1 733 return tostring(alpha) < tostring(bravo)
flickerstreak@1 734 end
flickerstreak@1 735 AceConsole.RegisterChatCommand(self, slashCommands, {
flickerstreak@1 736 desc = "AddOn development framework",
flickerstreak@1 737 name = "Ace2",
flickerstreak@1 738 type = "group",
flickerstreak@1 739 args = {
flickerstreak@1 740 about = {
flickerstreak@1 741 desc = "Get information about Ace2",
flickerstreak@1 742 name = "About",
flickerstreak@1 743 type = "execute",
flickerstreak@1 744 func = function()
flickerstreak@1 745 print("|cffffff7fAce2|r - |cffffff7f2.0." .. MINOR_VERSION:gsub("%$Revision: (%d+) %$", "%1") .. "|r - AddOn development framework")
flickerstreak@1 746 print(" - |cffffff7f" .. AUTHOR .. ":|r Ace Development Team")
flickerstreak@1 747 print(" - |cffffff7f" .. WEBSITE .. ":|r http://www.wowace.com/")
flickerstreak@1 748 end
flickerstreak@1 749 },
flickerstreak@1 750 list = {
flickerstreak@1 751 desc = "List addons",
flickerstreak@1 752 name = "List",
flickerstreak@1 753 type = "group",
flickerstreak@1 754 args = {
flickerstreak@1 755 ace2 = {
flickerstreak@1 756 desc = "List addons using Ace2",
flickerstreak@1 757 name = "Ace2",
flickerstreak@1 758 type = "execute",
flickerstreak@1 759 func = function()
flickerstreak@1 760 print("|cffffff7fAddon list:|r")
flickerstreak@1 761 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
flickerstreak@1 762 table.sort(self.addons, mySort)
flickerstreak@1 763 for _,v in ipairs(self.addons) do
flickerstreak@1 764 if not AceCoreAddon or not AceCoreAddon:IsModule(v) then
flickerstreak@1 765 listAddon(v)
flickerstreak@1 766 end
flickerstreak@1 767 end
flickerstreak@1 768 end
flickerstreak@1 769 },
flickerstreak@1 770 all = {
flickerstreak@1 771 desc = "List all addons",
flickerstreak@1 772 name = "All",
flickerstreak@1 773 type = "execute",
flickerstreak@1 774 func = function()
flickerstreak@1 775 print("|cffffff7fAddon list:|r")
flickerstreak@1 776 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
flickerstreak@1 777 local count = GetNumAddOns()
flickerstreak@1 778 for i = 1, count do
flickerstreak@1 779 listNormalAddon(i)
flickerstreak@1 780 end
flickerstreak@1 781 end
flickerstreak@1 782 },
flickerstreak@1 783 enabled = {
flickerstreak@1 784 desc = "List all enabled addons",
flickerstreak@1 785 name = "Enabled",
flickerstreak@1 786 type = "execute",
flickerstreak@1 787 func = function()
flickerstreak@1 788 print("|cffffff7fAddon list:|r")
flickerstreak@1 789 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
flickerstreak@1 790 local count = GetNumAddOns()
flickerstreak@1 791 for i = 1, count do
flickerstreak@1 792 local _,_,_,enabled,loadable = GetAddOnInfo(i)
flickerstreak@1 793 if enabled and loadable then
flickerstreak@1 794 listNormalAddon(i)
flickerstreak@1 795 end
flickerstreak@1 796 end
flickerstreak@1 797 end
flickerstreak@1 798 },
flickerstreak@1 799 disabled = {
flickerstreak@1 800 desc = "List all disabled addons",
flickerstreak@1 801 name = "Disabled",
flickerstreak@1 802 type = "execute",
flickerstreak@1 803 func = function()
flickerstreak@1 804 print("|cffffff7fAddon list:|r")
flickerstreak@1 805 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
flickerstreak@1 806 local count = GetNumAddOns()
flickerstreak@1 807 for i = 1, count do
flickerstreak@1 808 local _,_,_,enabled,loadable = GetAddOnInfo(i)
flickerstreak@1 809 if not enabled or not loadable then
flickerstreak@1 810 listNormalAddon(i)
flickerstreak@1 811 end
flickerstreak@1 812 end
flickerstreak@1 813 end
flickerstreak@1 814 },
flickerstreak@1 815 lod = {
flickerstreak@1 816 desc = "List all LoadOnDemand addons",
flickerstreak@1 817 name = "LoadOnDemand",
flickerstreak@1 818 type = "execute",
flickerstreak@1 819 func = function()
flickerstreak@1 820 print("|cffffff7fAddon list:|r")
flickerstreak@1 821 local AceCoreAddon = AceLibrary:HasInstance("AceCoreAddon-2.0") and AceLibrary("AceCoreAddon-2.0")
flickerstreak@1 822 local count = GetNumAddOns()
flickerstreak@1 823 for i = 1, count do
flickerstreak@1 824 if IsAddOnLoadOnDemand(i) then
flickerstreak@1 825 listNormalAddon(i)
flickerstreak@1 826 end
flickerstreak@1 827 end
flickerstreak@1 828 end
flickerstreak@1 829 },
flickerstreak@1 830 ace1 = {
flickerstreak@1 831 desc = "List all addons using Ace1",
flickerstreak@1 832 name = "Ace 1.x",
flickerstreak@1 833 type = "execute",
flickerstreak@1 834 func = function()
flickerstreak@1 835 print("|cffffff7fAddon list:|r")
flickerstreak@1 836 local count = GetNumAddOns()
flickerstreak@1 837 for i = 1, count do
flickerstreak@1 838 local dep1, dep2, dep3, dep4 = GetAddOnDependencies(i)
flickerstreak@1 839 if dep1 == "Ace" or dep2 == "Ace" or dep3 == "Ace" or dep4 == "Ace" then
flickerstreak@1 840 listNormalAddon(i)
flickerstreak@1 841 end
flickerstreak@1 842 end
flickerstreak@1 843 end
flickerstreak@1 844 },
flickerstreak@1 845 libs = {
flickerstreak@1 846 desc = "List all libraries using AceLibrary",
flickerstreak@1 847 name = "Libraries",
flickerstreak@1 848 type = "execute",
flickerstreak@1 849 func = function()
flickerstreak@1 850 if type(AceLibrary) == "table" and type(AceLibrary.libs) == "table" then
flickerstreak@1 851 print("|cffffff7fLibrary list:|r")
flickerstreak@1 852 for name, data in pairs(AceLibrary.libs) do
flickerstreak@1 853 local s
flickerstreak@1 854 if data.minor then
flickerstreak@1 855 s = " - " .. tostring(name) .. "." .. tostring(data.minor)
flickerstreak@1 856 else
flickerstreak@1 857 s = " - " .. tostring(name)
flickerstreak@1 858 end
flickerstreak@1 859 if rawget(AceLibrary(name), 'slashCommand') then
flickerstreak@1 860 s = s .. " |cffffff7f(" .. tostring(AceLibrary(name).slashCommand) .. "|cffffff7f)"
flickerstreak@1 861 end
flickerstreak@1 862 print(s)
flickerstreak@1 863 end
flickerstreak@1 864 end
flickerstreak@1 865 end
flickerstreak@1 866 },
flickerstreak@1 867 search = {
flickerstreak@1 868 desc = "Search by name",
flickerstreak@1 869 name = "Search",
flickerstreak@1 870 type = "text",
flickerstreak@1 871 usage = "<keyword>",
flickerstreak@1 872 input = true,
flickerstreak@1 873 get = false,
flickerstreak@1 874 set = function(...)
flickerstreak@1 875 local arg = { ... }
flickerstreak@1 876 for i,v in ipairs(arg) do
flickerstreak@1 877 arg[i] = v:gsub('%*', '.*'):gsub('%%', '%%%%'):lower()
flickerstreak@1 878 end
flickerstreak@1 879 local count = GetNumAddOns()
flickerstreak@1 880 for i = 1, count do
flickerstreak@1 881 local name = GetAddOnInfo(i)
flickerstreak@1 882 local good = true
flickerstreak@1 883 for _,v in ipairs(arg) do
flickerstreak@1 884 if not name:lower():find(v) then
flickerstreak@1 885 good = false
flickerstreak@1 886 break
flickerstreak@1 887 end
flickerstreak@1 888 end
flickerstreak@1 889 if good then
flickerstreak@1 890 listNormalAddon(i)
flickerstreak@1 891 end
flickerstreak@1 892 end
flickerstreak@1 893 end
flickerstreak@1 894 }
flickerstreak@1 895 },
flickerstreak@1 896 },
flickerstreak@1 897 enable = {
flickerstreak@1 898 desc = "Enable addon",
flickerstreak@1 899 name = "Enable",
flickerstreak@1 900 type = "text",
flickerstreak@1 901 usage = "<addon>",
flickerstreak@1 902 get = false,
flickerstreak@1 903 set = function(text)
flickerstreak@1 904 local name,title,_,enabled,_,reason = GetAddOnInfo(text)
flickerstreak@1 905 if reason == "MISSING" then
flickerstreak@1 906 print(string.format("|cffffff7fAce2:|r AddOn %q does not exist", text))
flickerstreak@1 907 elseif not enabled then
flickerstreak@1 908 EnableAddOn(text)
flickerstreak@1 909 print(string.format("|cffffff7fAce2:|r %s is now enabled", title or name))
flickerstreak@1 910 else
flickerstreak@1 911 print(string.format("|cffffff7fAce2:|r %s is already enabled", title or name))
flickerstreak@1 912 end
flickerstreak@1 913 end,
flickerstreak@1 914 },
flickerstreak@1 915 disable = {
flickerstreak@1 916 desc = "Disable addon",
flickerstreak@1 917 name = "Disable",
flickerstreak@1 918 type = "text",
flickerstreak@1 919 usage = "<addon>",
flickerstreak@1 920 get = false,
flickerstreak@1 921 set = function(text)
flickerstreak@1 922 local name,title,_,enabled,_,reason = GetAddOnInfo(text)
flickerstreak@1 923 if reason == "MISSING" then
flickerstreak@1 924 print(string.format("|cffffff7fAce2:|r AddOn %q does not exist", text))
flickerstreak@1 925 elseif enabled then
flickerstreak@1 926 DisableAddOn(text)
flickerstreak@1 927 print(string.format("|cffffff7fAce2:|r %s is now disabled", title or name))
flickerstreak@1 928 else
flickerstreak@1 929 print(string.format("|cffffff7fAce2:|r %s is already disabled", title or name))
flickerstreak@1 930 end
flickerstreak@1 931 end,
flickerstreak@1 932 },
flickerstreak@1 933 load = {
flickerstreak@1 934 desc = "Load addon",
flickerstreak@1 935 name = "Load",
flickerstreak@1 936 type = "text",
flickerstreak@1 937 usage = "<addon>",
flickerstreak@1 938 get = false,
flickerstreak@1 939 set = function(text)
flickerstreak@1 940 local name,title,_,_,loadable,reason = GetAddOnInfo(text)
flickerstreak@1 941 if reason == "MISSING" then
flickerstreak@1 942 print(string.format("|cffffff7fAce2:|r AddOn %q does not exist.", text))
flickerstreak@1 943 elseif not loadable then
flickerstreak@1 944 print(string.format("|cffffff7fAce2:|r AddOn %q is not loadable. Reason: %s", text, reason))
flickerstreak@1 945 else
flickerstreak@1 946 LoadAddOn(text)
flickerstreak@1 947 print(string.format("|cffffff7fAce2:|r %s is now loaded", title or name))
flickerstreak@1 948 end
flickerstreak@1 949 end
flickerstreak@1 950 },
flickerstreak@1 951 info = {
flickerstreak@1 952 desc = "Display information",
flickerstreak@1 953 name = "Information",
flickerstreak@1 954 type = "execute",
flickerstreak@1 955 func = function()
flickerstreak@1 956 local mem, threshold = gcinfo()
flickerstreak@1 957 print(string.format(" - |cffffff7fMemory usage [|r%.3f MiB|cffffff7f]|r", mem / 1024))
flickerstreak@1 958 if threshold then
flickerstreak@1 959 print(string.format(" - |cffffff7fThreshold [|r%.3f MiB|cffffff7f]|r", threshold / 1024))
flickerstreak@1 960 end
flickerstreak@1 961 print(string.format(" - |cffffff7fFramerate [|r%.0f fps|cffffff7f]|r", GetFramerate()))
flickerstreak@1 962 local bandwidthIn, bandwidthOut, latency = GetNetStats()
flickerstreak@1 963 bandwidthIn, bandwidthOut = floor(bandwidthIn * 1024), floor(bandwidthOut * 1024)
flickerstreak@1 964 print(string.format(" - |cffffff7fLatency [|r%.0f ms|cffffff7f]|r", latency))
flickerstreak@1 965 print(string.format(" - |cffffff7fBandwidth in [|r%.0f B/s|cffffff7f]|r", bandwidthIn))
flickerstreak@1 966 print(string.format(" - |cffffff7fBandwidth out [|r%.0f B/s|cffffff7f]|r", bandwidthOut))
flickerstreak@1 967 print(string.format(" - |cffffff7fTotal addons [|r%d|cffffff7f]|r", GetNumAddOns()))
flickerstreak@1 968 print(string.format(" - |cffffff7fAce2 addons [|r%d|cffffff7f]|r", table.getn(self.addons)))
flickerstreak@1 969 local ace = 0
flickerstreak@1 970 local enabled = 0
flickerstreak@1 971 local disabled = 0
flickerstreak@1 972 local lod = 0
flickerstreak@1 973 for i = 1, GetNumAddOns() do
flickerstreak@1 974 local dep1, dep2, dep3, dep4 = GetAddOnDependencies(i)
flickerstreak@1 975 if dep1 == "Ace" or dep2 == "Ace" or dep3 == "Ace" or dep4 == "Ace" then
flickerstreak@1 976 ace = ace + 1
flickerstreak@1 977 end
flickerstreak@1 978 if IsAddOnLoadOnDemand(i) then
flickerstreak@1 979 lod = lod + 1
flickerstreak@1 980 end
flickerstreak@1 981 local _,_,_,IsActive,loadable = GetAddOnInfo(i)
flickerstreak@1 982 if not IsActive or not loadable then
flickerstreak@1 983 disabled = disabled + 1
flickerstreak@1 984 else
flickerstreak@1 985 enabled = enabled + 1
flickerstreak@1 986 end
flickerstreak@1 987 end
flickerstreak@1 988 print(string.format(" - |cffffff7fAce 1.x addons [|r%d|cffffff7f]|r", ace))
flickerstreak@1 989 print(string.format(" - |cffffff7fLoadOnDemand addons [|r%d|cffffff7f]|r", lod))
flickerstreak@1 990 print(string.format(" - |cffffff7fenabled addons [|r%d|cffffff7f]|r", enabled))
flickerstreak@1 991 print(string.format(" - |cffffff7fdisabled addons [|r%d|cffffff7f]|r", disabled))
flickerstreak@1 992 local libs = 0
flickerstreak@1 993 if type(AceLibrary) == "table" and type(AceLibrary.libs) == "table" then
flickerstreak@1 994 for _ in pairs(AceLibrary.libs) do
flickerstreak@1 995 libs = libs + 1
flickerstreak@1 996 end
flickerstreak@1 997 end
flickerstreak@1 998 print(string.format(" - |cffffff7fAceLibrary instances [|r%d|cffffff7f]|r", libs))
flickerstreak@1 999 end
flickerstreak@1 1000 }
flickerstreak@1 1001 }
flickerstreak@1 1002 })
flickerstreak@1 1003 elseif major == "AceModuleCore-2.0" then
flickerstreak@1 1004 AceModuleCore = instance
flickerstreak@1 1005 end
flickerstreak@1 1006 end
flickerstreak@1 1007
flickerstreak@1 1008 local function activate(self, oldLib, oldDeactivate)
flickerstreak@1 1009 AceAddon = self
flickerstreak@1 1010
flickerstreak@1 1011 if oldLib then
flickerstreak@1 1012 self.playerLoginFired = oldLib.playerLoginFired or DEFAULT_CHAT_FRAME and DEFAULT_CHAT_FRAME.defaultLanguage
flickerstreak@1 1013 self.addonsToOnEnable = oldLib.addonsToOnEnable
flickerstreak@1 1014 self.addons = oldLib.addons
flickerstreak@1 1015 self.nextAddon = oldLib.nextAddon
flickerstreak@1 1016 self.addonsStarted = oldLib.addonsStarted
flickerstreak@1 1017 end
flickerstreak@1 1018 if not self.addons then
flickerstreak@1 1019 self.addons = {}
flickerstreak@1 1020 end
flickerstreak@1 1021 if not self.nextAddon then
flickerstreak@1 1022 self.nextAddon = {}
flickerstreak@1 1023 end
flickerstreak@1 1024 if not self.addonsStarted then
flickerstreak@1 1025 self.addonsStarted = {}
flickerstreak@1 1026 end
flickerstreak@1 1027 if oldDeactivate then
flickerstreak@1 1028 oldDeactivate(oldLib)
flickerstreak@1 1029 end
flickerstreak@1 1030 end
flickerstreak@1 1031
flickerstreak@1 1032 AceLibrary:Register(AceAddon, MAJOR_VERSION, MINOR_VERSION, activate, nil, external)