comparison gui.lua @ 72:bb19899c65a7

Add a tooltip for debugging g_loot contents; toggle from the advanced debug options. (Font is ginormous, why?)
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Sat, 12 May 2012 11:08:23 +0000
parents fb330a1fb6e9
children 32eb24fb2ebf
comparison
equal deleted inserted replaced
71:fb330a1fb6e9 72:bb19899c65a7
55 local GetItemInfo, ITEM_QUALITY_COLORS = GetItemInfo, ITEM_QUALITY_COLORS 55 local GetItemInfo, ITEM_QUALITY_COLORS = GetItemInfo, ITEM_QUALITY_COLORS
56 56
57 -- En masse forward decls of symbols defined inside local blocks 57 -- En masse forward decls of symbols defined inside local blocks
58 local _generate_text, _populate_text_specials 58 local _generate_text, _populate_text_specials
59 local _tabtexts, _taborder -- filled out in gui block scope 59 local _tabtexts, _taborder -- filled out in gui block scope
60 local _do_debugging_tooltip, _hide_debugging_tooltip, _build_debugging_tooltip
60 61
61 --[[ 62 --[[
62 This is a table of callback functions, each responsible for drawing a tab 63 This is a table of callback functions, each responsible for drawing a tab
63 into the container passed in the first argument. Special-purpose buttons 64 into the container passed in the first argument. Special-purpose buttons
64 can optionally be created (mkbutton) and added to the container in the second 65 can optionally be created (mkbutton) and added to the container in the second
395 end 396 end
396 397
397 --print("finished history loop, #st ==", #st) 398 --print("finished history loop, #st ==", #st)
398 self.hist_clean = cache_okay and #self.history or nil 399 self.hist_clean = cache_okay and #self.history or nil
399 end 400 end
400 401 end
401 402
403 -- Debugging tooltip
404 do
405 -- Fields to put in the tooltip (maybe move these into the options window
406 -- if I spend too much time fiddling).
407 local loot = {'person', 'id', 'unique', 'disposition', 'count', 'variant'}
408 local boss = {'bossname', 'reason', 'instance', 'maxsize', 'duration', 'raidersnap'}
409
410 -- Now here's a thing unheard-of. A tooltip not inheriting from the big
411 -- memory-wasteful template, but also not intended merely for scanning
412 -- invisible tooltips.
413 -- (If this ever grows beyond a text dump, then replace it with libqtip.)
414 local tt
415 local function _create_tooltip()
416 tt = CreateFrame("GameTooltip")
417
418 tt:SetBackdrop{
419 bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
420 edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
421 tile = true,
422 tileSize = 8,
423 edgeSize = 12,
424 insets = { left = 2, right = 2, top = 2, bottom = 2 }
425 }
426 tt:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r,
427 TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b)
428 tt:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g,
429 TOOLTIP_DEFAULT_COLOR.b)
430 tt:SetMovable(false)
431 tt:EnableMouse(false)
432 tt:SetFrameStrata("TOOLTIP")
433 tt:SetToplevel(true)
434 tt:SetClampedToScreen(true)
435
436 local font = GameTooltipTextSmall
437 local left, right, prevleft
438 -- Only create as many lines as we might need (the auto growth
439 -- by Add*Line does odd things sometimes).
440 for i = 1, math.max(#loot,#boss)+2 do
441 prevleft = left
442 left = tt:CreateFontString(nil,"ARTWORK")
443 right = tt:CreateFontString(nil,"ARTWORK")
444 left:SetFontObject(font)
445 right:SetFontObject(font)
446 tt:AddFontStrings(left,right)
447 if prevleft then
448 left:SetPoint("TOPLEFT",prevleft,"BOTTOMLEFT",0,-2)
449 else
450 left:SetPoint("TOPLEFT",10,-10) -- top line
451 end
452 right:SetPoint("RIGHT",left,"LEFT")
453 end
454
455 _create_tooltip = nil
456 end
457
458 function _build_debugging_tooltip (parent, index)
459 local e = g_loot[index]; assert(type(e)=='table')
460 if not tt then _create_tooltip() end
461 tt:SetOwner (parent, "ANCHOR_LEFT", -15, -5)
462 tt:ClearLines()
463
464 -- change these, change the +2 above
465 tt:AddDoubleLine (tostring(index), tostring(e), 1,1,1)
466 tt:AddDoubleLine ('kind', e.kind, 1,1,1)
467
468 local source = (e.kind == 'loot' and loot) or (e.kind == 'boss' and boss)
469 if source then
470 for _,field in ipairs(source) do
471 tt:AddDoubleLine (field, tostring(e[field]), 1,1,1, 0,156/255,1)
472 end
473 end
474 tt:Show()
475 end
476 function _hide_debugging_tooltip()
477 if tt then tt:Hide() end
478 end
402 end 479 end
403 480
404 481
405 ------ Main GUI Window 482 ------ Main GUI Window
406 local _d -- display when it's open, eoiST when it's not 483 local _d -- display when it's open, eoiST when it's not
458 next_insertion_position = next_insertion_position + saved_offset 535 next_insertion_position = next_insertion_position + saved_offset
459 removed, saved_offset = nil, nil 536 removed, saved_offset = nil, nil
460 return count 537 return count
461 end 538 end
462 end 539 end
463
464 540
465 -- Done at startup, and whenever we've changed the population of tabs. 541 -- Done at startup, and whenever we've changed the population of tabs.
466 function addon:gui_init (loot_pointer) 542 function addon:gui_init (loot_pointer)
467 g_loot = assert(loot_pointer, "something went wrong at startup") 543 g_loot = assert(loot_pointer, "something went wrong at startup")
468 g_generated = nil 544 g_generated = nil
734 ]] 810 ]]
735 local function eoi_st_OnEnter (rowFrame, cellFrame, data, cols, row, realrow, column, table, button, ...) 811 local function eoi_st_OnEnter (rowFrame, cellFrame, data, cols, row, realrow, column, table, button, ...)
736 if (row == nil) or (realrow == nil) then return end -- mouseover column header 812 if (row == nil) or (realrow == nil) then return end -- mouseover column header
737 local e = data[realrow] 813 local e = data[realrow]
738 local kind = e.kind 814 local kind = e.kind
739 815 local tt = GameTooltip -- can this be hoisted? does GT ever get securely replaced?
816
817 if _do_debugging_tooltip and column == 1 and kind~='history' then -- FIXME history
818 _build_debugging_tooltip (cellFrame, realrow)
819 end
740 if (kind == 'loot' and column == 1) or (kind == 'history' and column == 2) then 820 if (kind == 'loot' and column == 1) or (kind == 'history' and column == 2) then
741 GameTooltip:SetOwner (cellFrame, "ANCHOR_RIGHT", -20, 0) 821 tt:SetOwner (cellFrame, "ANCHOR_RIGHT", -20, 0)
742 if e.cache_miss then 822 if e.cache_miss then
743 GameTooltip:ClearLines() 823 tt:ClearLines()
744 GameTooltip:AddLine("Missing Cache Data") 824 tt:AddLine("Missing Cache Data")
745 GameTooltip:AddLine([[Wait a few seconds, then type]], 0.8, 0.8, 0.8, 1) 825 tt:AddLine([[Wait a few seconds, then type]], 0.8, 0.8, 0.8, 1)
746 GameTooltip:AddLine([[/ouroloot fixcache]], 0, 1, 64/255, nil) 826 tt:AddLine([[/ouroloot fixcache]], 0, 1, 64/255, nil)
747 GameTooltip:AddLine([[and redisplay this window.]], 0.8, 0.8, 0.8, 1) 827 tt:AddLine([[and redisplay this window.]], 0.8, 0.8, 0.8, 1)
748 GameTooltip:Show() 828 tt:Show()
749 elseif e.itemlink then 829 elseif e.itemlink then
750 GameTooltip:SetHyperlink (e.itemlink) 830 tt:SetHyperlink (e.itemlink)
751 end 831 end
752 832
753 elseif kind == 'loot' and column == 2 then 833 elseif kind == 'loot' and column == 2 then
754 GameTooltip:SetOwner (cellFrame, "ANCHOR_BOTTOMRIGHT", -50, 5) 834 tt:SetOwner (cellFrame, "ANCHOR_BOTTOMRIGHT", -50, 5)
755 GameTooltip:ClearLines() 835 tt:ClearLines()
756 GameTooltip:AddLine(e.person.." Loot:") 836 tt:AddLine(e.person.." Loot:")
757 local counter = 0 837 local counter = 0
758 for i,e2 in ipairs(data) do 838 for i,e2 in ipairs(data) do
759 if e2.person == e.person then -- would be awesome to test for alts 839 if e2.person == e.person then -- would be awesome to test for alts
760 if counter > 10 then 840 if counter > 10 then
761 GameTooltip:AddLine("...") 841 tt:AddLine("...")
762 break 842 break
763 else 843 else
764 -- textures screw up too badly, strip them 844 -- textures screw up too badly, strip them
765 local textured = e2.cols[1].value 845 local textured = e2.cols[1].value
766 local space = textured:find(" ") 846 local space = textured:find(" ")
767 GameTooltip:AddLine(textured:sub(space+1)) 847 tt:AddLine(textured:sub(space+1))
768 counter = counter + 1 848 counter = counter + 1
769 end 849 end
770 end 850 end
771 end 851 end
772 GameTooltip:Show() 852 tt:Show()
773 853
774 elseif kind == 'loot' and column == 3 then 854 elseif kind == 'loot' and column == 3 then
775 setstatus(e.cols[column].value) 855 setstatus(e.cols[column].value)
776 856
777 end 857 end
778 858
779 return false -- continue with default highlighting behavior 859 return false -- continue with default highlighting behavior
780 end 860 end
781 local function eoi_st_OnLeave (rowFrame, cellFrame, data, cols, row, realrow, column, table, button, ...) 861 local function eoi_st_OnLeave (rowFrame, cellFrame, data, cols, row, realrow, column, table, button, ...)
782 GameTooltip:Hide() 862 GameTooltip:Hide()
863 _hide_debugging_tooltip()
783 if row and realrow and data[realrow].kind ~= 'loot' then 864 if row and realrow and data[realrow].kind ~= 'loot' then
784 table:SetHighLightColor (rowFrame, eoi_st_otherrow_bgcolortable[data[realrow].reason or data[realrow].kind]) 865 table:SetHighLightColor (rowFrame, eoi_st_otherrow_bgcolortable[data[realrow].reason or data[realrow].kind])
785 return true -- do not do anything further 866 return true -- do not do anything further
786 else 867 else
787 --setstatus("") 868 --setstatus("")
1603 w = GUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(1) grp:AddChild(w) 1684 w = GUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(1) grp:AddChild(w)
1604 1685
1605 local simple = GUI:Create("SimpleGroup") 1686 local simple = GUI:Create("SimpleGroup")
1606 simple:SetLayout("List") 1687 simple:SetLayout("List")
1607 simple:SetRelativeWidth(0.3) 1688 simple:SetRelativeWidth(0.3)
1689 w = GUI:Create("CheckBoxSmallLabel")
1690 w:SetFullWidth(true)
1691 w:SetType("checkbox")
1692 w:SetLabel("loot debugging tooltip")
1693 w:SetValue(_do_debugging_tooltip)
1694 w:SetCallback("OnValueChanged", function(_w,event,value)
1695 _do_debugging_tooltip = value
1696 end)
1697 simple:AddChild(w)
1608 w = GUI:Create("CheckBoxSmallLabel") 1698 w = GUI:Create("CheckBoxSmallLabel")
1609 w:SetFullWidth(true) 1699 w:SetFullWidth(true)
1610 w:SetType("checkbox") 1700 w:SetType("checkbox")
1611 w:SetLabel("debug toggle") 1701 w:SetLabel("debug toggle")
1612 w:SetValue(addon.DEBUG_PRINT) 1702 w:SetValue(addon.DEBUG_PRINT)