annotate Devian.lua @ 9:12d814c10962 v1.2-r9

Look for SavedVariables after they're available.
author Nenue
date Sat, 19 Dec 2015 00:02:57 -0500
parents d0cd0e68213e
children 65fcb81f4e0a
rev   line source
Nenue@0 1 -- User: Krakyn
Nenue@0 2 -- Created: 11/30/2015 7:46 AM
Nenue@0 3 if not LibStub then
Nenue@0 4 print('Something has happened...')
Nenue@0 5 end
Nenue@0 6 Devian = LibStub("AceAddon-3.0"):NewAddon("Devian", "AceConsole-3.0", "AceEvent-3.0")
Nenue@0 7 local D = _G.Devian
Nenue@0 8 local STATE_LOW, STATE_HIGH = 1, 2
Nenue@0 9 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName()
Nenue@4 10 local DEVIAN_FRAME = DevianConsole
Nenue@4 11 local cherry = false
Nenue@7 12 local print = function(...)
Nenue@7 13 _G.print('DVN', ...)
Nenue@7 14 end
Nenue@9 15 local db
Nenue@9 16
Nenue@4 17
Nenue@4 18 function D:SavePos(x,y)
Nenue@7 19 db.y = (DEVIAN_FRAME:GetTop() - GetScreenHeight())
Nenue@4 20 db.x = DEVIAN_FRAME:GetLeft()
Nenue@4 21 db.width = DEVIAN_FRAME:GetWidth()
Nenue@7 22 if not DEVIAN_FRAME.minimized then
Nenue@7 23 db.height = DEVIAN_FRAME:GetHeight()
Nenue@7 24 end
Nenue@7 25
Nenue@7 26 print(db.y)
Nenue@7 27 DEVIAN_FRAME:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', db.x, db.y)
Nenue@4 28 end
Nenue@0 29
Nenue@0 30 local ScanAddOnList = function(args)
Nenue@0 31 local list_state
Nenue@0 32
Nenue@0 33 local mode = tonumber(args:match('^%d$'))
Nenue@0 34
Nenue@0 35 print('ScanAddOnList(', mode, ')')
Nenue@0 36 if mode == nil then
Nenue@0 37 list_state = db.enabled and STATE_LOW or STATE_HIGH
Nenue@0 38 db.enabled = (db.enabled == false) and true or false
Nenue@0 39 print(list_state, db.enabled)
Nenue@0 40
Nenue@0 41 if list_state == STATE_LOW then
Nenue@0 42 BNSetDND(true)
Nenue@0 43 end
Nenue@0 44
Nenue@0 45 else
Nenue@0 46 if mode > 2 then
Nenue@0 47 print('ScanAddOnList(',mode,'): Something has happened.')
Nenue@0 48 return
Nenue@0 49 end
Nenue@0 50 list_state = mode == STATE_LOW and STATE_LOW or STATE_HIGH
Nenue@0 51
Nenue@0 52 if not db.chat_size then
Nenue@0 53 db.chat_size = {}
Nenue@0 54 end
Nenue@0 55 if mode == STATE_LOW or mode == STATE_HIGH then
Nenue@0 56 db.chat_size[list_state] = ChatFrame1:GetHeight()
Nenue@0 57 end
Nenue@0 58
Nenue@0 59 end
Nenue@0 60 local char_list, global_list = db[PLAYER_REALM][list_state], db.global[list_state]
Nenue@0 61
Nenue@0 62 local playername = UnitName("player")
Nenue@0 63
Nenue@0 64 for i = 1, GetNumAddOns() do
Nenue@0 65 local name = GetAddOnInfo(i)
Nenue@0 66 local enableState, globalState = GetAddOnEnableState(playername, i), GetAddOnEnableState(nil, i)
Nenue@0 67
Nenue@0 68 if mode == STATE_LOW or mode == STATE_HIGH then
Nenue@0 69 char_list[name] = enableState
Nenue@0 70 global_list[name] = globalState
Nenue@0 71 else
Nenue@0 72
Nenue@0 73 if char_list[name] ~= 0 and global_list[name] ~= 0 then
Nenue@0 74 local value = false
Nenue@0 75 if char_list[name] == 2 and global_list[name] == 1 then
Nenue@0 76 value = UnitName("player")
Nenue@0 77 elseif global_list[name] == 2 then
Nenue@0 78 value = true
Nenue@0 79 end
Nenue@0 80 print('EnableAddOn(', i, ',', value,')')
Nenue@0 81 EnableAddOn(i, value)
Nenue@0 82 else
Nenue@0 83 local value = true
Nenue@0 84 if char_list[name] == 2 and global_list[name] == 1 then
Nenue@0 85 value = UnitName("player")
Nenue@0 86 end
Nenue@0 87 print('DisableAddOn(', i, ',', value,')')
Nenue@0 88 DisableAddOn(i,value)
Nenue@0 89 end
Nenue@0 90
Nenue@0 91 end
Nenue@0 92 end
Nenue@0 93
Nenue@0 94 if mode == nil then
Nenue@0 95 ReloadUI()
Nenue@0 96 end
Nenue@0 97 if mode == STATE_LOW then
Nenue@0 98 D:Print('Developement AddOn list saved.')
Nenue@0 99 else
Nenue@0 100 D:Print('Standard AddOn list saved.')
Nenue@0 101 end
Nenue@0 102 end
Nenue@0 103
Nenue@0 104 -- Debug info
Nenue@0 105 local function CreateMessenger()
Nenue@4 106 if db.console == true then
Nenue@4 107 DEVIAN_FRAME:Show()
Nenue@0 108 end
Nenue@0 109
Nenue@4 110
Nenue@0 111 local f = DEVIAN_FRAME
Nenue@4 112 --[[
Nenue@0 113 f.backdrop = f:CreateTexture('backdrop', 'BACKGROUND')
Nenue@0 114 f.backdrop:SetTexture(1,1,1,1)
Nenue@0 115 f.backdrop:SetGradient('HORIZONTAL', 0.2, 0.2, 0.2, 1, 1, 1)
Nenue@0 116 f.backdrop:SetBlendMode('MOD')
Nenue@0 117 f.backdrop:SetAllPoints(f)
Nenue@0 118 f:AddMessage('init a thing')
Nenue@0 119
Nenue@0 120 f:EnableMouseWheel(true)
Nenue@0 121 f:EnableKeyboard(true)
Nenue@0 122 f:SetScript('OnMouseWheel', function (self, delta)
Nenue@0 123 end)
Nenue@0 124
Nenue@0 125 f:ScrollToBottom()
Nenue@2 126 f:SetMaxLines(500)
Nenue@4 127 --]]
Nenue@4 128 f.console:SetInsertMode('BOTTOM')
Nenue@7 129 f:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', db.x, db.y)
Nenue@4 130 f:SetSize(db.width, db.height)
Nenue@4 131 f:Lower()
Nenue@0 132
Nenue@4 133 f.console:SetFading(false)
Nenue@4 134 f.console:SetTimeVisible(2147483647)
Nenue@5 135 f.console:SetFont(db.font, db.fontsize, db.fontoutline)
Nenue@4 136 --f:SetJustifyH('LEFT')
Nenue@0 137
Nenue@0 138
Nenue@0 139 D.debug_init = true
Nenue@0 140 end
Nenue@7 141 function D:ToggleMinMax()
Nenue@7 142 if DEVIAN_FRAME.minimized then
Nenue@7 143 self:Maximize()
Nenue@7 144 else
Nenue@7 145 self:Minimize()
Nenue@7 146 end
Nenue@7 147 end
Nenue@7 148 function D:Minimize()
Nenue@7 149 DEVIAN_FRAME:SetHeight(20)
Nenue@7 150 DEVIAN_FRAME.minimized = true
Nenue@7 151 DEVIAN_FRAME:SetMaxResize(GetScreenWidth(),20)
Nenue@7 152 return DEVIAN_FRAME.console:Hide()
Nenue@7 153 end
Nenue@7 154 function D:Maximize()
Nenue@7 155 DEVIAN_FRAME:SetHeight(db.height)
Nenue@7 156 DEVIAN_FRAME.minimized = nil
Nenue@7 157 DEVIAN_FRAME:SetMaxResize(GetScreenWidth(),GetScreenHeight())
Nenue@7 158 return DEVIAN_FRAME.console:Show()
Nenue@7 159 end
Nenue@0 160
Nenue@0 161 local prefix_cache = {}
Nenue@0 162 local function Message(prefix, ...)
Nenue@1 163 if prefix == nil then
Nenue@1 164 oldprint('Tried to print nothing.')
Nenue@1 165 return
Nenue@1 166 end
Nenue@9 167
Nenue@9 168 -- color me timbers
Nenue@9 169 local pcolor
Nenue@9 170 if db.tags[prefix] then
Nenue@9 171 pcolor = db.tags[prefix]
Nenue@9 172 elseif not prefix_cache[prefix] then
Nenue@0 173 local c = {0, 0, 0 }
Nenue@0 174 local max = string.len(prefix)
Nenue@0 175 for i = 1, max, 3 do
Nenue@0 176 for k, v in ipairs(c) do
Nenue@0 177 local j = i + (k - 1)
Nenue@0 178 c[k] = c[k] + (j <= max and string.byte(prefix,j) or 0)
Nenue@0 179 end
Nenue@0 180 end
Nenue@0 181 for k,v in ipairs(c) do
Nenue@0 182 c[k] = c[k] % 255
Nenue@0 183 if c[k] < 64 then
Nenue@0 184 c[k] = 0
Nenue@0 185 elseif c[k] > 127 then
Nenue@0 186 c[k] = 255
Nenue@0 187 end
Nenue@0 188 end
Nenue@0 189 prefix_cache[prefix] = string.format('%02X%02X%02X', unpack(c))
Nenue@0 190 end
Nenue@0 191
Nenue@0 192 local buffer = {'|cFF'.. prefix_cache[prefix]..prefix ..'|r'}
Nenue@0 193 for i = 1, select('#',...) do
Nenue@0 194 local var = select(i, ...)
Nenue@0 195
Nenue@0 196 if type(var) == 'table' then
Nenue@0 197 var = '<table>'
Nenue@0 198 elseif type(var) == 'boolean' then
Nenue@0 199 var = var and 'true' or 'false'
Nenue@0 200 elseif type(var) == 'function' then
Nenue@0 201 var = '<funcref>'
Nenue@0 202 elseif type(var) == 'nil' then
Nenue@0 203 var = 'nil'
Nenue@0 204 end
Nenue@0 205
Nenue@0 206 table.insert(buffer, var)
Nenue@0 207 end
Nenue@4 208 DEVIAN_FRAME.console:AddMessage(table.concat(buffer, ' '))
Nenue@0 209 table.wipe(buffer)
Nenue@0 210 end
Nenue@0 211
Nenue@0 212 function D:OnEnable()
Nenue@0 213 if db.enabled then
Nenue@0 214 DEVIAN_FRAME:Hide()
Nenue@0 215 D:Print('Standard AddOn list active. Type /dvn to switch to development mode.')
Nenue@0 216 else
Nenue@0 217 D:Print('Development AddOn list active. Type /dvn to revert to regular operation.')
Nenue@0 218 end
Nenue@0 219 end
Nenue@0 220
Nenue@5 221
Nenue@0 222 function D:OnInitialize()
Nenue@9 223 if not _G.DevianDB then
Nenue@9 224 _G.DevianDB = {
Nenue@9 225 ['global'] = {[STATE_LOW] = {}, [STATE_HIGH] = {}},
Nenue@9 226 ['tags'] = {},
Nenue@9 227 console = true,
Nenue@9 228 dnd_status = true,
Nenue@9 229 dnd_message = "Debugging. Your messages may get eaten.",
Nenue@9 230 x = 100,
Nenue@9 231 y = 800,
Nenue@9 232 height = 500,
Nenue@9 233 width = 600,
Nenue@9 234 font = [[Interface\Addons\Devian\font\SourceCodePro-Regular.ttf]],
Nenue@9 235 fontsize = 13,
Nenue@9 236 fontoutline = 'NONE',
Nenue@9 237 }
Nenue@9 238 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"
Nenue@9 239 end
Nenue@9 240 db = _G.DevianDB
Nenue@0 241
Nenue@9 242 print(PLAYER_REALM)
Nenue@0 243 if not db[PLAYER_REALM] then
Nenue@9 244 db[PLAYER_REALM] = {[STATE_LOW] = {}, [STATE_HIGH] = {}}
Nenue@0 245 if not cherry then
Nenue@0 246 cherry = "This character didn't have an AddOn table."
Nenue@0 247 end
Nenue@0 248 end
Nenue@0 249
Nenue@0 250 -- inform the user if we have a virgin data table
Nenue@0 251 if cherry then
Nenue@0 252 D:Print(cherry)
Nenue@0 253 end
Nenue@0 254
Nenue@0 255 -- replace print handler and make the original available in global if possible
Nenue@0 256
Nenue@0 257 CreateMessenger()
Nenue@0 258 D.oldprint = getprinthandler()
Nenue@0 259 if not _G.oldprint then
Nenue@0 260 _G.oldprint = D.oldprint
Nenue@0 261 end
Nenue@0 262 setprinthandler(Message)
Nenue@0 263 self:RegisterChatCommand("dvn", ScanAddOnList)
Nenue@0 264 self:RegisterChatCommand("dvc", function(args)
Nenue@9 265 db.console = (not db.console) and true or nil
Nenue@0 266 if db.console then
Nenue@0 267 DEVIAN_FRAME:Show()
Nenue@5 268 D:Maximize()
Nenue@0 269 else
Nenue@0 270 DEVIAN_FRAME:Hide()
Nenue@0 271 end
Nenue@0 272 end)
Nenue@0 273
Nenue@0 274 print('Master! I am here.')
Nenue@0 275 end