comparison Devian.lua @ 99:7d94df3804a7

- Console drag buttons for resizing - While dragging a console frame, other frames are ghosted out - Dropdown menu includes Toggle, Pin, and MinMax
author Nenue
date Thu, 27 Oct 2016 06:11:04 -0400
parents 33bc8baba858
children 790dca545f1d
comparison
equal deleted inserted replaced
98:33bc8baba858 99:7d94df3804a7
221 oldprint('fixing channels data') 221 oldprint('fixing channels data')
222 table.sort(sortedChannels, function(a,b) 222 table.sort(sortedChannels, function(a,b)
223 return (b.index > a.index) 223 return (b.index > a.index)
224 end) 224 end)
225 for i, info in ipairs(sortedChannels) do 225 for i, info in ipairs(sortedChannels) do
226
227 info.tags = info.tags or {}
226 for tag, tagSet in pairs(currentProfile.tags) do 228 for tag, tagSet in pairs(currentProfile.tags) do
227 for _, index in pairs(tagSet) do 229 for _, index in pairs(tagSet) do
228 if index == info.index then 230 if index == info.index then
229 sortedTags[tag] = sortedTags[tag] or {} 231 sortedTags[tag] = sortedTags[tag] or {}
230 sortedTags[tag][i] = i 232 sortedTags[tag][i] = i
233 tinsert(info.tags, tag)
231 end 234 end
232 end 235 end
233 end 236 end
237 print('Set tags:', table.concat(info.tags, ', '))
234 238
235 info.index = i 239 info.index = i
236 end 240 end
237 currentProfile.channels = sortedChannels 241 currentProfile.channels = sortedChannels
238 currentProfile.tags = sortedTags 242 currentProfile.tags = sortedTags
285 currentProfile.char[playerRealm] = currentProfile.char[playerRealm] or {} 289 currentProfile.char[playerRealm] = currentProfile.char[playerRealm] or {}
286 if currentProfile.workspace then 290 if currentProfile.workspace then
287 DEVIAN_WORKSPACE = true 291 DEVIAN_WORKSPACE = true
288 DEVIAN_PNAME = currentProfile.name 292 DEVIAN_PNAME = currentProfile.name
289 DEVIAN_PID = id 293 DEVIAN_PID = id
290 print('setting phandler')
291 setprinthandler(D.Message) 294 setprinthandler(D.Message)
292 else 295 else
293 DEVIAN_WORKSPACE = false 296 DEVIAN_WORKSPACE = false
294 DEVIAN_PNAME = nil 297 DEVIAN_PNAME = nil
295 print = nop 298 print = nop
520 charStates[name] = globalState 523 charStates[name] = globalState
521 end 524 end
522 end 525 end
523 526
524 D.UpdateTags = function() 527 D.UpdateTags = function()
525
526 wipe(registeredTags) 528 wipe(registeredTags)
527 for tag, tagSet in pairs(currentProfile.tags) do 529 for index, channel in ipairs(D.channels) do
528 registeredTags[tag] = registeredTags[tag] or {} 530 for _, tag in ipairs(channel.tags) do
529 for _, id in pairs(tagSet) do 531 registeredTags[tag] = registeredTags[tag] or {}
530 if D.console[id] then 532 tinsert(registeredTags[tag], D.console[index])
531 tinsert(registeredTags[tag], D.console[id]) 533 end
532 end 534 end
533 end 535 end
534 end 536
535 end 537 D.Tag = function(self, tag, id)
536
537 D.Tag = function(self, tag, dest)
538 local sig 538 local sig
539 if tag ~= nil and dest ~= nil then 539 if tag and id then
540 --@debug@ 540 --@debug@
541 --print(tag, dest) 541 --print(tag, dest)
542 --@end-debug@ 542 --@end-debug@
543 543
544 -- convert to ID 544 -- convert to ID
545 if tonumber(dest) == nil then 545 local channel, sig
546 if D.sigID[dest] then 546 if tonumber(id) == nil then
547 dest = currentProfile.channels[D.sigID[dest]].index 547 sig = id
548 else 548 if D.sigID[id] then
549 sig = dest 549 id = D.sigID[id]
550 channel = D.channels[id]
550 end 551 end
551 else 552 else
552 dest = tonumber(dest) 553 id = tonumber(id)
553 end 554 channel = D.channels[id]
554 --@debug@ 555 end
555 --print('2 tag,dest,sig', tag, dest, sig)--@end-debug@ 556
556 557 -- if channel is still nil, create one
557 -- make a new channel? 558 if not channel then
558 local channel 559 id = #D.channels + 1
559 if not currentProfile.channels[dest] then 560 D:Print(L('New channel created', (sig and (id..':'..sig)) or id))
560 dest = #D.channels + 1 561 channel = D:GetOrCreateChannel(id, sig)
561 D:Print(L('New channel created', sig and (dest..':'..sig) or dest ))
562 channel = D:GetOrCreateChannel(dest, tag)
563 else 562 else
564 channel = currentProfile.channels[dest] 563 sig = channel.signature
565 end 564 end
566 --@debug@ 565 --@debug@
567 --print('3 tag,dest,channel.sig=',tag, dest, channel.signature)--@end-debug@ 566 --print('3 tag,dest,channel.sig=',tag, dest, channel.signature)--@end-debug@
568 567
569 if not currentProfile.tags[tag] then -- no tag table? 568 if not currentProfile.tags[tag] then -- no tag table?
570 currentProfile.tags[tag] = {} 569 currentProfile.tags[tag] = {}
571 end 570 end
572 571
573 if currentProfile.tags[tag][dest] then -- is tag set? 572 local existingTag = tContains(channel.tags, tag)
574 currentProfile.tags[tag][dest] = nil 573 if existingTag then -- is tag set?
575 D:Print(L('Tag removed from channel', tag, currentProfile.channels[dest].index, currentProfile.channels[dest].signature)) 574
575 for i, tag in ipairs(channel.tags) do
576 if tag == tag then
577 tremove(channel.tags, i)
578 D:Print(L('Tag removed from channel', tag, channel.index, channel.signature))
579 break
580 end
581 end
576 else 582 else
577 currentProfile.tags[tag][dest] = dest 583 tinsert(channel.tags, tag)
578 D:Print(L('Tag added to channel', tag, channel.index, channel.signature)) 584 D:Print(L('Tag added to channel', tag, channel.index, channel.signature))
579 end 585 end
580 D.UpdateTags() 586 D.UpdateTags()
581 DevianDock:Update() 587 DevianDock:Update()
582 else 588 else
858 function D:GetActiveChannel() 864 function D:GetActiveChannel()
859 return D.console[currentProfile.current_channel] 865 return D.console[currentProfile.current_channel]
860 end 866 end
861 867
862 function D:GetOrCreateChannel(id, name) 868 function D:GetOrCreateChannel(id, name)
869 id = id or (#D.channels + 1)
870
863 local info = D.channels[id] 871 local info = D.channels[id]
872 if not info then
873 --print('new channel')
874 name = name or ('Channel ' .. id)
875 info = {
876 index = id,
877 signature = name,
878 tags = {}
879 }
880 D.DeepCopy(defaults.default_channel, info)
881 D.channels[id] = info
882 elseif not info.tags then
883 -- fix old data?
884 info.tags = {info.signature}
885 oldprint(D.db)
886 for tag, tagSet in pairs(D.tags) do
887 for _, index in pairs(tagSet) do
888 if index == id then
889 tinsert(info.tags, tag)
890 end
891 end
892 end
893 end
894
864 local frame = D.console[id] 895 local frame = D.console[id]
865 if not frame then 896 if not frame then
866 897
867 --print('new frame') 898 if DEVIAN_WORKSPACE then
899 D:Print('Adding '.. (info.index) .. ':' .. (info.signature) .. ' (|cFF00FFFF'.. concat(info.tags, '|r; |cFF00FFFF')..'|r)')
900 end
868 frame = CreateFrame('Frame', 'DevianConsole'..id, Devian, 'DevianConsoleTemplate') 901 frame = CreateFrame('Frame', 'DevianConsole'..id, Devian, 'DevianConsoleTemplate')
869 frame:SetID(id) 902 frame:SetID(id)
870 D.console[id] = frame 903 D.console[id] = frame
871 end 904 D.sigID[info.signature] = id
872 if not info then 905 end
873 --print('new channel')
874 info = {
875 }
876 D.DeepCopy(defaults.default_channel, info)
877 info.index = id
878 info.signature = name
879 D.channels[id] = info
880 end
881
882 906
883 frame:Setup(info) 907 frame:Setup(info)
884 return frame 908 return frame
885 end 909 end