Mercurial > wow > ouroloot
changeset 4:05caaf17b3ca
Get history window in a working state again in prep for redoing orders.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Sun, 24 Apr 2011 07:29:01 +0000 |
parents | 2753b9763882 |
children | 7adbc59de8fe |
files | Ouro_Loot.toc core.lua gui.lua |
diffstat | 3 files changed, 94 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/Ouro_Loot.toc Fri Apr 22 02:13:18 2011 +0000 +++ b/Ouro_Loot.toc Sun Apr 24 07:29:01 2011 +0000 @@ -1,7 +1,7 @@ ## Interface: 40000 ## Title: Ouro Loot ## Version: @project-version@ -## Notes: Raid loot tracking +## Notes: Raid loot tracking and text generation ## Author: Farmbuyer of Kilrogg ## SavedVariables: OuroLootSV, OuroLootSV_opts, OuroLootSV_hist ## OptionalDeps: Ace3, DBM-Core, lib-st, LibFarmbuyer
--- a/core.lua Fri Apr 22 02:13:18 2011 +0000 +++ b/core.lua Sun Apr 24 07:29:01 2011 +0000 @@ -345,9 +345,10 @@ end self.history_all = self.history_all or OuroLootSV_hist or {} - local r = GetRealmName() + local r = assert(GetRealmName()) self.history_all[r] = self:_prep_new_history_category (self.history_all[r], r) self.history = self.history_all[r] + OuroLootSV_hist = nil _init(self) self.OnInitialize = nil @@ -1167,7 +1168,9 @@ -- ["OtherRealm"] = ...... -- } do - -- Builds the map of names to array indices. + -- Builds the map of names to array indices, using passed table or + -- self.history, and stores the result into its 'byname' field. Also + -- called from the GUI code at least once. function addon:_build_history_names (opt_hist) local hist = opt_hist or self.history local m = {} @@ -1177,18 +1180,6 @@ hist.byname = m end - -- Maps a name to an array index, creating new tables if needed. Returns - function addon:get_loot_history (name) - local i - i = self.history.byname[name] - if not i then - i = #self.history + 1 - self.history[i] = { name=name } - self.history.byname[name] = i - end - return self.history[i] - end - -- Prepares and returns table to be used as self.history. function addon:_prep_new_history_category (prev_table, realmname) local t = prev_table or { @@ -1209,6 +1200,18 @@ return t end + -- Maps a name to an array index, creating new tables if needed. Returns + function addon:get_loot_history (name) + local i + i = self.history.byname[name] + if not i then + i = #self.history + 1 + self.history[i] = { name=name } + self.history.byname[name] = i + end + return self.history[i] + end + function addon:_addHistoryEntry (lootindex) local e = g_loot[lootindex] local h = self:get_loot_history(e.person)
--- a/gui.lua Fri Apr 22 02:13:18 2011 +0000 +++ b/gui.lua Sun Apr 24 07:29:01 2011 +0000 @@ -19,7 +19,7 @@ time = { ["r"] = 0x0/255, ["g"] = 0x0/255, ["b"] = 1, ["a"] = 0.3}, } eoi_st_otherrow_bgcolortable[""] = eoi_st_otherrow_bgcolortable["kill"] -eoi_st_otherrow_bgcolortable["realm"] = eoi_st_otherrow_bgcolortable["time"] +--eoi_st_otherrow_bgcolortable["realm"] = eoi_st_otherrow_bgcolortable["time"] local eoi_st_otherrow_bgcolortable_default local eoi_st_lootrow_col3_colortable = { [""] = { text = "", r = 1.0, g = 1.0, b = 1.0, a = 1.0 }, @@ -239,7 +239,6 @@ end do - local offset function addon:_fill_out_hist_data (opt_starting_index) -- Clearing history finishes this function with #hist==0 and hist_clean==0. -- The next call typically detects this (#<1) and handles it. If loot is @@ -251,18 +250,17 @@ end if not self.history.st then self.history.st = { - { kind = "realm", + --[[{ kind = "realm", cols = setmetatable({ { value = self.history.realm }, }, time_column1_used_mt) - } + }]] } - offset = #self.history.st end local st = self.history.st for i = (opt_starting_index or self.hist_clean or 1), #self.history do local h = self.history[i] - local sti = i+offset + local sti = i if not st[sti] then st[sti] = { kind = "history" } end @@ -276,11 +274,17 @@ if sth.shown ~= h[1].id then -- things have changed, redo the row with new data - local iname, ilink, iquality, _,_,_,_,_,_, itexture = GetItemInfo(h[1].id) - local textured = eoi_st_textured_item_format:format (itexture, self.quality_hexes[iquality], iname, h[1].count or "") + local itexture = GetItemIcon(h[1].id) + local iname, ilink, iquality = GetItemInfo(h[1].id) + local textured + if itexture and iname then + textured = eoi_st_textured_item_format:format (itexture, self.quality_hexes[iquality], iname, h[1].count or "") + sth.shown = h[1].id + else + textured = eoi_st_textured_item_format:format ([[ICONS\INV_Misc_QuestionMark]], self.quality_hexes[1], 'UNKNOWN', "") + end sth.cols[2].value = textured sth.cols[3].value = h[1].when - sth.shown = h[1].id end end @@ -703,7 +707,7 @@ end local function hist_st_OnClick (rowFrame, cellFrame, data, cols, row, realrow, column, stable, button, ...) - if (row == nil) or (realrow == nil) then return true end -- click column header, suppress reordering FOR NOW + if (row == nil) or (realrow == nil) then return false end -- click column header, do default resorting local h = data[realrow] local kind = h.kind @@ -844,7 +848,7 @@ -- safety check begin for i,e in ipairs(g_loot) do if type(e.cols) ~= 'table' then - addon:Print("ARGH, index",i,"bad in refresh, refreshed at", opt_index, "type",type(e.cols), + addon:Print("ARGH, index",i,"bad in eoi refresh, refreshed at", opt_index, "type",type(e.cols), "entry kind", e.kind, "data", e.itemname or e.bosskill or e.startday.text, "-- please take a screenshot and send to Farmbuyer.") tabledump(e) @@ -983,7 +987,8 @@ -- Tab 4: History -- Much of the implementation here follows a similar desgin for the first --- tab's handling of ST objects. +-- tab's handling of ST objects. We will even reuse its controlling tables +-- when feasible. do local histST local hist_st_cols = { @@ -1001,6 +1006,9 @@ name = "When", width = 250, DoCellUpdate = hist_st_col3_DoCellUpdate, + defaultsort = "asc", + sort = "asc", + sortnext = 1, }, } @@ -1060,15 +1068,54 @@ self:SortData() -- calls hooked refresh end + local function reset_current_realm() + local r = assert(GetRealmName()) + -- new .history table: + addon.history_all[r] = addon:_prep_new_history_category (nil, r) + addon.history = addon.history_all[r] + addon.hist_clean = nil + -- new .history.st table: + histST:OuroLoot_Refresh() + histST:SetData(addon.history.st) + addon:Print("You've clicked the history erase button!") + end + tabs_OnGroupSelected["hist"] = function(container,specials) local st_widget = GUI:Create("lib-st") histST:OuroLoot_Refresh() st_widget:WrapST(histST) + st_widget.head_offset = 15 + st_widget.tail_offset = 0 container:SetLayout("Fill") container:AddChild(st_widget) - local b = mkbutton("Regenerate", - [[Erases all history entries from current realm, and regenerate it from current loot information.]]) + local b + do + local realms,current = {},1 + for realmname,histtable in pairs(addon.history_all) do + tinsert(realms,realmname) + if addon.history == histtable then current = #realms end + end + b = mkbutton("Dropdown", nil, "", [[Which realm to display]]) + b:SetFullWidth(true) + b:SetLabel() -- required even when empty, see ace3 ticket #234 + b:SetList(realms) + b:SetValue(current) + b:SetCallback("OnValueChanged", function(_dd,event,choice) + print("chose realm", choice, realms[choice]) + end) + specials:AddChild(b) + end + + --[[ + b = GUI:Create("Spacer") + b:SetFullWidth(true) + b:SetHeight(10) + specials:AddChild(b) + ]] + + b = mkbutton("Regenerate", + [[Erases all history entries from the displayed realm, and regenerates it from current loot information.]]) b:SetFullWidth(true) b:SetDisabled (#addon.history == 0) b:SetCallback("OnClick", function(_b) @@ -1078,26 +1125,27 @@ end) specials:AddChild(b) - b = mkbutton('hist_clear_all', "Clear All History", - [[Erases ALL history entries from all realms.]]) + b = mkbutton('hist_clear', "Clear Realm History", + [[No confirmation! |cffff1010Erases absolutely all> history entries from the displayed realm.]]) b:SetFullWidth(true) b:SetCallback("OnClick", function (_b) - local r = GetRealmName() - -- new .history table: - addon.history_all[r] = addon:_prep_new_history_category (nil, r) - addon.history = addon.history_all[r] - addon.hist_clean = nil - -- new .history.st table: - histST:OuroLoot_Refresh() - histST:SetData(addon.history.st) - addon:Print("You've clicked the history erase button!") + reset_current_realm() return addon:redisplay() - --return tabs_OnGroupSelected_func(container,"OnGroupSelected","hist") + end) + specials:AddChild(b) + + b = mkbutton('hist_clear_all', "Clear All History", + [[No confirmation! |cffff1010Erases absolutely all> history entries from ALL realms.]]) + b:SetFullWidth(true) + b:SetCallback("OnClick", function (_b) + addon.history_all = {} + reset_current_realm() + return addon:redisplay() end) specials:AddChild(b) b = mkbutton('hist_clear_old', "Clear Older", - [[Preserves only the latest loot entry for each player, removing all others.]]) + [[Preserves only the latest loot entry for each player on the current realm, removing all earlier ones.]]) b:SetFullWidth(true) b:SetCallback("OnClick", function (_b) addon:Print("All loot prior to the most recent entries has been erased.") @@ -1630,7 +1678,7 @@ end) control:AddChild(b) - b = mkbutton("Clear", + b = mkbutton("Clear Loot", [[+Erases> all current loot information and generated text (but not saved texts).]]) b:SetFullWidth(true) b:SetCallback("OnClick", function()