flickerstreak@1: --[[ flickerstreak@1: Name: AceDebug-2.0 flickerstreak@1: Revision: $Rev: 18708 $ flickerstreak@1: Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team) flickerstreak@1: Inspired By: Ace 1.x by Turan (turan@gryphon.com) flickerstreak@1: Website: http://www.wowace.com/ flickerstreak@1: Documentation: http://www.wowace.com/index.php/AceDebug-2.0 flickerstreak@1: SVN: http://svn.wowace.com/root/trunk/Ace2/AceDebug-2.0 flickerstreak@1: Description: Mixin to allow for simple debugging capabilities. flickerstreak@1: Dependencies: AceLibrary, AceOO-2.0 flickerstreak@1: ]] flickerstreak@1: flickerstreak@1: local MAJOR_VERSION = "AceDebug-2.0" flickerstreak@1: local MINOR_VERSION = "$Revision: 18708 $" flickerstreak@1: flickerstreak@1: if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary") end flickerstreak@1: if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end flickerstreak@1: flickerstreak@1: if not AceLibrary:HasInstance("AceOO-2.0") then error(MAJOR_VERSION .. " requires AceOO-2.0") end flickerstreak@1: flickerstreak@1: if GetLocale() == "frFR" then flickerstreak@1: DEBUGGING = "D\195\169boguage" flickerstreak@1: TOGGLE_DEBUGGING = "Activer/d\195\169sactiver le d\195\169boguage" flickerstreak@1: elseif GetLocale() == "deDE" then flickerstreak@1: DEBUGGING = "Debuggen" flickerstreak@1: TOGGLE_DEBUGGING = "Aktiviert/Deaktiviert Debugging" flickerstreak@1: elseif GetLocale() == "koKR" then flickerstreak@1: DEBUGGING = "디버깅" flickerstreak@1: TOGGLE_DEBUGGING = "디버깅 기능 사용함/사용안함" flickerstreak@1: elseif GetLocale() == "zhTW" then flickerstreak@1: DEBUGGING = "除錯" flickerstreak@1: TOGGLE_DEBUGGING = "啟用/停用除錯功能" flickerstreak@1: elseif GetLocale() == "zhCN" then flickerstreak@1: DEBUGGING = "\232\176\131\232\175\149" flickerstreak@1: TOGGLE_DEBUGGING = "\229\144\175\231\148\168/\231\166\129\231\148\168 \232\176\131\232\175\149" flickerstreak@1: else -- enUS flickerstreak@1: DEBUGGING = "Debugging" flickerstreak@1: TOGGLE_DEBUGGING = "Enable/disable debugging" flickerstreak@1: end flickerstreak@1: flickerstreak@1: local AceOO = AceLibrary:GetInstance("AceOO-2.0") flickerstreak@1: local AceDebug = AceOO.Mixin {"Debug", "CustomDebug", "IsDebugging", "SetDebugging", "SetDebugLevel", "LevelDebug", "CustomLevelDebug", "GetDebugLevel"} flickerstreak@1: flickerstreak@1: local function print(text, r, g, b, frame, delay) flickerstreak@1: (frame or DEFAULT_CHAT_FRAME):AddMessage(text, r, g, b, 1, delay or 5) flickerstreak@1: end flickerstreak@1: flickerstreak@1: local tmp = {} flickerstreak@1: flickerstreak@1: function AceDebug:CustomDebug(r, g, b, frame, delay, a1, ...) flickerstreak@1: if not self.debugging then flickerstreak@1: return flickerstreak@1: end flickerstreak@1: flickerstreak@1: local output = string.format("|cff7fff7f(DEBUG) %s:[%s.%3d]|r", tostring(self), date("%H:%M:%S"), math.fmod(GetTime(), 1) * 1000) flickerstreak@1: flickerstreak@1: a1 = tostring(a1) flickerstreak@1: if string.find(a1, "%%") and select('#', ...) >= 1 then flickerstreak@1: for i = 1, select('#', ...) do flickerstreak@1: tmp[i] = tostring((select(i, ...))) flickerstreak@1: end flickerstreak@1: output = output .. " " .. string.format(a1, unpack(tmp)) flickerstreak@1: for i = 1, select('#', ...) do flickerstreak@1: tmp[i] = nil flickerstreak@1: end flickerstreak@1: else flickerstreak@1: -- This block dynamically rebuilds the tmp array stopping on the first nil. flickerstreak@1: tmp[1] = output flickerstreak@1: tmp[2] = a1 flickerstreak@1: for i = 1, select('#', ...) do flickerstreak@1: tmp[i+2] = tostring((select(i, ...))) flickerstreak@1: end flickerstreak@1: flickerstreak@1: output = table.concat(tmp, " ") flickerstreak@1: flickerstreak@1: for i = 1, select('#', ...) + 2 do flickerstreak@1: tmp[i] = nil flickerstreak@1: end flickerstreak@1: end flickerstreak@1: flickerstreak@1: print(output, r, g, b, frame or self.debugFrame, delay) flickerstreak@1: end flickerstreak@1: flickerstreak@1: function AceDebug:Debug(...) flickerstreak@1: AceDebug.CustomDebug(self, nil, nil, nil, nil, nil, ...) flickerstreak@1: end flickerstreak@1: flickerstreak@1: function AceDebug:IsDebugging() flickerstreak@1: return self.debugging flickerstreak@1: end flickerstreak@1: flickerstreak@1: function AceDebug:SetDebugging(debugging) flickerstreak@1: self.debugging = debugging flickerstreak@1: end flickerstreak@1: flickerstreak@1: -- Takes a number 1-3 flickerstreak@1: -- Level 1: Critical messages that every user should receive flickerstreak@1: -- Level 2: Should be used for local debugging (function calls, etc) flickerstreak@1: -- Level 3: Very verbose debugging, will dump everything and anything flickerstreak@1: -- If set to nil, you will receive no debug information flickerstreak@1: function AceDebug:SetDebugLevel(level) flickerstreak@1: AceDebug:argCheck(level, 1, "number", "nil") flickerstreak@1: if not level then flickerstreak@1: self.debuglevel = nil flickerstreak@1: return flickerstreak@1: end flickerstreak@1: if level < 1 or level > 3 then flickerstreak@1: AceDebug:error("Bad argument #1 to `SetDebugLevel`, must be a number 1-3") flickerstreak@1: end flickerstreak@1: self.debuglevel = level flickerstreak@1: end flickerstreak@1: flickerstreak@1: function AceDebug:GetDebugLevel() flickerstreak@1: return self.debuglevel flickerstreak@1: end flickerstreak@1: flickerstreak@1: function AceDebug:CustomLevelDebug(level, r, g, b, frame, delay, ...) flickerstreak@1: if not self.debugging or not self.debuglevel then return end flickerstreak@1: AceDebug:argCheck(level, 1, "number") flickerstreak@1: if level < 1 or level > 3 then flickerstreak@1: AceDebug:error("Bad argument #1 to `LevelDebug`, must be a number 1-3") flickerstreak@1: end flickerstreak@1: if level > self.debuglevel then return end flickerstreak@1: flickerstreak@1: local output = string.format("|cff7fff7f(DEBUG) %s:[%s.%3d]|r", tostring(self), date("%H:%M:%S"), math.fmod(GetTime(), 1) * 1000) flickerstreak@1: flickerstreak@1: a1 = tostring(a1) flickerstreak@1: if string.find(a1, "%%") and select('#', ...) >= 2 then flickerstreak@1: for i = 1, select('#', ...) do flickerstreak@1: tmp[i] = tostring((select(i, ...))) flickerstreak@1: end flickerstreak@1: output = output .. " " .. string.format(a1, unpack(tmp)) flickerstreak@1: for i = 1, select('#', ...) do flickerstreak@1: tmp[i] = nil flickerstreak@1: end flickerstreak@1: else flickerstreak@1: -- This block dynamically rebuilds the tmp array stopping on the first nil. flickerstreak@1: tmp[1] = output flickerstreak@1: tmp[2] = a1 flickerstreak@1: for i = 1, select('#', ...) do flickerstreak@1: tmp[i+2] = tostring((select(i, ...))) flickerstreak@1: end flickerstreak@1: flickerstreak@1: output = table.concat(tmp, " ") flickerstreak@1: flickerstreak@1: for i = 1, select('#', ...) + 2 do flickerstreak@1: tmp[i] = nil flickerstreak@1: end flickerstreak@1: end flickerstreak@1: flickerstreak@1: print(output, r, g, b, frame or self.debugFrame, delay) flickerstreak@1: end flickerstreak@1: flickerstreak@1: function AceDebug:LevelDebug(level, ...) flickerstreak@1: if not self.debugging or not self.debuglevel then return end flickerstreak@1: AceDebug:argCheck(level, 1, "number") flickerstreak@1: if level < 1 or level > 3 then flickerstreak@1: AceDebug:error("Bad argument #1 to `LevelDebug`, must be a number 1-3") flickerstreak@1: end flickerstreak@1: if level > self.debuglevel then return end flickerstreak@1: flickerstreak@1: AceDebug.CustomLevelDebug(self, level, nil, nil, nil, nil, nil, ...) flickerstreak@1: end flickerstreak@1: flickerstreak@1: flickerstreak@1: local options flickerstreak@1: function AceDebug:GetAceOptionsDataTable(target) flickerstreak@1: if not options then flickerstreak@1: options = { flickerstreak@1: debug = { flickerstreak@1: name = DEBUGGING, flickerstreak@1: desc = TOGGLE_DEBUGGING, flickerstreak@1: type = "toggle", flickerstreak@1: get = "IsDebugging", flickerstreak@1: set = "SetDebugging", flickerstreak@1: order = -2, flickerstreak@1: } flickerstreak@1: } flickerstreak@1: end flickerstreak@1: return options flickerstreak@1: end flickerstreak@1: flickerstreak@1: AceLibrary:Register(AceDebug, MAJOR_VERSION, MINOR_VERSION, AceDebug.activate) flickerstreak@1: AceDebug = AceLibrary(MAJOR_VERSION)