Mercurial > wow > askmrrobot
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