Mercurial > wow > devian
comparison Devian.lua @ 47:eb7544afd77a
dock frame implementation
fixes to /dvc command
author | Nenue |
---|---|
date | Mon, 04 Jan 2016 05:42:44 -0500 |
parents | dcc57a7cabc9 |
children | c3166f700438 |
comparison
equal
deleted
inserted
replaced
46:dcc57a7cabc9 | 47:eb7544afd77a |
---|---|
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 D = _G.Devian | 9 local D = _G.Devian |
10 D:SetDefaultModuleState(false) | 10 D:SetDefaultModuleState(false) |
11 | 11 |
12 local pairs, tostring, tonumber, ipairs, type = pairs, tostring, tonumber, ipairs, type | |
13 local max, rand, format = math.max, math.random, string.format | |
14 local insert, wipe, concat = table.insert, table.wipe, table.concat | |
15 local select, unpack = select, unpack | |
16 local GetNumAddOns, GetAddOnInfo, GetAddOnEnableState, EnableAddOn = GetNumAddOns, GetAddOnInfo, GetAddOnEnableState, EnableAddOn | |
17 local UnitName, DisableAddOn = UnitName, DisableAddOn | |
12 local MAJOR, MINOR = 'Devian-1.3', 'r@project-revision@' | 18 local MAJOR, MINOR = 'Devian-1.3', 'r@project-revision@' |
13 local MSG_NEED_DEV_MODE = 'Must be in development mode to use this function.' | 19 local MSG_NEED_DEV_MODE = 'Must be in development mode to use this function.' |
14 local WORKSPACE_ON, WORKSPACE_OFF = 1, 2 | 20 local WORKSPACE_ON, WORKSPACE_OFF = 1, 2 |
15 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName() | 21 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName() |
16 local print = _G.print | 22 local print = _G.print |
54 frontalpha = 1, | 60 frontalpha = 1, |
55 frontborder = {.07,.47,1,1}, | 61 frontborder = {.07,.47,1,1}, |
56 frontheader = {1,1,1,1}, | 62 frontheader = {1,1,1,1}, |
57 tagcolor = {}, -- tag color repository | 63 tagcolor = {}, -- tag color repository |
58 workspace = 2, -- current profile | 64 workspace = 2, -- current profile |
59 last_workspace = 2 -- default workspace to alternate with when just "/dvn" is issued | 65 last_workspace = 2, -- default workspace to alternate with when just "/dvn" is issued |
66 | |
67 dock_onshow_fade_time = 2.5, | |
68 dock_onshow_fade_from = 1, | |
69 dock_onshow_fade_to = 0.2, | |
70 | |
71 dock_alpha_on = 1, | |
72 dock_alpha_off = 0.2, | |
73 dock_fade_in = 0.15, | |
74 dock_fade_out = 0.45, | |
75 dock_button_alpha_on = 1, | |
76 dock_button_alpha_off = 0.2, | |
77 dock_button_fade_in = 0.15, | |
78 dock_button_fade_out = 0.45 | |
79 | |
60 } | 80 } |
61 | 81 |
62 local function ScanAddOnList(cmd, ...) | 82 local function ScanAddOnList(cmd, ...) |
63 local list_state | 83 local list_state |
64 | 84 |
65 local args = {} | 85 local args = {} |
66 local arg, n = D:GetArgs(cmd, 1) | 86 local arg, n = D:GetArgs(cmd, 1) |
67 while arg do | 87 while arg do |
68 table.insert(args, arg) | 88 insert(args, arg) |
69 arg, n = D:GetArgs(cmd,1,n) | 89 arg, n = D:GetArgs(cmd,1,n) |
70 end | 90 end |
71 local mode, tag, dest = unpack(args) | 91 local mode, tag, dest = unpack(args) |
72 | 92 |
73 | 93 |
102 return | 122 return |
103 end | 123 end |
104 --@debug@ | 124 --@debug@ |
105 --print(i, '->', ch.index, '-', ch.signature)--@end-debug@ | 125 --print(i, '->', ch.index, '-', ch.signature)--@end-debug@ |
106 if i > 2 then | 126 if i > 2 then |
107 table.insert(worklist, ch.index) | 127 insert(worklist, ch.index) |
108 else | 128 else |
109 target = ch | 129 target = ch |
110 | 130 |
111 --@debug@ | 131 --@debug@ |
112 --print('arg1', args[2], target)--@end-debug@ | 132 --print('arg1', args[2], target)--@end-debug@ |
113 end | 133 end |
114 end | 134 end |
115 D:Print("Docking |cFF88FFFF"..table.concat(worklist, "|r, |cFF88FFFF").."|r with |cFFFFFF00"..target.index..', '..target.signature.."|r.") | 135 D:Print("Docking |cFF88FFFF"..concat(worklist, "|r, |cFF88FFFF").."|r with |cFFFFFF00"..target.index..', '..target.signature.."|r.") |
116 return D:DockFrame(target.index, unpack(worklist)) | 136 return D:DockFrame(target.index, unpack(worklist)) |
117 | 137 |
118 | 138 |
119 elseif mode == 'stack' then | 139 elseif mode == 'stack' then |
120 if db.workspace == 1 then | 140 if db.workspace == 1 then |
172 D:Print('Hiding |cFF88FFFF'..tag..'|r messages in |cFFFFFF00'..db.channels[dest].index ..':'.. db.channels[dest].signature) | 192 D:Print('Hiding |cFF88FFFF'..tag..'|r messages in |cFFFFFF00'..db.channels[dest].index ..':'.. db.channels[dest].signature) |
173 else | 193 else |
174 db.tags[tag][dest] = dest | 194 db.tags[tag][dest] = dest |
175 D:Print('Showing |cFF88FFFF'..tag..'|r messages in |cFFFFFF00'..db.channels[dest].index ..':'.. db.channels[dest].signature) | 195 D:Print('Showing |cFF88FFFF'..tag..'|r messages in |cFFFFFF00'..db.channels[dest].index ..':'.. db.channels[dest].signature) |
176 end | 196 end |
197 D:UpdateDock() | |
177 else | 198 else |
178 D:Print('Usage: /dvn tag <prefix> <console name or number>') | 199 D:Print('Usage: /dvn tag <prefix> <console name or number>') |
179 end | 200 end |
180 return | 201 return |
181 elseif tonumber(mode) ~= nil or mode == 'save' then | 202 elseif tonumber(mode) ~= nil or mode == 'save' then |
240 end | 261 end |
241 elseif mode ~= 'save' then | 262 elseif mode ~= 'save' then |
242 if type(db.unlisted) ~= 'table' then | 263 if type(db.unlisted) ~= 'table' then |
243 db.unlisted = {} | 264 db.unlisted = {} |
244 end | 265 end |
245 table.insert(db.unlisted, name) | 266 insert(db.unlisted, name) |
246 end | 267 end |
247 | 268 |
248 end | 269 end |
249 end | 270 end |
250 | 271 |
300 | 321 |
301 -- color me timbers | 322 -- color me timbers |
302 local pcolor | 323 local pcolor |
303 if (not db.tagcolor[prefix]) and byName then | 324 if (not db.tagcolor[prefix]) and byName then |
304 local c = { | 325 local c = { |
305 math.random(64,255), math.random(64,255), math.random(64,255) | 326 rand(64,255), rand(64,255), rand(64,255) |
306 } | 327 } |
307 if c[1] > 223 and c[2] > 223 and c[3] > 223 then | 328 if c[1] > 223 and c[2] > 223 and c[3] > 223 then |
308 c[math.random(1,3)] = math.random(64,223) | 329 c[rand(1,3)] = rand(64,223) |
309 end | 330 end |
310 | 331 |
311 db.tagcolor[prefix] = string.format('%02X%02X%02X', unpack(c)) | 332 db.tagcolor[prefix] = format('%02X%02X%02X', unpack(c)) |
312 end | 333 end |
313 pcolor = db.tagcolor[prefix] | 334 pcolor = db.tagcolor[prefix] |
314 | 335 |
315 local buffer = {'|cFF'.. pcolor..prefix ..'|r'} | 336 local buffer = {'|cFF'.. pcolor..prefix ..'|r'} |
316 for i = 1, select('#',...) do | 337 for i = 1, select('#',...) do |
329 var = '<funcref>' | 350 var = '<funcref>' |
330 elseif type(var) == 'nil' then | 351 elseif type(var) == 'nil' then |
331 var = 'nil' | 352 var = 'nil' |
332 end | 353 end |
333 | 354 |
334 table.insert(buffer, var) | 355 insert(buffer, var) |
335 end | 356 end |
336 local message = table.concat(buffer, ' ') | 357 local message = concat(buffer, ' ') |
337 for id, channel in pairs(sendq) do | 358 for id, channel in pairs(sendq) do |
338 channel.out:AddMessage(message) | 359 channel.out:AddMessage(message) |
339 end | 360 UIFrameFadeIn(D.dock.buttons[id], db.dock_onshow_fade_time, db.dock_onshow_fade_from, db.dock_onshow_fade_to) |
340 table.wipe(buffer) | 361 UIFrameFadeIn(D.dock.buttons[id].caption, db.dock_onshow_fade_time, db.dock_onshow_fade_from, db.dock_onshow_fade_to) |
362 end | |
363 wipe(buffer) | |
341 end | 364 end |
342 | 365 |
343 | 366 |
344 | 367 |
345 | 368 |
346 function D:PrintHelp() | 369 function D:PrintHelp() |
347 D:Print("|cFFFFFF00/dvn|r", | 370 D:Print("|cFFFFFF00/dvn|r", |
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.") | 371 "\n |cFFFFFF00<number>|r - Loads a saved addon list. List 1 is treated as a gameplay profile and consoles will be disabled by default.") |
372 D:Print("|cFFFFFF00/dvc|r [<key>, ...]", "- Hides and show consoles. A list of channel keys can be passed to specify which ones get toggled.") | |
349 | 373 |
350 D:Print("|cFFFFFF00/resetdvn|r", "- Resets all but profile data SavedVariables.") | 374 D:Print("|cFFFFFF00/resetdvn|r", "- Resets all but profile data SavedVariables.") |
351 D:Print("|cFFFFFF00/cleandvn|r", "- Fully resets SavedVariables, profiles and all.") | 375 D:Print("|cFFFFFF00/cleandvn|r", "- Fully resets SavedVariables, profiles and all.") |
352 end | 376 end |
353 | 377 |
355 | 379 |
356 function D:OnEnable() | 380 function D:OnEnable() |
357 print(MAJOR, MINOR) | 381 print(MAJOR, MINOR) |
358 | 382 |
359 if db.unlisted and #db.unlisted > 0 then | 383 if db.unlisted and #db.unlisted > 0 then |
360 D:Print('New AddOns have been found since the last profile update: '.. table.concat(db.unlisted, ', ')) | 384 D:Print('New AddOns have been found since the last profile update: '.. concat(db.unlisted, ', ')) |
361 table.wipe(db.unlisted) | 385 wipe(db.unlisted) |
362 end | 386 end |
363 | 387 |
364 if db.workspace == 1 then | 388 if db.workspace == 1 then |
365 D:Print('Gameplay mode active (list #'..db.workspace..'). Print handling turned |cFFFFFF00OFF|r.') | 389 D:Print('Gameplay mode active (list #'..db.workspace..'). Print handling turned |cFFFFFF00OFF|r.') |
366 else | 390 else |
367 D:Print('Development mode active (list #'..db.workspace..'). Print handling |cFF00FF00ON|r.') | 391 D:Print('Development mode active (list #'..db.workspace..'). Print handling |cFF00FF00ON|r.') |
368 end | 392 end |
369 | 393 |
394 --@debug@ | |
370 self:RegisterChatCommand("dvg", function(input) | 395 self:RegisterChatCommand("dvg", function(input) |
371 if not self.config then | 396 if not self.config then |
372 self.config = DevCon | 397 self.config = DevCon |
373 self:EnableModule("Config") | 398 self:EnableModule("Config") |
374 end | 399 end |
375 self.modules.Config:ChatCommand(input) | 400 self.modules.Config:ChatCommand(input) |
376 end) | 401 end) |
402 --@end-debug@ | |
377 | 403 |
378 end | 404 end |
379 | 405 |
380 function D:OnInitialize() | 406 function D:OnInitialize() |
381 -- commands | 407 -- commands |
413 -- pull defaults | 439 -- pull defaults |
414 if not _G.DevianDB then | 440 if not _G.DevianDB then |
415 _G.DevianDB = defaults | 441 _G.DevianDB = defaults |
416 end | 442 end |
417 db = _G.DevianDB | 443 db = _G.DevianDB |
444 self.db = db | |
418 self.tags = db.tags | 445 self.tags = db.tags |
419 self.channelinfo = db.channels | 446 self.channelinfo = db.channels |
420 | 447 |
421 if not db[PLAYER_REALM] then | 448 if not db[PLAYER_REALM] then |
422 db[PLAYER_REALM] = {[WORKSPACE_ON] = {}, [WORKSPACE_OFF] = {}} | 449 db[PLAYER_REALM] = {[WORKSPACE_ON] = {}, [WORKSPACE_OFF] = {}} |
442 self.num_channels = 0 | 469 self.num_channels = 0 |
443 self.console = {} | 470 self.console = {} |
444 self.sig = {} | 471 self.sig = {} |
445 self.sigID = {} | 472 self.sigID = {} |
446 self.IDsig = {} | 473 self.IDsig = {} |
474 self.dock = DevianDock | |
475 self.dock.buttons = {} | |
447 for i, cinfo in pairs(db.channels) do | 476 for i, cinfo in pairs(db.channels) do |
448 i = tonumber(i) | 477 i = tonumber(i) |
449 if not self.primary_channel then | 478 if not self.primary_channel then |
450 self.primary_channel = i | 479 self.primary_channel = i |
451 end | 480 end |
452 self:SetChannel(cinfo, i) | 481 self:SetChannel(cinfo, i) |
453 self.max_channel = math.max(i, self.max_channel) | 482 self.max_channel = max(i, self.max_channel) |
454 self.num_channels = self.num_channels + 1 | 483 self.num_channels = self.num_channels + 1 |
455 end | |
456 | |
457 for i, channel in pairs(db.channels) do | |
458 if type(channel.docked) == 'table' then | |
459 --oldprint('docking',i, unpack(channel.docked)) | |
460 self.DockFrame(i, unpack(channel.docked)) | |
461 end | |
462 end | 484 end |
463 | 485 |
464 if self.console[db.current_channel] then | 486 if self.console[db.current_channel] then |
465 self.console[db.current_channel]:ToFront() | 487 self.console[db.current_channel]:ToFront() |
466 -- bring the current channel to the front | 488 -- bring the current channel to the front |
467 end | 489 end |
468 self.dock = DevianDock | 490 DevianDock:Show() |
469 | 491 self:UpdateDock() |
470 | |
471 setprinthandler(Message) | 492 setprinthandler(Message) |
472 print = function(...) | 493 print = function(...) |
473 _G.print('Dvn', ...) | 494 _G.print('Dvn', ...) |
474 end | 495 end |
475 end | 496 end |
476 | 497 |
477 --- Console frame toggler | 498 --- Console frame toggler |
478 -- @paramsig [...] | 499 -- @paramsig [...] |
479 -- @param ... one or more space-seperated channel keys | 500 -- @param ... one or more space-seperated channel keys |
480 function D:Console_Toggle(input) | 501 function D:Console_Toggle(input, force) |
481 --oldprint(input) | 502 --oldprint(input) |
503 local setAll | |
482 if db.workspace == 1 then | 504 if db.workspace == 1 then |
483 return self:Print(MSG_NEED_DEV_MODE) | 505 return self:Print(MSG_NEED_DEV_MODE) |
484 end | 506 end |
485 local search = {} | 507 local search = {} |
508 local key | |
486 local n = 0 | 509 local n = 0 |
487 if self:GetArgs(input,1) then | 510 while self:GetArgs(input,1,n) and n < 255 do --should end itself when it gets nil, but |
488 repeat | 511 key, n = self:GetArgs(input,1,n) |
489 local key, n = self:GetArgs(input,1,n) | 512 |
490 if self.sig[key] then | 513 if self.sig[key] then |
491 table.insert(search, self.sigID[key]) | 514 --print(key, self.sigID[key]) |
492 elseif self.console[key] then | 515 insert(search, self.sigID[key]) |
493 table.insert(search, tonumber(key)) | 516 elseif self.console[tonumber(key)] then |
494 end | 517 --print(key, tonumber(key)) |
495 until n == 1e9 | 518 insert(search, tonumber(key)) |
496 else | 519 end |
520 | |
521 --oldprint(#search, key, n) | |
522 end | |
523 if #search < 1 then | |
497 search = self.sigID | 524 search = self.sigID |
498 end | 525 setAll = true |
499 | 526 end |
500 db.enabled = (not db.enabled) and true or nil | 527 if setAll then |
528 --oldprint('setall', setAll) | |
529 db.enabled = (not db.enabled) and true or nil | |
530 if force == 0 then | |
531 db.enabled = nil | |
532 end | |
533 end | |
534 | |
501 for i, id in pairs(search) do | 535 for i, id in pairs(search) do |
502 --oldprint(i, id) | 536 --oldprint(i, id) |
503 local c = self.console[id] | 537 local c = self.console[id] |
504 if db.enabled then | 538 if setAll then |
505 c.enabled = true | 539 c.enabled = db.enabled and db.enabled or nil |
540 else | |
541 | |
542 db.enabled = true | |
543 c.enabled = (not c.enabled) and true or nil | |
544 if force == 0 then | |
545 c.enabled = nil | |
546 end | |
547 --oldprint(id, ' ', force, c.enabled, db.enabled) | |
548 end | |
549 | |
550 if c.enabled or (setAll and db.enabled) then | |
506 c:Show() | 551 c:Show() |
507 if db.current_channel == c.index then | 552 if db.current_channel == c.index then |
508 c:ToFront() | 553 c:ToFront() |
509 end | 554 end |
510 c:Save() | 555 elseif not (c.enabled and db.enabled) then |
556 c:Hide() | |
557 end | |
558 c:Save() | |
559 end | |
560 | |
561 if setAll then | |
562 if db.enabled then | |
563 self:Print('toggled all consoles ON') | |
511 else | 564 else |
512 c:Hide() | 565 self:Print('toggled all consoles OFF') |
513 end | 566 end |
514 end | |
515 | |
516 if db.enabled then | |
517 self:Print('toggled on: '..table.concat(search, ', ')) | |
518 else | 567 else |
519 self:Print('toggled off: '..table.concat(search, ', ')) | 568 local result = {} |
520 end | 569 for i, id in pairs(search) do |
521 end | 570 result[i] = tostring(id) .. ' = ' .. (self.console[id].enabled and 'ON' or 'OFF') |
571 end | |
572 self:Print('toggled: '..concat(result, ', ')) | |
573 end | |
574 end |