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