annotate Devian.lua @ 0:585221424a93

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