Mercurial > wow > devian
comparison Devian.lua @ 0:585221424a93
initial commit
| author | Nenue |
|---|---|
| date | Tue, 15 Dec 2015 10:18:27 -0500 |
| parents | |
| children | a13243a4118b |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:585221424a93 |
|---|---|
| 1 -- User: Krakyn | |
| 2 -- Created: 11/30/2015 7:46 AM | |
| 3 if not LibStub then | |
| 4 print('Something has happened...') | |
| 5 end | |
| 6 | |
| 7 Devian = LibStub("AceAddon-3.0"):NewAddon("Devian", "AceConsole-3.0", "AceEvent-3.0") | |
| 8 local D = _G.Devian | |
| 9 | |
| 10 local db | |
| 11 local msg = function(...) | |
| 12 D:Print(...) | |
| 13 end | |
| 14 local STATE_LOW, STATE_HIGH = 1, 2 | |
| 15 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName() | |
| 16 local DEVIAN_FRAME = DevianDebugInfo | |
| 17 | |
| 18 local ScanAddOnList = function(args) | |
| 19 local list_state | |
| 20 | |
| 21 local mode = tonumber(args:match('^%d$')) | |
| 22 | |
| 23 print('ScanAddOnList(', mode, ')') | |
| 24 if mode == nil then | |
| 25 list_state = db.enabled and STATE_LOW or STATE_HIGH | |
| 26 db.enabled = (db.enabled == false) and true or false | |
| 27 print(list_state, db.enabled) | |
| 28 | |
| 29 if list_state == STATE_LOW then | |
| 30 BNSetDND(true) | |
| 31 end | |
| 32 | |
| 33 else | |
| 34 if mode > 2 then | |
| 35 print('ScanAddOnList(',mode,'): Something has happened.') | |
| 36 return | |
| 37 end | |
| 38 list_state = mode == STATE_LOW and STATE_LOW or STATE_HIGH | |
| 39 | |
| 40 if not db.chat_size then | |
| 41 db.chat_size = {} | |
| 42 end | |
| 43 if mode == STATE_LOW or mode == STATE_HIGH then | |
| 44 db.chat_size[list_state] = ChatFrame1:GetHeight() | |
| 45 end | |
| 46 | |
| 47 end | |
| 48 local char_list, global_list = db[PLAYER_REALM][list_state], db.global[list_state] | |
| 49 | |
| 50 local playername = UnitName("player") | |
| 51 | |
| 52 for i = 1, GetNumAddOns() do | |
| 53 local name = GetAddOnInfo(i) | |
| 54 local enableState, globalState = GetAddOnEnableState(playername, i), GetAddOnEnableState(nil, i) | |
| 55 | |
| 56 if mode == STATE_LOW or mode == STATE_HIGH then | |
| 57 char_list[name] = enableState | |
| 58 global_list[name] = globalState | |
| 59 else | |
| 60 | |
| 61 if char_list[name] ~= 0 and global_list[name] ~= 0 then | |
| 62 local value = false | |
| 63 if char_list[name] == 2 and global_list[name] == 1 then | |
| 64 value = UnitName("player") | |
| 65 elseif global_list[name] == 2 then | |
| 66 value = true | |
| 67 end | |
| 68 print('EnableAddOn(', i, ',', value,')') | |
| 69 EnableAddOn(i, value) | |
| 70 else | |
| 71 local value = true | |
| 72 if char_list[name] == 2 and global_list[name] == 1 then | |
| 73 value = UnitName("player") | |
| 74 end | |
| 75 print('DisableAddOn(', i, ',', value,')') | |
| 76 DisableAddOn(i,value) | |
| 77 end | |
| 78 | |
| 79 end | |
| 80 end | |
| 81 | |
| 82 if mode == nil then | |
| 83 ReloadUI() | |
| 84 end | |
| 85 if mode == STATE_LOW then | |
| 86 D:Print('Developement AddOn list saved.') | |
| 87 else | |
| 88 D:Print('Standard AddOn list saved.') | |
| 89 end | |
| 90 end | |
| 91 | |
| 92 -- Debug info | |
| 93 local function CreateMessenger() | |
| 94 -- TODO: throw this into an XML file | |
| 95 if not DEVIAN_FRAME then | |
| 96 DEVIAN_FRAME = CreateFrame('ScrollingMessageFrame', DEVIAN_FRAME, UIParent) | |
| 97 if not db.console then | |
| 98 DEVIAN_FRAME:Hide() | |
| 99 end | |
| 100 end | |
| 101 | |
| 102 local f = DEVIAN_FRAME | |
| 103 f.backdrop = f:CreateTexture('backdrop', 'BACKGROUND') | |
| 104 f.backdrop:SetTexture(1,1,1,1) | |
| 105 f.backdrop:SetGradient('HORIZONTAL', 0.2, 0.2, 0.2, 1, 1, 1) | |
| 106 f.backdrop:SetBlendMode('MOD') | |
| 107 f.backdrop:SetAllPoints(f) | |
| 108 f:AddMessage('init a thing') | |
| 109 | |
| 110 f:EnableMouseWheel(true) | |
| 111 f:EnableKeyboard(true) | |
| 112 f:SetScript('OnMouseWheel', function (self, delta) | |
| 113 local up = delta > 0 | |
| 114 if IsControlKeyDown() then | |
| 115 if up then self:ScrollToTop() | |
| 116 else self:ScrollToBottom() end | |
| 117 elseif IsShiftKeyDown() then | |
| 118 if up then self:PageUp() | |
| 119 else self:PageDown() end | |
| 120 else | |
| 121 if up then self:ScrollUp() | |
| 122 else self:ScrollDown() end | |
| 123 end | |
| 124 end) | |
| 125 | |
| 126 f:ScrollToBottom() | |
| 127 f:SetMaxLines(100) | |
| 128 f:SetInsertMode('BOTTOM') | |
| 129 f:SetPoint('BOTTOMLEFT', GENERAL_CHAT_DOCK, 'TOPLEFT', 0, 25) | |
| 130 f:SetPoint('TOPRIGHT', UIParent, 'TOP', 0, 0- PlayerFrame:GetHeight()) | |
| 131 f:SetFrameStrata('BACKGROUND') | |
| 132 f:SetFont([[Interface\Addons\Turok\Media\font\SourceCodePro-Regular.ttf]], 14, 'NONE') | |
| 133 | |
| 134 f:SetFading(false) | |
| 135 f:SetTimeVisible(2147483647) | |
| 136 f:SetJustifyH('LEFT') | |
| 137 | |
| 138 | |
| 139 D.debug_init = true | |
| 140 end | |
| 141 | |
| 142 local prefix_cache = {} | |
| 143 local function Message(prefix, ...) | |
| 144 | |
| 145 -- colorize | |
| 146 if not prefix_cache[prefix] then | |
| 147 local c = {0, 0, 0 } | |
| 148 local max = string.len(prefix) | |
| 149 for i = 1, max, 3 do | |
| 150 for k, v in ipairs(c) do | |
| 151 local j = i + (k - 1) | |
| 152 c[k] = c[k] + (j <= max and string.byte(prefix,j) or 0) | |
| 153 end | |
| 154 end | |
| 155 for k,v in ipairs(c) do | |
| 156 c[k] = c[k] % 255 | |
| 157 if c[k] < 64 then | |
| 158 c[k] = 0 | |
| 159 elseif c[k] > 127 then | |
| 160 c[k] = 255 | |
| 161 end | |
| 162 end | |
| 163 prefix_cache[prefix] = string.format('%02X%02X%02X', unpack(c)) | |
| 164 end | |
| 165 | |
| 166 local buffer = {'|cFF'.. prefix_cache[prefix]..prefix ..'|r'} | |
| 167 for i = 1, select('#',...) do | |
| 168 local var = select(i, ...) | |
| 169 | |
| 170 if type(var) == 'table' then | |
| 171 var = '<table>' | |
| 172 elseif type(var) == 'boolean' then | |
| 173 var = var and 'true' or 'false' | |
| 174 elseif type(var) == 'function' then | |
| 175 var = '<funcref>' | |
| 176 elseif type(var) == 'nil' then | |
| 177 var = 'nil' | |
| 178 end | |
| 179 | |
| 180 table.insert(buffer, var) | |
| 181 end | |
| 182 DEVIAN_FRAME:AddMessage(table.concat(buffer, ' ')) | |
| 183 table.wipe(buffer) | |
| 184 end | |
| 185 | |
| 186 function D:OnEnable() | |
| 187 if db.enabled then | |
| 188 DEVIAN_FRAME:Hide() | |
| 189 D:Print('Standard AddOn list active. Type /dvn to switch to development mode.') | |
| 190 else | |
| 191 D:Print('Development AddOn list active. Type /dvn to revert to regular operation.') | |
| 192 end | |
| 193 end | |
| 194 | |
| 195 function D:OnInitialize() | |
| 196 | |
| 197 local cherry = false | |
| 198 if not DevianDB then | |
| 199 DevianDB = { | |
| 200 ['global'] = {[STATE_LOW] = {}, [STATE_HIGH] = {}}, | |
| 201 console = true, | |
| 202 dnd_status = true, | |
| 203 dnd_message = "Debugging. Your messages may get eaten.", | |
| 204 } | |
| 205 cherry = "This is probably the first time, so:\n /dvn 2 to save your regular addon list\n /dvn 1 to save your development addon list\n /dvn to switch between the two\n /dvc to toggle print() frame" | |
| 206 end | |
| 207 db = DevianDB | |
| 208 | |
| 209 if not db[PLAYER_REALM] then | |
| 210 db[PLAYER_REALM] = {[STATE_LOW] = {}, [STATE_HIGH] = {} } | |
| 211 if not cherry then | |
| 212 cherry = "This character didn't have an AddOn table." | |
| 213 end | |
| 214 end | |
| 215 | |
| 216 -- inform the user if we have a virgin data table | |
| 217 if cherry then | |
| 218 D:Print(cherry) | |
| 219 end | |
| 220 | |
| 221 -- replace print handler and make the original available in global if possible | |
| 222 | |
| 223 CreateMessenger() | |
| 224 D.oldprint = getprinthandler() | |
| 225 if not _G.oldprint then | |
| 226 _G.oldprint = D.oldprint | |
| 227 end | |
| 228 setprinthandler(Message) | |
| 229 self:RegisterChatCommand("dvn", ScanAddOnList) | |
| 230 self:RegisterChatCommand("dvc", function(args) | |
| 231 db.console = (db.console == false) and true or false | |
| 232 if db.console then | |
| 233 DEVIAN_FRAME:Show() | |
| 234 else | |
| 235 DEVIAN_FRAME:Hide() | |
| 236 end | |
| 237 end) | |
| 238 | |
| 239 print('Master! I am here.') | |
| 240 end |
