Mercurial > wow > ouroloot
comparison gui.lua @ 129:2731702567c4
- Detect loot received in LFR when player isn't eligible (for the strange
people out there who are tracking in LFR).
- Followup for r116, make sure all entries in display table are properly
updated. Add a force-refresh button to the Help tab for the worst case.
| author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
|---|---|
| date | Mon, 27 Aug 2012 02:53:42 -0400 |
| parents | dc39ce56a62d |
| children | 08d3d2b7c31d |
comparison
equal
deleted
inserted
replaced
| 128:dc39ce56a62d | 129:2731702567c4 |
|---|---|
| 63 local error = addon.error | 63 local error = addon.error |
| 64 local assert = addon.assert | 64 local assert = addon.assert |
| 65 | 65 |
| 66 local pairs, ipairs, tinsert, tremove, tostring, tonumber = | 66 local pairs, ipairs, tinsert, tremove, tostring, tonumber = |
| 67 pairs, ipairs, table.insert, table.remove, tostring, tonumber | 67 pairs, ipairs, table.insert, table.remove, tostring, tonumber |
| 68 local math_min, math_huge = math.min, math.huge | |
| 68 | 69 |
| 69 local pprint, tabledump = addon.pprint, flib.tabledump | 70 local pprint, tabledump = addon.pprint, flib.tabledump |
| 70 local GetItemInfo, ITEM_QUALITY_COLORS = GetItemInfo, ITEM_QUALITY_COLORS | 71 local GetItemInfo, ITEM_QUALITY_COLORS = GetItemInfo, ITEM_QUALITY_COLORS |
| 71 local GetNumRaidMembers = GetNumGroupMembers or GetNumRaidMembers | 72 local GetNumRaidMembers = GetNumGroupMembers or GetNumRaidMembers |
| 72 local IsInRaid = IsInRaid or (function() return GetNumRaidMembers() > 0 end) | 73 local IsInRaid = IsInRaid or (function() return GetNumRaidMembers() > 0 end) |
| 136 local wrappers = { | 137 local wrappers = { |
| 137 -- WTB Lua 5.2 instead of this | 138 -- WTB Lua 5.2 instead of this |
| 138 ["LEN"] = function() | 139 ["LEN"] = function() |
| 139 return #g_loot | 140 return #g_loot |
| 140 end, | 141 end, |
| 141 -- returns the display's entry and the core entry | 142 -- returns the core entry and the display's entry |
| 142 ["remove"] = function (dt, i) | 143 ["remove"] = function (dt, i) |
| 143 local reale = tremove (g_loot, i) | 144 return tremove (g_loot, i), tremove (dt, i) |
| 144 return tremove (dt, i), reale | |
| 145 end, | 145 end, |
| 146 -- counterpart | 146 -- counterpart; display entry is optional |
| 147 --[[ | 147 ["insert"] = function (dt, i, reale, displaye) |
| 148 ["insert"] = function (dt, i, displaye, reale) | |
| 149 tinsert (g_loot, i, reale) | 148 tinsert (g_loot, i, reale) |
| 150 tinsert (dt, i, displaye) | 149 if displaye then |
| 151 end,]] | 150 tinsert (dt, i, displaye) |
| 151 else | |
| 152 tinsert (dt, i, 42) -- grow it | |
| 153 dt[i] = nil -- force the index metamethod to trigger | |
| 154 end | |
| 155 end, | |
| 152 } | 156 } |
| 153 local function wrap_e (t,index) | 157 local function wrap_e (t,index) |
| 154 local real = g_loot[index] | 158 local real = g_loot[index] |
| 155 if not real then return nil end | 159 if not real then return nil end |
| 156 | 160 |
| 369 The g_loot table is populated only with "behavior-relevant" data (names, | 373 The g_loot table is populated only with "behavior-relevant" data (names, |
| 370 links, etc). This function runs through it and fills out the "display- | 374 links, etc). This function runs through it and fills out the "display- |
| 371 relevant" bits (icons, user-friendly labels, etc) in the g_dloot table, | 375 relevant" bits (icons, user-friendly labels, etc) in the g_dloot table, |
| 372 which inherits (so to speak) the corresponding row entries. | 376 which inherits (so to speak) the corresponding row entries. |
| 373 | 377 |
| 374 Everything from the loot_clean index to the end of the table is filled out; | 378 This is called *often*, so we try to minimize waste by keeping track of the |
| 375 loot_clean is updated. Override this starting point with the function arg. | 379 last known index known to have updated info. Everything from the loot_clean |
| 380 index to the end of the table is filled out; loot_clean is updated. Override | |
| 381 this starting point with the function argument. | |
| 376 ]] | 382 ]] |
| 377 function addon:_fill_out_eoi_data (opt_starting_index) | 383 function addon:_fill_out_eoi_data (opt_starting_index) |
| 378 if #g_loot < 1 then | 384 if #g_loot < 1 then |
| 379 --pprint('_f_o_e_d', "#g_loot<1") | 385 --pprint('_f_o_e_d', "#g_loot<1") |
| 380 self.loot_clean = nil | 386 self.loot_clean = nil |
| 383 | 389 |
| 384 local display_bcast_from = self.db.profile.display_bcast_from | 390 local display_bcast_from = self.db.profile.display_bcast_from |
| 385 local colcount = #eoi_st_cols | 391 local colcount = #eoi_st_cols |
| 386 | 392 |
| 387 -- 'while true' so that we can use (inner) break as (outer) continue | 393 -- 'while true' so that we can use (inner) break as (outer) continue |
| 388 for i = (opt_starting_index or self.loot_clean or 1), #g_loot do while true do | 394 local start = opt_starting_index or |
| 395 math_min (#g_dloot, self.loot_clean or math_huge, #g_loot) | |
| 396 for i = start, #g_loot do while true do | |
| 389 local e = g_dloot[i] | 397 local e = g_dloot[i] |
| 390 if e == nil then | 398 if e == nil then |
| 391 self.loot_clean = nil | 399 self.loot_clean = nil |
| 392 pprint('_f_o_e_d', "index",i,"somehow still in loop past",#g_loot,"bailing") | 400 pprint('_f_o_e_d', "index",i,"somehow still in loop past",#g_loot,"bailing") |
| 393 -- hmm. used to bail here. does restarting instead cause problems? | 401 -- hmm. used to bail here. does restarting instead cause problems? |
| 830 self.register_tab_control_AT_END = nil | 838 self.register_tab_control_AT_END = nil |
| 831 self.FINISH_SPECIAL_TABS = nil | 839 self.FINISH_SPECIAL_TABS = nil |
| 832 end | 840 end |
| 833 end | 841 end |
| 834 | 842 |
| 835 -- Done at startup, and whenever we've changed the population of tabs. | 843 -- Done at startup, and whenever we've changed the population of tabs. Can |
| 836 function addon:gui_init (loot_pointer, uniques_pointer) | 844 -- be triggered by player. In the first case only, the arguments are passed. |
| 837 g_loot = assert(loot_pointer, "something went wrong at startup") | 845 function addon:gui_init (at_init_p, loot_pointer, uniques_pointer) |
| 838 g_uniques = assert(uniques_pointer, "something went wrong at startup") | 846 if at_init_p then |
| 847 g_loot = assert(loot_pointer, "something went wrong at startup") | |
| 848 g_uniques = assert(uniques_pointer, "something went wrong at startup") | |
| 849 end | |
| 839 g_dloot = do_g_loot_wrap(g_loot) | 850 g_dloot = do_g_loot_wrap(g_loot) |
| 851 gui.g_dloot = g_dloot -- primarily for clean deletion | |
| 852 if gui.eoiST then -- re-init | |
| 853 self:_fill_out_eoi_data(1) | |
| 854 gui.eoiST:SetData(g_dloot) | |
| 855 end | |
| 840 g_generated = nil | 856 g_generated = nil |
| 841 tabgroup_tabs = {} | 857 tabgroup_tabs = {} |
| 842 window_title = "Ouro Loot " .. self.version | 858 window_title = "Ouro Loot " .. self.version |
| 843 -- TabGroup stretches out the tabs to fill the row but only if >75% of the | 859 -- TabGroup stretches out the tabs to fill the row but only if >75% of the |
| 844 -- row is already full. It turns out that not doing this looks like ass. | 860 -- row is already full. It turns out that not doing this looks like ass. |
| 922 dialog.editBox:SetScript("OnTextChanged",StaticPopup_EditBoxOnTextChanged) | 938 dialog.editBox:SetScript("OnTextChanged",StaticPopup_EditBoxOnTextChanged) |
| 923 dialog.data = {rowindex=rowi, display=_d, kind=text} | 939 dialog.data = {rowindex=rowi, display=_d, kind=text} |
| 924 end, | 940 end, |
| 925 | 941 |
| 926 df_DELETE = function(rowi) | 942 df_DELETE = function(rowi) |
| 927 local dgone, gone = g_dloot:remove(rowi) | 943 local gone, dgone = g_dloot:remove(rowi) |
| 928 addon:Fire ('DelEOIEntry', gone) | 944 addon:Fire ('DelEOIEntry', gone) |
| 929 addon:Print("Removed %s.", | 945 addon:Print("Removed %s.", |
| 930 gone.itemlink or gone.bossname or gone.startday.text) | 946 gone.itemlink or gone.bossname or gone.startday.text) |
| 931 if gone.kind == 'loot' then | 947 if gone.kind == 'loot' then |
| 932 addon:Fire ('DelLootEntry', gone) | 948 addon:Fire ('DelLootEntry', gone) |
| 1308 return | 1324 return |
| 1309 end | 1325 end |
| 1310 | 1326 |
| 1311 local e = data[realrow] | 1327 local e = data[realrow] |
| 1312 local cell = e.cols[column] | 1328 local cell = e.cols[column] |
| 1329 if not cell then | |
| 1330 pprint('default_cellupdate', "row", realrow, "had no cell in col", | |
| 1331 column, "retrying from first row") | |
| 1332 addon:_fill_out_eoi_data(1) | |
| 1333 cell = e.cols[column] | |
| 1334 if not cell then | |
| 1335 pprint('default_cellupdate', "FAILED, bailing") | |
| 1336 return | |
| 1337 end | |
| 1338 end | |
| 1313 | 1339 |
| 1314 cellFrame.text:SetText(cell.value) | 1340 cellFrame.text:SetText(cell.value) |
| 1315 -- subset of what the default ST's docellupdate looks for | 1341 -- subset of what the default ST's docellupdate looks for |
| 1316 local color = cols[column].color and cols[column].color(data,cols,realrow,column,stable) | 1342 local color = cols[column].color and cols[column].color(data,cols,realrow,column,stable) |
| 1317 if color then | 1343 if color then |
| 2099 -- This probably causes taint... hm. | 2125 -- This probably causes taint... hm. |
| 2100 local prev_fade_time = UIDROPDOWNMENU_SHOW_TIME | 2126 local prev_fade_time = UIDROPDOWNMENU_SHOW_TIME |
| 2101 UIDROPDOWNMENU_SHOW_TIME = 4 | 2127 UIDROPDOWNMENU_SHOW_TIME = 4 |
| 2102 | 2128 |
| 2103 if dirty_tabs then | 2129 if dirty_tabs then |
| 2104 -- pointers known to be good by now, pass them back in | 2130 self.dprint('flow', "dirty flag set in BuildMainDisplay, recreating!") |
| 2105 self:gui_init (g_loot, g_uniques) | 2131 self:gui_init() |
| 2106 self:zero_printed_fenceposts() | 2132 self:zero_printed_fenceposts() |
| 2107 end | 2133 end |
| 2108 gui.opts = self.db.profile | 2134 gui.opts = self.db.profile |
| 2109 | 2135 |
| 2110 local display = AceGUI:Create("Frame") | 2136 local display = AceGUI:Create("Frame") |
| 2571 duration = 0, | 2597 duration = 0, |
| 2572 maxsize = data.max_raid_size, | 2598 maxsize = data.max_raid_size, |
| 2573 raidersnap = data.yes_snap or {}, | 2599 raidersnap = data.yes_snap or {}, |
| 2574 } | 2600 } |
| 2575 local entry = tremove(g_loot,boss_index) | 2601 local entry = tremove(g_loot,boss_index) |
| 2576 tinsert(g_loot,data.rowindex,entry) | 2602 g_dloot:insert (data.rowindex, entry) |
| 2577 addon:_mark_boss_kill(data.rowindex) | 2603 addon:_mark_boss_kill(data.rowindex) |
| 2578 gui.eoiST:OuroLoot_Refresh(data.rowindex) | 2604 gui.eoiST:OuroLoot_Refresh(data.rowindex) |
| 2579 local jumpprefix = addon.chatprefix ("GoToLootLine", data.rowindex) | 2605 local jumpprefix = addon.chatprefix ("GoToLootLine", data.rowindex) |
| 2580 dialog.data = nil -- free up memory | 2606 dialog.data = nil -- free up memory |
| 2581 addon:PCFPrint (_G.DEFAULT_CHAT_FRAME, jumpprefix, | 2607 addon:PCFPrint (_G.DEFAULT_CHAT_FRAME, jumpprefix, |
| 2625 local function eoi_st_insert_OnAccept_loot (dialog, data) | 2651 local function eoi_st_insert_OnAccept_loot (dialog, data) |
| 2626 if data.all_done then | 2652 if data.all_done then |
| 2627 data.display:Hide() | 2653 data.display:Hide() |
| 2628 local loot_index = assert(addon:CHAT_MSG_LOOT ("manual", data.recipient, data.name, data.notes)) | 2654 local loot_index = assert(addon:CHAT_MSG_LOOT ("manual", data.recipient, data.name, data.notes)) |
| 2629 local entry = tremove(g_loot,loot_index) | 2655 local entry = tremove(g_loot,loot_index) |
| 2630 tinsert(g_loot,data.rowindex,entry) | 2656 g_dloot:insert (data.rowindex, entry) |
| 2631 addon:_fill_out_eoi_data(data.rowindex) | 2657 addon:_fill_out_eoi_data(data.rowindex) |
| 2632 addon:BuildMainDisplay() | 2658 addon:BuildMainDisplay() |
| 2633 local clicky = _new_rebroadcast_hyperlink (entry.unique) | 2659 local clicky = _new_rebroadcast_hyperlink (entry.unique) |
| 2634 local jumpprefix = addon.chatprefix ("GoToLootLine", data.rowindex) | 2660 local jumpprefix = addon.chatprefix ("GoToLootLine", data.rowindex) |
| 2635 dialog.data = nil | 2661 dialog.data = nil |
