Nenue@50
|
1 --- Devian - Devian.lua
|
Nenue@32
|
2 -- @file-author@
|
Nenue@32
|
3 -- @project-revision@ @project-hash@
|
Nenue@32
|
4 -- @file-revision@ @file-hash@
|
Nenue@0
|
5 if not LibStub then
|
Nenue@0
|
6 print('Something has happened...')
|
Nenue@0
|
7 end
|
Nenue@0
|
8 Devian = LibStub("AceAddon-3.0"):NewAddon("Devian", "AceConsole-3.0", "AceEvent-3.0")
|
Nenue@46
|
9 local D = _G.Devian
|
Nenue@46
|
10 D:SetDefaultModuleState(false)
|
Nenue@46
|
11
|
Nenue@47
|
12 local pairs, tostring, tonumber, ipairs, type = pairs, tostring, tonumber, ipairs, type
|
Nenue@47
|
13 local max, rand, format = math.max, math.random, string.format
|
Nenue@47
|
14 local insert, wipe, concat = table.insert, table.wipe, table.concat
|
Nenue@47
|
15 local select, unpack = select, unpack
|
Nenue@47
|
16 local GetNumAddOns, GetAddOnInfo, GetAddOnEnableState, EnableAddOn = GetNumAddOns, GetAddOnInfo, GetAddOnEnableState, EnableAddOn
|
Nenue@47
|
17 local UnitName, DisableAddOn = UnitName, DisableAddOn
|
Nenue@52
|
18 local MAJOR, MINOR = 'Devian-2.0', 'r@project-revision@'
|
Nenue@36
|
19 local MSG_NEED_DEV_MODE = 'Must be in development mode to use this function.'
|
Nenue@32
|
20 local WORKSPACE_ON, WORKSPACE_OFF = 1, 2
|
Nenue@0
|
21 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName()
|
Nenue@18
|
22 local print = _G.print
|
Nenue@9
|
23 local db
|
Nenue@13
|
24 local defaults = {
|
Nenue@32
|
25 ['global'] = {{}, {}},
|
Nenue@13
|
26 ['tags'] = {},
|
Nenue@55
|
27 ['channels'] = {[1] = {
|
Nenue@55
|
28 signature = 'Main',
|
Nenue@55
|
29 index = 1,
|
Nenue@55
|
30 x = 100, y = 800,
|
Nenue@55
|
31 height = 500, width = 600,
|
Nenue@55
|
32 enabled = true}},
|
Nenue@45
|
33 ['profiles'] = {
|
Nenue@45
|
34 {'Main', false},
|
Nenue@45
|
35 {'Devian', true},
|
Nenue@45
|
36 {'Turok', true},
|
Nenue@45
|
37 {'Bam', true}
|
Nenue@45
|
38 },
|
Nenue@33
|
39 primary_channel = 1, -- the channel to which default output is sent
|
Nenue@33
|
40 current_channel = 1, -- the front channel
|
Nenue@33
|
41 max_channel = 1, -- the highest created channel id
|
Nenue@55
|
42 enabled = true, -- allow enabled consoles to appear
|
Nenue@33
|
43 load_message = "Defaults loaded.", -- messages to be displayed after reload
|
Nenue@33
|
44 font = [[Interface\Addons\Devian\font\SourceCodePro-Regular.ttf]], -- font info
|
Nenue@13
|
45 fontsize = 13,
|
Nenue@13
|
46 fontoutline = 'NONE',
|
Nenue@45
|
47
|
Nenue@45
|
48 headergrad = {'VERTICAL', 0, 0, 0, 1,
|
Nenue@45
|
49 1, 0.1, 0.1, 1}, -- header info
|
Nenue@33
|
50 headerdrop = {1,1,1,1},
|
Nenue@45
|
51 headerblend = 'BLEND',
|
Nenue@33
|
52 headeralpha = 1,
|
Nenue@45
|
53 headerfontcolor = {1,1,1,1},
|
Nenue@45
|
54
|
Nenue@45
|
55 backdrop = {1,1,1,1}, -- background frame info
|
Nenue@45
|
56 backgrad = {'VERTICAL', 0.1, 0.1, 0.1, 1, 0, 0, 0, 1},
|
Nenue@55
|
57 backblend = 'BLEND',
|
Nenue@45
|
58 backalpha = 1,
|
Nenue@45
|
59 backborder = {.5,.5,.5,1},
|
Nenue@45
|
60 backheader = {.25,.25,.25,1},
|
Nenue@45
|
61
|
Nenue@45
|
62 frontdrop = {1,1,1,1}, -- foreground frame info
|
Nenue@45
|
63 frontgrad = {'VERTICAL', 0.1, 0.1, 0.1, 1, 0, 0, 0, 1},
|
Nenue@55
|
64 frontblend = 'BLEND',
|
Nenue@28
|
65 frontalpha = 1,
|
Nenue@45
|
66 frontborder = {.07,.47,1,1},
|
Nenue@45
|
67 frontheader = {1,1,1,1},
|
Nenue@33
|
68 tagcolor = {}, -- tag color repository
|
Nenue@36
|
69 workspace = 2, -- current profile
|
Nenue@47
|
70 last_workspace = 2, -- default workspace to alternate with when just "/dvn" is issued
|
Nenue@47
|
71
|
Nenue@47
|
72 dock_onshow_fade_time = 2.5,
|
Nenue@47
|
73 dock_onshow_fade_from = 1,
|
Nenue@47
|
74 dock_onshow_fade_to = 0.2,
|
Nenue@47
|
75
|
Nenue@47
|
76 dock_alpha_on = 1,
|
Nenue@47
|
77 dock_alpha_off = 0.2,
|
Nenue@47
|
78 dock_fade_in = 0.15,
|
Nenue@47
|
79 dock_fade_out = 0.45,
|
Nenue@47
|
80 dock_button_alpha_on = 1,
|
Nenue@47
|
81 dock_button_alpha_off = 0.2,
|
Nenue@50
|
82 dock_button_fade_in = 0.075,
|
Nenue@55
|
83 dock_button_fade_out = 0.075,
|
Nenue@47
|
84
|
Nenue@55
|
85 movement_fade = true,
|
Nenue@55
|
86 movement_fade_time = 0.15,
|
Nenue@13
|
87 }
|
Nenue@9
|
88
|
Nenue@13
|
89 local function ScanAddOnList(cmd, ...)
|
Nenue@0
|
90 local list_state
|
Nenue@0
|
91
|
Nenue@14
|
92 local args = {}
|
Nenue@14
|
93 local arg, n = D:GetArgs(cmd, 1)
|
Nenue@14
|
94 while arg do
|
Nenue@47
|
95 insert(args, arg)
|
Nenue@14
|
96 arg, n = D:GetArgs(cmd,1,n)
|
Nenue@14
|
97 end
|
Nenue@14
|
98 local mode, tag, dest = unpack(args)
|
Nenue@0
|
99
|
Nenue@13
|
100
|
Nenue@14
|
101 -- no args, toggle ui
|
Nenue@32
|
102 if mode == 'dock' then
|
Nenue@33
|
103 if db.workspace == 1 then
|
Nenue@33
|
104 D:Print('Must be in dev mode to use this.')
|
Nenue@33
|
105 return
|
Nenue@33
|
106 end
|
Nenue@32
|
107 if #args <= 2 then
|
Nenue@32
|
108 D:Print("Not enough arguments for dock command.")
|
Nenue@32
|
109 return
|
Nenue@32
|
110 end
|
Nenue@0
|
111
|
Nenue@32
|
112 local target
|
Nenue@32
|
113 local worklist = {}
|
Nenue@32
|
114 for i = 2, #args do
|
Nenue@32
|
115 local ch
|
Nenue@32
|
116 local k = tostring(args[i])
|
Nenue@32
|
117 local j = tonumber(args[i])
|
Nenue@32
|
118 if db.channels[j] then
|
Nenue@32
|
119 ch = db.channels[j]
|
Nenue@32
|
120 elseif D.sig[k] then
|
Nenue@32
|
121 ch = D.sig[k]
|
Nenue@32
|
122 elseif D.sigID[k] then
|
Nenue@32
|
123 ch = db.channels[D.sigID[k]]
|
Nenue@32
|
124 elseif db.tags[k] and db.tags[k][1] then
|
Nenue@32
|
125 ch = db.channels[db.tags[j][1]]
|
Nenue@32
|
126 -- last resort
|
Nenue@32
|
127 else
|
Nenue@32
|
128 D:Print('No entry for argument #'..i..': '..tostring(args[i]))
|
Nenue@32
|
129 return
|
Nenue@32
|
130 end
|
Nenue@35
|
131 --@debug@
|
Nenue@35
|
132 --print(i, '->', ch.index, '-', ch.signature)--@end-debug@
|
Nenue@32
|
133 if i > 2 then
|
Nenue@47
|
134 insert(worklist, ch.index)
|
Nenue@32
|
135 else
|
Nenue@32
|
136 target = ch
|
Nenue@32
|
137
|
Nenue@35
|
138 --@debug@
|
Nenue@35
|
139 --print('arg1', args[2], target)--@end-debug@
|
Nenue@32
|
140 end
|
Nenue@0
|
141 end
|
Nenue@47
|
142 D:Print("Docking |cFF88FFFF"..concat(worklist, "|r, |cFF88FFFF").."|r with |cFFFFFF00"..target.index..', '..target.signature.."|r.")
|
Nenue@32
|
143 return D:DockFrame(target.index, unpack(worklist))
|
Nenue@32
|
144
|
Nenue@32
|
145
|
Nenue@14
|
146 elseif mode == 'stack' then
|
Nenue@33
|
147 if db.workspace == 1 then
|
Nenue@33
|
148 return D:Print(MSG_NEED_DEV_MODE)
|
Nenue@33
|
149 end
|
Nenue@14
|
150 return D:StackFrames()
|
Nenue@14
|
151 elseif mode == 'grid' then
|
Nenue@33
|
152 if db.workspace == 1 then
|
Nenue@33
|
153 return D:Print(MSG_NEED_DEV_MODE)
|
Nenue@33
|
154 end
|
Nenue@14
|
155 return D:DistributeFrames()
|
Nenue@14
|
156 elseif mode == 'tag' then -- tagging
|
Nenue@33
|
157 if db.workspace == 1 then
|
Nenue@33
|
158 return D:Print(MSG_NEED_DEV_MODE)
|
Nenue@33
|
159 end
|
Nenue@32
|
160
|
Nenue@36
|
161 local sig
|
Nenue@14
|
162 if tag ~= nil and dest ~= nil then
|
Nenue@36
|
163 --@debug@
|
Nenue@38
|
164 --print(tag, dest)
|
Nenue@36
|
165 --@end-debug@
|
Nenue@36
|
166
|
Nenue@32
|
167 -- convert to ID
|
Nenue@36
|
168 if tonumber(dest) == nil then
|
Nenue@36
|
169 if D.sigID[dest] then
|
Nenue@36
|
170 dest = db.channels[D.sigID[dest]].index
|
Nenue@36
|
171 else
|
Nenue@36
|
172 sig = dest
|
Nenue@36
|
173 end
|
Nenue@42
|
174 else
|
Nenue@42
|
175 dest = tonumber(dest)
|
Nenue@18
|
176 end
|
Nenue@38
|
177 --@debug@
|
Nenue@38
|
178 --print('2 tag,dest,sig', tag, dest, sig)--@end-debug@
|
Nenue@18
|
179
|
Nenue@32
|
180 -- make a new channel?
|
Nenue@36
|
181 local channel
|
Nenue@42
|
182 if not D.db.channels[dest] then
|
Nenue@36
|
183 dest = D.max_channel + 1
|
Nenue@36
|
184 D:Print('Created channel |cFF88FFFF'.. (sig and (dest..':'..sig) or dest ) .. '|r')
|
Nenue@36
|
185 channel = D:SetChannel(sig or tag,dest)
|
Nenue@42
|
186 else
|
Nenue@42
|
187
|
Nenue@42
|
188 channel = D.db.channels[dest]
|
Nenue@32
|
189 end
|
Nenue@38
|
190 --@debug@
|
Nenue@42
|
191 --print('3 tag,dest,channel.sig=',tag, dest, channel.signature)--@end-debug@
|
Nenue@32
|
192
|
Nenue@42
|
193 if not db.tags[tag] then -- no tag table?
|
Nenue@42
|
194 db.tags[tag] = {}
|
Nenue@42
|
195 end
|
Nenue@42
|
196
|
Nenue@42
|
197 if db.tags[tag][dest] then -- is tag set?
|
Nenue@32
|
198 db.tags[tag][dest] = nil
|
Nenue@34
|
199 D:Print('Hiding |cFF88FFFF'..tag..'|r messages in |cFFFFFF00'..db.channels[dest].index ..':'.. db.channels[dest].signature)
|
Nenue@32
|
200 else
|
Nenue@32
|
201 db.tags[tag][dest] = dest
|
Nenue@34
|
202 D:Print('Showing |cFF88FFFF'..tag..'|r messages in |cFFFFFF00'..db.channels[dest].index ..':'.. db.channels[dest].signature)
|
Nenue@32
|
203 end
|
Nenue@47
|
204 D:UpdateDock()
|
Nenue@14
|
205 else
|
Nenue@14
|
206 D:Print('Usage: /dvn tag <prefix> <console name or number>')
|
Nenue@14
|
207 end
|
Nenue@14
|
208 return
|
Nenue@32
|
209 elseif tonumber(mode) ~= nil or mode == 'save' then
|
Nenue@32
|
210 -- iterating for something
|
Nenue@32
|
211 if mode == 'save' then
|
Nenue@32
|
212 if tonumber(tag) == nil then
|
Nenue@32
|
213 T:Print('Save ID is invalid:', tag)
|
Nenue@32
|
214 end
|
Nenue@32
|
215 list_state = tonumber(tag)
|
Nenue@32
|
216 else
|
Nenue@32
|
217 list_state = tonumber(mode)
|
Nenue@32
|
218 db.workspace = list_state
|
Nenue@33
|
219 if list_state ~= 1 then
|
Nenue@33
|
220 db.last_workspace = list_state
|
Nenue@33
|
221 end
|
Nenue@33
|
222
|
Nenue@0
|
223 end
|
Nenue@32
|
224 elseif mode == nil then
|
Nenue@33
|
225 list_state = (db.workspace == 1) and db.last_workspace or 1
|
Nenue@33
|
226 db.workspace = list_state
|
Nenue@33
|
227 db.load_message = "quick swapped workspace #"..list_state
|
Nenue@32
|
228 else
|
Nenue@32
|
229 return D:PrintHelp()
|
Nenue@0
|
230 end
|
Nenue@32
|
231
|
Nenue@32
|
232 -- start the iterating
|
Nenue@36
|
233 if not db[PLAYER_REALM][list_state] then
|
Nenue@36
|
234 db[PLAYER_REALM][list_state] = {}
|
Nenue@36
|
235 end
|
Nenue@36
|
236 if not db.global[list_state] then
|
Nenue@36
|
237 db.global[list_state] = {}
|
Nenue@36
|
238 end
|
Nenue@36
|
239
|
Nenue@0
|
240 local char_list, global_list = db[PLAYER_REALM][list_state], db.global[list_state]
|
Nenue@0
|
241 local playername = UnitName("player")
|
Nenue@0
|
242
|
Nenue@0
|
243 for i = 1, GetNumAddOns() do
|
Nenue@0
|
244 local name = GetAddOnInfo(i)
|
Nenue@0
|
245 local enableState, globalState = GetAddOnEnableState(playername, i), GetAddOnEnableState(nil, i)
|
Nenue@0
|
246
|
Nenue@32
|
247 if mode == 'save' then
|
Nenue@0
|
248 char_list[name] = enableState
|
Nenue@0
|
249 global_list[name] = globalState
|
Nenue@0
|
250 else
|
Nenue@13
|
251 if char_list[name] or global_list[name] then
|
Nenue@32
|
252 if char_list[name] ~= 0 and global_list[name] ~= 0 then
|
Nenue@32
|
253 local value = false
|
Nenue@32
|
254 if char_list[name] == 2 and global_list[name] == 1 then
|
Nenue@32
|
255 value = UnitName("player")
|
Nenue@32
|
256 elseif global_list[name] == 2 then
|
Nenue@32
|
257 value = true
|
Nenue@32
|
258 end
|
Nenue@32
|
259 --print('EnableAddOn(', i, ',', value,')')
|
Nenue@32
|
260 EnableAddOn(i, value)
|
Nenue@32
|
261 else
|
Nenue@32
|
262 local value = true
|
Nenue@32
|
263 if char_list[name] == 2 and global_list[name] == 1 then
|
Nenue@32
|
264 value = UnitName("player")
|
Nenue@32
|
265 end
|
Nenue@32
|
266 --print('DisableAddOn(', i, ',', value,')')
|
Nenue@32
|
267 DisableAddOn(i,value)
|
Nenue@0
|
268 end
|
Nenue@33
|
269 elseif mode ~= 'save' then
|
Nenue@32
|
270 if type(db.unlisted) ~= 'table' then
|
Nenue@32
|
271 db.unlisted = {}
|
Nenue@0
|
272 end
|
Nenue@47
|
273 insert(db.unlisted, name)
|
Nenue@13
|
274 end
|
Nenue@0
|
275
|
Nenue@0
|
276 end
|
Nenue@0
|
277 end
|
Nenue@0
|
278
|
Nenue@32
|
279 if mode ~= 'save' then
|
Nenue@33
|
280 --db.load_message = "AddOn profile ".. list_state .." was loaded."
|
Nenue@0
|
281 ReloadUI()
|
Nenue@0
|
282 else
|
Nenue@32
|
283 D:Print('Profile #'.. (list_state)..' saved.')
|
Nenue@32
|
284 if list_state == 1 then
|
Nenue@32
|
285 D:Print('This will be your main AddOn list.')
|
Nenue@32
|
286 elseif list_state == db.default_list then
|
Nenue@32
|
287 db.last_workspace = list_state
|
Nenue@32
|
288 D:Print('This will be your default workspace')
|
Nenue@32
|
289 end
|
Nenue@0
|
290 end
|
Nenue@0
|
291 end
|
Nenue@0
|
292
|
Nenue@0
|
293
|
Nenue@13
|
294
|
Nenue@18
|
295 --- Creates a Devian-style output.
|
Nenue@18
|
296 -- The first argument describes the channel to output on, and the remaining arguments are concatenated in a manner similar to default print()
|
Nenue@18
|
297 -- This becomes the print handler when development mode is active. The original print() function is assigned to oldprint().
|
Nenue@18
|
298 -- @param Tag, signature, or numeric index of the channel to output on. Defaults to primary channel.
|
Nenue@18
|
299 -- @param ... Output contents.
|
Nenue@0
|
300 local function Message(prefix, ...)
|
Nenue@45
|
301 if db.workspace == 1 then
|
Nenue@23
|
302 return D.oldprint(prefix, ...)
|
Nenue@23
|
303 end
|
Nenue@23
|
304
|
Nenue@55
|
305 if tostring(prefix) == nil then
|
Nenue@55
|
306 prefix = 'nil*'
|
Nenue@1
|
307 end
|
Nenue@9
|
308
|
Nenue@18
|
309 local sendq = {}
|
Nenue@30
|
310 local tag, id, tagged
|
Nenue@13
|
311 local byName = true
|
Nenue@18
|
312 if D.tags[prefix] then
|
Nenue@18
|
313 for _, id in pairs(D.tags[prefix]) do
|
Nenue@18
|
314 if D.console[id] then
|
Nenue@18
|
315 sendq[id] = D.console[id]
|
Nenue@30
|
316 tagged = true
|
Nenue@18
|
317 end
|
Nenue@18
|
318 end
|
Nenue@18
|
319 end
|
Nenue@18
|
320
|
Nenue@13
|
321 if D.sig[prefix] then
|
Nenue@18
|
322 sendq[D.sig[prefix].index] = D.sig[prefix]
|
Nenue@13
|
323 elseif D.console[prefix] then
|
Nenue@18
|
324 sendq[D.console[prefix]] = D.console[prefix]
|
Nenue@30
|
325 elseif not tagged then
|
Nenue@18
|
326 sendq[D.primary_channel] = D.console[D.primary_channel]
|
Nenue@13
|
327 end
|
Nenue@18
|
328
|
Nenue@9
|
329 -- color me timbers
|
Nenue@9
|
330 local pcolor
|
Nenue@18
|
331 if (not db.tagcolor[prefix]) and byName then
|
Nenue@30
|
332 local c = {
|
Nenue@47
|
333 rand(64,255), rand(64,255), rand(64,255)
|
Nenue@30
|
334 }
|
Nenue@30
|
335 if c[1] > 223 and c[2] > 223 and c[3] > 223 then
|
Nenue@47
|
336 c[rand(1,3)] = rand(64,223)
|
Nenue@0
|
337 end
|
Nenue@30
|
338
|
Nenue@47
|
339 db.tagcolor[prefix] = format('%02X%02X%02X', unpack(c))
|
Nenue@0
|
340 end
|
Nenue@18
|
341 pcolor = db.tagcolor[prefix]
|
Nenue@0
|
342
|
Nenue@55
|
343 local buffer = {}
|
Nenue@0
|
344 for i = 1, select('#',...) do
|
Nenue@0
|
345 local var = select(i, ...)
|
Nenue@0
|
346
|
Nenue@0
|
347 if type(var) == 'table' then
|
Nenue@20
|
348 if type(var.GetName) == 'function' then
|
Nenue@46
|
349 var = '<table:'..tostring(var:GetName())..'>'
|
Nenue@20
|
350 else
|
Nenue@32
|
351 var = '<'..tostring(var)..'>'
|
Nenue@20
|
352 end
|
Nenue@20
|
353
|
Nenue@0
|
354 elseif type(var) == 'boolean' then
|
Nenue@0
|
355 var = var and 'true' or 'false'
|
Nenue@0
|
356 elseif type(var) == 'function' then
|
Nenue@0
|
357 var = '<funcref>'
|
Nenue@0
|
358 elseif type(var) == 'nil' then
|
Nenue@0
|
359 var = 'nil'
|
Nenue@0
|
360 end
|
Nenue@0
|
361
|
Nenue@47
|
362 insert(buffer, var)
|
Nenue@0
|
363 end
|
Nenue@47
|
364 local message = concat(buffer, ' ')
|
Nenue@18
|
365 for id, channel in pairs(sendq) do
|
Nenue@55
|
366 if channel.width < 250 then
|
Nenue@55
|
367 prefix = string.sub(prefix, 0,2)
|
Nenue@55
|
368 end
|
Nenue@55
|
369 channel.out:AddMessage('|cFF'.. pcolor..prefix ..'|r ' .. message)
|
Nenue@47
|
370 UIFrameFadeIn(D.dock.buttons[id], db.dock_onshow_fade_time, db.dock_onshow_fade_from, db.dock_onshow_fade_to)
|
Nenue@47
|
371 UIFrameFadeIn(D.dock.buttons[id].caption, db.dock_onshow_fade_time, db.dock_onshow_fade_from, db.dock_onshow_fade_to)
|
Nenue@18
|
372 end
|
Nenue@47
|
373 wipe(buffer)
|
Nenue@0
|
374 end
|
Nenue@0
|
375
|
Nenue@14
|
376
|
Nenue@32
|
377
|
Nenue@14
|
378
|
Nenue@32
|
379 function D:PrintHelp()
|
Nenue@32
|
380 D:Print("|cFFFFFF00/dvn|r",
|
Nenue@32
|
381 "\n |cFFFFFF00<number>|r - Loads a saved addon list. List 1 is treated as a gameplay profile and consoles will be disabled by default.")
|
Nenue@47
|
382 D:Print("|cFFFFFF00/dvc|r [<key>, ...]", "- Hides and show consoles. A list of channel keys can be passed to specify which ones get toggled.")
|
Nenue@32
|
383
|
Nenue@32
|
384 D:Print("|cFFFFFF00/resetdvn|r", "- Resets all but profile data SavedVariables.")
|
Nenue@32
|
385 D:Print("|cFFFFFF00/cleandvn|r", "- Fully resets SavedVariables, profiles and all.")
|
Nenue@32
|
386 end
|
Nenue@32
|
387
|
Nenue@45
|
388
|
Nenue@45
|
389
|
Nenue@0
|
390 function D:OnEnable()
|
Nenue@33
|
391 print(MAJOR, MINOR)
|
Nenue@33
|
392
|
Nenue@33
|
393 if db.unlisted and #db.unlisted > 0 then
|
Nenue@47
|
394 D:Print('New AddOns have been found since the last profile update: '.. concat(db.unlisted, ', '))
|
Nenue@47
|
395 wipe(db.unlisted)
|
Nenue@33
|
396 end
|
Nenue@33
|
397
|
Nenue@33
|
398 if db.workspace == 1 then
|
Nenue@33
|
399 D:Print('Gameplay mode active (list #'..db.workspace..'). Print handling turned |cFFFFFF00OFF|r.')
|
Nenue@33
|
400 else
|
Nenue@33
|
401 D:Print('Development mode active (list #'..db.workspace..'). Print handling |cFF00FF00ON|r.')
|
Nenue@33
|
402 end
|
Nenue@33
|
403
|
Nenue@47
|
404 --@debug@
|
Nenue@45
|
405 self:RegisterChatCommand("dvg", function(input)
|
Nenue@45
|
406 if not self.config then
|
Nenue@45
|
407 self.config = DevCon
|
Nenue@45
|
408 self:EnableModule("Config")
|
Nenue@45
|
409 end
|
Nenue@45
|
410 self.modules.Config:ChatCommand(input)
|
Nenue@45
|
411 end)
|
Nenue@47
|
412 --@end-debug@
|
Nenue@45
|
413
|
Nenue@55
|
414 -- movement fading
|
Nenue@55
|
415 if db.movement_fade then
|
Nenue@55
|
416 self:RegisterEvent('PLAYER_STARTED_MOVING', function()
|
Nenue@55
|
417 for k, v in pairs(self.console) do
|
Nenue@55
|
418 if v.enabled then
|
Nenue@55
|
419 v.preAlpha = v:GetAlpha()
|
Nenue@55
|
420 UIFrameFadeOut(v, db.movement_fade_time, v.preAlpha, 0)
|
Nenue@55
|
421 UIFrameFadeOut(v.out, db.movement_fade_time, v.preAlpha, 0)
|
Nenue@55
|
422 end
|
Nenue@55
|
423 end
|
Nenue@55
|
424 end)
|
Nenue@55
|
425 self:RegisterEvent('PLAYER_STOPPED_MOVING', function()
|
Nenue@55
|
426 for k, v in pairs(self.console) do
|
Nenue@55
|
427 if v.enabled then
|
Nenue@55
|
428 UIFrameFadeIn(v, db.movement_fade_time, v:GetAlpha(), v.alpha)
|
Nenue@55
|
429 UIFrameFadeIn(v.out, db.movement_fade_time, v:GetAlpha(), v.alpha)
|
Nenue@55
|
430 end
|
Nenue@55
|
431 end
|
Nenue@55
|
432 end)
|
Nenue@55
|
433 end
|
Nenue@33
|
434 end
|
Nenue@33
|
435
|
Nenue@33
|
436 function D:OnInitialize()
|
Nenue@13
|
437 -- commands
|
Nenue@33
|
438 self:RegisterChatCommand("cleandvn", function(args)
|
Nenue@33
|
439 DevianDB = nil
|
Nenue@33
|
440 DevianDB = {
|
Nenue@33
|
441 load_message = "All SavedVars wiped."
|
Nenue@33
|
442 }
|
Nenue@33
|
443 ReloadUI()
|
Nenue@33
|
444 end)
|
Nenue@36
|
445 local blocked = {global = true, [PLAYER_REALM] = true}
|
Nenue@33
|
446 self:RegisterChatCommand("resetdvn", function(args)
|
Nenue@33
|
447 for k,v in pairs(DevianDB) do
|
Nenue@36
|
448 if not blocked[k] then
|
Nenue@33
|
449 DevianDB[k] = nil
|
Nenue@33
|
450 end
|
Nenue@33
|
451 end
|
Nenue@36
|
452 for k,v in pairs(defaults) do
|
Nenue@36
|
453 if not blocked[k] then
|
Nenue@36
|
454 DevianDB[k] = v
|
Nenue@36
|
455 end
|
Nenue@36
|
456 end
|
Nenue@33
|
457 DevianDB.load_message = "Non-user SavedVars have been reset."
|
Nenue@33
|
458 ReloadUI()
|
Nenue@33
|
459 end)
|
Nenue@13
|
460 local cmdlist = {
|
Nenue@13
|
461 ['dvn'] = ScanAddOnList,
|
Nenue@13
|
462 ['devian'] = ScanAddOnList,
|
Nenue@36
|
463 ['dvc'] = "Console_Toggle",
|
Nenue@13
|
464 }
|
Nenue@13
|
465 for cmd, func in pairs(cmdlist) do
|
Nenue@13
|
466 self:RegisterChatCommand(cmd, func, true)
|
Nenue@13
|
467 end
|
Nenue@13
|
468
|
Nenue@33
|
469 -- pull defaults
|
Nenue@9
|
470 if not _G.DevianDB then
|
Nenue@13
|
471 _G.DevianDB = defaults
|
Nenue@9
|
472 end
|
Nenue@9
|
473 db = _G.DevianDB
|
Nenue@47
|
474 self.db = db
|
Nenue@32
|
475 self.tags = db.tags
|
Nenue@32
|
476 self.channelinfo = db.channels
|
Nenue@0
|
477
|
Nenue@0
|
478 if not db[PLAYER_REALM] then
|
Nenue@32
|
479 db[PLAYER_REALM] = {[WORKSPACE_ON] = {}, [WORKSPACE_OFF] = {}}
|
Nenue@0
|
480 end
|
Nenue@0
|
481
|
Nenue@32
|
482 if db.load_message then
|
Nenue@32
|
483 D:Print(db.load_message)
|
Nenue@32
|
484 db.load_message = nil
|
Nenue@0
|
485 end
|
Nenue@0
|
486 D.oldprint = getprinthandler()
|
Nenue@0
|
487 if not _G.oldprint then
|
Nenue@0
|
488 _G.oldprint = D.oldprint
|
Nenue@0
|
489 end
|
Nenue@13
|
490
|
Nenue@33
|
491 -- Stop here in game mode
|
Nenue@33
|
492 if db.workspace == 1 then
|
Nenue@33
|
493 return
|
Nenue@33
|
494 end
|
Nenue@35
|
495 -----------------------------------------------------------------------
|
Nenue@35
|
496 self.db = db
|
Nenue@35
|
497 self.channels = db.channels
|
Nenue@32
|
498 self.max_channel = 0
|
Nenue@14
|
499 self.num_channels = 0
|
Nenue@13
|
500 self.console = {}
|
Nenue@13
|
501 self.sig = {}
|
Nenue@14
|
502 self.sigID = {}
|
Nenue@14
|
503 self.IDsig = {}
|
Nenue@47
|
504 self.dock = DevianDock
|
Nenue@47
|
505 self.dock.buttons = {}
|
Nenue@14
|
506 for i, cinfo in pairs(db.channels) do
|
Nenue@14
|
507 i = tonumber(i)
|
Nenue@14
|
508 if not self.primary_channel then
|
Nenue@14
|
509 self.primary_channel = i
|
Nenue@14
|
510 end
|
Nenue@14
|
511 self:SetChannel(cinfo, i)
|
Nenue@47
|
512 self.max_channel = max(i, self.max_channel)
|
Nenue@32
|
513 self.num_channels = self.num_channels + 1
|
Nenue@32
|
514 end
|
Nenue@32
|
515
|
Nenue@18
|
516 if self.console[db.current_channel] then
|
Nenue@18
|
517 self.console[db.current_channel]:ToFront()
|
Nenue@28
|
518 -- bring the current channel to the front
|
Nenue@18
|
519 end
|
Nenue@47
|
520 DevianDock:Show()
|
Nenue@47
|
521 self:UpdateDock()
|
Nenue@33
|
522 setprinthandler(Message)
|
Nenue@33
|
523 print = function(...)
|
Nenue@33
|
524 _G.print('Dvn', ...)
|
Nenue@23
|
525 end
|
Nenue@36
|
526 end
|
Nenue@36
|
527
|
Nenue@36
|
528 --- Console frame toggler
|
Nenue@36
|
529 -- @paramsig [...]
|
Nenue@36
|
530 -- @param ... one or more space-seperated channel keys
|
Nenue@47
|
531 function D:Console_Toggle(input, force)
|
Nenue@38
|
532 --oldprint(input)
|
Nenue@47
|
533 local setAll
|
Nenue@36
|
534 if db.workspace == 1 then
|
Nenue@36
|
535 return self:Print(MSG_NEED_DEV_MODE)
|
Nenue@36
|
536 end
|
Nenue@36
|
537 local search = {}
|
Nenue@47
|
538 local key
|
Nenue@36
|
539 local n = 0
|
Nenue@47
|
540 while self:GetArgs(input,1,n) and n < 255 do --should end itself when it gets nil, but
|
Nenue@47
|
541 key, n = self:GetArgs(input,1,n)
|
Nenue@47
|
542
|
Nenue@36
|
543 if self.sig[key] then
|
Nenue@47
|
544 --print(key, self.sigID[key])
|
Nenue@47
|
545 insert(search, self.sigID[key])
|
Nenue@47
|
546 elseif self.console[tonumber(key)] then
|
Nenue@47
|
547 --print(key, tonumber(key))
|
Nenue@47
|
548 insert(search, tonumber(key))
|
Nenue@36
|
549 end
|
Nenue@47
|
550
|
Nenue@47
|
551 --oldprint(#search, key, n)
|
Nenue@47
|
552 end
|
Nenue@47
|
553 if #search < 1 then
|
Nenue@36
|
554 search = self.sigID
|
Nenue@47
|
555 setAll = true
|
Nenue@47
|
556 end
|
Nenue@47
|
557 if setAll then
|
Nenue@47
|
558 --oldprint('setall', setAll)
|
Nenue@47
|
559 db.enabled = (not db.enabled) and true or nil
|
Nenue@47
|
560 if force == 0 then
|
Nenue@47
|
561 db.enabled = nil
|
Nenue@47
|
562 end
|
Nenue@36
|
563 end
|
Nenue@36
|
564
|
Nenue@36
|
565 for i, id in pairs(search) do
|
Nenue@38
|
566 --oldprint(i, id)
|
Nenue@36
|
567 local c = self.console[id]
|
Nenue@47
|
568 if setAll then
|
Nenue@47
|
569 c.enabled = db.enabled and db.enabled or nil
|
Nenue@47
|
570 else
|
Nenue@47
|
571
|
Nenue@47
|
572 db.enabled = true
|
Nenue@47
|
573 c.enabled = (not c.enabled) and true or nil
|
Nenue@47
|
574 if force == 0 then
|
Nenue@47
|
575 c.enabled = nil
|
Nenue@47
|
576 end
|
Nenue@47
|
577 --oldprint(id, ' ', force, c.enabled, db.enabled)
|
Nenue@47
|
578 end
|
Nenue@47
|
579
|
Nenue@47
|
580 if c.enabled or (setAll and db.enabled) then
|
Nenue@36
|
581 c:Show()
|
Nenue@36
|
582 if db.current_channel == c.index then
|
Nenue@36
|
583 c:ToFront()
|
Nenue@36
|
584 end
|
Nenue@47
|
585 elseif not (c.enabled and db.enabled) then
|
Nenue@36
|
586 c:Hide()
|
Nenue@36
|
587 end
|
Nenue@47
|
588 c:Save()
|
Nenue@36
|
589 end
|
Nenue@36
|
590
|
Nenue@47
|
591 if setAll then
|
Nenue@47
|
592 if db.enabled then
|
Nenue@47
|
593 self:Print('toggled all consoles ON')
|
Nenue@47
|
594 else
|
Nenue@47
|
595 self:Print('toggled all consoles OFF')
|
Nenue@47
|
596 end
|
Nenue@36
|
597 else
|
Nenue@47
|
598 local result = {}
|
Nenue@47
|
599 for i, id in pairs(search) do
|
Nenue@47
|
600 result[i] = tostring(id) .. ' = ' .. (self.console[id].enabled and 'ON' or 'OFF')
|
Nenue@47
|
601 end
|
Nenue@47
|
602 self:Print('toggled: '..concat(result, ', '))
|
Nenue@36
|
603 end
|
Nenue@0
|
604 end |