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