Quantcast

Pulled parts of WeightsWatcher.displayItemStats out into separate functions

Kevin Lyles [01-23-11 - 21:28]
Pulled parts of WeightsWatcher.displayItemStats out into separate functions
Filename
WeightsWatcher.lua
diff --git a/WeightsWatcher.lua b/WeightsWatcher.lua
index d6df50a..673d628 100644
--- a/WeightsWatcher.lua
+++ b/WeightsWatcher.lua
@@ -466,6 +466,178 @@ local slotConversion = {
 	[ww_localizedSlotNames["held in off-hand"]] = {"MainHandSlot", "SecondaryHandSlot"},
 }

+local function getCompareInfo(ttname, bareLink, bareItemInfo)
+	if ttname ~= "ShoppingTooltip1" and ttname ~= "ShoppingTooltip2" and ww_vars.options.tooltip.showDifferences then
+		local compareLink, compareBareLink, compareLink2, compareBareLink2
+		local currentSlot, compareSlot, compareSlot2, currentSubslot, compareSubslot, compareSubslot2
+		currentSlot = bareItemInfo.nonStats["slot"]
+		if currentSlot and currentSlot ~= 0 then
+			currentSubslot = ww_bareItemCache[bareLink].nonStats["subslot"]
+			local compareSlots = slotConversion[currentSlot]
+			if type(compareSlots) == "string" then
+				compareLink = GetInventoryItemLink("player", WeightsWatcher.slotList[compareSlots])
+			else
+				compareLink = GetInventoryItemLink("player", WeightsWatcher.slotList[compareSlots[1]])
+				compareLink2 = GetInventoryItemLink("player", WeightsWatcher.slotList[compareSlots[2]])
+			end
+			if compareLink then
+				compareBareLink = splitItemLink(compareLink)
+				compareSlot = ww_bareItemCache[compareBareLink].nonStats["slot"]
+				compareSubslot = ww_bareItemCache[compareBareLink].nonStats["subslot"]
+			end
+			if compareLink2 then
+				compareBareLink2 = splitItemLink(compareLink2)
+				compareSlot2 = ww_bareItemCache[compareBareLink2].nonStats["slot"]
+				compareSubslot2 = ww_bareItemCache[compareBareLink2].nonStats["subslot"]
+			end
+			local compareMethod = determineCompareMethod(currentSlot, compareSlot, compareSlot2, currentSubslot, compareSubslot, compareSubslot2)
+			return compareMethod, compareLink, compareBareLink, compareLink2, compareBareLink2
+		end
+	end
+end
+
+local function markTooltipLines(tooltip, ttname, showDebugInfo)
+	local start, ttleft, origTextL, textL
+	local numUnweightedEffects = 0
+	-- Skip item name and "currently equipped"
+	if WeightsWatcherHiddenTooltipTextLeft1:GetText() == CURRENTLY_EQUIPPED then
+		start = 3
+	else
+		start = 2
+	end
+
+	local offset = 0
+	for i = start, tooltip:NumLines() do
+		while true do
+			ttleft = _G[ttname .. "TextLeft" .. i + offset]
+			if ttleft == nil then
+				break
+			end
+			origTextL = ttleft:GetText()
+			if origTextL == nil then
+				offset = offset + 1
+			else
+				break
+			end
+		end
+		if ttleft == nil or origTextL == nil then
+			break
+		end
+		textL = WeightsWatcher.preprocess(origTextL:lower())
+		if rawget(ww_unparsed_lines, textL) then
+			if showDebugInfo then
+				ttleft:SetText(string.format("%s |cffff00ff(U)|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffff00ff(U)|r%2")))
+			else
+				ttleft:SetText(string.format("%s |cffff0000*|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffff0000*|r%2")))
+			end
+			numUnweightedEffects = numUnweightedEffects + 1
+		elseif rawget(ww_ignored_lines, textL) then
+			if showDebugInfo then
+				ttleft:SetText(string.format("%s |cffffff00(I)|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffffff00(I)|r%2")))
+			end
+		elseif rawget(ww_temp_ignored_lines, textL) then
+			if showDebugInfo then
+				ttleft:SetText(string.format("%s |cffffff00(TI)|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffffff00(TI)|r%2")))
+			end
+		elseif rawget(ww_unweighted_lines, textL) then
+			ttleft:SetText(string.format("%s |cffff0000*|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffff0000*|r%2")))
+			numUnweightedEffects = numUnweightedEffects + 1
+		end
+	end
+	if numUnweightedEffects > 0 then
+		tooltip:AddLine(string.format(L["UNWEIGHTED_HINT"], numUnweightedEffects))
+	end
+end
+
+local function addDebugInfo(tooltip, bareItemInfo, link)
+	for name, value in pairs(bareItemInfo.nonStats) do
+		if value == true then
+			tooltip:AddLine(name)
+		else
+			if name == "slot" or name == "subslot" then
+				tooltip:AddDoubleLine(name, ww_slotDisplayNames[value])
+			else
+				tooltip:AddDoubleLine(name, value)
+			end
+		end
+	end
+	for name, value in pairs(bareItemInfo.normalStats) do
+		tooltip:AddDoubleLine(ww_statDisplayNames[name], value)
+	end
+	if #(bareItemInfo.useEffects) > 0 then
+		tooltip:AddLine(L["Use effects:"])
+		for _, useEffect in pairs(bareItemInfo.useEffects) do
+			tooltip:AddLine(string.format(L["DURATION_COOLDOWN_FORMAT"], useEffect.duration, useEffect.cooldown))
+			tooltip:AddLine(string.format(L["INDENTED_STRING_FORMAT"], "Stats:"))
+			for stat, value in pairs(useEffect.stats) do
+				tooltip:AddDoubleLine(string.format(L["DOUBLY_INDENTED_STRING_FORMAT"], ww_statDisplayNames[stat]), value)
+			end
+		end
+	end
+	if #(bareItemInfo.stackingEquipEffects) > 0 then
+		tooltip:AddLine(L["Stacking equip effects:"])
+		for _, effect in pairs(bareItemInfo.stackingEquipEffects) do
+			tooltip:AddDoubleLine(string.format(L["EFFECT_STAT_FORMAT"], effect.value, ww_statDisplayNames[effect.stat]), string.format(L["EFFECT_STACKS_FORMAT"], effect.numStacks))
+			for trigger in pairs(effect.triggers) do
+				tooltip:AddLine(string.format(L["TRIGGER_FORMAT"], ww_triggerDisplayNames[trigger]))
+			end
+		end
+	end
+
+	local itemInfo = ww_itemCache[link]
+
+	if #(bareItemInfo.sockets) > 0 then
+		tooltip:AddLine(L["Sockets:"])
+		for _, stat in pairs(bareItemInfo.sockets) do
+			tooltip:AddLine(string.format(L["INDENTED_STRING_FORMAT"], ww_socketColorDisplayNames[stat]))
+		end
+		if bareItemInfo.socketBonusStat then
+			if itemInfo.socketBonusActive then
+				tooltip:AddDoubleLine(L["Socket Bonus:"], L["Active"])
+			else
+				tooltip:AddDoubleLine(L["Socket Bonus:"], L["Inactive"])
+			end
+			for name, value in pairs(bareItemInfo.socketBonusStat) do
+				tooltip:AddDoubleLine(string.format(L["INDENTED_STRING_FORMAT"], ww_statDisplayNames[name]), value)
+			end
+		end
+		if #(itemInfo.gemStats) > 0 then
+			tooltip:AddLine(L["Gem Stats:"])
+			for _, gems in pairs(itemInfo.gemStats) do
+				for _, gem in ipairs(gems) do
+					tooltip:AddLine(string.format(L["GEM_NAME_COLOR_FORMAT"], ww_gemDisplayNames[gem[2]], ww_gemColorDisplayNames[gem[1]]))
+					for stat, value in pairs(gem[3]) do
+						tooltip:AddDoubleLine(string.format(L["DOUBLY_INDENTED_STRING_FORMAT"], ww_statDisplayNames[stat]), value)
+					end
+				end
+			end
+		end
+	end
+end
+
+local function addIdealGemInfo(tooltip, gemStats, showIdealGemStats, showAlternateGems)
+	local alternateGemsExist = false
+	for _, gems in ipairs(gemStats) do
+		for i, gem in ipairs(gems) do
+			if #(gems) > 1 then
+				tooltip:AddDoubleLine(string.format(L["MULTIPLE_GEM_FORMAT"], i, #(gems), ww_gemDisplayNames[gem[2]], ww_gemColorDisplayNames[gem[1]]), " ")
+				alternateGemsExist = true
+			else
+				tooltip:AddDoubleLine(string.format(L["SINGLE_GEM_FORMAT"], ww_gemDisplayNames[gem[2]], ww_gemColorDisplayNames[gem[1]]), " ")
+			end
+			if showIdealGemStats then
+				for stat, value in pairs(gem[3]) do
+					tooltip:AddDoubleLine(string.format(L["TREBLY_INDENTED_STRING_FORMAT"], ww_statDisplayNames[stat]), value)
+				end
+			end
+			if not showAlternateGems then
+				break
+			end
+		end
+	end
+	return alternateGemsExist
+end
+
 function WeightsWatcher.displayItemStats(tooltip, ttname)
 	local alternateGemsExist = false

@@ -507,148 +679,12 @@ function WeightsWatcher.displayItemStats(tooltip, ttname)
 		local bareLink = splitItemLink(link)
 		local bareItemInfo = ww_bareItemCache[bareLink]

-		local compareLink, compareLink2, compareBareLink, compareBareLink2, compareMethod
-		if ttname ~= "ShoppingTooltip1" and ttname ~= "ShoppingTooltip2" and ww_vars.options.tooltip.showDifferences then
-			local currentSlot, compareSlot, compareSlot2, currentSubslot, compareSubslot, compareSubslot2
-			currentSlot = bareItemInfo.nonStats["slot"]
-			if currentSlot and currentSlot ~= 0 then
-				currentSubslot = ww_bareItemCache[bareLink].nonStats["subslot"]
-				local compareSlots = slotConversion[currentSlot]
-				if type(compareSlots) == "string" then
-					compareLink = GetInventoryItemLink("player", WeightsWatcher.slotList[compareSlots])
-				else
-					compareLink = GetInventoryItemLink("player", WeightsWatcher.slotList[compareSlots[1]])
-					compareLink2 = GetInventoryItemLink("player", WeightsWatcher.slotList[compareSlots[2]])
-				end
-				if compareLink then
-					compareBareLink = splitItemLink(compareLink)
-					compareSlot = ww_bareItemCache[compareBareLink].nonStats["slot"]
-					compareSubslot = ww_bareItemCache[compareBareLink].nonStats["subslot"]
-				end
-				if compareLink2 then
-					compareBareLink2 = splitItemLink(compareLink2)
-					compareSlot2 = ww_bareItemCache[compareBareLink2].nonStats["slot"]
-					compareSubslot2 = ww_bareItemCache[compareBareLink2].nonStats["subslot"]
-				end
-				compareMethod = determineCompareMethod(currentSlot, compareSlot, compareSlot2, currentSubslot, compareSubslot, compareSubslot2)
-			end
-		end
+		local compareMethod, compareLink, compareBareLink, compareLink2, compareBareLink2 = getCompareInfo(ttname, bareLink, bareItemInfo)

-		local start, ttleft, origTextL, textL
-		local numUnweightedEffects = 0
-		-- Skip item name and "currently equipped"
-		if WeightsWatcherHiddenTooltipTextLeft1:GetText() == CURRENTLY_EQUIPPED then
-			start = 3
-		else
-			start = 2
-		end
-
-		local offset = 0
-		for i = start, tooltip:NumLines() do
-			while true do
-				ttleft = _G[ttname .. "TextLeft" .. i + offset]
-				if ttleft == nil then
-					break
-				end
-				origTextL = ttleft:GetText()
-				if origTextL == nil then
-					offset = offset + 1
-				else
-					break
-				end
-			end
-			if ttleft == nil or origTextL == nil then
-				break
-			end
-			textL = WeightsWatcher.preprocess(origTextL:lower())
-			if rawget(ww_unparsed_lines, textL) then
-				if showDebugInfo then
-					ttleft:SetText(string.format("%s |cffff00ff(U)|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffff00ff(U)|r%2")))
-				else
-					ttleft:SetText(string.format("%s |cffff0000*|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffff0000*|r%2")))
-				end
-				numUnweightedEffects = numUnweightedEffects + 1
-			elseif rawget(ww_ignored_lines, textL) then
-				if showDebugInfo then
-					ttleft:SetText(string.format("%s |cffffff00(I)|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffffff00(I)|r%2")))
-				end
-			elseif rawget(ww_temp_ignored_lines, textL) then
-				if showDebugInfo then
-					ttleft:SetText(string.format("%s |cffffff00(TI)|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffffff00(TI)|r%2")))
-				end
-			elseif rawget(ww_unweighted_lines, textL) then
-				ttleft:SetText(string.format("%s |cffff0000*|r", string.gsub(origTextL, "(.)([\r\n]\+)", "%1 |cffff0000*|r%2")))
-				numUnweightedEffects = numUnweightedEffects + 1
-			end
-		end
-		if numUnweightedEffects > 0 then
-			tooltip:AddLine(string.format(L["UNWEIGHTED_HINT"], numUnweightedEffects))
-		end
+		markTooltipLines(tooltip, ttname, showDebugInfo)

 		if showDebugInfo then
-			for name, value in pairs(bareItemInfo.nonStats) do
-				if value == true then
-					tooltip:AddLine(name)
-				else
-					if name == "slot" or name == "subslot" then
-						tooltip:AddDoubleLine(name, ww_slotDisplayNames[value])
-					else
-						tooltip:AddDoubleLine(name, value)
-					end
-				end
-			end
-			for name, value in pairs(bareItemInfo.normalStats) do
-				tooltip:AddDoubleLine(ww_statDisplayNames[name], value)
-			end
-			if #(bareItemInfo.useEffects) > 0 then
-				tooltip:AddLine(L["Use effects:"])
-				for _, useEffect in pairs(bareItemInfo.useEffects) do
-					tooltip:AddLine(string.format(L["DURATION_COOLDOWN_FORMAT"], useEffect.duration, useEffect.cooldown))
-					tooltip:AddLine(string.format(L["INDENTED_STRING_FORMAT"], "Stats:"))
-					for stat, value in pairs(useEffect.stats) do
-						tooltip:AddDoubleLine(string.format(L["DOUBLY_INDENTED_STRING_FORMAT"], ww_statDisplayNames[stat]), value)
-					end
-				end
-			end
-			if #(bareItemInfo.stackingEquipEffects) > 0 then
-				tooltip:AddLine(L["Stacking equip effects:"])
-				for _, effect in pairs(bareItemInfo.stackingEquipEffects) do
-					tooltip:AddDoubleLine(string.format(L["EFFECT_STAT_FORMAT"], effect.value, ww_statDisplayNames[effect.stat]), string.format(L["EFFECT_STACKS_FORMAT"], effect.numStacks))
-					for trigger in pairs(effect.triggers) do
-						tooltip:AddLine(string.format(L["TRIGGER_FORMAT"], ww_triggerDisplayNames[trigger]))
-					end
-				end
-			end
-
-			local itemInfo = ww_itemCache[link]
-
-			if #(bareItemInfo.sockets) > 0 then
-				tooltip:AddLine(L["Sockets:"])
-				for _, stat in pairs(bareItemInfo.sockets) do
-					tooltip:AddLine(string.format(L["INDENTED_STRING_FORMAT"], ww_socketColorDisplayNames[stat]))
-				end
-				if bareItemInfo.socketBonusStat then
-					if itemInfo.socketBonusActive then
-						tooltip:AddDoubleLine(L["Socket Bonus:"], L["Active"])
-					else
-						tooltip:AddDoubleLine(L["Socket Bonus:"], L["Inactive"])
-					end
-					for name, value in pairs(bareItemInfo.socketBonusStat) do
-						tooltip:AddDoubleLine(string.format(L["INDENTED_STRING_FORMAT"], ww_statDisplayNames[name]), value)
-					end
-				end
-				if #(itemInfo.gemStats) > 0 then
-					tooltip:AddLine(L["Gem Stats:"])
-					for _, gems in pairs(itemInfo.gemStats) do
-						for _, gem in ipairs(gems) do
-							tooltip:AddLine(string.format(L["GEM_NAME_COLOR_FORMAT"], ww_gemDisplayNames[gem[2]], ww_gemColorDisplayNames[gem[1]]))
-							for stat, value in pairs(gem[3]) do
-								tooltip:AddDoubleLine(string.format(L["DOUBLY_INDENTED_STRING_FORMAT"], ww_statDisplayNames[stat]), value)
-							end
-						end
-					end
-				end
-			end
+			addDebugInfo(tooltip, bareItemInfo, link)
 		end

 		if showWeights then
@@ -696,23 +732,8 @@ function WeightsWatcher.displayItemStats(tooltip, ttname)
 									tooltip:AddDoubleLine(L["  Ideally-gemmed:"], string.format(colorizeDifferences(compareScore), currentScore, compareScore))
 									if showIdealGems then
 										local gemStats = ww_weightIdealCache[class][weight][bareLink].gemStats
-										for _, gems in ipairs(gemStats) do
-											for i, gem in ipairs(gems) do
-												if #(gems) > 1 then
-													tooltip:AddDoubleLine(string.format(L["MULTIPLE_GEM_FORMAT"], i, #(gems), ww_gemDisplayNames[gem[2]], ww_gemColorDisplayNames[gem[1]]), " ")
-													alternateGemsExist = true
-												else
-													tooltip:AddDoubleLine(string.format(L["SINGLE_GEM_FORMAT"], ww_gemDisplayNames[gem[2]], ww_gemColorDisplayNames[gem[1]]), " ")
-												end
-												if showIdealGemStats then
-													for stat, value in pairs(gem[3]) do
-														tooltip:AddDoubleLine(string.format(L["TREBLY_INDENTED_STRING_FORMAT"], ww_statDisplayNames[stat]), value)
-													end
-												end
-												if not showAlternateGems then
-													break
-												end
-											end
+										if addIdealGemInfo(tooltip, gemStats, showIdealGemStats, showAlternateGems) then
+											alternateGemsExist = true
 										end
 									end
 								end