annotate Devian.lua @ 62:8729d39f6a3d v2.1.61

trim out prints
author Nenue
date Tue, 26 Jan 2016 17:05:06 -0500
parents 59e047d6c5de
children 516ceb31703d
rev   line source
Nenue@50 1 --- Devian - Devian.lua
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@57 8 local MAJOR, MINOR = 'Devian-2.0', 'r@project-revision@'
Nenue@0 9 Devian = LibStub("AceAddon-3.0"):NewAddon("Devian", "AceConsole-3.0", "AceEvent-3.0")
Nenue@46 10 local D = _G.Devian
Nenue@46 11 D:SetDefaultModuleState(false)
Nenue@57 12 D.L = {}
Nenue@57 13 setmetatable(D.L, {__index= function(t,k) return k end, __call = function(t,k,...) return string.format((t[k] or k) , ...) end})
Nenue@57 14 local L = D.L
Nenue@47 15 local pairs, tostring, tonumber, ipairs, type = pairs, tostring, tonumber, ipairs, type
Nenue@47 16 local max, rand, format = math.max, math.random, string.format
Nenue@47 17 local insert, wipe, concat = table.insert, table.wipe, table.concat
Nenue@47 18 local select, unpack = select, unpack
Nenue@47 19 local GetNumAddOns, GetAddOnInfo, GetAddOnEnableState, EnableAddOn = GetNumAddOns, GetAddOnInfo, GetAddOnEnableState, EnableAddOn
Nenue@47 20 local UnitName, DisableAddOn = UnitName, DisableAddOn
Nenue@32 21 local WORKSPACE_ON, WORKSPACE_OFF = 1, 2
Nenue@0 22 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName()
Nenue@18 23 local print = _G.print
Nenue@9 24 local db
Nenue@13 25 local defaults = {
Nenue@32 26 ['global'] = {{}, {}},
Nenue@13 27 ['tags'] = {},
Nenue@55 28 ['channels'] = {[1] = {
Nenue@55 29 signature = 'Main',
Nenue@55 30 index = 1,
Nenue@55 31 x = 100, y = 800,
Nenue@55 32 height = 500, width = 600,
Nenue@55 33 enabled = true}},
Nenue@45 34 ['profiles'] = {
Nenue@45 35 {'Main', false},
Nenue@45 36 {'Devian', true},
Nenue@45 37 {'Turok', true},
Nenue@45 38 {'Bam', true}
Nenue@45 39 },
Nenue@33 40 primary_channel = 1, -- the channel to which default output is sent
Nenue@33 41 current_channel = 1, -- the front channel
Nenue@33 42 max_channel = 1, -- the highest created channel id
Nenue@55 43 enabled = true, -- allow enabled consoles to appear
Nenue@33 44 load_message = "Defaults loaded.", -- messages to be displayed after reload
Nenue@33 45 font = [[Interface\Addons\Devian\font\SourceCodePro-Regular.ttf]], -- font info
Nenue@13 46 fontsize = 13,
Nenue@13 47 fontoutline = 'NONE',
Nenue@45 48
Nenue@45 49 headergrad = {'VERTICAL', 0, 0, 0, 1,
Nenue@45 50 1, 0.1, 0.1, 1}, -- header info
Nenue@33 51 headerdrop = {1,1,1,1},
Nenue@45 52 headerblend = 'BLEND',
Nenue@33 53 headeralpha = 1,
Nenue@45 54 headerfontcolor = {1,1,1,1},
Nenue@45 55
Nenue@45 56 backdrop = {1,1,1,1}, -- background frame info
Nenue@56 57 backgrad = {'VERTICAL', 0, 0, 0, .75, 0,0,0, .65},
Nenue@55 58 backblend = 'BLEND',
Nenue@45 59 backalpha = 1,
Nenue@45 60 backborder = {.5,.5,.5,1},
Nenue@45 61 backheader = {.25,.25,.25,1},
Nenue@45 62
Nenue@45 63 frontdrop = {1,1,1,1}, -- foreground frame info
Nenue@56 64 frontgrad = {'VERTICAL', 0, 0, 0, 1, 0,0,0, 0.95},
Nenue@55 65 frontblend = 'BLEND',
Nenue@28 66 frontalpha = 1,
Nenue@45 67 frontborder = {.07,.47,1,1},
Nenue@45 68 frontheader = {1,1,1,1},
Nenue@33 69 tagcolor = {}, -- tag color repository
Nenue@36 70 workspace = 2, -- current profile
Nenue@47 71 last_workspace = 2, -- default workspace to alternate with when just "/dvn" is issued
Nenue@47 72
Nenue@47 73 dock_onshow_fade_time = 2.5,
Nenue@47 74 dock_onshow_fade_from = 1,
Nenue@47 75 dock_onshow_fade_to = 0.2,
Nenue@47 76
Nenue@47 77 dock_alpha_on = 1,
Nenue@47 78 dock_alpha_off = 0.2,
Nenue@47 79 dock_fade_in = 0.15,
Nenue@47 80 dock_fade_out = 0.45,
Nenue@47 81 dock_button_alpha_on = 1,
Nenue@47 82 dock_button_alpha_off = 0.2,
Nenue@50 83 dock_button_fade_in = 0.075,
Nenue@55 84 dock_button_fade_out = 0.075,
Nenue@47 85
Nenue@55 86 movement_fade = true,
Nenue@55 87 movement_fade_time = 0.15,
Nenue@60 88 movement_fade_from = 1,
Nenue@60 89 movement_fade_to = 0,
Nenue@60 90 movement_translation_x = 25,
Nenue@60 91 movement_translation_y = 25,
Nenue@13 92 }
Nenue@9 93
Nenue@13 94 local function ScanAddOnList(cmd, ...)
Nenue@0 95 local list_state
Nenue@0 96
Nenue@14 97 local args = {}
Nenue@14 98 local arg, n = D:GetArgs(cmd, 1)
Nenue@14 99 while arg do
Nenue@47 100 insert(args, arg)
Nenue@14 101 arg, n = D:GetArgs(cmd,1,n)
Nenue@14 102 end
Nenue@14 103 local mode, tag, dest = unpack(args)
Nenue@0 104
Nenue@13 105
Nenue@14 106 -- no args, toggle ui
Nenue@57 107 if mode == 'stack' then
Nenue@33 108 if db.workspace == 1 then
Nenue@57 109 return D:Print(L['Need devmode'])
Nenue@33 110 end
Nenue@14 111 return D:StackFrames()
Nenue@14 112 elseif mode == 'grid' then
Nenue@33 113 if db.workspace == 1 then
Nenue@57 114 return D:Print(L['Need devmode'])
Nenue@33 115 end
Nenue@14 116 return D:DistributeFrames()
Nenue@14 117 elseif mode == 'tag' then -- tagging
Nenue@33 118 if db.workspace == 1 then
Nenue@57 119 return D:Print(L['Need devmode'])
Nenue@33 120 end
Nenue@32 121
Nenue@36 122 local sig
Nenue@14 123 if tag ~= nil and dest ~= nil then
Nenue@36 124 --@debug@
Nenue@38 125 --print(tag, dest)
Nenue@36 126 --@end-debug@
Nenue@36 127
Nenue@32 128 -- convert to ID
Nenue@36 129 if tonumber(dest) == nil then
Nenue@36 130 if D.sigID[dest] then
Nenue@36 131 dest = db.channels[D.sigID[dest]].index
Nenue@36 132 else
Nenue@36 133 sig = dest
Nenue@36 134 end
Nenue@42 135 else
Nenue@42 136 dest = tonumber(dest)
Nenue@18 137 end
Nenue@38 138 --@debug@
Nenue@38 139 --print('2 tag,dest,sig', tag, dest, sig)--@end-debug@
Nenue@18 140
Nenue@32 141 -- make a new channel?
Nenue@36 142 local channel
Nenue@42 143 if not D.db.channels[dest] then
Nenue@36 144 dest = D.max_channel + 1
Nenue@57 145 D:Print(L('New channel created', sig and (dest..':'..sig) or dest ))
Nenue@36 146 channel = D:SetChannel(sig or tag,dest)
Nenue@42 147 else
Nenue@42 148
Nenue@42 149 channel = D.db.channels[dest]
Nenue@32 150 end
Nenue@38 151 --@debug@
Nenue@42 152 --print('3 tag,dest,channel.sig=',tag, dest, channel.signature)--@end-debug@
Nenue@32 153
Nenue@42 154 if not db.tags[tag] then -- no tag table?
Nenue@42 155 db.tags[tag] = {}
Nenue@42 156 end
Nenue@42 157
Nenue@42 158 if db.tags[tag][dest] then -- is tag set?
Nenue@32 159 db.tags[tag][dest] = nil
Nenue@57 160 D:Print(L('Tag removed from channel', tag, db.channels[dest].index, db.channels[dest].signature))
Nenue@32 161 else
Nenue@32 162 db.tags[tag][dest] = dest
Nenue@57 163 D:Print(L('Tag added to channel', tag, db.channels[dest].index, db.channels[dest].signature))
Nenue@32 164 end
Nenue@47 165 D:UpdateDock()
Nenue@14 166 else
Nenue@57 167 D:Print(L['Command tag help'])
Nenue@14 168 end
Nenue@14 169 return
Nenue@32 170 elseif tonumber(mode) ~= nil or mode == 'save' then
Nenue@32 171 -- iterating for something
Nenue@32 172 if mode == 'save' then
Nenue@32 173 if tonumber(tag) == nil then
Nenue@57 174 T:Print(L('Invalid ID from arg', tag))
Nenue@32 175 end
Nenue@32 176 list_state = tonumber(tag)
Nenue@32 177 else
Nenue@32 178 list_state = tonumber(mode)
Nenue@32 179 db.workspace = list_state
Nenue@33 180 if list_state ~= 1 then
Nenue@33 181 db.last_workspace = list_state
Nenue@33 182 end
Nenue@33 183
Nenue@0 184 end
Nenue@32 185 elseif mode == nil then
Nenue@33 186 list_state = (db.workspace == 1) and db.last_workspace or 1
Nenue@33 187 db.workspace = list_state
Nenue@32 188 else
Nenue@32 189 return D:PrintHelp()
Nenue@0 190 end
Nenue@32 191
Nenue@32 192 -- start the iterating
Nenue@36 193 if not db[PLAYER_REALM][list_state] then
Nenue@36 194 db[PLAYER_REALM][list_state] = {}
Nenue@36 195 end
Nenue@36 196 if not db.global[list_state] then
Nenue@36 197 db.global[list_state] = {}
Nenue@36 198 end
Nenue@36 199
Nenue@0 200 local char_list, global_list = db[PLAYER_REALM][list_state], db.global[list_state]
Nenue@0 201 local playername = UnitName("player")
Nenue@0 202
Nenue@0 203 for i = 1, GetNumAddOns() do
Nenue@0 204 local name = GetAddOnInfo(i)
Nenue@0 205 local enableState, globalState = GetAddOnEnableState(playername, i), GetAddOnEnableState(nil, i)
Nenue@0 206
Nenue@32 207 if mode == 'save' then
Nenue@0 208 char_list[name] = enableState
Nenue@0 209 global_list[name] = globalState
Nenue@0 210 else
Nenue@13 211 if char_list[name] or global_list[name] then
Nenue@32 212 if char_list[name] ~= 0 and global_list[name] ~= 0 then
Nenue@32 213 local value = false
Nenue@32 214 if char_list[name] == 2 and global_list[name] == 1 then
Nenue@32 215 value = UnitName("player")
Nenue@32 216 elseif global_list[name] == 2 then
Nenue@32 217 value = true
Nenue@32 218 end
Nenue@32 219 --print('EnableAddOn(', i, ',', value,')')
Nenue@32 220 EnableAddOn(i, value)
Nenue@32 221 else
Nenue@32 222 local value = true
Nenue@32 223 if char_list[name] == 2 and global_list[name] == 1 then
Nenue@32 224 value = UnitName("player")
Nenue@32 225 end
Nenue@32 226 --print('DisableAddOn(', i, ',', value,')')
Nenue@32 227 DisableAddOn(i,value)
Nenue@0 228 end
Nenue@33 229 elseif mode ~= 'save' then
Nenue@32 230 if type(db.unlisted) ~= 'table' then
Nenue@32 231 db.unlisted = {}
Nenue@0 232 end
Nenue@47 233 insert(db.unlisted, name)
Nenue@13 234 end
Nenue@0 235
Nenue@0 236 end
Nenue@0 237 end
Nenue@0 238
Nenue@32 239 if mode ~= 'save' then
Nenue@57 240 db.load_message = (mode == nil) and L("Toggled to profile", list_state) or L('Switched to profile number', list_state)
Nenue@0 241 ReloadUI()
Nenue@0 242 else
Nenue@57 243
Nenue@32 244 if list_state == 1 then
Nenue@57 245 D:Print(L['Profile main saved'])
Nenue@57 246 else
Nenue@32 247 db.last_workspace = list_state
Nenue@57 248 D:Print(L('Profile number saved', list_state, list_state))
Nenue@32 249 end
Nenue@0 250 end
Nenue@0 251 end
Nenue@0 252
Nenue@0 253
Nenue@13 254
Nenue@18 255 --- Creates a Devian-style output.
Nenue@18 256 -- The first argument describes the channel to output on, and the remaining arguments are concatenated in a manner similar to default print()
Nenue@18 257 -- This becomes the print handler when development mode is active. The original print() function is assigned to oldprint().
Nenue@18 258 -- @param Tag, signature, or numeric index of the channel to output on. Defaults to primary channel.
Nenue@18 259 -- @param ... Output contents.
Nenue@0 260 local function Message(prefix, ...)
Nenue@45 261 if db.workspace == 1 then
Nenue@23 262 return D.oldprint(prefix, ...)
Nenue@23 263 end
Nenue@57 264 prefix = tostring(prefix)
Nenue@57 265 if prefix == nil then
Nenue@55 266 prefix = 'nil*'
Nenue@1 267 end
Nenue@9 268
Nenue@18 269 local sendq = {}
Nenue@30 270 local tag, id, tagged
Nenue@13 271 local byName = true
Nenue@18 272 if D.tags[prefix] then
Nenue@18 273 for _, id in pairs(D.tags[prefix]) do
Nenue@18 274 if D.console[id] then
Nenue@18 275 sendq[id] = D.console[id]
Nenue@30 276 tagged = true
Nenue@18 277 end
Nenue@18 278 end
Nenue@18 279 end
Nenue@18 280
Nenue@13 281 if D.sig[prefix] then
Nenue@18 282 sendq[D.sig[prefix].index] = D.sig[prefix]
Nenue@13 283 elseif D.console[prefix] then
Nenue@18 284 sendq[D.console[prefix]] = D.console[prefix]
Nenue@30 285 elseif not tagged then
Nenue@18 286 sendq[D.primary_channel] = D.console[D.primary_channel]
Nenue@13 287 end
Nenue@18 288
Nenue@9 289 -- color me timbers
Nenue@9 290 local pcolor
Nenue@18 291 if (not db.tagcolor[prefix]) and byName then
Nenue@30 292 local c = {
Nenue@47 293 rand(64,255), rand(64,255), rand(64,255)
Nenue@30 294 }
Nenue@30 295 if c[1] > 223 and c[2] > 223 and c[3] > 223 then
Nenue@47 296 c[rand(1,3)] = rand(64,223)
Nenue@0 297 end
Nenue@30 298
Nenue@47 299 db.tagcolor[prefix] = format('%02X%02X%02X', unpack(c))
Nenue@0 300 end
Nenue@18 301 pcolor = db.tagcolor[prefix]
Nenue@0 302
Nenue@55 303 local buffer = {}
Nenue@0 304 for i = 1, select('#',...) do
Nenue@0 305 local var = select(i, ...)
Nenue@0 306
Nenue@0 307 if type(var) == 'table' then
Nenue@20 308 if type(var.GetName) == 'function' then
Nenue@46 309 var = '<table:'..tostring(var:GetName())..'>'
Nenue@20 310 else
Nenue@32 311 var = '<'..tostring(var)..'>'
Nenue@20 312 end
Nenue@20 313
Nenue@0 314 elseif type(var) == 'boolean' then
Nenue@0 315 var = var and 'true' or 'false'
Nenue@0 316 elseif type(var) == 'function' then
Nenue@0 317 var = '<funcref>'
Nenue@0 318 elseif type(var) == 'nil' then
Nenue@0 319 var = 'nil'
Nenue@60 320 else
Nenue@60 321 var = tostring(var)
Nenue@0 322 end
Nenue@0 323
Nenue@47 324 insert(buffer, var)
Nenue@0 325 end
Nenue@47 326 local message = concat(buffer, ' ')
Nenue@18 327 for id, channel in pairs(sendq) do
Nenue@55 328 if channel.width < 250 then
Nenue@55 329 prefix = string.sub(prefix, 0,2)
Nenue@55 330 end
Nenue@58 331 channel.out:AddMessage('|cFF'.. pcolor..prefix ..'|r ' .. message, 0.8, 0.8, 0.8, nil, nil, prefix, GetTime())
Nenue@58 332 if not D.dock.buttons[id].newMessage then
Nenue@58 333 D.dock.buttons[id].newMessage = true
Nenue@58 334 D.UpdateBeacon(D.dock.buttons[id])
Nenue@58 335 end
Nenue@18 336 end
Nenue@47 337 wipe(buffer)
Nenue@0 338 end
Nenue@0 339
Nenue@14 340
Nenue@32 341
Nenue@14 342
Nenue@32 343 function D:PrintHelp()
Nenue@32 344 D:Print("|cFFFFFF00/dvn|r",
Nenue@32 345 "\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@47 346 D:Print("|cFFFFFF00/dvc|r [<key>, ...]", "- Hides and show consoles. A list of channel keys can be passed to specify which ones get toggled.")
Nenue@32 347
Nenue@32 348 D:Print("|cFFFFFF00/resetdvn|r", "- Resets all but profile data SavedVariables.")
Nenue@32 349 D:Print("|cFFFFFF00/cleandvn|r", "- Fully resets SavedVariables, profiles and all.")
Nenue@32 350 end
Nenue@32 351
Nenue@60 352 local dot1, dot2 = CreateFrame('Frame', nil, UIParent), CreateFrame('Frame', nil, UIParent)
Nenue@60 353 dot1:SetSize(5,5)
Nenue@60 354 dot1:SetFrameStrata('TOOLTIP')
Nenue@60 355 local a = dot1:CreateTexture('fill', nil)
Nenue@60 356 a:SetAllPoints(dot1)
Nenue@60 357 a:SetTexture(1,0,0,1)
Nenue@60 358 dot2:SetSize(5,5)
Nenue@60 359 dot2:SetFrameStrata('TOOLTIP')
Nenue@60 360 a = dot2:CreateTexture('fill', nil)
Nenue@60 361 a:SetAllPoints(dot2)
Nenue@60 362 a:SetTexture(0,1,0,1)
Nenue@60 363
Nenue@60 364 local OnStartedMoving = function()
Nenue@60 365 for k, v in pairs(D.console) do
Nenue@60 366 if v.enabled then
Nenue@60 367 v.moveFade:Stop()
Nenue@60 368 local F1 = v.moveFade.alphaOut
Nenue@60 369 F1:SetFromAlpha(db.movement_fade_from)
Nenue@60 370 F1:SetToAlpha(db.movement_fade_to)
Nenue@60 371 F1:SetDuration(db.movement_fade_time)
Nenue@60 372 v.moveFade:Play()
Nenue@60 373 v:EnableMouse(false)
Nenue@60 374 end
Nenue@60 375 end
Nenue@60 376 end
Nenue@60 377
Nenue@60 378 local OnStoppedMoving = function()
Nenue@60 379 for k, v in pairs(D.console) do
Nenue@60 380 if v.enabled then
Nenue@60 381 v.moveFade:Stop()
Nenue@60 382 local F1 = v.moveFade.alphaOut
Nenue@60 383 F1:SetToAlpha(db.movement_fade_from)
Nenue@60 384 F1:SetFromAlpha(db.movement_fade_to)
Nenue@60 385 F1:SetDuration(db.movement_fade_time)
Nenue@60 386 v.moveFade:Play()
Nenue@60 387 v:EnableMouse(true)
Nenue@60 388 end
Nenue@60 389 end
Nenue@60 390 end
Nenue@45 391
Nenue@45 392
Nenue@0 393 function D:OnEnable()
Nenue@33 394
Nenue@33 395 if db.unlisted and #db.unlisted > 0 then
Nenue@47 396 D:Print('New AddOns have been found since the last profile update: '.. concat(db.unlisted, ', '))
Nenue@47 397 wipe(db.unlisted)
Nenue@33 398 end
Nenue@33 399
Nenue@33 400 if db.workspace == 1 then
Nenue@57 401 D:Print(L('Devian loaded on standby',MAJOR, MINOR))
Nenue@33 402 else
Nenue@57 403 D:Print(L('Devian loaded in workspace', MAJOR, MINOR, db.workspace))
Nenue@56 404 -- movement fading
Nenue@56 405 if db.movement_fade then
Nenue@60 406
Nenue@60 407 self:RegisterEvent('PLAYER_STARTED_MOVING', OnStartedMoving)
Nenue@60 408 self:RegisterEvent('PLAYER_STOPPED_MOVING', OnStoppedMoving)
Nenue@56 409 end
Nenue@33 410 end
Nenue@33 411
Nenue@47 412 --@debug@
Nenue@45 413 self:RegisterChatCommand("dvg", function(input)
Nenue@45 414 if not self.config then
Nenue@45 415 self.config = DevCon
Nenue@45 416 self:EnableModule("Config")
Nenue@45 417 end
Nenue@45 418 self.modules.Config:ChatCommand(input)
Nenue@45 419 end)
Nenue@47 420 --@end-debug@
Nenue@45 421
Nenue@33 422 end
Nenue@33 423
Nenue@33 424 function D:OnInitialize()
Nenue@13 425 -- commands
Nenue@33 426 self:RegisterChatCommand("cleandvn", function(args)
Nenue@33 427 DevianDB = nil
Nenue@33 428 DevianDB = {
Nenue@33 429 load_message = "All SavedVars wiped."
Nenue@33 430 }
Nenue@33 431 ReloadUI()
Nenue@33 432 end)
Nenue@60 433 local blocked = {global = true, channels = true, tags = true, [PLAYER_REALM] = true}
Nenue@33 434 self:RegisterChatCommand("resetdvn", function(args)
Nenue@33 435 for k,v in pairs(DevianDB) do
Nenue@36 436 if not blocked[k] then
Nenue@33 437 DevianDB[k] = nil
Nenue@33 438 end
Nenue@33 439 end
Nenue@36 440 for k,v in pairs(defaults) do
Nenue@36 441 if not blocked[k] then
Nenue@36 442 DevianDB[k] = v
Nenue@36 443 end
Nenue@36 444 end
Nenue@33 445 DevianDB.load_message = "Non-user SavedVars have been reset."
Nenue@33 446 ReloadUI()
Nenue@33 447 end)
Nenue@13 448 local cmdlist = {
Nenue@13 449 ['dvn'] = ScanAddOnList,
Nenue@13 450 ['devian'] = ScanAddOnList,
Nenue@36 451 ['dvc'] = "Console_Toggle",
Nenue@13 452 }
Nenue@13 453 for cmd, func in pairs(cmdlist) do
Nenue@13 454 self:RegisterChatCommand(cmd, func, true)
Nenue@13 455 end
Nenue@13 456
Nenue@33 457 -- pull defaults
Nenue@9 458 if not _G.DevianDB then
Nenue@13 459 _G.DevianDB = defaults
Nenue@9 460 end
Nenue@9 461 db = _G.DevianDB
Nenue@47 462 self.db = db
Nenue@32 463 self.tags = db.tags
Nenue@32 464 self.channelinfo = db.channels
Nenue@0 465
Nenue@0 466 if not db[PLAYER_REALM] then
Nenue@32 467 db[PLAYER_REALM] = {[WORKSPACE_ON] = {}, [WORKSPACE_OFF] = {}}
Nenue@0 468 end
Nenue@0 469
Nenue@32 470 if db.load_message then
Nenue@32 471 D:Print(db.load_message)
Nenue@32 472 db.load_message = nil
Nenue@0 473 end
Nenue@0 474 D.oldprint = getprinthandler()
Nenue@0 475 if not _G.oldprint then
Nenue@0 476 _G.oldprint = D.oldprint
Nenue@0 477 end
Nenue@13 478
Nenue@33 479 -- Stop here in game mode
Nenue@33 480 if db.workspace == 1 then
Nenue@33 481 return
Nenue@33 482 end
Nenue@35 483 -----------------------------------------------------------------------
Nenue@35 484 self.db = db
Nenue@35 485 self.channels = db.channels
Nenue@32 486 self.max_channel = 0
Nenue@14 487 self.num_channels = 0
Nenue@13 488 self.console = {}
Nenue@13 489 self.sig = {}
Nenue@14 490 self.sigID = {}
Nenue@14 491 self.IDsig = {}
Nenue@47 492 self.dock = DevianDock
Nenue@47 493 self.dock.buttons = {}
Nenue@14 494 for i, cinfo in pairs(db.channels) do
Nenue@14 495 i = tonumber(i)
Nenue@14 496 if not self.primary_channel then
Nenue@14 497 self.primary_channel = i
Nenue@14 498 end
Nenue@14 499 self:SetChannel(cinfo, i)
Nenue@47 500 self.max_channel = max(i, self.max_channel)
Nenue@32 501 self.num_channels = self.num_channels + 1
Nenue@32 502 end
Nenue@32 503
Nenue@18 504 if self.console[db.current_channel] then
Nenue@60 505 print('bringing', self.console[db.current_channel].signature, 'to the front')
Nenue@18 506 self.console[db.current_channel]:ToFront()
Nenue@28 507 -- bring the current channel to the front
Nenue@18 508 end
Nenue@47 509 DevianDock:Show()
Nenue@47 510 self:UpdateDock()
Nenue@33 511 setprinthandler(Message)
Nenue@33 512 print = function(...)
Nenue@33 513 _G.print('Dvn', ...)
Nenue@23 514 end
Nenue@36 515 end
Nenue@36 516
Nenue@36 517 --- Console frame toggler
Nenue@36 518 -- @paramsig [...]
Nenue@36 519 -- @param ... one or more space-seperated channel keys
Nenue@47 520 function D:Console_Toggle(input, force)
Nenue@38 521 --oldprint(input)
Nenue@47 522 local setAll
Nenue@36 523 if db.workspace == 1 then
Nenue@36 524 return self:Print(MSG_NEED_DEV_MODE)
Nenue@36 525 end
Nenue@36 526 local search = {}
Nenue@47 527 local key
Nenue@36 528 local n = 0
Nenue@47 529 while self:GetArgs(input,1,n) and n < 255 do --should end itself when it gets nil, but
Nenue@47 530 key, n = self:GetArgs(input,1,n)
Nenue@47 531
Nenue@36 532 if self.sig[key] then
Nenue@47 533 --print(key, self.sigID[key])
Nenue@47 534 insert(search, self.sigID[key])
Nenue@47 535 elseif self.console[tonumber(key)] then
Nenue@47 536 --print(key, tonumber(key))
Nenue@47 537 insert(search, tonumber(key))
Nenue@36 538 end
Nenue@47 539
Nenue@47 540 --oldprint(#search, key, n)
Nenue@47 541 end
Nenue@47 542 if #search < 1 then
Nenue@36 543 search = self.sigID
Nenue@47 544 setAll = true
Nenue@47 545 end
Nenue@47 546 if setAll then
Nenue@47 547 --oldprint('setall', setAll)
Nenue@47 548 db.enabled = (not db.enabled) and true or nil
Nenue@47 549 if force == 0 then
Nenue@47 550 db.enabled = nil
Nenue@47 551 end
Nenue@36 552 end
Nenue@36 553
Nenue@36 554 for i, id in pairs(search) do
Nenue@38 555 --oldprint(i, id)
Nenue@36 556 local c = self.console[id]
Nenue@47 557 if setAll then
Nenue@47 558 c.enabled = db.enabled and db.enabled or nil
Nenue@47 559 else
Nenue@47 560
Nenue@47 561 db.enabled = true
Nenue@47 562 c.enabled = (not c.enabled) and true or nil
Nenue@47 563 if force == 0 then
Nenue@47 564 c.enabled = nil
Nenue@47 565 end
Nenue@47 566 --oldprint(id, ' ', force, c.enabled, db.enabled)
Nenue@47 567 end
Nenue@47 568
Nenue@47 569 if c.enabled or (setAll and db.enabled) then
Nenue@36 570 c:Show()
Nenue@47 571 elseif not (c.enabled and db.enabled) then
Nenue@36 572 c:Hide()
Nenue@36 573 end
Nenue@47 574 c:Save()
Nenue@36 575 end
Nenue@36 576
Nenue@47 577 if setAll then
Nenue@47 578 if db.enabled then
Nenue@47 579 self:Print('toggled all consoles ON')
Nenue@60 580 if D.console[db.current_channel] then
Nenue@60 581 oldprint('push', D.console[db.current_channel].signature, 'to the front')
Nenue@60 582 D.console[db.current_channel]:ToFront()
Nenue@60 583 end
Nenue@47 584 else
Nenue@47 585 self:Print('toggled all consoles OFF')
Nenue@47 586 end
Nenue@36 587 else
Nenue@47 588 local result = {}
Nenue@47 589 for i, id in pairs(search) do
Nenue@47 590 result[i] = tostring(id) .. ' = ' .. (self.console[id].enabled and 'ON' or 'OFF')
Nenue@47 591 end
Nenue@47 592 self:Print('toggled: '..concat(result, ', '))
Nenue@36 593 end
Nenue@0 594 end