comparison gui.lua @ 25:cb9635999171

- Reassigning loot, and marking loot as disenchanted/vault, will update the history entries also. - Tooltip help on dropdown menus appears at mouse now, instead of depending on Blizzard's "Beginner Tooltips" setting. - Forum BBcode output includes an option for MMO-Champion/Wowstead formatting. - Smarter cleanup functions for expiring caches. - Properly prefer locally-generated loot events, even when other users can see and rebroadcast the events back to you faster than you see them.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Wed, 05 Oct 2011 02:14:07 +0000
parents 61d932f0e8f2
children f866daadcdf6
comparison
equal deleted inserted replaced
24:61d932f0e8f2 25:cb9635999171
399 text = name, 399 text = name,
400 func = dropdownmenu_handler, 400 func = dropdownmenu_handler,
401 arg1 = funcs[name], 401 arg1 = funcs[name],
402 arg2 = arg, 402 arg2 = arg,
403 notCheckable = true, 403 notCheckable = true,
404 tooltipOnButton = true,
405 tooltipWhileDisabled = true,
404 tooltipTitle = tiptext and name or nil, 406 tooltipTitle = tiptext and name or nil,
405 tooltipText = tiptext, 407 tooltipText = tiptext,
406 }) 408 })
407 end 409 end
408 end 410 end
466 ["Rebroadcast this boss"] = function(rowi,kind) 468 ["Rebroadcast this boss"] = function(rowi,kind)
467 addon:Print("not implemented yet") -- TODO 469 addon:Print("not implemented yet") -- TODO
468 end, 470 end,
469 471
470 ["Mark as normal"] = function(rowi,disp) -- broadcast the change? ugh 472 ["Mark as normal"] = function(rowi,disp) -- broadcast the change? ugh
473 local olddisp = g_loot[rowi].disposition
471 g_loot[rowi].disposition = disp 474 g_loot[rowi].disposition = disp
472 g_loot[rowi].bcast_from = nil 475 g_loot[rowi].bcast_from = nil
473 g_loot[rowi].extratext = nil 476 g_loot[rowi].extratext = nil
477 addon:history_handle_disposition (rowi, olddisp)
474 end, 478 end,
475 479
476 ["Show only this player"] = function(rowi) 480 ["Show only this player"] = function(rowi)
477 local st = _d:GetUserData("eoiST") 481 local st = _d:GetUserData("eoiST")
478 _d:SetUserData("player filter name", g_loot[rowi].person) 482 _d:SetUserData("player filter name", g_loot[rowi].person)
493 df_REASSIGN = function(rowi,to_whom) 497 df_REASSIGN = function(rowi,to_whom)
494 addon:reassign_loot (rowi, to_whom) 498 addon:reassign_loot (rowi, to_whom)
495 CloseDropDownMenus() -- also need to close parent menu 499 CloseDropDownMenus() -- also need to close parent menu
496 end, 500 end,
497 ["Enter name..."] = function(rowi) 501 ["Enter name..."] = function(rowi)
502 CloseDropDownMenus() -- also need to close parent menu
498 local dialog = StaticPopup_Show "OUROL_REASSIGN_ENTER" 503 local dialog = StaticPopup_Show "OUROL_REASSIGN_ENTER"
499 dialog.data = {index=rowi, display=_d} 504 dialog.data = {index=rowi, display=_d}
500 end, 505 end,
501 } 506 }
502 -- Would be better to move the %arg to this list rather than below, but 507 -- Would be better to move the %arg to this list rather than below, but
516 isTitle = true, 521 isTitle = true,
517 notClickable = true, 522 notClickable = true,
518 notCheckable = true, 523 notCheckable = true,
519 }}, 524 }},
520 { 525 {
521 "Rebroadcast this day%time|Broadcasts everything from here down until a new day", 526 "Rebroadcast this day%time|Broadcasts everything from here down until a new day.",
522 "Delete remaining entries for this day%time|Erases everything from here down until a new day", 527 "Delete remaining entries for this day%time|Erases everything from here down until a new day.",
523 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information", 528 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information.",
524 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information", 529 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information.",
525 CLOSE 530 CLOSE
526 }, dropdownfuncs) 531 }, dropdownfuncs)
527 local eoi_loot_dropdown = gen_easymenu_table( 532 local eoi_loot_dropdown = gen_easymenu_table(
528 {{ 533 {{
529 -- this is the dropdown title, text filled in on the fly 534 -- this is the dropdown title, text filled in on the fly
532 }}, 537 }},
533 { 538 {
534 "Mark as disenchanted%shard", 539 "Mark as disenchanted%shard",
535 "Mark as offspec%offspec", 540 "Mark as offspec%offspec",
536 "Mark as guild vault%gvault", 541 "Mark as guild vault%gvault",
537 "Mark as normal|This is the default. Selecting any 'Mark as <x>' action blanks out extra notes about who broadcast this entry, etc.", 542 "Mark as normal|This is the default. Selecting any 'Mark as <x>' action blanks out extra notes about who broadcast this entry, etc.",
538 "--", 543 "--",
539 "Rebroadcast this loot entry|Sends this loot event, including special notes, as if it just happened.", 544 "Rebroadcast this loot entry|Sends this loot event, including special notes, as if it just happened.",
540 "Delete this loot event|Permanent, no going back!", 545 "Delete this loot event|Permanent, no going back!",
541 "Delete remaining entries for this boss%boss|Erases everything from here down until a new boss/day", 546 "Delete remaining entries for this boss%boss|Erases everything from here down until a new boss/day.",
542 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information", 547 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information.",
543 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information", 548 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information.",
544 "Edit note|Same as double-clicking in the notes column", 549 "Edit note|Same as double-clicking in the notes column.",
545 "--", 550 "--",
546 CLOSE 551 CLOSE
547 }, dropdownfuncs) 552 }, dropdownfuncs)
548 local eoi_player_dropdown = gen_easymenu_table( 553 local eoi_player_dropdown = gen_easymenu_table(
549 { 554 {
555 }, 560 },
556 { 561 {
557 text = "Reassign to...", 562 text = "Reassign to...",
558 hasArrow = true, 563 hasArrow = true,
559 --menuList = filled in in the fly, 564 --menuList = filled in in the fly,
565 tooltipOnButton = true,
566 tooltipWhileDisabled = true,
560 }, 567 },
561 }, 568 },
562 { 569 {
563 "Show only this player", 570 "Show only this player",
564 CLOSE 571 CLOSE
569 isTitle = true, 576 isTitle = true,
570 notClickable = true, 577 notClickable = true,
571 notCheckable = true, 578 notCheckable = true,
572 }}, 579 }},
573 { 580 {
574 "Change from 'wipe' to 'kill'|Also collapses other wipe entries", 581 "Change from 'wipe' to 'kill'|Also collapses other wipe entries.",
575 "Rebroadcast this boss|Broadcasts the kill event and all subsequent loot until next boss", 582 "Rebroadcast this boss|Broadcasts the kill event and all subsequent loot until next boss.",
576 "Delete this boss event|Permanent, no going back!", 583 "Delete this boss event|Permanent, no going back!",
577 "Delete remaining entries for this boss%boss|Erases everything from here down until a new boss/day", 584 "Delete remaining entries for this boss%boss|Erases everything from here down until a new boss/day.",
578 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information", 585 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information.",
579 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information", 586 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information.",
580 "--", 587 "--",
581 CLOSE 588 CLOSE
582 }, dropdownfuncs) 589 }, dropdownfuncs)
583 local hist_dropdown = gen_easymenu_table( 590 local hist_dropdown = gen_easymenu_table(
584 {{ 591 {{
700 notCheckable = true, 707 notCheckable = true,
701 } 708 }
702 end 709 end
703 eoi_player_dropdown[2].menuList = 710 eoi_player_dropdown[2].menuList =
704 gen_easymenu_table (raiders, {"Enter name...",CLOSE}, dropdownfuncs) 711 gen_easymenu_table (raiders, {"Enter name...",CLOSE}, dropdownfuncs)
705 --tabledump(eoi_player_dropdown) 712 if e.disposition == 'shard' or e.disposition == 'gvault' then
713 eoi_player_dropdown[2].disabled = true
714 eoi_player_dropdown[2].tooltipTitle = "Cannot Reassign"
715 eoi_player_dropdown[2].tooltipText = "You must first mark this item as 'normal' or 'offspec' before reassignment."
716 else
717 eoi_player_dropdown[2].disabled = nil
718 eoi_player_dropdown[2].tooltipTitle = nil
719 eoi_player_dropdown[2].tooltipText = nil
720 end
706 EasyMenu (eoi_player_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU") 721 EasyMenu (eoi_player_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU")
707 722
708 elseif kind == 'boss' then 723 elseif kind == 'boss' then
709 eoi_boss_dropdown[1].text = e.bosskill 724 eoi_boss_dropdown[1].text = e.bosskill
710 EasyMenu (eoi_boss_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU") 725 EasyMenu (eoi_boss_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU")
1127 return true -- do not do anything further 1142 return true -- do not do anything further
1128 end]] 1143 end]]
1129 1144
1130 tabs_OnGroupSelected["hist"] = function(container,specials) 1145 tabs_OnGroupSelected["hist"] = function(container,specials)
1131 histST = LibStub("ScrollingTable"):CreateST(hist_st_cols,eoi_st_displayed_rows,eoi_st_rowheight) 1146 histST = LibStub("ScrollingTable"):CreateST(hist_st_cols,eoi_st_displayed_rows,eoi_st_rowheight)
1147 _d:SetUserData("histST",histST)
1132 if addon.author_debug then 1148 if addon.author_debug then
1133 _G.OLHST = histST 1149 _G.OLHST = histST
1134 end 1150 end
1135 1151
1136 if not eoi_st_otherrow_bgcolortable_default then 1152 if not eoi_st_otherrow_bgcolortable_default then
1174 histST:SetData(addon.history.st) 1190 histST:SetData(addon.history.st)
1175 end 1191 end
1176 1192
1177 tabs_OnGroupSelected["hist"] = function(container,specials) 1193 tabs_OnGroupSelected["hist"] = function(container,specials)
1178 local st_widget = GUI:Create("lib-st") 1194 local st_widget = GUI:Create("lib-st")
1195 -- don't need _d:GetUserData("histST") here, as it's already a local
1179 histST:OuroLoot_Refresh() 1196 histST:OuroLoot_Refresh()
1180 st_widget:WrapST(histST) 1197 st_widget:WrapST(histST)
1181 st_widget.head_offset = 15 1198 st_widget.head_offset = 15
1182 st_widget.tail_offset = 0 1199 st_widget.tail_offset = 0
1183 container:SetLayout("Fill") 1200 container:SetLayout("Fill")
1743 if self.display then 1760 if self.display then
1744 -- try to get everything to update, rebuild, refresh... ugh, no 1761 -- try to get everything to update, rebuild, refresh... ugh, no
1745 self.display:Hide() 1762 self.display:Hide()
1746 end 1763 end
1747 1764
1765 -- This probably causes taint... hm.
1766 local prev_fade_time = UIDROPDOWNMENU_SHOW_TIME
1767 UIDROPDOWNMENU_SHOW_TIME = 4
1768
1748 local display = GUI:Create("Frame") 1769 local display = GUI:Create("Frame")
1749 if _d then 1770 if _d then
1750 display:SetUserData("eoiST",_d) -- warning! warning! kludge detected! 1771 display:SetUserData("eoiST",_d) -- warning! warning! kludge detected!
1751 end 1772 end
1752 _d = display 1773 _d = display
1764 display.sizer_s:SetScript("OnMouseUp",nil) 1785 display.sizer_s:SetScript("OnMouseUp",nil)
1765 display.sizer_e:SetScript("OnMouseDown",nil) 1786 display.sizer_e:SetScript("OnMouseDown",nil)
1766 display.sizer_e:SetScript("OnMouseUp",nil) 1787 display.sizer_e:SetScript("OnMouseUp",nil)
1767 ]] 1788 ]]
1768 display:SetCallback("OnClose", function(_display) 1789 display:SetCallback("OnClose", function(_display)
1790 UIDROPDOWNMENU_SHOW_TIME = prev_fade_time
1769 _d = _display:GetUserData("eoiST") 1791 _d = _display:GetUserData("eoiST")
1770 self.display = nil 1792 self.display = nil
1771 GUI:Release(_display) 1793 GUI:Release(_display)
1772 flib.clear() 1794 flib.clear()
1773 collectgarbage() 1795 collectgarbage()
2216 StaticPopupDialogs["OUROL_SAVE_SAVEAS"].OnAccept (dialog, dialog.data) 2238 StaticPopupDialogs["OUROL_SAVE_SAVEAS"].OnAccept (dialog, dialog.data)
2217 dialog:Hide() 2239 dialog:Hide()
2218 end,]] 2240 end,]]
2219 } 2241 }
2220 2242
2243
2244 -- Workaround this bug: http://us.battle.net/wow/en/forum/topic/3278901991
2245 if true then
2246 -- Verbatim copy of UIDropDownMenuTemplates.xml:155 or so, except as
2247 -- tagged with CHANGE.
2248 local function onenter (self, motion)
2249 if ( self.hasArrow ) then
2250 local level = self:GetParent():GetID() + 1;
2251 local listFrame = _G["DropDownList"..level];
2252 if ( not listFrame or not listFrame:IsShown() or select(2, listFrame:GetPoint()) ~= self ) then
2253 ToggleDropDownMenu(self:GetParent():GetID() + 1, self.value, nil, nil, nil, nil, self.menuList, self);
2254 end
2255 else
2256 CloseDropDownMenus(self:GetParent():GetID() + 1);
2257 end
2258 _G[self:GetName().."Highlight"]:Show();
2259 UIDropDownMenu_StopCounting(self:GetParent());
2260 if ( self.tooltipTitle ) then
2261 if ( self.tooltipOnButton ) then
2262 GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
2263 GameTooltip:AddLine(self.tooltipTitle, 1.0, 1.0, 1.0);
2264 GameTooltip:AddLine(self.tooltipText, nil,nil,nil,1); -- CHANGE added nil->1 arguments
2265 GameTooltip:Show();
2266 else
2267 GameTooltip_AddNewbieTip(self, self.tooltipTitle, 1.0, 1.0, 1.0, self.tooltipText, 1);
2268 end
2269 end
2270 end
2271 -- end verbatime copy
2272
2273 for i = 1, UIDROPDOWNMENU_MAXLEVELS do
2274 local list = _G["DropDownList"..i]
2275 if list then
2276 for j = 1, UIDROPDOWNMENU_MAXBUTTONS do
2277 local button = _G["DropDownList"..i.."Button"..j]
2278 if button then
2279 --print("button fixup",i,j)
2280 button:SetScript("OnEnter",onenter)
2281 end
2282 end
2283 end
2284 end
2285 end
2286
2221 -- vim:noet 2287 -- vim:noet