comparison gui.lua @ 73:32eb24fb2ebf

- This code is not quite ready for prime time. Do not run it yet. - Loot events have associated unique IDs, enabling some new actions over the network. These IDs are preserved as part of realm history. As a result, the stored history format has completely changed (and requires less memory as a bonus). - "Prescan for faster handling" option, default off. - "Mark as <x>" now broadcast to other trackers. Older versions can't receive the message, of course. Future: Broadcast reassigning loot. - New options controlling whether (and where) to print a message when another player broadcasts those kinds of changes to existing loot. - Names colored by class when that data is available; CUSTOM_CLASS_COLORS supported. - Metric boatloads of minor tweaks and optimizations throughout.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Tue, 29 May 2012 22:50:09 +0000
parents bb19899c65a7
children 5edaac60449b
comparison
equal deleted inserted replaced
72:bb19899c65a7 73:32eb24fb2ebf
21 } 21 }
22 eoi_st_otherrow_bgcolortable[""] = eoi_st_otherrow_bgcolortable["kill"] 22 eoi_st_otherrow_bgcolortable[""] = eoi_st_otherrow_bgcolortable["kill"]
23 --eoi_st_otherrow_bgcolortable["realm"] = eoi_st_otherrow_bgcolortable["time"] 23 --eoi_st_otherrow_bgcolortable["realm"] = eoi_st_otherrow_bgcolortable["time"]
24 local eoi_st_otherrow_bgcolortable_default 24 local eoi_st_otherrow_bgcolortable_default
25 local eoi_st_lootrow_col3_colortable = { 25 local eoi_st_lootrow_col3_colortable = {
26 [""] = { text = "", r = 1.0, g = 1.0, b = 1.0, a = 1.0 }, 26 normal = { text = "", r = "ff", g = "ff", b = "ff" },
27 shard = { text = "shard", r = 0xa3/255, g = 0x35/255, b = 0xee/255, a = 1.0 }, 27 shard = { text = "shard", r = "a3", g = "35", b = "ee" },
28 offspec = { text = "offspec", r = 0.78, g = 0.61, b = 0.43, a = 1.0 }, 28 offspec = { text = "offspec", r = "c6", g = "9b", b = "6d" },
29 gvault = { text = "guild vault", r = 0x33/255, g = 1.0, b = 0x99/255, a = 1.0 }, 29 gvault = { text = "guild vault", r = "33", g = "ff", b = "99" },
30 } 30 }
31 local function eoi_st_lootrow_col3_colortable_func (data, cols, realrow, column, table) 31 for k,v in pairs(eoi_st_lootrow_col3_colortable) do
32 -- for chat output by core code
33 v.hex = "|cff" .. v.r .. v.g .. v.b
34 -- for lib-st
35 v.r = tonumber(v.r,16)/255
36 v.g = tonumber(v.g,16)/255
37 v.b = tonumber(v.b,16)/255
38 v.a = 1
39 end
40 addon.disposition_colors = eoi_st_lootrow_col3_colortable
41 local function eoi_st_lootrow_col3_colortable_func (data, _, realrow)
32 local disp = data[realrow].disposition 42 local disp = data[realrow].disposition
33 return eoi_st_lootrow_col3_colortable[disp or ""] 43 return eoi_st_lootrow_col3_colortable[disp or 'normal']
34 end 44 end
35 addon.time_column1_used_mt = { __index = { 45 addon.time_column1_used_mt = { __index = {
36 [2] = {value=""}, 46 [2] = {value=""},
37 [3] = {value=""}, 47 [3] = {value=""},
38 } } 48 } }
66 argument. 76 argument.
67 ]] 77 ]]
68 local tabs_OnGroupSelected = {} 78 local tabs_OnGroupSelected = {}
69 local mkbutton 79 local mkbutton
70 local tabs_OnGroupSelected_func, tabs_generated_text_OGS 80 local tabs_OnGroupSelected_func, tabs_generated_text_OGS
81
82 -- Class color support
83 local class_colors-- = {}
84 do
85 local function fill_out_class_colors()
86 class_colors = CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS
87 -- If we were dependant on lib-st calling this function (via a
88 -- 'color' field in eoi_st_cols[2]), then this would have to be deep
89 -- copied and an "a=1" field added to each. But as we have to use
90 -- this ourselves via DoCellUpdate, we can just share tables and
91 -- pass an alpha value manually during cell update.
92 --for class,color in pairs(CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS) do
93 -- class_colors[class] = { r = color.r, g = color.g, b = color.b, a = 1 }
94 --end
95 end
96 fill_out_class_colors()
97 if CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS.RegisterCallback then
98 CUSTOM_CLASS_COLORS:RegisterCallback(fill_out_class_colors)
99 end
100 addon.class_colors = class_colors
101 end
71 102
72 -- Working around this bug: 103 -- Working around this bug:
73 -- http://forums.wowace.com/showpost.php?p=295202&postcount=31 104 -- http://forums.wowace.com/showpost.php?p=295202&postcount=31
74 do 105 do
75 local function fix_frame_level (level, ...) 106 local function fix_frame_level (level, ...)
263 if e.kind == 'loot' then 294 if e.kind == 'loot' then
264 local textured = eoi_st_textured_item_format:format (e.itexture, ITEM_QUALITY_COLORS[e.quality].hex, e.itemname, e.count or "") 295 local textured = eoi_st_textured_item_format:format (e.itexture, ITEM_QUALITY_COLORS[e.quality].hex, e.itemname, e.count or "")
265 e.cols = { 296 e.cols = {
266 {value = textured}, 297 {value = textured},
267 {value = e.person}, 298 {value = e.person},
268 { color = eoi_st_lootrow_col3_colortable_func } 299 {}
269 } 300 }
270 -- This is horrible. Must do better. 301 -- This is horrible. Must do better.
271 if e.extratext then for k,v in pairs(eoi_st_lootrow_col3_colortable) do 302 if e.extratext then for k,v in pairs(eoi_st_lootrow_col3_colortable) do
272 if v.text == e.extratext then 303 if v.text == e.extratext then
273 e.disposition = k 304 e.disposition = k ~= 'normal' and k or nil
274 --e.extratext = nil, not feasible 305 --e.extratext = nil, not feasible
275 break 306 break
276 end 307 end
277 end end 308 end end
278 local ex = e.disposition or "" 309 local ex = eoi_st_lootrow_col3_colortable[e.disposition or 'normal'].text
279 ex = eoi_st_lootrow_col3_colortable[ex].text
280 if e.bcast_from and display_bcast_from and e.extratext then 310 if e.bcast_from and display_bcast_from and e.extratext then
281 ex = e.extratext .. " (from " .. e.bcast_from .. ")" 311 ex = e.extratext .. " (from " .. e.bcast_from .. ")"
282 elseif e.bcast_from and display_bcast_from then 312 elseif e.bcast_from and display_bcast_from then
283 ex = ex .. " (from " .. e.bcast_from .. ")" 313 ex = ex .. (e.disposition and " " or "")
314 .. "(from " .. e.bcast_from .. ")"
284 elseif e.extratext then 315 elseif e.extratext then
285 ex = e.extratext 316 ex = e.extratext
286 end 317 end
287 e.cols[3].value = ex 318 e.cols[3].value = ex
288 319
364 local col1 = new() 395 local col1 = new()
365 col1.OLi = pi 396 col1.OLi = pi
366 col1.OLn = #player 397 col1.OLn = #player
367 col1.value = player.name -- may spiffy this up in future 398 col1.value = player.name -- may spiffy this up in future
368 399
369 for li,loot in ipairs(player) do 400 for li,unique in ipairs(player.unique) do
370 local col2 = new() 401 local col2 = new()
371 col2.OLi = li 402 col2.OLi = li
372 local col3 = new() 403 local col3 = new()
373 col3.value = loot.when 404 col3.value = player.when[unique]
374 405
375 local itexture = GetItemIcon(loot.id) 406 local id = player.id[unique]
376 local iname, ilink, iquality = GetItemInfo(loot.id) 407 local itexture = GetItemIcon(id)
408 local iname, ilink, iquality = GetItemInfo(id)
377 local textured 409 local textured
378 if itexture and iname then 410 if itexture and iname then
379 textured = eoi_st_textured_item_format:format (itexture, 411 textured = eoi_st_textured_item_format:format (itexture,
380 ITEM_QUALITY_COLORS[iquality].hex, iname, loot.count or "") 412 ITEM_QUALITY_COLORS[iquality].hex, iname, player.count[unique] or "")
381 else 413 else
382 textured = eoi_st_textured_item_format:format ([[ICONS\INV_Misc_QuestionMark]], 414 textured = eoi_st_textured_item_format:format ([[ICONS\INV_Misc_QuestionMark]],
383 ITEM_QUALITY_COLORS[ITEM_QUALITY_COMMON].hex, 'UNKNOWN - REDISPLAY LATER', "") 415 ITEM_QUALITY_COLORS[ITEM_QUALITY_COMMON].hex, 'UNKNOWN - REDISPLAY LATER', "")
384 cache_okay = false 416 cache_okay = false
385 end 417 end
399 self.hist_clean = cache_okay and #self.history or nil 431 self.hist_clean = cache_okay and #self.history or nil
400 end 432 end
401 end 433 end
402 434
403 -- Debugging tooltip 435 -- Debugging tooltip
404 do 436 if true then
437 local tt
438 local function _create_tooltip()
439 tt = CreateFrame("GameTooltip")
440 UIParentLoadAddOn("Blizzard_DebugTools")
441
442 tt:SetBackdrop{
443 bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
444 edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
445 tile = true,
446 tileSize = 8,
447 edgeSize = 12,
448 insets = { left = 2, right = 2, top = 2, bottom = 2 }
449 }
450 tt:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r,
451 TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b)
452 tt:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g,
453 TOOLTIP_DEFAULT_COLOR.b)
454 tt:SetMovable(false)
455 tt:EnableMouse(false)
456 tt:SetFrameStrata("TOOLTIP")
457 tt:SetToplevel(true)
458 tt:SetClampedToScreen(true)
459
460 local font = CreateFont("OuroLootDebugFont")
461 font:CopyFontObject(GameTooltipTextSmall)
462 if IsAddOnLoaded"tekticles" then -- maybe check for one of the sharedmedia things?
463 font:SetFont([[Interface\AddOns\tekticles\Calibri.ttf]], 9)
464 else
465 font:SetFont([[Fonts\FRIZQT__.TTF]], 9)
466 end
467
468 local left, right, prevleft
469 -- Only create as many lines as we might need (the auto growth
470 -- by Add*Line does odd things sometimes).
471 for i = 1, math.max(DEVTOOLS_MAX_ENTRY_CUTOFF,15)+5 do
472 prevleft = left
473 left = tt:CreateFontString(nil,"ARTWORK")
474 right = tt:CreateFontString(nil,"ARTWORK")
475 left:SetFontObject(font)
476 right:SetFontObject(font)
477 tt:AddFontStrings(left,right)
478 if prevleft then
479 left:SetPoint("TOPLEFT",prevleft,"BOTTOMLEFT",0,-2)
480 else
481 left:SetPoint("TOPLEFT",10,-10) -- top line
482 end
483 right:SetPoint("RIGHT",left,"LEFT")
484 end
485 tt.AddMessage = tt.AddLine
486
487 _create_tooltip = nil
488 end
489
490 function _build_debugging_tooltip (parent, index)
491 local e = g_loot[index]; assert(type(e)=='table')
492 if not tt then _create_tooltip() end
493 tt:SetOwner (parent, "ANCHOR_LEFT", -15, -5)
494 tt:ClearLines()
495
496 local real = DEFAULT_CHAT_FRAME
497 DEFAULT_CHAT_FRAME = tt
498 DevTools_Dump{ [index] = e }
499 DEFAULT_CHAT_FRAME = real
500
501 tt:Show()
502 end
503
504 function _hide_debugging_tooltip()
505 if tt then tt:Hide() end
506 end
507 else
405 -- Fields to put in the tooltip (maybe move these into the options window 508 -- Fields to put in the tooltip (maybe move these into the options window
406 -- if I spend too much time fiddling). 509 -- if I spend too much time fiddling).
407 local loot = {'person', 'id', 'unique', 'disposition', 'count', 'variant'} 510 local loot = {'person', 'id', 'unique', 'disposition', 'count', 'variant'}
408 local boss = {'bossname', 'reason', 'instance', 'maxsize', 'duration', 'raidersnap'} 511 local boss = {'bossname', 'reason', 'instance', 'maxsize', 'duration', 'raidersnap'}
409 512
675 addon:Print("Rebroadcast entry", rowi, e.itemlink or e.bossname or UNKNOWN) 778 addon:Print("Rebroadcast entry", rowi, e.itemlink or e.bossname or UNKNOWN)
676 rowi = rowi + 1 779 rowi = rowi + 1
677 until rowi >= fencepost 780 until rowi >= fencepost
678 end, 781 end,
679 782
680 ["Mark as normal"] = function(rowi,disp) -- broadcast the change? ugh 783 ["Mark as normal"] = function(rowi,disp)
681 local olddisp = g_loot[rowi].disposition 784 addon:loot_mark_disposition ("local", rowi, disp)
682 g_loot[rowi].disposition = disp
683 g_loot[rowi].bcast_from = nil
684 g_loot[rowi].extratext = nil
685 addon:history_handle_disposition (rowi, olddisp)
686 end, 785 end,
687 786
688 ["Show only this player"] = function(rowi) 787 ["Show only this player"] = function(rowi)
689 local st = _d:GetUserData("eoiST") 788 local st = _d:GetUserData("eoiST")
690 _d:SetUserData("player filter name", g_loot[rowi].person) 789 _d:SetUserData("player filter name", g_loot[rowi].person)
1000 1099
1001 local e = data[realrow] 1100 local e = data[realrow]
1002 local cell = e.cols[column] 1101 local cell = e.cols[column]
1003 1102
1004 cellFrame.text:SetText(cell.value) 1103 cellFrame.text:SetText(cell.value)
1005 cellFrame.text:SetTextColor(1,1,1,1)
1006 1104
1007 if e.person_class then 1105 if e.person_class then
1008 local icon 1106 local icon
1009 if cellFrame.icontexture then 1107 if cellFrame.icontexture then
1010 icon = cellFrame.icontexture 1108 icon = cellFrame.icontexture
1017 cellFrame.icontexture = icon 1115 cellFrame.icontexture = icon
1018 end 1116 end
1019 icon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[e.person_class])) 1117 icon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[e.person_class]))
1020 icon:Show() 1118 icon:Show()
1021 cellFrame.text:SetPoint("LEFT", icon, "RIGHT", 1, 0) 1119 cellFrame.text:SetPoint("LEFT", icon, "RIGHT", 1, 0)
1120 local color = class_colors[e.person_class]
1121 cellFrame.text:SetTextColor(color.r,color.g,color.b,1)
1022 else 1122 else
1023 if cellFrame.icontexture then 1123 if cellFrame.icontexture then
1024 cellFrame.icontexture:Hide() 1124 cellFrame.icontexture:Hide()
1025 cellFrame.text:SetPoint("LEFT", cellFrame, "LEFT") 1125 cellFrame.text:SetPoint("LEFT", cellFrame, "LEFT")
1026 end 1126 end
1127 cellFrame.text:SetTextColor(1,1,1,1)
1027 end 1128 end
1028 1129
1029 --if e.kind ~= 'loot' then 1130 --if e.kind ~= 'loot' then
1030 stable:SetHighLightColor (rowFrame, eoi_st_otherrow_bgcolortable[e.reason or e.kind or ""]) 1131 stable:SetHighLightColor (rowFrame, eoi_st_otherrow_bgcolortable[e.reason or e.kind or ""])
1031 --else 1132 --else
1044 DoCellUpdate = eoi_st_col2_DoCellUpdate, 1145 DoCellUpdate = eoi_st_col2_DoCellUpdate,
1045 }, 1146 },
1046 { -- col 3 1147 { -- col 3
1047 name = "Notes", 1148 name = "Notes",
1048 width = 250, 1149 width = 250,
1150 color = eoi_st_lootrow_col3_colortable_func,
1049 }, 1151 },
1050 } 1152 }
1051 1153
1052 local player_filter_all 1154 local player_filter_all
1053 local player_filter_by_name = function (st, e) 1155 local player_filter_by_name = function (st, e)
1622 grp:PauseLayout() 1724 grp:PauseLayout()
1623 grp:SetFullWidth(true) 1725 grp:SetFullWidth(true)
1624 grp:SetTitle("Debugging/Testing Options [not saved across sessions]") 1726 grp:SetTitle("Debugging/Testing Options [not saved across sessions]")
1625 1727
1626 w = mkbutton("EditBox", 'comm_ident', addon.ident, 1728 w = mkbutton("EditBox", 'comm_ident', addon.ident,
1627 [[Disable the addon, change this field (click Okay or press Enter), then re-enable the addon.]]) 1729 [[Set tracking to 'Disabled' in the top-right dropdown, then change this field (click Okay or press Enter).]])
1628 w:SetRelativeWidth(0.2) 1730 w:SetRelativeWidth(0.2)
1629 w:SetLabel("Addon channel ID") 1731 w:SetLabel("Addon channel ID")
1630 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged) 1732 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
1631 w:SetCallback("OnEnterPressed", function(_w,event,value) 1733 w:SetCallback("OnEnterPressed", function(_w,event,value)
1632 -- if they set it to blank spaces, they're boned. oh well. 1734 -- if they set it to blank spaces, they're boned. oh well.
1660 end 1762 end
1661 local mod = DBM:GetModByName("NotScaryAtAll") 1763 local mod = DBM:GetModByName("NotScaryAtAll")
1662 if mod then 1764 if mod then
1663 mod:EnableMod() 1765 mod:EnableMod()
1664 addon:Print("Now tracking ID",mod.creatureId) 1766 addon:Print("Now tracking ID",mod.creatureId)
1665 else addon:Print("Can do nothing; DBM testing mod wasn't loaded.") end 1767 else
1768 addon:Print("Can do nothing; DBM testing mod wasn't loaded.")
1769 end
1666 end) 1770 end)
1667 w:SetDisabled(addon.bossmod_registered ~= 'DBM') 1771 w:SetDisabled(addon.bossmod_registered ~= 'DBM')
1668 grp:AddChild(w) 1772 grp:AddChild(w)
1669 1773
1670 w = mkbutton("GC", [[full GC cycle]]) 1774 w = mkbutton("GC", [[full GC cycle]])
1671 w:SetRelativeWidth(0.1) 1775 w:SetRelativeWidth(0.1)
1672 w:SetCallback("OnClick", function() collectgarbage() end) 1776 w:SetCallback("OnClick", function()
1777 local before = collectgarbage('count')
1778 collectgarbage('collect')
1779 local after = collectgarbage('count')
1780 addon:Print("Collected %d KB, %d KB still in use by Lua universe.", before-after, after)
1781 end)
1673 grp:AddChild(w) 1782 grp:AddChild(w)
1674
1675 --[==[ this has been well and truly debugged by now
1676 w = mkbutton("EditBox", nil, addon.loot_pattern:sub(17), [[]])
1677 w:SetRelativeWidth(0.35)
1678 w:SetLabel("CML pattern suffix")
1679 w:SetCallback("OnEnterPressed", function(_w,event,value)
1680 addon.loot_pattern = addon.loot_pattern:sub(1,16) .. value
1681 end)
1682 grp:AddChild(w) ]==]
1683 1783
1684 w = GUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(1) grp:AddChild(w) 1784 w = GUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(1) grp:AddChild(w)
1685 1785
1686 local simple = GUI:Create("SimpleGroup") 1786 local simple = GUI:Create("SimpleGroup")
1687 simple:SetLayout("List") 1787 simple:SetLayout("List")
1707 simple:AddChild(w) 1807 simple:AddChild(w)
1708 w = GUI:Create("CheckBoxSmallLabel") 1808 w = GUI:Create("CheckBoxSmallLabel")
1709 w:SetFullWidth(true) 1809 w:SetFullWidth(true)
1710 w:SetType("checkbox") 1810 w:SetType("checkbox")
1711 w:SetLabel("GOP history mode") 1811 w:SetLabel("GOP history mode")
1712 w:SetValue(false) 1812 w:SetValue(addon.history_suppress)
1713 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end) 1813 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end)
1714 simple:AddChild(w) 1814 simple:AddChild(w)
1715 w = mkbutton("Clear All & Reload", 1815 w = mkbutton("Clear All & Reload",
1716 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]]) 1816 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
1717 w:SetFullWidth(true) 1817 w:SetFullWidth(true)
1761 grp:AddChild(simple) 1861 grp:AddChild(simple)
1762 1862
1763 grp:ResumeLayout() 1863 grp:ResumeLayout()
1764 container:AddChild(grp) 1864 container:AddChild(grp)
1765 GUI:ClearFocus() 1865 GUI:ClearFocus()
1866 container:SetScroll(1000) -- scrollframe's max value
1766 end 1867 end
1767 1868
1768 -- Initial lower panel function 1869 -- Initial lower panel function
1769 local function adv_lower (container, specials) 1870 local function adv_lower (container, specials)
1871 local spacer = GUI:Create("Spacer")
1872 spacer:SetFullWidth(true)
1873 spacer:SetHeight(5)
1874 container:AddChild(spacer)
1770 local speedbump = GUI:Create("InteractiveLabel") 1875 local speedbump = GUI:Create("InteractiveLabel")
1771 speedbump:SetFullWidth(true) 1876 speedbump:SetFullWidth(true)
1772 speedbump:SetFontObject(GameFontHighlightLarge) 1877 speedbump:SetFontObject(GameFontHighlightLarge)
1773 speedbump:SetImage("Interface\\DialogFrame\\DialogAlertIcon") 1878 speedbump:SetImage("Interface\\DialogFrame\\DialogAlertIcon")
1774 speedbump:SetImageSize(50,50) 1879 speedbump:SetImageSize(50,50)
1779 adv_lower = adv_real 1884 adv_lower = adv_real
1780 return addon:redisplay() 1885 return addon:redisplay()
1781 --return tabs_OnGroupSelected_func(container.parent,"OnGroupSelected","opt") 1886 --return tabs_OnGroupSelected_func(container.parent,"OnGroupSelected","opt")
1782 end) 1887 end)
1783 container:AddChild(speedbump) 1888 container:AddChild(speedbump)
1889 spacer = GUI:Create("Spacer")
1890 spacer:SetFullWidth(true)
1891 spacer:SetHeight(5)
1892 container:AddChild(spacer)
1784 end 1893 end
1785 1894
1786 tabs_OnGroupSelected["opt"] = function(container,specials) 1895 tabs_OnGroupSelected["opt"] = function(container,specials)
1787 opts = OuroLootSV_opts 1896 opts = OuroLootSV_opts
1788 1897
1814 -- /loot option 1923 -- /loot option
1815 w = mkoption('register_slashloot', "Register /loot slash command on login", 0.49, 1924 w = mkoption('register_slashloot', "Register /loot slash command on login", 0.49,
1816 [[Register "/loot" as a slash command in addition to the normal "/ouroloot". Relog to take effect.]]) 1925 [[Register "/loot" as a slash command in addition to the normal "/ouroloot". Relog to take effect.]])
1817 grp:AddChild(w) 1926 grp:AddChild(w)
1818 1927
1819 -- chatty mode 1928 -- chatty boss mode
1820 w = mkoption('chatty_on_kill', "Be chatty on boss kill", 0.49, 1929 w = mkoption('chatty_on_kill', "Be chatty on boss kill", 0.49,
1821 [[Print something to chat output when DBM tells Ouro Loot about a successful boss kill.]]) 1930 [[Print something to chat output when DBM tells Ouro Loot about a successful boss kill.]])
1822 grp:AddChild(w) 1931 grp:AddChild(w)
1823 1932
1824 -- less noise in main panel 1933 -- less noise in main panel
1836 [[Show loadable plugins even if they've been disabled (and offer to enable them). Relog to take effect.]]) 1945 [[Show loadable plugins even if they've been disabled (and offer to enable them). Relog to take effect.]])
1837 grp:AddChild(w) 1946 grp:AddChild(w)
1838 1947
1839 -- showing the "(from Rebroadcasterdude)" in the notes column 1948 -- showing the "(from Rebroadcasterdude)" in the notes column
1840 w = mkoption('display_bcast_from', "Show rebroadcasting player", 0.49, 1949 w = mkoption('display_bcast_from', "Show rebroadcasting player", 0.49,
1841 [[Include "(from Player_Name)" in the Notes column for loot that was broadcast to you.]], 1950 [[Include "from PlayerName" in the Notes column for loot that was broadcast to you. (Not included in forum output).]],
1842 function(_w,_e,value) 1951 function(_w,_e,value)
1843 opts.display_bcast_from = value 1952 opts.display_bcast_from = value
1844 addon.loot_clean = nil 1953 addon.loot_clean = nil
1845 end) 1954 end)
1846 grp:AddChild(w) 1955 grp:AddChild(w)
1847 1956
1957 -- prefilling g_uniques with history
1958 w = mkoption('precache_history_uniques', "Prescan for faster handling", 0.49,
1959 [[See description under +Help -- Handy Tips -- Prescanning> for instructions.]])
1960 grp:AddChild(w)
1961
1962 w = GUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(1) grp:AddChild(w)
1963
1848 -- possible keybindings 1964 -- possible keybindings
1849 do 1965 do
1850 local pair = GUI:Create("SimpleGroup") 1966 local pair = GUI:Create("InlineGroup")
1851 pair:SetLayout("Flow") 1967 pair:SetLayout("List")
1852 pair:SetRelativeWidth(0.95) 1968 pair:SetRelativeWidth(0.49)
1853 local editbox, checkbox 1969 local editbox, checkbox
1854 editbox = mkbutton("EditBox", nil, opts.keybinding_text, 1970 editbox = mkbutton("EditBox", nil, opts.keybinding_text,
1855 [[Keybinding text format is fragile! Relog to take effect.]]) 1971 [[Keybinding text format is fragile! Relog to take effect.]])
1856 editbox:SetRelativeWidth(0.5) 1972 editbox:SetFullWidth(true)
1857 editbox:SetLabel("Keybinding text") 1973 editbox:SetLabel("Keybinding text")
1858 editbox:SetCallback("OnEnterPressed", function(_w,event,value) 1974 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
1859 opts.keybinding_text = value 1975 opts.keybinding_text = value
1860 end) 1976 end)
1861 editbox:SetDisabled(not opts.keybinding) 1977 editbox:SetDisabled(not opts.keybinding)
1862 checkbox = mkoption('keybinding', "Register keybinding", 0.5, 1978 checkbox = mkoption('keybinding', "Register keybinding", 1,
1863 [[Register a keybinding to toggle the loot display. Relog to take effect.]], 1979 [[Register a keybinding to toggle the loot display. Relog to take effect.]],
1864 function (_w,_,value) 1980 function (_w,_,value)
1865 opts.keybinding = value 1981 opts.keybinding = value
1866 editbox:SetDisabled(not opts.keybinding) 1982 editbox:SetDisabled(not opts.keybinding)
1867 end) 1983 end)
1984 checkbox:SetFullWidth(true)
1868 pair:AddChild(checkbox) 1985 pair:AddChild(checkbox)
1869 pair:AddChild(editbox) 1986 pair:AddChild(editbox)
1870 grp:AddChild(pair) 1987 grp:AddChild(pair)
1871 end 1988 end
1872 1989
1990 -- chatty disposition/assignment changes
1991 do
1992 local chatgroup = GUI:Create("InlineGroup")
1993 chatgroup:SetLayout("List")
1994 chatgroup:SetRelativeWidth(0.49)
1995 chatgroup:SetTitle("Remote Changes Chat")
1996 local toggle, editbox
1997 toggle = mkoption('chatty_on_remote_changes', "Be chatty on remote changes", 1,
1998 [[Print something to chat when other users change recorded loot.]],
1999 function (_w,_,value)
2000 opts.chatty_on_remote_changes = value
2001 editbox:SetDisabled(not opts.chatty_on_remote_changes)
2002 end)
2003 toggle:SetFullWidth(true)
2004 chatgroup:AddChild(toggle)
2005 w = GUI:Create("Label")
2006 w:SetFullWidth(true)
2007 w:SetText("This controls the output of the |cff00ffff'Be chatty on remote changes'|r option. If this field is a number, it designates which chat frame to use. Otherwise it is the Lua variable name of a frame with AddMessage capability.")
2008 chatgroup:AddChild(w)
2009 editbox = mkbutton("EditBox", nil, opts.chatty_on_remote_changes_frame,
2010 [[1 = default chat frame, 2 = combat log, etc]])
2011 editbox:SetFullWidth(true)
2012 editbox:SetLabel("Output Chatframe")
2013 editbox:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
2014 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
2015 local prev = opts.chatty_on_remote_changes_frame
2016 value = value:trim()
2017 value = tonumber(value) or value
2018 if addon:_set_remote_change_chatframe (value) then
2019 opts.chatty_on_remote_changes_frame = value
2020 _w:SetText(tostring(value))
2021 _w.editbox:ClearFocus()
2022 else
2023 _w:SetText(tostring(prev))
2024 end
2025 end)
2026 editbox:SetDisabled(not opts.chatty_on_remote_changes)
2027 chatgroup:AddChild(editbox)
2028 w = mkbutton("Chat Frame Numbers",
2029 [[Print each chat window number in its own frame, for easy reference in the editing field.]])
2030 w:SetFullWidth(true)
2031 --w:SetDisabled(not opts.chatty_on_remote_changes)
2032 w:SetCallback("OnClick", function()
2033 for i = 1, NUM_CHAT_WINDOWS do
2034 local cf = _G['ChatFrame'..i]
2035 if not cf then break end
2036 addon:CFPrint (cf, "This is frame number |cffff0000%d|r.", i)
2037 end
2038 end)
2039 chatgroup:AddChild(w)
2040 grp:AddChild(chatgroup)
2041 end
2042
1873 -- boss mod selection 2043 -- boss mod selection
1874 w = GUI:Create("Spacer") 2044 w = GUI:Create("Spacer")
1875 w:SetFullWidth(true) 2045 w:SetFullWidth(true)
1876 w:SetHeight(20) 2046 w:SetHeight(2)
1877 grp:AddChild(w) 2047 grp:AddChild(w)
1878 do 2048 do
1879 local list = {} 2049 local list = {}
1880 local current 2050 local current
1881 for k,v in ipairs(addon.bossmods) do 2051 for k,v in ipairs(addon.bossmods) do
1896 end 2066 end
1897 2067
1898 -- item filters 2068 -- item filters
1899 w = GUI:Create("Spacer") 2069 w = GUI:Create("Spacer")
1900 w:SetFullWidth(true) 2070 w:SetFullWidth(true)
1901 w:SetHeight(20) 2071 w:SetHeight(2)
1902 grp:AddChild(w) 2072 grp:AddChild(w)
1903 do 2073 do
1904 local warntext = "At least one of the items in the filter list was not in your game client's cache. This is okay. Just wait a few seconds, display some other Ouro Loot tab, and then display Options again." 2074 local warntext = "At least one of the items in the filter list was not in your game client's cache. This is okay. Just wait a few seconds, display some other Ouro Loot tab, and then display Options again."
1905 local cache_warn, cache_warned = false, false 2075 local cache_warn, cache_warned = false, false
1906 local function do_warning() 2076 local function do_warning()
1932 w:SetRelativeWidth(0.4) 2102 w:SetRelativeWidth(0.4)
1933 w:SetText("Item filter") 2103 w:SetText("Item filter")
1934 w:SetEditBoxTooltip("Link items which should no longer be tracked.") 2104 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
1935 w:SetList(filterlist) 2105 w:SetList(filterlist)
1936 w:SetCallback("OnTextEnterPressed", function(_w, _, text) 2106 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
1937 local iname, ilink, iquality = GetItemInfo(strtrim(text)) 2107 local iname, ilink, iquality = GetItemInfo(text:trim())
1938 if not iname then 2108 if not iname then
1939 return addon:Print("Error: %s is not a valid item name/link!", text) 2109 return addon:Print("Error: %s is not a valid item name/link!", text)
1940 end 2110 end
1941 local id = tonumber(ilink:match("item:(%d+)")) 2111 local id = tonumber(ilink:match("item:(%d+)"))
1942 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r" 2112 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
1961 w:SetRelativeWidth(0.4) 2131 w:SetRelativeWidth(0.4)
1962 w:SetText("Vault items") 2132 w:SetText("Vault items")
1963 w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.") 2133 w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.")
1964 w:SetList(vaultlist) 2134 w:SetList(vaultlist)
1965 w:SetCallback("OnTextEnterPressed", function(_w, _, text) 2135 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
1966 local iname, ilink, iquality = GetItemInfo(strtrim(text)) 2136 local iname, ilink, iquality = GetItemInfo(text:trim())
1967 if not iname then 2137 if not iname then
1968 return addon:Print("Error: %s is not a valid item name/link!", text) 2138 return addon:Print("Error: %s is not a valid item name/link!", text)
1969 end 2139 end
1970 local id = tonumber(ilink:match("item:(%d+)")) 2140 local id = tonumber(ilink:match("item:(%d+)"))
1971 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r" 2141 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
2423 -- 2593 --
2424 -- This is really, really hideous to read. 2594 -- This is really, really hideous to read.
2425 local function eoi_st_insert_OnAccept_boss (dialog, data, data2) 2595 local function eoi_st_insert_OnAccept_boss (dialog, data, data2)
2426 if data.all_done then 2596 if data.all_done then
2427 -- It'll probably be the final entry in the table, but there might have 2597 -- It'll probably be the final entry in the table, but there might have
2428 -- been real loot happening at the same time. 2598 -- been real loot happening while the user was clicking and typing.
2429 local boss_index = addon._addBossEntry{ 2599 local boss_index = addon._addBossEntry{
2430 kind = 'boss', 2600 kind = 'boss',
2431 bossname = (OuroLootSV_opts.snarky_boss and addon.boss_abbrev[data.name] or data.name) or data.name, 2601 bossname = (OuroLootSV_opts.snarky_boss and addon.boss_abbrev[data.name] or data.name) or data.name,
2432 reason = 'kill', 2602 reason = 'kill',
2433 instance = data.instance, 2603 instance = data.instance,
2485 local function eoi_st_insert_OnAccept_loot (dialog, data) 2655 local function eoi_st_insert_OnAccept_loot (dialog, data)
2486 if data.all_done then 2656 if data.all_done then
2487 --local real_rebroadcast, real_enabled = addon.rebroadcast, addon.enabled 2657 --local real_rebroadcast, real_enabled = addon.rebroadcast, addon.enabled
2488 --g_rebroadcast, g_enabled = false, true 2658 --g_rebroadcast, g_enabled = false, true
2489 data.display:Hide() 2659 data.display:Hide()
2490 local loot_index = addon:CHAT_MSG_LOOT ("manual", data.recipient, data.name, data.notes) 2660 local loot_index = assert(addon:CHAT_MSG_LOOT ("manual", data.recipient, data.name, data.notes))
2491 --g_rebroadcast, g_enabled = real_g_rebroadcast, real_g_enabled 2661 --g_rebroadcast, g_enabled = real_g_rebroadcast, real_g_enabled
2492 local entry = tremove(g_loot,loot_index) 2662 local entry = tremove(g_loot,loot_index)
2493 tinsert(g_loot,data.rowindex,entry) 2663 tinsert(g_loot,data.rowindex,entry)
2494 --data.display:GetUserData("eoiST"):OuroLoot_Refresh(data.rowindex) 2664 --data.display:GetUserData("eoiST"):OuroLoot_Refresh(data.rowindex)
2495 addon:_fill_out_eoi_data(data.rowindex) 2665 addon:_fill_out_eoi_data(data.rowindex)