annotate Devian.lua @ 46:dcc57a7cabc9

re-adding Dock.lua to prep for revised implementation plans
author Nenue
date Sun, 03 Jan 2016 15:49:35 -0500
parents 5341e4d84622
children eb7544afd77a
rev   line source
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