Mercurial > wow > ouroloot
comparison gui.lua @ 116:fc2ff128835a
- Reset the 'clean' markers on all default-function option toggles.
- Fix a long-standing FIXME: Move all lib-scrollingtable and other
"display-only" data out of g_loot entries and into their own subclass-
style table; feed that to ST's SetData instead. No more 'cols'.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Thu, 16 Aug 2012 17:11:57 -0400 |
parents | 67bf97136273 |
children | ec5174529e0f |
comparison
equal
deleted
inserted
replaced
115:289c7667adab | 116:fc2ff128835a |
---|---|
12 | 12 |
13 ------ Constants | 13 ------ Constants |
14 local eoi_st_rowheight = 20 | 14 local eoi_st_rowheight = 20 |
15 local eoi_st_displayed_rows = math.floor(416/eoi_st_rowheight) | 15 local eoi_st_displayed_rows = math.floor(416/eoi_st_rowheight) |
16 local eoi_st_textured_item_format = "|T%s:"..(eoi_st_rowheight-2).."|t %s[%s]|r%s" | 16 local eoi_st_textured_item_format = "|T%s:"..(eoi_st_rowheight-2).."|t %s[%s]|r%s" |
17 local eoi_st_cols -- defined below | |
17 -- This can get indexed by kind/reason/etc, and will default to lib-st's | 18 -- This can get indexed by kind/reason/etc, and will default to lib-st's |
18 -- default "blank" background at runtime. | 19 -- default "blank" background at runtime. |
19 local eoi_st_otherrow_bgcolortable = { | 20 local eoi_st_otherrow_bgcolortable = { |
20 wipe = { ["r"] = 0.3, ["g"] = 0.3, ["b"] = 0.3}, | 21 wipe = { ["r"] = 0.3, ["g"] = 0.3, ["b"] = 0.3}, |
21 kill = { ["r"] = 0.2, ["g"] = 0.2, ["b"] = 0.2}, | 22 kill = { ["r"] = 0.2, ["g"] = 0.2, ["b"] = 0.2}, |
25 local eoi_st_otherrow_bgcolortable_default | 26 local eoi_st_otherrow_bgcolortable_default |
26 local eoi_st_lootrow_col3_colortable = addon.disposition_colors | 27 local eoi_st_lootrow_col3_colortable = addon.disposition_colors |
27 local function eoi_st_lootrow_col3_colortable_func (data, _, realrow) | 28 local function eoi_st_lootrow_col3_colortable_func (data, _, realrow) |
28 return eoi_st_lootrow_col3_colortable[data[realrow].disposition] | 29 return eoi_st_lootrow_col3_colortable[data[realrow].disposition] |
29 end | 30 end |
30 local time_column1_used_mt = { __index = { | |
31 [2] = {value=""}, | |
32 [3] = {value=""}, | |
33 } } | |
34 | 31 |
35 | 32 |
36 ------ Globals | 33 ------ Globals |
37 local AceGUI = LibStub("AceGUI-3.0") | 34 local AceGUI = LibStub("AceGUI-3.0") |
38 local flib = LibStub("LibFarmbuyer") | 35 local flib = LibStub("LibFarmbuyer") |
55 if addon.author_debug then | 52 if addon.author_debug then |
56 _G.OLgui = gui | 53 _G.OLgui = gui |
57 end | 54 end |
58 | 55 |
59 local g_loot = nil | 56 local g_loot = nil |
57 local g_dloot = nil -- GUI-related "child" of the main table | |
60 local g_uniques = nil | 58 local g_uniques = nil |
61 local g_generated = nil | 59 local g_generated = nil |
62 local window_title = "Ouro Loot" | 60 local window_title = "Ouro Loot" |
63 local dirty_tabs = nil | 61 local dirty_tabs = nil |
64 | 62 |
127 end | 125 end |
128 end | 126 end |
129 | 127 |
130 -- To fix Blizzard's bug caused by the new "self:SetFrameLevel(2);" | 128 -- To fix Blizzard's bug caused by the new "self:SetFrameLevel(2);" |
131 hooksecurefunc("UIDropDownMenu_CreateFrames", fix_menu_frame_levels) | 129 hooksecurefunc("UIDropDownMenu_CreateFrames", fix_menu_frame_levels) |
130 end | |
131 | |
132 | |
133 local do_g_loot_wrap | |
134 do | |
135 local FOREIGN_SERVER_LABEL = FOREIGN_SERVER_LABEL | |
136 local wrappers = { | |
137 -- WTB Lua 5.2 instead of this | |
138 ["LEN"] = function() | |
139 return #g_loot | |
140 end, | |
141 -- returns the display's entry and the core entry | |
142 ["remove"] = function (dt, i) | |
143 local reale = tremove (g_loot, i) | |
144 return tremove (dt, i), reale | |
145 end, | |
146 -- counterpart | |
147 --[[ | |
148 ["insert"] = function (dt, i, displaye, reale) | |
149 tinsert (g_loot, i, reale) | |
150 tinsert (dt, i, displaye) | |
151 end,]] | |
152 } | |
153 local function wrap_e (t,index) | |
154 local real = g_loot[index] | |
155 if not real then return nil end | |
156 | |
157 local e = { | |
158 __index = real, | |
159 __newindex = real, | |
160 cols = {}, | |
161 } | |
162 if real.kind == 'loot' then | |
163 e.dperson = real.person_realm and | |
164 (real.person .. FOREIGN_SERVER_LABEL) or real.person | |
165 end | |
166 setmetatable(e,e) | |
167 rawset(t,index,e) | |
168 return e | |
169 end | |
170 function do_g_loot_wrap (g) | |
171 local dl = {} | |
172 for k,v in pairs(wrappers) do | |
173 dl[k] = v | |
174 end | |
175 for i,e in ipairs(g) do | |
176 wrap_e (dl, i) | |
177 end | |
178 return setmetatable(dl, { | |
179 __index = wrap_e, | |
180 }) | |
181 end | |
132 end | 182 end |
133 | 183 |
134 | 184 |
135 ------ Behind the scenes routines | 185 ------ Behind the scenes routines |
136 -- Text generation | 186 -- Text generation |
311 end | 361 end |
312 | 362 |
313 --[[ | 363 --[[ |
314 The g_loot table is populated only with "behavior-relevant" data (names, | 364 The g_loot table is populated only with "behavior-relevant" data (names, |
315 links, etc). This function runs through it and fills out the "display- | 365 links, etc). This function runs through it and fills out the "display- |
316 relevant" bits (icons, user-friendly labels, etc). Everything from the | 366 relevant" bits (icons, user-friendly labels, etc) in the g_dloot table, |
317 loot_clean index to the end of the table is filled out, loot_clean is | 367 which inherits (so to speak) the corresponding row entries. |
318 updated. Override the starting point with the argument. | 368 |
319 | 369 Everything from the loot_clean index to the end of the table is filled out; |
320 XXX blizzard's scrolling update and lib-st keep finding some way of displaying | 370 loot_clean is updated. Override this starting point with the function arg. |
321 the grid without ever calling the hooked refresh, thereby skipping this | |
322 function and erroring on missing columnar data. fuckit. from now on | |
323 this function gets called everywhere, all the time, and loops over the | |
324 entire goddamn table each time. If we can't find blizz's scrollframe bugs, | |
325 we'll just work around them. Sorry for your smoking CPU. | |
326 | |
327 FIXME just move this functionality to a per-entry function and call it once | |
328 in _addlootentry. --actually no, then the columnar data won't be updated once | |
329 the backend data is changed on the fly. | |
330 ]] | 371 ]] |
331 do | 372 function addon:_fill_out_eoi_data (opt_starting_index) |
332 function addon:_fill_out_eoi_data (opt_starting_index) | 373 if #g_loot < 1 then |
333 if #g_loot < 1 then | 374 --pprint('_f_o_e_d', "#g_loot<1") |
334 --pprint('_f_o_e_d', "#g_loot<1") | 375 self.loot_clean = nil |
376 opt_starting_index = nil | |
377 end | |
378 | |
379 local display_bcast_from = self.db.profile.display_bcast_from | |
380 local colcount = #eoi_st_cols | |
381 | |
382 -- 'while true' so that we can use (inner) break as (outer) continue | |
383 for i = (opt_starting_index or self.loot_clean or 1), #g_loot do while true do | |
384 local e = g_dloot[i] | |
385 if e == nil then | |
335 self.loot_clean = nil | 386 self.loot_clean = nil |
336 opt_starting_index = nil | 387 pprint('_f_o_e_d', "index",i,"somehow still in loop past",#g_loot,"bailing") |
337 end | 388 -- hmm. used to bail here. does restarting instead cause problems? |
338 for i = (opt_starting_index or self.loot_clean or 1), #g_loot do | 389 return self:_fill_out_eoi_data(1) |
339 local e = g_loot[i] | 390 end |
340 if e == nil then | 391 |
341 self.loot_clean = nil | 392 assert(type(rawget(e,'cols'))=='table') |
342 pprint('_f_o_e_d', "index",i,"somehow still in loop past",#g_loot,"bailing") | 393 |
343 -- hmm. used to bail here. does restarting cause problems? | 394 while #e.cols < colcount do |
344 return self:_fill_out_eoi_data(1) | 395 e.cols[#e.cols+1] = {} |
345 end | 396 end |
346 | 397 |
347 local display_bcast_from = self.db.profile.display_bcast_from | 398 if e.kind == 'loot' then |
348 -- XXX FIXME a major weakness here is that we're constantly replacing | 399 local textured = eoi_st_textured_item_format:format (e.itexture, |
349 -- what's already been created. Lots of garbage. Trying to detect what | 400 ITEM_QUALITY_COLORS[e.quality].hex, e.itemname, e.count or "") |
350 -- actually needs to be replaced is even worse. We'll live with | 401 e.cols[1].value = textured |
351 -- garbage for now. | 402 e.cols[2].value = e.dperson |
352 if e.kind == 'loot' then | 403 -- This is horrible. Must do better. |
353 local textured = eoi_st_textured_item_format:format (e.itexture, ITEM_QUALITY_COLORS[e.quality].hex, e.itemname, e.count or "") | 404 if e.extratext then |
354 local pdisplay = e.person_realm | 405 for disp,text in self:_iter_dispositions('from_notes_text') do |
355 and (e.person .. FOREIGN_SERVER_LABEL) or e.person | 406 if text == e.extratext then |
356 e.cols = { | 407 e.disposition = disp |
357 {value = textured}, | 408 break |
358 {value = pdisplay}, | |
359 {} | |
360 } | |
361 -- This is horrible. Must do better. | |
362 if e.extratext then | |
363 for disp,text in self:_iter_dispositions('from_notes_text') do | |
364 if text == e.extratext then | |
365 e.disposition = disp | |
366 break | |
367 end | |
368 end | 409 end |
369 end | 410 end |
370 local ex = eoi_st_lootrow_col3_colortable[e.disposition].text | 411 end |
371 if e.bcast_from and display_bcast_from and e.extratext then | 412 local ex = eoi_st_lootrow_col3_colortable[e.disposition].text |
372 ex = e.extratext .. " (from " .. e.bcast_from .. ")" | 413 if e.bcast_from and display_bcast_from and e.extratext then |
373 elseif e.bcast_from and display_bcast_from then | 414 ex = e.extratext .. " (from " .. e.bcast_from .. ")" |
374 ex = ex .. (e.disposition and " " or "") | 415 elseif e.bcast_from and display_bcast_from then |
375 .. "(from " .. e.bcast_from .. ")" | 416 ex = ex .. (e.disposition and " " or "") |
376 elseif e.extratext then | 417 .. "(from " .. e.bcast_from .. ")" |
377 ex = e.extratext | 418 elseif e.extratext then |
419 ex = e.extratext | |
420 end | |
421 e.cols[3].value = ex | |
422 | |
423 elseif e.kind == 'boss' then | |
424 local v | |
425 e.duration = e.duration or 0 -- can occasionally miss getting set | |
426 if e.reason == 'kill' then | |
427 if e.attempts == 1 then | |
428 v = "one-shot" | |
429 else | |
430 v = ("kill on %d%s attempt"):format(e.attempts or 0, | |
431 e.attempts==2 and "nd" or e.attempts==3 and "rd" or "th") | |
378 end | 432 end |
379 e.cols[3].value = ex | 433 v = ("%s (%d:%.2d)"):format(v, math.floor(e.duration/60), math.floor(e.duration%60)) |
380 | 434 elseif e.reason == 'wipe' then |
381 elseif e.kind == 'boss' then | 435 v = ("wipe (%d:%.2d)"):format(math.floor(e.duration/60), math.floor(e.duration%60)) |
382 local v | |
383 e.duration = e.duration or 0 -- can occasionally miss getting set | |
384 if e.reason == 'kill' then | |
385 if e.attempts == 1 then | |
386 v = "one-shot" | |
387 else | |
388 v = ("kill on %d%s attempt"):format(e.attempts or 0, | |
389 e.attempts==2 and "nd" or e.attempts==3 and "rd" or "th") | |
390 end | |
391 v = ("%s (%d:%.2d)"):format(v, math.floor(e.duration/60), math.floor(e.duration%60)) | |
392 elseif e.reason == 'wipe' then | |
393 v = ("wipe (%d:%.2d)"):format(math.floor(e.duration/60), math.floor(e.duration%60)) | |
394 end | |
395 e.cols = { | |
396 {value = e.bossname}, | |
397 {value = e.instance}, | |
398 {value = v or ""}, | |
399 } | |
400 | |
401 elseif e.kind == 'time' then | |
402 e.cols = setmetatable({ | |
403 {value=e.startday.text}, | |
404 }, time_column1_used_mt) | |
405 --[[e.cols = { | |
406 {value=e.startday.text}, | |
407 {value=""}, | |
408 {value=""}, | |
409 }]] | |
410 | |
411 end | 436 end |
412 end | 437 e.cols[1].value = e.bossname |
413 self.loot_clean = #g_loot | 438 e.cols[2].value = e.instance |
414 end | 439 e.cols[3].value = v or "" |
440 | |
441 elseif e.kind == 'time' then | |
442 e.cols[1].value = e.startday.text | |
443 e.cols[2].value = "" | |
444 e.cols[3].value = "" | |
445 | |
446 end | |
447 break | |
448 end end | |
449 self.loot_clean = #g_loot | |
415 end | 450 end |
416 | 451 |
417 do | 452 do |
418 function addon:_fill_out_hist_data (opt_starting_index) | 453 function addon:_fill_out_hist_data (opt_starting_index) |
419 local new, del = flib.new, flib.del | 454 local new, del = flib.new, flib.del |
801 | 836 |
802 -- Done at startup, and whenever we've changed the population of tabs. | 837 -- Done at startup, and whenever we've changed the population of tabs. |
803 function addon:gui_init (loot_pointer, uniques_pointer) | 838 function addon:gui_init (loot_pointer, uniques_pointer) |
804 g_loot = assert(loot_pointer, "something went wrong at startup") | 839 g_loot = assert(loot_pointer, "something went wrong at startup") |
805 g_uniques = assert(uniques_pointer, "something went wrong at startup") | 840 g_uniques = assert(uniques_pointer, "something went wrong at startup") |
841 g_dloot = do_g_loot_wrap(g_loot) | |
806 g_generated = nil | 842 g_generated = nil |
807 tabgroup_tabs = {} | 843 tabgroup_tabs = {} |
808 window_title = "Ouro Loot " .. self.version | 844 window_title = "Ouro Loot " .. self.version |
809 -- TabGroup stretches out the tabs to fill the row but only if >75% of the | 845 -- TabGroup stretches out the tabs to fill the row but only if >75% of the |
810 -- row is already full. It turns out that not doing this looks like ass. | 846 -- row is already full. It turns out that not doing this looks like ass. |
821 if not tabs_OnGroupSelected[name] then | 857 if not tabs_OnGroupSelected[name] then |
822 tabs_OnGroupSelected[name] = tabs_generated_text_OGS | 858 tabs_OnGroupSelected[name] = tabs_generated_text_OGS |
823 end | 859 end |
824 end | 860 end |
825 dirty_tabs = nil | 861 dirty_tabs = nil |
862 return g_dloot | |
826 end | 863 end |
827 | 864 |
828 --[[ | 865 --[[ |
829 Dropdown menu handling; this has grown in ungainly directions. | 866 Dropdown menu handling; this has grown in ungainly directions. |
830 ]] | 867 ]] |
887 dialog.editBox:SetScript("OnTextChanged",StaticPopup_EditBoxOnTextChanged) | 924 dialog.editBox:SetScript("OnTextChanged",StaticPopup_EditBoxOnTextChanged) |
888 dialog.data = {rowindex=rowi, display=_d, kind=text} | 925 dialog.data = {rowindex=rowi, display=_d, kind=text} |
889 end, | 926 end, |
890 | 927 |
891 df_DELETE = function(rowi) | 928 df_DELETE = function(rowi) |
892 local gone = tremove (g_loot, rowi) | 929 local dgone, gone = g_dloot:remove(rowi) |
893 addon:Fire ('DelEOIEntry', gone) | 930 addon:Fire ('DelEOIEntry', gone) |
894 addon:Print("Removed %s.", | 931 addon:Print("Removed %s.", |
895 gone.itemlink or gone.bossname or gone.startday.text) | 932 gone.itemlink or gone.bossname or gone.startday.text) |
896 if gone.kind == 'loot' then | 933 if gone.kind == 'loot' then |
897 addon:Fire ('DelLootEntry', gone) | 934 addon:Fire ('DelLootEntry', gone) |
912 end, | 949 end, |
913 | 950 |
914 ["Delete remaining entries for this day"] = function(rowi,kind) | 951 ["Delete remaining entries for this day"] = function(rowi,kind) |
915 -- if kind is boss, also need to stop at new timestamp | 952 -- if kind is boss, also need to stop at new timestamp |
916 local fencepost = addon._find_timeboss_fencepost (kind, rowi) | 953 local fencepost = addon._find_timeboss_fencepost (kind, rowi) |
917 local count = fencepost and (fencepost-rowi) or (#g_loot-rowi+1) | 954 local count = fencepost and (fencepost-rowi) or (#g_dloot-rowi+1) |
918 repeat | 955 repeat |
919 eoi_dropdownfuncs.df_DELETE(rowi) | 956 eoi_dropdownfuncs.df_DELETE(rowi) |
920 count = count - 1 | 957 count = count - 1 |
921 until count < 1 | 958 until count < 1 |
922 end, | 959 end, |
923 | 960 |
924 ["Rebroadcast this loot entry"] = function(rowi) | 961 ["Rebroadcast this loot entry"] = function(rowi) |
925 local e = g_loot[rowi] | 962 local e = g_dloot[rowi] |
926 -- This only works because GetItemInfo accepts multiple argument formats | 963 -- This only works because GetItemInfo accepts multiple argument formats |
927 addon:vbroadcast('loot', e.person, e.unique, e.itemlink, e.count, e.cols[3].value) | 964 addon:vbroadcast('loot', e.person, e.unique, e.itemlink, e.count, e.cols[3].value) |
928 addon:Print("Rebroadcast entry", rowi, e.itemlink) | 965 addon:Print("Rebroadcast entry", rowi, e.itemlink) |
929 end, | 966 end, |
930 | 967 |
931 ["Rebroadcast this boss"] = function(rowi,kind) | 968 ["Rebroadcast this boss"] = function(rowi,kind) |
932 -- if kind is boss, also need to stop at new timestamp | 969 -- if kind is boss, also need to stop at new timestamp |
933 local fencepost = addon._find_timeboss_fencepost (kind, rowi) or #g_loot | 970 local fencepost = addon._find_timeboss_fencepost (kind, rowi) or #g_dloot |
934 -- this could be a lot of traffic, but frankly it's counterproductive | 971 -- this could be a lot of traffic, but frankly it's counterproductive |
935 -- to try to micromanage when ChatThrottleLib is already doing so | 972 -- to try to micromanage when ChatThrottleLib is already doing so |
936 repeat | 973 repeat |
937 local e = g_loot[rowi] | 974 local e = g_dloot[rowi] |
938 if e.kind == 'boss' then | 975 if e.kind == 'boss' then |
939 addon:vbroadcast('boss', e.reason, e.bossname, e.instance) | 976 addon:vbroadcast('boss', e.reason, e.bossname, e.instance) |
940 elseif e.kind == 'loot' then | 977 elseif e.kind == 'loot' then |
941 -- This only works because GetItemInfo accepts multiple argument formats | 978 -- This only works because GetItemInfo accepts multiple argument formats |
942 addon:vbroadcast('loot', e.person, e.unique, e.itemlink, e.count, e.cols[3].value) | 979 addon:vbroadcast('loot', e.person, e.unique, e.itemlink, e.count, e.cols[3].value) |
1203 | 1240 |
1204 return true -- do not do anything further | 1241 return true -- do not do anything further |
1205 end | 1242 end |
1206 | 1243 |
1207 function eoi_editcell (row_index, cell_frame) | 1244 function eoi_editcell (row_index, cell_frame) |
1208 local e = g_loot[row_index] | 1245 local e = g_dloot[row_index] |
1209 if not e then return end -- how the hell could we get this far? | 1246 if not e then return end -- how the hell could we get this far? |
1210 local celldata = e.cols[3] | 1247 local celldata = e.cols[3] |
1211 local box = AceGUI:Create("EditBox") | 1248 local box = AceGUI:Create("EditBox") |
1212 box:SetText(celldata.value) | 1249 box:SetText(celldata.value) |
1213 box:SetUserData("old show", box.editbox:GetScript("OnShow")) | 1250 box:SetUserData("old show", box.editbox:GetScript("OnShow")) |
1327 else | 1364 else |
1328 stable:SetHighLightColor (rowFrame, stable:GetDefaultHighlight()) | 1365 stable:SetHighLightColor (rowFrame, stable:GetDefaultHighlight()) |
1329 end | 1366 end |
1330 end | 1367 end |
1331 | 1368 |
1332 local eoi_st_cols = { | 1369 eoi_st_cols = { |
1333 { -- col 1 | 1370 { -- col 1 |
1334 name = "Item", | 1371 name = "Item", |
1335 width = 250, | 1372 width = 250, |
1336 }, | 1373 }, |
1337 { -- col 2 | 1374 { -- col 2 |
1379 | 1416 |
1380 -- Calling SetData breaks (trying to call Refresh) if g_loot hasn't gone | 1417 -- Calling SetData breaks (trying to call Refresh) if g_loot hasn't gone |
1381 -- through this loop. | 1418 -- through this loop. |
1382 addon:_fill_out_eoi_data(1) | 1419 addon:_fill_out_eoi_data(1) |
1383 -- safety check begin | 1420 -- safety check begin |
1384 for i,e in ipairs(g_loot) do | 1421 for i,e in ipairs(g_dloot) do |
1385 if type(e.cols) ~= 'table' then | 1422 if type(e.cols) ~= 'table' then |
1386 addon:Print("ARGH, index",i,"bad in eoi_OGS, type",type(e.cols), | 1423 addon:Print("ARGH, index",i,"bad in eoi_OGS, type",type(e.cols), |
1387 "entry kind", e.kind, "data", e.itemname or e.bossname or e.startday.text, | 1424 "entry kind", e.kind, "data", e.itemname or e.bossname or e.startday.text, |
1388 "-- please take a screenshot and send to Farmbuyer@US-Kilrogg.") | 1425 "-- please take a screenshot and send to Farmbuyer@US-Kilrogg.") |
1389 tabledump(e) | 1426 tabledump(e) |
1390 end | 1427 end |
1391 end | 1428 end |
1392 -- safety check end | 1429 -- safety check end |
1393 ST:SetData(g_loot) | 1430 ST:SetData(g_dloot) |
1394 ST:EnableSelection(true) | 1431 ST:EnableSelection(true) |
1395 ST:RegisterEvents{ | 1432 ST:RegisterEvents{ |
1396 OnEnter = eoi_st_OnEnter, | 1433 OnEnter = eoi_st_OnEnter, |
1397 OnLeave = eoi_st_OnLeave, | 1434 OnLeave = eoi_st_OnLeave, |
1398 OnClick = eoi_st_OnClick, | 1435 OnClick = eoi_st_OnClick, |
1409 return oldrefresh(self) | 1446 return oldrefresh(self) |
1410 end | 1447 end |
1411 ST.OuroLoot_Refresh = function (self, opt_index) | 1448 ST.OuroLoot_Refresh = function (self, opt_index) |
1412 addon:_fill_out_eoi_data(opt_index) | 1449 addon:_fill_out_eoi_data(opt_index) |
1413 -- safety check begin | 1450 -- safety check begin |
1414 for i,e in ipairs(g_loot) do | 1451 for i,e in ipairs(g_dloot) do |
1415 if type(e.cols) ~= 'table' then | 1452 if type(e.cols) ~= 'table' then |
1416 addon:Print("ARGH, index",i,"bad in eoi refresh, refreshed at", opt_index, "type",type(e.cols), | 1453 addon:Print("ARGH, index",i,"bad in eoi refresh, refreshed at", opt_index, "type",type(e.cols), |
1417 "entry kind", e.kind, "data", e.itemname or e.bossname or e.startday.text, | 1454 "entry kind", e.kind, "data", e.itemname or e.bossname or e.startday.text, |
1418 "-- please take a screenshot and send to Farmbuyer@US-Kilrogg.") | 1455 "-- please take a screenshot and send to Farmbuyer@US-Kilrogg.") |
1419 tabledump(e) | 1456 tabledump(e) |
1519 display from a chat link.]] | 1556 display from a chat link.]] |
1520 tabs_CLI_special["eoi"] = function (name_or_lineno) | 1557 tabs_CLI_special["eoi"] = function (name_or_lineno) |
1521 if type(name_or_lineno) == 'string' then | 1558 if type(name_or_lineno) == 'string' then |
1522 -- uh | 1559 -- uh |
1523 elseif type(name_or_lineno) == 'number' then | 1560 elseif type(name_or_lineno) == 'number' then |
1524 if name_or_lineno < 1 or name_or_lineno > #g_loot then | 1561 if name_or_lineno < 1 or name_or_lineno > #g_dloot then |
1525 return | 1562 return |
1526 end | 1563 end |
1527 local scrollhere = -9 | 1564 local scrollhere = -9 |
1528 repeat | 1565 repeat |
1529 scrollhere = scrollhere + 10 | 1566 scrollhere = scrollhere + 10 |
2483 -- dropdown. Thanks to noCancelOnReuse, each Show done here will technically | 2520 -- dropdown. Thanks to noCancelOnReuse, each Show done here will technically |
2484 -- Hide and redisplay the same dialog, passing along the same 'data' structure | 2521 -- Hide and redisplay the same dialog, passing along the same 'data' structure |
2485 -- each time. The topmost call to our OnAccept will then finish by hiding the | 2522 -- each time. The topmost call to our OnAccept will then finish by hiding the |
2486 -- (very last) dialog. | 2523 -- (very last) dialog. |
2487 -- | 2524 -- |
2488 -- This is really, really hideous to read. | 2525 -- This is really, really hideous to read. Maybe increment a 'stage' counter |
2526 -- so the code flows top-down, rather than testing for missing data and going | |
2527 -- backwards. | |
2489 local function eoi_st_insert_OnAccept_boss (dialog, data, data2) | 2528 local function eoi_st_insert_OnAccept_boss (dialog, data, data2) |
2490 if data.all_done then | 2529 if data.all_done then |
2491 -- It'll probably be the final entry in the table, but there might have | 2530 -- boss_index will probably be the final entry in the table, but there |
2492 -- been real loot happening while the user was clicking and typing. | 2531 -- might have been real loot happening while the user was typing. |
2493 local boss_index = addon._addBossEntry{ | 2532 local boss_index = addon._addBossEntry{ |
2494 kind = 'boss', | 2533 kind = 'boss', |
2495 bossname = (gui.opts.snarky_boss and addon.boss_abbrev[data.name] or data.name) or data.name, | 2534 bossname = (gui.opts.snarky_boss and addon.boss_abbrev[data.name] or data.name) or data.name, |
2496 reason = 'kill', | 2535 reason = 'kill', |
2497 instance = data.instance, | 2536 instance = data.instance, |