annotate Devian.lua @ 45:5341e4d84622

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