Mercurial > wow > devian
comparison Devian.lua @ 28:31ca76e04766 v1.4.4
/dvn tag and /dvc commands will respond to all of their arguments
Index assignment algorithm should stop breaking new channels.
current channel's ToFront is invoked after the initializer loop
author | Nenue |
---|---|
date | Fri, 25 Dec 2015 03:32:56 -0500 |
parents | b0e8bd30575f |
children | 42e74b72726d |
comparison
equal
deleted
inserted
replaced
27:6d1528a55514 | 28:31ca76e04766 |
---|---|
21 dnd_status = true, | 21 dnd_status = true, |
22 dnd_message = "Debugging. Your messages may get eaten.", | 22 dnd_message = "Debugging. Your messages may get eaten.", |
23 font = [[Interface\Addons\Devian\font\SourceCodePro-Regular.ttf]], | 23 font = [[Interface\Addons\Devian\font\SourceCodePro-Regular.ttf]], |
24 fontsize = 13, | 24 fontsize = 13, |
25 fontoutline = 'NONE', | 25 fontoutline = 'NONE', |
26 backdrop = {1,1,1,0.2}, | 26 backalpha = 0.5, |
27 backdrop = {0,0,0,0.4}, | |
27 backgrad = {'VERTICAL', 0.1, 0.1, 0.1, 0.3, 0, 0, 0, 0.5}, | 28 backgrad = {'VERTICAL', 0.1, 0.1, 0.1, 0.3, 0, 0, 0, 0.5}, |
28 backblend = 'BLEND', | 29 backblend = 'BLEND', |
29 frontdrop = {1,1,1,1}, | 30 frontdrop = {0,0,0,1}, |
30 frontgrad = {'VERTICAL', 0.1, 0.1, 0.1, 0.9, 0, 0, 0, 0.9}, | 31 frontgrad = {'VERTICAL', 0.1, 0.1, 0.1, 0.9, 0, 0, 0, 0.9}, |
31 frontblend = 'BLEND', | 32 frontblend = 'BLEND', |
33 frontalpha = 1, | |
32 frontborder = {1,0,0,1}, | 34 frontborder = {1,0,0,1}, |
33 backborder = {0,0,1,0.75}, | 35 backborder = {0,0,1,0.75}, |
34 } | 36 } |
35 | 37 |
36 | 38 |
58 return D:StackFrames() | 60 return D:StackFrames() |
59 elseif mode == 'grid' then | 61 elseif mode == 'grid' then |
60 return D:DistributeFrames() | 62 return D:DistributeFrames() |
61 elseif mode == 'tag' then -- tagging | 63 elseif mode == 'tag' then -- tagging |
62 if tag ~= nil and dest ~= nil then | 64 if tag ~= nil and dest ~= nil then |
63 local channel = D:SetChannel(dest:match('%a'), dest:match('%d')) | 65 local channel = D:SetChannel(dest:match('%a+'), dest:match('%d+')) |
64 if not D.tags[tag] then | 66 if not D.tags[tag] then |
65 D.tags[tag] = {} | 67 D.tags[tag] = {} |
66 end | 68 end |
67 if D.tags[tag][channel.index] then | 69 if D.tags[tag][channel.index] then |
68 D.tags[tag][channel.index] = nil | 70 D.tags[tag][channel.index] = nil |
197 -- Console frame toggler | 199 -- Console frame toggler |
198 -- @paramsig [...] | 200 -- @paramsig [...] |
199 -- @param ... one or more space-seperated channel keys | 201 -- @param ... one or more space-seperated channel keys |
200 local function Console_Toggle(input) | 202 local function Console_Toggle(input) |
201 local search = {} | 203 local search = {} |
202 local key, n = D:GetArgs(input, 1) | 204 local n = 0 |
203 if key then | 205 if D:GetArgs(input,1) then |
204 repeat | 206 repeat |
207 key, n = D:GetArgs(input,1,n) | |
205 if D.sig[key] then | 208 if D.sig[key] then |
206 table.insert(search, D.sig[key]) | 209 table.insert(search, D.sig[key]) |
207 elseif D.console[key] then | 210 elseif D.console[key] then |
208 table.insert(search, D.console[key]) | 211 table.insert(search, D.console[key]) |
209 end | 212 end |
210 key, n = D:GetArgs(input,1,n) | |
211 until n == 1e9 | 213 until n == 1e9 |
212 else | 214 else |
213 search = D.console | 215 search = D.console |
214 end | 216 end |
215 | 217 |
216 db.toggle = not db.toggle and true or nil | 218 db.toggle = not db.toggle and true or nil |
217 for _, c in ipairs(search) do | 219 for i, c in ipairs(search) do |
220 print(i,c.index) | |
218 if db.toggle then | 221 if db.toggle then |
222 c.enabled = true | |
219 c:Show() | 223 c:Show() |
220 if db.current_channel == c.index then | 224 if db.current_channel == c.index then |
221 c:ToFront() | 225 c:ToFront() |
222 end | 226 end |
223 else | 227 else |
242 --print(unpack(db.frontdrop)) | 246 --print(unpack(db.frontdrop)) |
243 --print(unpack(db.frontgrad)) | 247 --print(unpack(db.frontgrad)) |
244 --print(db.frontblend) | 248 --print(db.frontblend) |
245 -- D.raise_ct = D.raise_ct + 1 | 249 -- D.raise_ct = D.raise_ct + 1 |
246 c:Raise() | 250 c:Raise() |
251 c:SetAlpha(db.frontalpha) | |
247 c.out.backdrop:SetTexture(unpack(db.frontdrop)) | 252 c.out.backdrop:SetTexture(unpack(db.frontdrop)) |
248 c.out.backdrop:SetGradientAlpha(unpack(db.frontgrad)) | 253 c.out.backdrop:SetGradientAlpha(unpack(db.frontgrad)) |
249 c.out.backdrop:SetBlendMode(db.frontblend) | 254 c.out.backdrop:SetBlendMode(db.frontblend) |
250 db.current_channel = c.index | 255 db.current_channel = c.index |
251 | 256 |
257 if id ~= c.index then | 262 if id ~= c.index then |
258 --print(D.raise_ct, 'Lowering', bc.signature) | 263 --print(D.raise_ct, 'Lowering', bc.signature) |
259 --print(unpack(db.backdrop)) | 264 --print(unpack(db.backdrop)) |
260 --print(unpack(db.backgrad)) | 265 --print(unpack(db.backgrad)) |
261 --print(db.backblend) | 266 --print(db.backblend) |
267 bc:SetAlpha(db.backalpha) | |
262 bc.out.backdrop:SetTexture(unpack(db.backdrop)) | 268 bc.out.backdrop:SetTexture(unpack(db.backdrop)) |
263 bc.out.backdrop:SetGradientAlpha(unpack(db.backgrad)) | 269 bc.out.backdrop:SetGradientAlpha(unpack(db.backgrad)) |
264 bc.out.backdrop:SetBlendMode(db.backblend) | 270 bc.out.backdrop:SetBlendMode(db.backblend) |
265 | 271 |
266 for _, part in pairs(bc.border) do | 272 for _, part in pairs(bc.border) do |
455 -- @param i Console index. If valid, settings will be inherited from that channel. | 461 -- @param i Console index. If valid, settings will be inherited from that channel. |
456 function D:SetChannel(cinfo, i) | 462 function D:SetChannel(cinfo, i) |
457 --print('join:', i , cinfo) | 463 --print('join:', i , cinfo) |
458 local t_info = {} | 464 local t_info = {} |
459 local dbvars = db.channels[self.primary_channel] | 465 local dbvars = db.channels[self.primary_channel] |
466 local signame | |
467 | |
468 -- is cinfo a table or signature? | |
460 if type(cinfo) == 'string' then | 469 if type(cinfo) == 'string' then |
461 local signame = tostring(cinfo) | 470 signame = tostring(cinfo) |
462 t_info.signature = signame | 471 t_info.signature = signame |
463 end | 472 elseif type(cinfo) ~= 'table' then |
464 | |
465 if type(cinfo) ~= 'table' then | |
466 cinfo = {} | 473 cinfo = {} |
467 end | 474 end |
468 | 475 |
469 if i then | 476 -- did we get a signature string? |
477 if not (cinfo.signature or t_info.signature) then | |
478 t_info.signature = 'Console' | |
479 end | |
480 | |
481 -- was an index given? | |
482 if not i then | |
483 i = D.num_channels + 1 | |
484 t_info.index = i | |
485 -- make a new one | |
486 else | |
470 i = tonumber(i) | 487 i = tonumber(i) |
488 -- is it valid? | |
471 if db.channels[i] then | 489 if db.channels[i] then |
472 dbvars = db.channels[i] | 490 dbvars = db.channels[i] |
491 -- use that as our base vars | |
473 else | 492 else |
474 -- if there is no channels[i], then we need to check for sig collision | 493 if db.sig[t_info.signature] then |
475 local sigvar = signame | 494 local sigvar = t_info.signature |
476 local j = 2 | 495 local j = 2 |
477 while D.sig[sigvar] do | 496 while D.sig[sigvar] do |
478 sigvar = signame .. j | 497 sigvar = signame .. j |
479 j = j + 1 | 498 j = j + 1 |
480 end | 499 end |
481 t_info.signature = sigvar | 500 t_info.signature = sigvar |
482 end | 501 end |
483 end | 502 |
484 | 503 i = D.num_channels + 1 |
485 if not (cinfo.signature or t_info.signature) then | 504 t_info.index = i |
486 t_info.signature = 'Console'..i | 505 -- make a new index number and fix the signature |
487 end | 506 end |
488 | 507 end |
508 | |
509 -- can proceed to fill in from base vars here | |
489 for k,v in pairs(dbvars) do | 510 for k,v in pairs(dbvars) do |
490 if not t_info[k] then | 511 if not t_info[k] then |
491 if cinfo[k] then | 512 if cinfo[k] then |
492 t_info[k] = cinfo[k] | 513 t_info[k] = cinfo[k] |
493 elseif db.channels[self.primary_channel][k] then | 514 elseif db.channels[self.primary_channel][k] then |
494 t_info[k] = db.channels[self.primary_channel][k] | 515 t_info[k] = db.channels[self.primary_channel][k] |
495 end | 516 end |
496 end | 517 end |
497 end | 518 end |
498 | 519 |
520 -- we're working with a fresh channel right? | |
499 if not db.channels[i] then | 521 if not db.channels[i] then |
500 t_info.x = t_info.x + 20 | 522 t_info.x = t_info.x + 20 |
501 t_info.y = t_info.y - 20 | 523 t_info.y = t_info.y - 20 |
502 db.channels[i] = t_info | 524 db.channels[i] = t_info |
503 end | 525 -- set its position just off of the base vars and store it |
504 | 526 end |
527 | |
528 -- can proceed to display something from here | |
505 if not self.console[i] then | 529 if not self.console[i] then |
506 self.console[i] = CreateConsole(i, t_info) | 530 self.console[i] = CreateConsole(i, t_info) |
531 -- if it isn't already spawned, create the frame | |
507 end | 532 end |
508 local channel = self.console[i] | 533 local channel = self.console[i] |
509 self.sig[t_info.signature] = channel | 534 self.sig[t_info.signature] = channel |
510 self.sigID[t_info.signature] = i | 535 self.sigID[t_info.signature] = i |
511 self.IDsig[i] = t_info.signature | 536 self.IDsig[i] = t_info.signature |
512 if i == db.current_channel then | |
513 channel:ToFront() | |
514 end | |
515 | 537 |
516 return channel | 538 return channel |
517 end | 539 end |
518 | 540 |
519 function D:OnEnable() | 541 function D:OnEnable() |
589 self.num_channels = self.num_channels + 1 | 611 self.num_channels = self.num_channels + 1 |
590 end | 612 end |
591 | 613 |
592 if self.console[db.current_channel] then | 614 if self.console[db.current_channel] then |
593 self.console[db.current_channel]:ToFront() | 615 self.console[db.current_channel]:ToFront() |
616 -- bring the current channel to the front | |
594 end | 617 end |
595 | 618 |
596 if db.enabled then | 619 if db.enabled then |
597 for i, c in pairs(self.console) do | 620 for i, c in pairs(self.console) do |
598 self.console[i]:Hide() | 621 self.console[i]:Hide() |