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()