Mercurial > wow > devian
comparison Devian.lua @ 72:da5ff1fc9fb6
- Fixed an issue with creating more than one output channel per UI session.
- Cleanup of globals for slightly better performance when printing to a lot of channels at once
| author | Nenue |
|---|---|
| date | Sat, 09 Apr 2016 05:51:19 -0400 |
| parents | d636ff1b17ce |
| children | 3745540e8996 |
comparison
equal
deleted
inserted
replaced
| 71:d636ff1b17ce | 72:da5ff1fc9fb6 |
|---|---|
| 3 -- @project-revision@ @project-hash@ | 3 -- @project-revision@ @project-hash@ |
| 4 -- @file-revision@ @file-hash@ | 4 -- @file-revision@ @file-hash@ |
| 5 | 5 |
| 6 --GLOBALS: Devian, DevCon, DevianLoadMessage | 6 --GLOBALS: Devian, DevCon, DevianLoadMessage |
| 7 local ADDON, D = ... | 7 local ADDON, D = ... |
| 8 | 8 local sub, GetTime, print, _G = string.sub, GetTime, print, _G |
| 9 local format, setmetatable, getprinthandler, setprinthandler = string.format, setmetatable, getprinthandler, setprinthandler | |
| 10 local tinsert = tinsert | |
| 9 local currentProfile | 11 local currentProfile |
| 10 local playerName = UnitName("player") | 12 local playerName = UnitName("player") |
| 11 local playerRealm = playerName .. '-' .. GetRealmName() | 13 local playerRealm = playerName .. '-' .. GetRealmName() |
| 12 local num_dock_tabs = 0 | 14 local num_dock_tabs = 0 |
| 13 local in_workspace = false | 15 local in_workspace = false |
| 44 D.L = setmetatable({}, { | 46 D.L = setmetatable({}, { |
| 45 __index= function(t,k) | 47 __index= function(t,k) |
| 46 return k | 48 return k |
| 47 end, | 49 end, |
| 48 __call = function(t,k,...) | 50 __call = function(t,k,...) |
| 49 return string.format((t[k] or k) , ...) | 51 return format((t[k] or k) , ...) |
| 50 end | 52 end |
| 51 }) | 53 }) |
| 52 | 54 |
| 53 local MAJOR, MINOR = 'Devian-2.0', 'r@project-revision@' | 55 local MAJOR, MINOR = 'Devian-2.0', 'r@project-revision@' |
| 54 local D = LibStub("AceAddon-3.0"):NewAddon(D, "Devian", "AceConsole-3.0", "AceEvent-3.0") | 56 local D = LibStub("AceAddon-3.0"):NewAddon(D, "Devian", "AceConsole-3.0", "AceEvent-3.0") |
| 206 D.num_channels = currentProfile.num_channels | 208 D.num_channels = currentProfile.num_channels |
| 207 D.enabled = currentProfile.enabled | 209 D.enabled = currentProfile.enabled |
| 208 D.sig = {} | 210 D.sig = {} |
| 209 D.sigID = {} | 211 D.sigID = {} |
| 210 D.IDsig = {} | 212 D.IDsig = {} |
| 211 D.dock = DevianDock | 213 D.dock = _G.DevianDock |
| 212 D.dock.buttons = D.dock.buttons or {} | 214 D.dock.buttons = D.dock.buttons or {} |
| 213 | 215 |
| 214 return id, name | 216 return id, name |
| 215 end | 217 end |
| 216 | 218 |
| 242 D.Profile(list_id, dest) | 244 D.Profile(list_id, dest) |
| 243 scan_func = D.Save | 245 scan_func = D.Save |
| 244 D:Print("Profile |cFFFFFF00".. list_id .."|r saved.") | 246 D:Print("Profile |cFFFFFF00".. list_id .."|r saved.") |
| 245 else | 247 else |
| 246 | 248 |
| 247 DevianLoadMessage = "Switched profiles." | 249 _G.DevianLoadMessage = "Switched profiles." |
| 248 | 250 |
| 249 list_id = tonumber(mode) | 251 list_id = tonumber(mode) |
| 250 if list_id ~= db.main_profile then | 252 if list_id ~= db.main_profile then |
| 251 db.last_profile = list_id | 253 db.last_profile = list_id |
| 252 end | 254 end |
| 253 db.current_profile = list_id | 255 db.current_profile = list_id |
| 254 scan_func = D.Load | 256 scan_func = D.Load |
| 255 end | 257 end |
| 256 elseif mode == nil then | 258 elseif mode == nil then |
| 257 list_id = (db.current_profile ~= db.main_profile) and db.main_profile or db.last_profile | 259 list_id = (db.current_profile ~= db.main_profile) and db.main_profile or db.last_profile |
| 258 DevianLoadMessage = "Switched between main and recent profile ("..db.current_profile..' and '..list_id..')' | 260 _G.DevianLoadMessage = "Switched between main and recent profile ("..db.current_profile..' and '..list_id..')' |
| 259 db.current_profile = list_id | 261 db.current_profile = list_id |
| 260 scan_func = D.Load | 262 scan_func = D.Load |
| 261 else | 263 else |
| 262 return D:PrintHelp() | 264 return D:PrintHelp() |
| 263 end | 265 end |
| 274 scan_func(id, name, enableState, globalState) | 276 scan_func(id, name, enableState, globalState) |
| 275 end | 277 end |
| 276 end | 278 end |
| 277 | 279 |
| 278 if scan_func == D.Load then | 280 if scan_func == D.Load then |
| 279 ReloadUI() | 281 _G.ReloadUI() |
| 280 end | 282 end |
| 281 D.Profile(db.current_profile) | 283 D.Profile(db.current_profile) |
| 282 end | 284 end |
| 283 | 285 |
| 284 D.Addons = function() | 286 D.Addons = function() |
| 373 --- Creates a Devian-style output. | 375 --- Creates a Devian-style output. |
| 374 -- The first argument describes the channel to output on, and the remaining arguments are concatenated in a manner similar to default print() | 376 -- The first argument describes the channel to output on, and the remaining arguments are concatenated in a manner similar to default print() |
| 375 -- This becomes the print handler when development mode is active. The original print() function is assigned to oldprint(). | 377 -- This becomes the print handler when development mode is active. The original print() function is assigned to oldprint(). |
| 376 -- @param Tag, signature, or numeric index of the channel to output on. Defaults to primary channel. | 378 -- @param Tag, signature, or numeric index of the channel to output on. Defaults to primary channel. |
| 377 -- @param ... Output contents. | 379 -- @param ... Output contents. |
| 380 | |
| 378 function D.Message(prefix, ...) | 381 function D.Message(prefix, ...) |
| 379 if not currentProfile.workspace then | 382 if not currentProfile.workspace then |
| 380 return D.oldprint(prefix, ...) | 383 return D.oldprint(prefix, ...) |
| 381 end | 384 end |
| 382 prefix = tostring(prefix) | 385 prefix = tostring(prefix) |
| 422 for i = 1, select('#',...) do | 425 for i = 1, select('#',...) do |
| 423 local var = select(i, ...) | 426 local var = select(i, ...) |
| 424 | 427 |
| 425 if type(var) == 'table' then | 428 if type(var) == 'table' then |
| 426 if type(var.GetName) == 'function' then | 429 if type(var.GetName) == 'function' then |
| 427 var = '<table:'..tostring(var:GetName())..'>' | 430 var = '[table:'..tostring(var:GetName())..']' |
| 428 else | 431 else |
| 429 var = '<'..tostring(var)..'>' | 432 var = '<'..tostring(var)..'>' |
| 430 end | 433 end |
| 431 | 434 |
| 432 elseif type(var) == 'boolean' then | 435 elseif type(var) == 'boolean' then |
| 433 var = var and 'true' or 'false' | 436 var = var and '[true]' or '[false]' |
| 434 elseif type(var) == 'function' then | 437 elseif type(var) == 'function' then |
| 435 var = '<funcref>' | 438 var = '['..tostring(var)..']' |
| 436 elseif type(var) == 'nil' then | 439 elseif type(var) == 'nil' then |
| 437 var = 'nil' | 440 var = '[nil]' |
| 438 else | 441 else |
| 439 var = tostring(var) | 442 var = tostring(var) |
| 440 end | 443 end |
| 441 | 444 |
| 442 insert(buffer, var) | 445 insert(buffer, var) |
| 443 end | 446 end |
| 444 local message = concat(buffer, ' ') | 447 local message = concat(buffer, ' ') |
| 445 for id, channel in pairs(sendq) do | 448 for id, channel in pairs(sendq) do |
| 446 if channel.width < 250 then | 449 if channel.width < 250 then |
| 447 prefix = string.sub(prefix, 0,2) | 450 prefix = sub(prefix, 0,2) |
| 448 end | 451 end |
| 449 channel.out:AddMessage('|cFF'.. pcolor..prefix ..'|r ' .. message, 0.8, 0.8, 0.8, nil, nil, prefix, GetTime()) | 452 channel.out:AddMessage('|cFF'.. pcolor..prefix ..'|r ' .. message, 0.8, 0.8, 0.8, nil, nil, prefix, GetTime()) |
| 450 if not D.dock.buttons[id].newMessage then | 453 if not D.dock.buttons[id].newMessage then |
| 451 D.dock.buttons[id].newMessage = true | 454 D.dock.buttons[id].newMessage = true |
| 452 D.UpdateBeacon(D.dock.buttons[id]) | 455 D.UpdateBeacon(D.dock.buttons[id]) |
| 467 D:Print("|cFFFFFF00/cleandvn|r", "- Fully resets SavedVariables, profiles and all.") | 470 D:Print("|cFFFFFF00/cleandvn|r", "- Fully resets SavedVariables, profiles and all.") |
| 468 end | 471 end |
| 469 | 472 |
| 470 local blocked = {profiles = true, debugmode = true} | 473 local blocked = {profiles = true, debugmode = true} |
| 471 D.SetDefaults = function() | 474 D.SetDefaults = function() |
| 475 local DevianDB = _G.DevianDB | |
| 472 for k,v in pairs(DevianDB) do | 476 for k,v in pairs(DevianDB) do |
| 473 if not blocked[k] then | 477 if not blocked[k] then |
| 474 DevianDB[k] = nil | 478 DevianDB[k] = nil |
| 475 end | 479 end |
| 476 end | 480 end |
| 477 for k,v in pairs(defaults) do | 481 for k,v in pairs(defaults) do |
| 478 if not blocked[k] then | 482 if not blocked[k] then |
| 479 DevianDB[k] = v | 483 DevianDB[k] = v |
| 480 end | 484 end |
| 481 end | 485 end |
| 482 DevianLoadMessage = "Non-user SavedVars have been reset." | 486 _G.DevianLoadMessage = "Non-user SavedVars have been reset." |
| 483 ReloadUI() | 487 _G.ReloadUI() |
| 484 end | 488 end |
| 485 D.SetDefaultsAll = function () | 489 D.SetDefaultsAll = function () |
| 486 DevianDB = nil | 490 _G.DevianDB = nil |
| 487 DevianLoadMessage = "All SavedVars wiped." | 491 _G.DevianLoadMessage = "All SavedVars wiped." |
| 488 ReloadUI() | 492 _G.ReloadUI() |
| 489 end | 493 end |
| 490 D.ConfigCommand = function(self, input) | 494 D.ConfigCommand = function(self, input) |
| 491 if not self.config then | 495 if not self.config then |
| 492 self.config = DevCon | 496 self.config = DevCon |
| 493 self:EnableModule("Config") | 497 self:EnableModule("Config") |
| 497 | 501 |
| 498 function D:OnEnable() | 502 function D:OnEnable() |
| 499 | 503 |
| 500 -- commands | 504 -- commands |
| 501 local cmdlist = { | 505 local cmdlist = { |
| 506 ['dfs'] = 'FrameHelper_Update', | |
| 502 ['dvn'] = "Command", | 507 ['dvn'] = "Command", |
| 503 ['devian'] = "Command", | 508 ['devian'] = "Command", |
| 504 ['dvc'] = "Console_Toggle", | 509 ['dvc'] = "Console_Toggle", |
| 505 ['cleandvn'] = "SetDefaultsAll", | 510 ['cleandvn'] = "SetDefaultsAll", |
| 506 ['resetdvn'] = "SetDefaults", | 511 ['resetdvn'] = "SetDefaults", |
| 519 end | 524 end |
| 520 db = _G.DevianDB | 525 db = _G.DevianDB |
| 521 self.db = db | 526 self.db = db |
| 522 | 527 |
| 523 --- | 528 --- |
| 524 if DevianLoadMessage then | 529 if _G.DevianLoadMessage then |
| 525 D:Print(DevianLoadMessage) | 530 D:Print(_G.DevianLoadMessage) |
| 526 DevianLoadMessage = nil | 531 _G.DevianLoadMessage = nil |
| 527 end | 532 end |
| 528 | 533 |
| 529 | 534 |
| 530 --- initialize the current profile | 535 --- initialize the current profile |
| 531 local id, name = D.Profile(db.current_profile or 1) | 536 local id, name = D.Profile(db.current_profile or 1) |
| 555 if D.console[currentProfile.current_channel] then | 560 if D.console[currentProfile.current_channel] then |
| 556 --print('bringing', D.console[currentProfile.current_channel].signature, 'to the front') | 561 --print('bringing', D.console[currentProfile.current_channel].signature, 'to the front') |
| 557 D.console[currentProfile.current_channel]:ToFront() | 562 D.console[currentProfile.current_channel]:ToFront() |
| 558 -- bring the current channel to the front | 563 -- bring the current channel to the front |
| 559 end | 564 end |
| 560 DevianDock:Show() | 565 _G.DevianDock:Show() |
| 561 D:UpdateDock() | 566 D:UpdateDock() |
| 562 end | 567 end |
| 563 end | 568 end |
