annotate Devian.lua @ 5:ac644fc860cc

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