diff ui/SummaryTab.lua @ 0:ec731d2fe6ba

Version 1.2.12.0
author Adam tegen <adam.tegen@gmail.com>
date Tue, 20 May 2014 21:43:23 -0500
parents
children ece9167c0d1c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/SummaryTab.lua	Tue May 20 21:43:23 2014 -0500
@@ -0,0 +1,454 @@
+local _, AskMrRobot = ...
+
+AskMrRobot.SummaryTab = AskMrRobot.inheritsFrom(AskMrRobot.Frame)
+
+function AskMrRobot.SummaryTab:new(parent)
+
+	local tab = AskMrRobot.Frame:new(nil, parent)
+	setmetatable(tab, { __index = AskMrRobot.SummaryTab })
+	tab:SetPoint("TOPLEFT")
+	tab:SetPoint("BOTTOMRIGHT")
+	tab:Hide()
+
+	
+	tab.importDate = ""
+
+	local text = tab:CreateFontString("AmrSummaryText1", "ARTWORK", "GameFontNormalLarge")
+	text:SetPoint("TOPLEFT", 0, -5)
+	text:SetFormattedText("Summary")
+
+	-- error text
+	tab.errorText1 = tab:CreateFontString("AmrSummaryErrorText1", "ARTWORK", "GameFontRedLarge")
+	tab.errorText1:SetPoint("TOPLEFT", "AmrSummaryText1", "BOTTOMLEFT", 0, -20)
+	tab.errorText1:SetText("You have no optimizations imported.")
+	tab.errorText1:SetPoint("RIGHT", -20, 0)
+	tab.errorText1:SetWidth(tab.errorText1:GetWidth())
+	tab.errorText1:SetWordWrap(true)
+	tab.errorText1:SetJustifyH("LEFT")
+
+	tab.errorText2 = tab:CreateFontString("AmrSummaryErrorText2", "ARTWORK", "GameFontWhite")
+	tab.errorText2:SetPoint("TOPLEFT", "AmrSummaryErrorText1", "BOTTOMLEFT", 0, -15)
+	tab.errorText2:SetPoint("RIGHT", -20, 0)
+	tab.errorText2:SetWidth(tab.errorText2:GetWidth())
+	tab.errorText2:SetJustifyH("LEFT")
+	tab.errorText2:SetText('Click the "Import" tab to get started.')
+
+	-- bad items
+	tab.badItemSlots = {}
+	tab.badItemNames = {}
+
+	local itemText = tab:CreateFontString("AmrBadItemSlot0", "ARTWORK", "GameFontNormal")
+	itemText:SetPoint("TOPLEFT", "AmrSummaryErrorText2", "BOTTOMLEFT", 0, -20)
+	itemText:SetText("Slot")
+	itemText:SetWidth(100)
+	itemText:SetJustifyH("LEFT")
+	itemText:Hide()
+	tinsert(tab.badItemSlots, itemText)
+
+	itemText = tab:CreateFontString("AmrBadItemName0", "ARTWORK", "GameFontNormal")
+	itemText:SetPoint("TOPLEFT", "AmrBadItemSlot0", "TOPLEFT", 120, 0)
+	itemText:SetPoint("RIGHT", -30, 0)
+	itemText:SetText("Item Name")
+	itemText:SetJustifyH("LEFT")
+	itemText:Hide()
+	tinsert(tab.badItemNames, itemText)
+
+	itemText = tab:CreateFontString(nil, "ARTWORK", "GameFontWhite")
+	itemText:SetPoint("LEFT", 0, 0)
+	itemText:SetPoint("RIGHT", -30, 0)
+	itemText:SetPoint("TOP", "AmrBadItemSlot0", "TOP", 0, 0 )
+	itemText:SetText("Please upgrade the following items:")
+	itemText:SetJustifyH("LEFT")
+	itemText:Hide()
+	tab.upgradeInstructions = itemText
+
+	itemText = tab:CreateFontString(nil, "ARTWORK", "GameFontNormal")
+	itemText:SetPoint("LEFT", "AmrBadItemSlot0", "LEFT", 0, -20)
+	itemText:SetPoint("RIGHT", "AmrBadItemSlot0", "RIGHT", 0, -20)
+	itemText:SetPoint("TOP", tab.upgradeInstructions, "BOTTOM", 0, -10 )
+	itemText:SetHeight(20)
+	itemText:SetText("Slot")
+	itemText:SetJustifyH("LEFT")
+	itemText:Hide()
+	tab.upgradeSlotHeader = itemText
+
+	itemText = tab:CreateFontString(nil, "ARTWORK", "GameFontNormal")
+	itemText:SetPoint("LEFT", "AmrBadItemName0", "LEFT", 0, 0)
+	itemText:SetPoint("RIGHT", "AmrBadItemName0", "RIGHT", 0, 0)
+	itemText:SetPoint("TOP", tab.upgradeSlotHeader, "TOP", 0, 0)
+	itemText:SetPoint("BOTTOM", tab.upgradeSlotHeader, "BOTTOM", 0, 0)
+	itemText:SetText("Item Name")
+	itemText:SetJustifyH("LEFT")
+	itemText:Hide()
+	tab.upgradeItemHeader = itemText
+
+	for i = 1, #AskMrRobot.slotNames do
+		local itemText = tab:CreateFontString("AmrBadItemSlot" .. i, "ARTWORK", "GameFontWhite")
+		itemText:SetPoint("TOPLEFT", "AmrBadItemSlot" .. (i-1), "BOTTOMLEFT", 0, -5)
+		itemText:SetPoint("TOPRIGHT", "AmrBadItemSlot" .. (i-1), "BOTTOMRIGHT", 0, -5)
+		itemText:SetJustifyH("LEFT")
+		itemText:Hide()
+		tinsert(tab.badItemSlots, itemText)
+
+		itemText = AskMrRobot.ItemLinkText:new(nil, tab)
+		itemText:SetPoint("LEFT", "AmrBadItemName0", "TOPLEFT", 0, 0)
+		itemText:SetPoint("RIGHT", "AmrBadItemName0", "BOTTOMRIGHT", 0, 0)
+		itemText:SetPoint("TOP", "AmrBadItemSlot" .. i, 0, 0)
+		itemText:SetPoint("BOTTOM", "AmrBadItemSlot" .. i, 0, 0)
+		itemText:Hide()
+		tinsert(tab.badItemNames, itemText)
+	end
+
+	tab.upgradeItemSlots = {}
+	tab.upgradeItemNames = {}
+	for i = 1, #AskMrRobot.slotNames do
+		local itemText = tab:CreateFontString(nil, "ARTWORK", "GameFontWhite")
+		if i == 1 then
+			itemText:SetPoint("TOPLEFT", tab.upgradeSlotHeader, "BOTTOMLEFT", 0, -5)
+			itemText:SetPoint("TOPRIGHT", tab.upgradeSlotHeader, "BOTTOMRIGHT", 0, -5)
+		else
+			itemText:SetPoint("TOPLEFT", tab.upgradeItemSlots[i-1], "BOTTOMLEFT", 0, -5)
+			itemText:SetPoint("TOPRIGHT", tab.upgradeItemSlots[i-1], "BOTTOMRIGHT", 0, -5)
+		end
+		itemText:SetJustifyH("LEFT")
+		itemText:Hide()
+		tinsert(tab.upgradeItemSlots, itemText)
+
+		itemText = AskMrRobot.ItemLinkText:new(nil, tab)
+		itemText:SetFormat("|cff00ff00Upgrade|r %s")
+		itemText:SetPoint("LEFT", tab.upgradeItemHeader, "LEFT", 0, 0)
+		itemText:SetPoint("RIGHT", tab.upgradeItemHeader, "RIGHT", 0, 0)
+		itemText:SetPoint("TOP", tab.upgradeItemSlots[i], 0, 0)
+		itemText:SetPoint("BOTTOM", tab.upgradeItemSlots[i], 0, 0)
+		itemText:Hide()
+		tinsert(tab.upgradeItemNames, itemText)
+	end
+
+	tab.importInfo = tab:CreateFontString(nil, "ARTWORK", "GameFontNormal")
+	tab.importInfo:SetText("Last import: ?\rThese optimizations are for ?")
+	tab.importInfo:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 0, -20)
+	tab.importInfo:SetJustifyH("LEFT")
+	tab.importInfo:Hide()
+
+	tab.specIcon = tab:CreateTexture(nil, "BACKGROUND")
+	tab.specIcon:SetPoint("TOPLEFT")
+	tab.specIcon:SetWidth(64)
+	tab.specIcon:SetHeight(64)
+	tab.specIcon:SetPoint("TOPLEFT", tab.importInfo, "BOTTOMLEFT", 0, -10)
+	tab.specIcon:Hide()
+
+	tab.stamp = AskMrRobot.RobotStamp:new(nil, tab)
+	tab.stamp:Hide()
+	tab.stamp.smallText:SetText("Congratulations! You are 100% optimal")
+	tab.stamp:SetPoint("TOPLEFT", tab.specIcon, "BOTTOMLEFT", 2, -25)
+	tab.stamp:SetPoint("RIGHT", tab, "RIGHT", -20, 0)
+	tab.stamp:Hide()
+
+	tab.specText = tab:CreateFontString(nil, "ARTWORK", "GameFontHighlightLarge")
+	local Path, Size, Flags = tab.specText:GetFont()
+	tab.specText:SetFont(Path, 24, Flags);
+	tab.specText:SetPoint("LEFT", tab.specIcon, "RIGHT", 10, 0)
+	tab.specText:SetText("?")
+	tab.specText:Hide()
+
+	tab.optimizationSummary = tab:CreateFontString(nil, "ARTWORK", "GameFontNormal")
+	tab.optimizationSummary:SetPoint("TOPLEFT", tab.specIcon, "BOTTOMLEFT", 0, -15)
+	tab.optimizationSummary:SetText("You have ? optimizations to make:")
+	tab.optimizationSummary:Hide()
+
+	tab.gemCount = tab:CreateFontString(nil, "ARTWORK", "GameFontWhite")
+	tab.gemCount:SetPoint("TOPLEFT", tab.optimizationSummary, "BOTTOMLEFT", 0, -15)
+	tab.gemCount:SetText("? gems")
+	tab.gemCount:Hide()
+
+	tab.enchantCount = tab:CreateFontString(nil, "ARTWORK", "GameFontWhite")
+	tab.enchantCount:SetPoint("TOPLEFT", tab.gemCount, "BOTTOMLEFT", 0, -5)
+	tab.enchantCount:SetText("? enchants")
+	tab.enchantCount:Hide()
+
+	tab.reforgeCount = tab:CreateFontString(nil, "ARTWORK", "GameFontWhite")
+	tab.reforgeCount:SetPoint("TOPLEFT", tab.enchantCount, "BOTTOMLEFT", 0, -5)
+	tab.reforgeCount:SetText("? reforges")
+	tab.reforgeCount:Hide()
+
+	tab.instructions = tab:CreateFontString(nil, "ARTWORK", "GameFontWhite")
+	tab.instructions:SetPoint("TOPLEFT", tab.reforgeCount, "BOTTOMLEFT", 0, -15)
+	tab.instructions:SetText("View the Gem, Enchant and Reforge tabs for suggested optimizations.")
+	tab.instructions:Hide()
+
+	return tab
+end
+
+function AskMrRobot.SummaryTab:getSpecIcon(specId)
+	for i = 1, GetNumSpecializations() do
+		local id, _, _, icon = GetSpecializationInfo(i)
+		if id == specId then
+			return icon
+		end
+	end
+	return nil
+end
+
+function AskMrRobot.SummaryTab:showBadItems()
+	local badItems = AskMrRobot.itemDiffs.items
+
+	local i = 2
+
+	-- for all the bad items
+	for slotNum, badItem in AskMrRobot.sortSlots(badItems) do
+		if not badItem.needsUpgrade then
+			self.badItemSlots[i]:SetText(_G[strupper(AskMrRobot.slotNames[slotNum])])
+			self.badItemSlots[i]:Show()
+			if badItem.optimized then
+				self.badItemNames[i]:SetItemId(badItem.optimized.itemId, badItem.optimized.upgradeId, badItem.optimized.suffixId)
+			else
+				self.badItemNames[i]:SetItemId(nil, 0, 0)
+			end
+			self.badItemNames[i]:Show()
+			i = i + 1
+		end
+	end
+
+    -- for all the upgrade items
+    local j = 1
+	for slotNum, badItem in AskMrRobot.sortSlots(badItems) do
+		if badItem.needsUpgrade then
+			self.upgradeItemSlots[j]:SetText(_G[strupper(AskMrRobot.slotNames[slotNum])])
+			self.upgradeItemSlots[j]:Show()
+			if badItem.optimized then
+				self.upgradeItemNames[j]:SetItemId(badItem.optimized.itemId, badItem.optimized.upgradeId, badItem.optimized.suffixId)
+			else
+				self.upgradeItemNames[j]:SetItemId(nil, 0, 0)
+			end
+			self.upgradeItemNames[j]:Show()
+			j = j + 1
+		end
+	end
+
+	-- hide / show the headers
+	if i == 2 and j == 1 then
+		self.badItemSlots[1]:Hide()
+		self.badItemNames[1]:Hide()
+		self:showImportError(nil)
+		self.importInfo:Show()
+		self.specIcon:Show()
+		self.optimizationSummary:Show()
+		self.gemCount:Show()
+		self.enchantCount:Show()
+		self.reforgeCount:Show()
+		self.instructions:Show()
+		self.specText:Show()
+
+		local gemCount = 0
+		for slotNum, badGems in pairs(AskMrRobot.itemDiffs.gems) do
+			for k, v in pairs(badGems.badGems) do
+				gemCount = gemCount + 1
+			end
+		end
+
+		self.gemCount:SetFormattedText("%d \1244gem:gems;", gemCount)
+
+		local enchantCount = 0
+		for slotNum, badEnchant in pairs(AskMrRobot.itemDiffs.enchants) do
+			enchantCount = enchantCount + 1
+		end
+
+		self.enchantCount:SetFormattedText("%d \1244enchant:enchants;", enchantCount)
+
+		local reforgeCount = 0
+		for slotNum, badReforge in pairs(AskMrRobot.itemDiffs.reforges) do
+			reforgeCount = reforgeCount + 1
+		end
+
+		self.reforgeCount:SetFormattedText("%d \1244reforge:reforges;", reforgeCount)
+		self.optimizationSummary:SetFormattedText("You have %d \1244optimization:optimizations; to make:", gemCount + enchantCount + reforgeCount)
+
+		if gemCount + enchantCount + reforgeCount == 0 then
+			self.stamp:Show()
+			self.optimizationSummary:Hide()
+			self.enchantCount:Hide()
+			self.reforgeCount:Hide()
+			self.instructions:Hide()
+			self.gemCount:Hide()
+		else
+			self.stamp:Hide()
+			self.optimizationSummary:Show()
+			self.enchantCount:Show()
+			self.reforgeCount:Show()
+			self.instructions:Show()
+			self.gemCount:Show()
+		end
+
+		local activeSpecGroup = GetActiveSpecGroup()
+
+		if activeSpecGroup == nil then
+			self.importInfo:SetFormattedText("Last import: %s\rThese optimizations are for %s", self.importDate, UnitName("player"))
+		else
+			self.importInfo:SetFormattedText("Last import: %s\rThese optimizations are for %s's...", self.importDate, UnitName("player"))
+			local spec = GetSpecialization(false, false, group);
+			if spec then
+				local _, name, _, icon = GetSpecializationInfo(spec);
+				if activeSpecGroup == 1 then
+					self.specText:SetFormattedText("Primary Spec - %s", name)
+				else
+					self.specText:SetFormattedText("Secondary Spec - %s", name)
+				end
+				self.specIcon:SetTexture(icon)
+			end
+		end
+
+
+		--local currentSpec = GetAmrSpecialization(GetActiveSpecGroup())
+		--return (not currentSpec and not spec) or tostring(currentSpec) == spec
+	else
+		self.importInfo:Hide()
+		self.specIcon:Hide()
+		self.optimizationSummary:Hide()
+		self.gemCount:Hide()
+		self.enchantCount:Hide()
+		self.reforgeCount:Hide()
+		self.instructions:Hide()
+		self.specText:Hide()		
+	end
+
+	if i == 2 then
+		self.badItemSlots[1]:Hide()
+		self.badItemNames[1]:Hide()
+	else
+		self.badItemSlots[1]:Show()
+		self.badItemNames[1]:Show()
+		local warnings = {}
+		if self.badRealm then
+			tinsert(warnings, "a different realm: " .. self.badRealm)
+		end
+		if self.badTalents then
+			tinsert(warnings, "different talents")
+		end
+		if self.badGlyphs then
+			tinsert(warnings, "different glyphs")
+		end
+		local message = "Mr. Robot optimized a different set of gear"
+		if #warnings > 0 then
+			message = message .. " (and "
+			for k = 1, #warnings do
+				if k > 1 then
+					message = message .. ', '
+				end
+				message = message .. warnings[k]
+			end
+			message = message .. ")"
+		end
+		message = message .. ". Please equip the following items before proceeding with the optimizations."
+		self:showImportWarning("WARNING: Please check your character before proceeding:", message)
+	end
+
+	if j == 1 then
+		self.upgradeItemHeader:Hide()
+		self.upgradeSlotHeader:Hide()
+		self.upgradeInstructions:Hide()
+	else
+		if i == 2 then
+			local warnings = {}
+			if self.badRealm then
+				tinsert(warnings, "a different realm: " .. self.badRealm)
+			end
+			if self.badTalents then
+				tinsert(warnings, "different talents")
+			end
+			if self.badGlyphs then
+				tinsert(warnings, "different glyphs")
+			end
+			local message = nil
+			if #warnings > 0 then 
+				message = "Mr. Robot optimized for "
+				for k = 1, #warnings do
+					if k > 1 then
+						message = message .. ', '
+					end
+					message = message .. warnings[k]
+				end
+				message = message .. "."
+			end
+			self:showImportWarning("WARNING: Please check your character before proceeding:", message)
+		end
+		self.upgradeItemHeader:Show()
+		self.upgradeSlotHeader:Show()
+		self.upgradeInstructions:Show()
+		if i == 2 then
+			self.upgradeInstructions:SetPoint("TOP", self.badItemSlots[1], "TOP", 0, 0)
+			self.errorText2:Hide()
+		else
+			self.upgradeInstructions:SetPoint("TOP", self.badItemSlots[i], "BOTTOM", 0, -20)
+		end		
+	end
+
+	-- hide the remaining slots
+	while i <= #self.badItemSlots do
+		self.badItemSlots[i]:Hide()
+		self.badItemNames[i]:Hide()
+		i = i + 1
+	end
+
+	-- hide the remaining slots
+	while j <= #self.upgradeItemSlots do
+		self.upgradeItemSlots[j]:Hide()
+		self.upgradeItemNames[j]:Hide()
+		j = j + 1
+	end
+end
+
+
+function AskMrRobot.SummaryTab:showImportError(text, text2)
+	self.stamp:Hide()
+	self.gemCount:Hide()
+	self.instructions:Hide()
+	self.reforgeCount:Hide()
+	self.enchantCount:Hide()
+	self.optimizationSummary:Hide()
+	if text then
+		self.errorText1:Show()
+		self.errorText1:SetText('Error! Your import did not work:|n|n' .. text)
+		self.errorText1:Show()
+		self.errorText2:SetText(text2)
+		self.errorText2:Show()
+		self.importInfo:Hide()
+		self.upgradeSlotHeader:Hide()
+		self.upgradeItemHeader:Hide()
+		self.upgradeInstructions:Hide()
+		self.specIcon:Hide()
+		self.specText:Hide()
+	else
+		self.errorText1:Hide()
+		self.errorText2:Hide()
+		self.importInfo:Show()
+	end
+	for i = 1, #AskMrRobot.slotNames + 1 do
+		self.badItemSlots[i]:Hide()
+		self.badItemNames[i]:Hide()
+	end
+	for i = 1, #AskMrRobot.slotNames do
+		self.upgradeItemSlots[i]:Hide()
+		self.upgradeItemNames[i]:Hide()
+	end	
+end
+
+function AskMrRobot.SummaryTab:showImportWarning (text, text2)
+	self.stamp:Hide()
+	self.hasImportError = false
+	self.gemCount:Hide()
+	self.instructions:Hide()
+	self.reforgeCount:Hide()
+	self.enchantCount:Hide()
+	self.specIcon:Hide()
+	self.specText:Hide()
+	self.optimizationSummary:Hide()
+	if text then
+		self.errorText1:SetText(text)
+		self.errorText1:Show()
+		self.errorText2:SetText(text2)
+		self.errorText2:Show()		
+	else			
+		self.errorText1:Hide()
+		self.errorText2:Hide()
+	end
+end