Mercurial > wow > devian
comparison Devian.lua @ 36:bec37163b7fe v2.0-beta
rewrote the blocks for '/dvn tag' and SetChannel to be more predictable; currently follows:
/dvn tag <source> <dest>
if <dest> matches a channel, then the tag for <source> is added or removed
if <dest> is a string and it doesn't match a channel, then that channel is created with <dest> as a signature
if <dest> is a number that doesn't match a channel index, then <dest> is set to <highest valid index + 1>, the channel is created under that, and <source> is used as its signature
SetChannel(cinfo, key)
start with an empty table t_info that is filled in as follows:
if key doesn't match a valid index/signature, then a channel is being created
if key does match a valid index, then a channel is being updated
if cinfo is a string, then only the signature value is imposed
if cinfo is a table, the values from that table are imposed
if a channel is being created, then the new channel info is filled in from primary channel, the index is auto-generated, and the signature value is checked for collision, and the information is passed through CreateConsole to form internal assignments
if a channel is being updated, then t_info is populated from the channel data, and any internal table assignments are switched over to t_info
the old tables sink into garbage collection
author | Nenue |
---|---|
date | Sun, 27 Dec 2015 08:19:45 -0500 |
parents | 3304455a3f45 |
children | d432f49e340e |
comparison
equal
deleted
inserted
replaced
35:3304455a3f45 | 36:bec37163b7fe |
---|---|
6 print('Something has happened...') | 6 print('Something has happened...') |
7 end | 7 end |
8 Devian = LibStub("AceAddon-3.0"):NewAddon("Devian", "AceConsole-3.0", "AceEvent-3.0") | 8 Devian = LibStub("AceAddon-3.0"):NewAddon("Devian", "AceConsole-3.0", "AceEvent-3.0") |
9 local MAJOR, MINOR = 'Devian-1.3', 'r@project-revision@' | 9 local MAJOR, MINOR = 'Devian-1.3', 'r@project-revision@' |
10 local D = _G.Devian | 10 local D = _G.Devian |
11 local MSG_NEED_DEV_MODE = 'Must be in development mode to use this function.' | |
11 local WORKSPACE_ON, WORKSPACE_OFF = 1, 2 | 12 local WORKSPACE_ON, WORKSPACE_OFF = 1, 2 |
12 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName() | 13 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName() |
13 local print = _G.print | 14 local print = _G.print |
14 local db | 15 local db |
15 local defaults = { | 16 local defaults = { |
25 fontsize = 13, | 26 fontsize = 13, |
26 fontoutline = 'NONE', | 27 fontoutline = 'NONE', |
27 headergrad = {'VERTICAL', 0, 0, 0, 0.5, 0.1, 0.1, 0.1, 0.3}, -- header info | 28 headergrad = {'VERTICAL', 0, 0, 0, 0.5, 0.1, 0.1, 0.1, 0.3}, -- header info |
28 headerdrop = {1,1,1,1}, | 29 headerdrop = {1,1,1,1}, |
29 headeralpha = 1, | 30 headeralpha = 1, |
30 backdrop = {0,0,0,1}, -- background frame info | 31 headerfontcolor = {1,0.2,0.2,1}, |
32 backdrop = {1,1,1,1}, -- background frame info | |
31 backgrad = {'VERTICAL', 0.1, 0.1, 0.1, 0.3, 0, 0, 0, 0.5}, | 33 backgrad = {'VERTICAL', 0.1, 0.1, 0.1, 0.3, 0, 0, 0, 0.5}, |
32 backblend = 'MOD', | 34 backblend = 'MOD', |
33 backalpha = 0.7, | 35 backalpha = 0.7, |
34 backborder = {0,0,1,0.75}, | 36 backborder = {0,0,1,0.75}, |
35 frontdrop = {0,0,0,1}, -- foreground frame info | 37 frontdrop = {1,1,1,1}, -- foreground frame info |
36 frontgrad = {'VERTICAL', 0.1, 0.1, 0.1, 0.9, 0, 0, 0, 0.9}, | 38 frontgrad = {'VERTICAL', 0.1, 0.1, 0.1, 0.8, 0, 0, 0, 0.6}, |
37 frontblend = 'MOD', | 39 frontblend = 'MOD', |
38 frontalpha = 1, | 40 frontalpha = 1, |
39 frontborder = {1,0,0,1}, | 41 frontborder = {1,0,0,1}, |
40 tagcolor = {}, -- tag color repository | 42 tagcolor = {}, -- tag color repository |
41 workspace = 1, -- current profile | 43 workspace = 2, -- current profile |
42 last_workspace = 2 -- default workspace to alternate with when just "/dvn" is issued | 44 last_workspace = 2 -- default workspace to alternate with when just "/dvn" is issued |
43 } | 45 } |
44 | 46 |
45 local function ScanAddOnList(cmd, ...) | 47 local function ScanAddOnList(cmd, ...) |
46 local list_state | 48 local list_state |
112 elseif mode == 'tag' then -- tagging | 114 elseif mode == 'tag' then -- tagging |
113 if db.workspace == 1 then | 115 if db.workspace == 1 then |
114 return D:Print(MSG_NEED_DEV_MODE) | 116 return D:Print(MSG_NEED_DEV_MODE) |
115 end | 117 end |
116 | 118 |
119 local sig | |
117 if tag ~= nil and dest ~= nil then | 120 if tag ~= nil and dest ~= nil then |
121 --@debug@ | |
122 print(tag, dest) | |
123 --@end-debug@ | |
124 | |
118 -- convert to ID | 125 -- convert to ID |
119 if tonumber(dest) == nil and D.sigID[dest] then | 126 if tonumber(dest) == nil then |
120 dest = db.channels[D.sigID[dest]].index | 127 if D.sigID[dest] then |
121 end | 128 dest = db.channels[D.sigID[dest]].index |
129 else | |
130 sig = dest | |
131 end | |
132 end | |
133 print('2 tag,dest,sig', tag, dest, sig) | |
122 | 134 |
123 -- make a new channel? | 135 -- make a new channel? |
136 local channel | |
124 if not db.channels[dest] then | 137 if not db.channels[dest] then |
125 dest = db.max_channel + 1 | 138 dest = D.max_channel + 1 |
126 D:Print('Creating a new channel for '.. tag) | 139 D:Print('Created channel |cFF88FFFF'.. (sig and (dest..':'..sig) or dest ) .. '|r') |
127 D:SetChannel(tag, dest) | 140 channel = D:SetChannel(sig or tag,dest) |
128 end | 141 end |
142 print('3',tag, dest) | |
129 | 143 |
130 if db.tags[tag] and db.tags[tag][dest] then | 144 if db.tags[tag] and db.tags[tag][dest] then |
131 db.tags[tag][dest] = nil | 145 db.tags[tag][dest] = nil |
132 D:Print('Hiding |cFF88FFFF'..tag..'|r messages in |cFFFFFF00'..db.channels[dest].index ..':'.. db.channels[dest].signature) | 146 D:Print('Hiding |cFF88FFFF'..tag..'|r messages in |cFFFFFF00'..db.channels[dest].index ..':'.. db.channels[dest].signature) |
133 else | 147 else |
163 else | 177 else |
164 return D:PrintHelp() | 178 return D:PrintHelp() |
165 end | 179 end |
166 | 180 |
167 -- start the iterating | 181 -- start the iterating |
182 if not db[PLAYER_REALM][list_state] then | |
183 db[PLAYER_REALM][list_state] = {} | |
184 end | |
185 if not db.global[list_state] then | |
186 db.global[list_state] = {} | |
187 end | |
188 | |
168 local char_list, global_list = db[PLAYER_REALM][list_state], db.global[list_state] | 189 local char_list, global_list = db[PLAYER_REALM][list_state], db.global[list_state] |
169 local playername = UnitName("player") | 190 local playername = UnitName("player") |
170 | 191 |
171 for i = 1, GetNumAddOns() do | 192 for i = 1, GetNumAddOns() do |
172 local name = GetAddOnInfo(i) | 193 local name = GetAddOnInfo(i) |
330 DevianDB = { | 351 DevianDB = { |
331 load_message = "All SavedVars wiped." | 352 load_message = "All SavedVars wiped." |
332 } | 353 } |
333 ReloadUI() | 354 ReloadUI() |
334 end) | 355 end) |
356 local blocked = {global = true, [PLAYER_REALM] = true} | |
335 self:RegisterChatCommand("resetdvn", function(args) | 357 self:RegisterChatCommand("resetdvn", function(args) |
336 for k,v in pairs(DevianDB) do | 358 for k,v in pairs(DevianDB) do |
337 if k ~= 'global' then | 359 if not blocked[k] then |
338 DevianDB[k] = nil | 360 DevianDB[k] = nil |
339 end | 361 end |
340 end | 362 end |
341 | 363 for k,v in pairs(defaults) do |
364 if not blocked[k] then | |
365 DevianDB[k] = v | |
366 end | |
367 end | |
342 DevianDB.load_message = "Non-user SavedVars have been reset." | 368 DevianDB.load_message = "Non-user SavedVars have been reset." |
343 for k,v in pairs(defaults) do | |
344 DevianDB[k] = v | |
345 end | |
346 ReloadUI() | 369 ReloadUI() |
347 end) | 370 end) |
348 local cmdlist = { | 371 local cmdlist = { |
349 ['dvn'] = ScanAddOnList, | 372 ['dvn'] = ScanAddOnList, |
350 ['devian'] = ScanAddOnList, | 373 ['devian'] = ScanAddOnList, |
351 ['dvc'] = Console_Toggle, | 374 ['dvc'] = "Console_Toggle", |
352 } | 375 } |
353 for cmd, func in pairs(cmdlist) do | 376 for cmd, func in pairs(cmdlist) do |
354 self:RegisterChatCommand(cmd, func, true) | 377 self:RegisterChatCommand(cmd, func, true) |
355 end | 378 end |
356 | 379 |
396 self:SetChannel(cinfo, i) | 419 self:SetChannel(cinfo, i) |
397 self.max_channel = math.max(i, self.max_channel) | 420 self.max_channel = math.max(i, self.max_channel) |
398 self.num_channels = self.num_channels + 1 | 421 self.num_channels = self.num_channels + 1 |
399 end | 422 end |
400 | 423 |
424 | |
401 for i, channel in pairs(db.channels) do | 425 for i, channel in pairs(db.channels) do |
402 if type(channel.docked) == 'table' then | 426 if type(channel.docked) == 'table' then |
403 oldprint('docking',i, unpack(channel.docked)) | 427 oldprint('docking',i, unpack(channel.docked)) |
404 self.DockFrame(i, unpack(channel.docked)) | 428 self.DockFrame(i, unpack(channel.docked)) |
405 end | 429 end |
412 setprinthandler(Message) | 436 setprinthandler(Message) |
413 print = function(...) | 437 print = function(...) |
414 _G.print('Dvn', ...) | 438 _G.print('Dvn', ...) |
415 end | 439 end |
416 end | 440 end |
441 | |
442 --- Console frame toggler | |
443 -- @paramsig [...] | |
444 -- @param ... one or more space-seperated channel keys | |
445 function D:Console_Toggle(input) | |
446 oldprint(input) | |
447 if db.workspace == 1 then | |
448 return self:Print(MSG_NEED_DEV_MODE) | |
449 end | |
450 local search = {} | |
451 local n = 0 | |
452 if self:GetArgs(input,1) then | |
453 repeat | |
454 local key, n = self:GetArgs(input,1,n) | |
455 if self.sig[key] then | |
456 table.insert(search, self.sigID[key]) | |
457 elseif self.console[key] then | |
458 table.insert(search, tonumber(key)) | |
459 end | |
460 until n == 1e9 | |
461 else | |
462 search = self.sigID | |
463 end | |
464 | |
465 db.enabled = (not db.enabled) and true or nil | |
466 for i, id in pairs(search) do | |
467 oldprint(i, id) | |
468 local c = self.console[id] | |
469 if db.enabled then | |
470 c.enabled = true | |
471 c:Show() | |
472 if db.current_channel == c.index then | |
473 c:ToFront() | |
474 end | |
475 c:Save() | |
476 else | |
477 c:Hide() | |
478 end | |
479 end | |
480 | |
481 if db.enabled then | |
482 self:Print('toggled on: '..table.concat(search, ', ')) | |
483 else | |
484 self:Print('toggled off: '..table.concat(search, ', ')) | |
485 end | |
486 end |