Quantcast

Yanked code from ListItem_ShowTooltip() to make addon:DisplayAcquireData() so external AddOns can generate their own lists.

James D. Callahan III [06-02-10 - 08:35]
Yanked code from ListItem_ShowTooltip() to make addon:DisplayAcquireData() so external AddOns can generate their own lists.
Filename
Frame.lua
diff --git a/Frame.lua b/Frame.lua
index 51eb6dc..862ba9e 100644
--- a/Frame.lua
+++ b/Frame.lua
@@ -670,7 +670,7 @@ do
 	-------------------------------------------------------------------------------
 	-- Functions for adding individual acquire type data to the tooltip.
 	-------------------------------------------------------------------------------
-	local function Tooltip_AddTrainer(id_num, location)
+	local function Tooltip_AddTrainer(id_num, location, addline_func)
 		local trainer = private.trainer_list[id_num]

 		if location and trainer.location ~= location then
@@ -684,12 +684,12 @@ do
 			if trainer.coord_x ~= 0 and trainer.coord_y ~= 0 then
 				coord_text = "(" .. trainer.coord_x .. ", " .. trainer.coord_y .. ")"
 			end
-			ttAdd(0, -2, false, L["Trainer"], CATEGORY_COLORS["trainer"], trainer.name, name_color)
-			ttAdd(1, -2, true, trainer.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
+			addline_func(0, -2, false, L["Trainer"], CATEGORY_COLORS["trainer"], trainer.name, name_color)
+			addline_func(1, -2, true, trainer.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
 		end
 	end

-	local function Tooltip_AddVendor(recipe_id, id_num, location)
+	local function Tooltip_AddVendor(recipe_id, id_num, location, addline_func)
 		local vendor = private.vendor_list[id_num]

 		if location and vendor.location ~= location then
@@ -704,20 +704,20 @@ do
 			if vendor.coord_x ~= 0 and vendor.coord_y ~= 0 then
 				coord_text = "(" .. vendor.coord_x .. ", " .. vendor.coord_y .. ")"
 			end
-			ttAdd(0, -1, false, L["Vendor"], type_color, vendor.name, name_color)
-			ttAdd(1, -2, true, vendor.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
+			addline_func(0, -1, false, L["Vendor"], type_color, vendor.name, name_color)
+			addline_func(1, -2, true, vendor.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])

 			local quantity = vendor.item_list[recipe_id]

 			if type(quantity) == "number" then
-				ttAdd(2, -2, true, L["LIMITED_SUPPLY"], type_color, string.format("(%d)", quantity), BASIC_COLORS["white"])
+				addline_func(2, -2, true, L["LIMITED_SUPPLY"], type_color, string.format("(%d)", quantity), BASIC_COLORS["white"])
 			end
 		else
-			ttAdd(0, -1, false, vendor.faction.." "..L["Vendor"], type_color)
+			addline_func(0, -1, false, vendor.faction.." "..L["Vendor"], type_color)
 		end
 	end

-	local function Tooltip_AddMobDrop(id_num, location)
+	local function Tooltip_AddMobDrop(id_num, location, addline_func)
 		local mob = private.mob_list[id_num]

 		if location and mob.location ~= location then
@@ -728,11 +728,11 @@ do
 		if mob.coord_x ~= 0 and mob.coord_y ~= 0 then
 			coord_text = "(" .. mob.coord_x .. ", " .. mob.coord_y .. ")"
 		end
-		ttAdd(0, -1, false, L["Mob Drop"], CATEGORY_COLORS["mobdrop"], mob.name, private.reputation_colors["hostile"])
-		ttAdd(1, -2, true, mob.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
+		addline_func(0, -1, false, L["Mob Drop"], CATEGORY_COLORS["mobdrop"], mob.name, private.reputation_colors["hostile"])
+		addline_func(1, -2, true, mob.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
 	end

-	local function Tooltip_AddQuest(id_num, location)
+	local function Tooltip_AddQuest(id_num, location, addline_func)
 		local quest = private.quest_list[id_num]

 		if location and quest.location ~= location then
@@ -747,14 +747,14 @@ do
 			if quest.coord_x ~= 0 and quest.coord_y ~= 0 then
 				coord_text = "(" .. quest.coord_x .. ", " .. quest.coord_y .. ")"
 			end
-			ttAdd(0, -1, false, L["Quest"], type_color, private.quest_names[id_num], name_color)
-			ttAdd(1, -2, true, quest.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
+			addline_func(0, -1, false, L["Quest"], type_color, private.quest_names[id_num], name_color)
+			addline_func(1, -2, true, quest.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
 		else
-			ttAdd(0, -1, false, quest.faction.." "..L["Quest"], type_color)
+			addline_func(0, -1, false, quest.faction.." "..L["Quest"], type_color)
 		end
 	end

-	local function Tooltip_AddRepVendor(id_num, location, rep_id, rep_level, vendor_id)
+	local function Tooltip_AddRepVendor(id_num, location, rep_id, rep_level, vendor_id, addline_func)
 		local rep_vendor = private.vendor_list[vendor_id]

 		if location and rep_vendor.location ~= location then
@@ -783,19 +783,19 @@ do
 				rep_str = BFAC["Exalted"]
 				type_color = rep_color["exalted"]
 			end
-			ttAdd(0, -1, false, _G.REPUTATION, CATEGORY_COLORS["reputation"], private.reputation_list[id_num].name, CATEGORY_COLORS["repname"])
-			ttAdd(1, -2, false, rep_str, type_color, rep_vendor.name, name_color)
+			addline_func(0, -1, false, _G.REPUTATION, CATEGORY_COLORS["reputation"], private.reputation_list[id_num].name, CATEGORY_COLORS["repname"])
+			addline_func(1, -2, false, rep_str, type_color, rep_vendor.name, name_color)

 			local coord_text = ""

 			if rep_vendor.coord_x ~= 0 and rep_vendor.coord_y ~= 0 then
 				coord_text = "(" .. rep_vendor.coord_x .. ", " .. rep_vendor.coord_y .. ")"
 			end
-			ttAdd(2, -2, true, rep_vendor.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
+			addline_func(2, -2, true, rep_vendor.location, CATEGORY_COLORS["location"], coord_text, CATEGORY_COLORS["coords"])
 		end
 	end

-	local function Tooltip_AddWorldDrop(recipe_id, id_num, location, quality_color)
+	local function Tooltip_AddWorldDrop(recipe_id, id_num, location, quality_color, addline_func)
 		local drop_location = type(id_num) == "string" and BZ[id_num] or nil

 		if location and drop_location ~= location then
@@ -812,15 +812,64 @@ do
 		if type(id_num) == "string" then
 			local location_text = item_level and string.format("%s (%d - %d)", drop_location, item_level - 5, item_level + 5) or drop_location

-			ttAdd(0, -1, false, L["World Drop"], type_color, location_text, CATEGORY_COLORS["location"])
+			addline_func(0, -1, false, L["World Drop"], type_color, location_text, CATEGORY_COLORS["location"])
 		else
 			local location_text = item_level and string.format("%s (%d - %d)", _G.UNKNOWN, item_level - 5, item_level + 5) or _G.UNKNOWN

-			ttAdd(0, -1, false, L["World Drop"], type_color, location_text, CATEGORY_COLORS["location"])
+			addline_func(0, -1, false, L["World Drop"], type_color, location_text, CATEGORY_COLORS["location"])
 		end
 	end

 	-------------------------------------------------------------------------------
+	-- Public API function for displaying a recipe's acquire data.
+	-- * The addline_func paramater must be a function which accepts the same
+	-- * arguments as ARL's ttAdd function.
+	-------------------------------------------------------------------------------
+	function addon:DisplayAcquireData(recipe_id, acquire_id, location, quality_color, addline_func)
+		local recipe = private.recipe_list[recipe_id]
+
+		if not recipe then
+			return
+		end
+
+		for acquire_type, acquire_data in pairs(recipe.acquire_data) do
+			local can_display = (not acquire_id or acquire_type == acquire_id)
+
+			if can_display then
+				for id_num, info in pairs(acquire_data) do
+					if acquire_type == A.TRAINER then
+						Tooltip_AddTrainer(id_num, location, addline_func)
+					elseif acquire_type == A.VENDOR then
+						Tooltip_AddVendor(recipe_id, id_num, location, addline_func)
+					elseif acquire_type == A.MOB_DROP then
+						Tooltip_AddMobDrop(id_num, location, addline_func)
+					elseif acquire_type == A.QUEST then
+						Tooltip_AddQuest(id_num, location, addline_func)
+					elseif acquire_type == A.SEASONAL then
+						color_1 = CATEGORY_COLORS["seasonal"]
+						addline_func(0, -1, 0, private.acquire_names[A.SEASONAL], color_1, private.seasonal_list[id_num].name, color_1)
+					elseif acquire_type == A.REPUTATION then
+						for rep_level, level_info in pairs(info) do
+							for vendor_id in pairs(level_info) do
+								Tooltip_AddRepVendor(id_num, location, rep_id, rep_level, vendor_id, addline_func)
+							end
+						end
+					elseif acquire_type == A.WORLD_DROP then
+						Tooltip_AddWorldDrop(recipe_id, id_num, location, quality_color, addline_func)
+					elseif acquire_type == A.CUSTOM then
+						addline_func(0, -1, false, private.custom_list[id_num].name, CATEGORY_COLORS["custom"])
+						--@alpha@
+					elseif can_display then
+						-- Unhandled
+						addline_func(0, -1, 0, L["Unhandled Recipe"], BASIC_COLORS["normal"])
+						--@end-alpha@
+					end
+				end	-- for id_num
+			end	-- if can_display
+		end	-- for acquire_type
+	end
+
+	-------------------------------------------------------------------------------
 	-- Main tooltip-generating function.
 	-------------------------------------------------------------------------------
 	function ListItem_ShowTooltip(owner, list_entry)
@@ -935,41 +984,7 @@ do
 		local acquire_id = list_entry.acquire_id
 		local location = list_entry.location_id

-		for acquire_type, acquire_data in pairs(recipe.acquire_data) do
-			local can_display = (not acquire_id or acquire_type == acquire_id)
-
-			if can_display then
-				for id_num, info in pairs(acquire_data) do
-					if acquire_type == A.TRAINER then
-						Tooltip_AddTrainer(id_num, location)
-					elseif acquire_type == A.VENDOR then
-						Tooltip_AddVendor(recipe_id, id_num, location)
-					elseif acquire_type == A.MOB_DROP then
-						Tooltip_AddMobDrop(id_num, location)
-					elseif acquire_type == A.QUEST then
-						Tooltip_AddQuest(id_num, location)
-					elseif acquire_type == A.SEASONAL then
-						color_1 = CATEGORY_COLORS["seasonal"]
-						ttAdd(0, -1, 0, private.acquire_names[A.SEASONAL], color_1, private.seasonal_list[id_num].name, color_1)
-					elseif acquire_type == A.REPUTATION then
-						for rep_level, level_info in pairs(info) do
-							for vendor_id in pairs(level_info) do
-								Tooltip_AddRepVendor(id_num, location, rep_id, rep_level, vendor_id)
-							end
-						end
-					elseif acquire_type == A.WORLD_DROP then
-						Tooltip_AddWorldDrop(recipe_id, id_num, location, quality_color)
-					elseif acquire_type == A.CUSTOM then
-						ttAdd(0, -1, false, private.custom_list[id_num].name, CATEGORY_COLORS["custom"])
-						--@alpha@
-					elseif can_display then
-						-- Unhandled
-						ttAdd(0, -1, 0, L["Unhandled Recipe"], BASIC_COLORS["normal"])
-						--@end-alpha@
-					end
-				end	-- for id_num
-			end	-- if can_display
-		end	-- for acquire_type
+		addon:DisplayAcquireData(recipe_id, acquire_id, location, quality_color, ttAdd)

 		if not addon.db.profile.hide_tooltip_hint then
 			-- Give the tooltip hint a unique color.