adam@0: local _, AskMrRobot = ... yellowfive@11: local L = AskMrRobot.L; adam@0: adam@0: StaticPopupDialogs["AUTOGEM_FINISHED"] = { yellowfive@11: text = L.AMR_GEMTAB_FINISHED, yellowfive@11: button1 = L.AMR_GEMTAB_BUTTON_OK, adam@0: timeout = 0, adam@0: whileDead = true, adam@0: hideOnEscape = true, adam@0: preferredIndex = 3, -- avoid some UI taint, see http://www.wowace.com/announcements/how-to-avoid-some-ui-taint/ adam@0: } adam@0: adam@0: StaticPopupDialogs["AUTOGEM_ONCE"] = { yellowfive@11: text = L.AMR_GEMTAB_AUTOGEMMING_IN_PROGRESS, yellowfive@11: button1 = L.AMR_GEMTAB_BUTTON_OK, adam@0: timeout = 0, adam@0: whileDead = true, adam@0: hideOnEscape = true, adam@0: preferredIndex = 3, -- avoid some UI taint, see http://www.wowace.com/announcements/how-to-avoid-some-ui-taint/ adam@0: } adam@0: adam@0: -- initialize the GemTab class adam@0: AskMrRobot.GemTab = AskMrRobot.inheritsFrom(AskMrRobot.Frame) adam@0: adam@0: local MAX_SLOTS = 4 adam@0: adam@0: -- GemTab contructor adam@17: function AskMrRobot.GemTab:new(parent) adam@0: -- create a new frame (if one isn't supplied) adam@17: local tab = AskMrRobot.Frame:new(nil, parent) adam@0: tab:SetPoint("TOPLEFT") adam@0: tab:SetPoint("BOTTOMRIGHT") adam@0: -- use the GemTab class adam@0: setmetatable(tab, { __index = AskMrRobot.GemTab }) adam@0: tab:Hide() adam@0: adam@0: local text = tab:CreateFontString("AmrGemsText1", "ARTWORK", "GameFontNormalLarge") adam@0: text:SetPoint("TOPLEFT", 0, -5) yellowfive@11: text:SetText(L.AMR_GEMTAB_GEMS) adam@0: adam@0: tab.stamp = AskMrRobot.RobotStamp:new(nil, tab) adam@0: tab.stamp:Hide() yellowfive@11: tab.stamp.smallText:SetText(L.AMR_GEMTAB_OPTIMAL) adam@0: tab.stamp:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 2, -15) adam@0: tab.stamp:SetPoint("RIGHT", tab, "RIGHT", -20, 0) adam@0: adam@0: text = tab:CreateFontString("AmrGemsText2", "ARTWORK", "GameFontWhite") yellowfive@11: text:SetText(L.AMR_GEMTAB_X_OPTIMIZE) adam@0: text:SetPoint("TOPLEFT", "AmrGemsText1", "BOTTOMLEFT", 0, -20) adam@0: text:SetWidth(200) adam@0: text:SetJustifyH("LEFT") adam@0: tab.gemsTextToOptimize = text adam@0: adam@0: -- autogem button adam@0: tab.button = CreateFrame("Button", "AmrAutoGemButton", tab, "UIPanelButtonTemplate") adam@0: tab.button:SetPoint("TOP", "AmrGemsText1", "BOTTOM", 0, -16) adam@0: tab.button:SetPoint("RIGHT", -40, 0) yellowfive@11: tab.button:SetText(L.AMR_GEMTAB_AUTOGEM_BUTTON) adam@0: tab.button:SetWidth(150) adam@0: tab.button:SetHeight(20) adam@0: tab.button:SetScript("OnClick", function() tab:startAutoGem() end) adam@0: tab.button:Hide() adam@0: adam@0: -- autogem checkbox button adam@0: tab.usePerfectButton = CreateFrame("CheckButton", "AmrUsePerfectButton", tab, "ChatConfigCheckButtonTemplate") adam@0: tab.preferPerfects = true adam@0: tab.usePerfectButton:SetChecked(tab.preferPerfects) adam@0: tab.usePerfectButton:SetPoint("TOPLEFT", "AmrAutoGemButton", "BOTTOMLEFT", 0, -4) adam@0: tab.usePerfectButton:SetScript("OnClick", function () tab.preferPerfects = tab.usePerfectButton:GetChecked() end) adam@0: local text3 = getglobal(tab.usePerfectButton:GetName() .. 'Text') yellowfive@11: text3:SetText(L.AMR_GEMTAB_PREFER_PERFECT) adam@0: text3:SetWidth(150) adam@0: text3:SetPoint("TOPLEFT", tab.usePerfectButton, "TOPRIGHT", 2, -4) adam@0: tab.usePerfectButton:Hide() adam@0: adam@0: tab.gemSlotHeader = tab:CreateFontString("AmrBadGemSlot0", "ARTWORK", "GameFontNormal") adam@0: tab.gemSlotHeader:SetPoint("TOPLEFT", "AmrGemsText2", "BOTTOMLEFT", 0, -20) yellowfive@11: tab.gemSlotHeader:SetText(L.AMR_GEMTAB_SLOT) adam@0: tab.gemSlotHeader:SetWidth(90) adam@0: tab.gemSlotHeader:SetJustifyH("LEFT") adam@0: tab.gemSlotHeader:Hide() adam@0: tab.gemCurrentHeader = tab:CreateFontString("AmrBadGemCurrent0_1", "ARTWORK", "GameFontNormal") adam@0: tab.gemCurrentHeader:SetPoint("TOPLEFT", "AmrBadGemSlot0", "TOPLEFT", 88, 0) adam@0: tab.gemCurrentHeader:SetWidth(110) yellowfive@11: tab.gemCurrentHeader:SetText(L.AMR_GEMTAB_CURRENT) adam@0: tab.gemCurrentHeader:SetJustifyH("LEFT") adam@0: tab.gemCurrentHeader:Hide() adam@0: tab.gemOptimizedHeader = tab:CreateFontString("AmrBadGemOptimized0_1", "ARTWORK", "GameFontNormal") adam@0: tab.gemOptimizedHeader:SetPoint("TOPLEFT", "AmrBadGemCurrent0_1", "TOPLEFT", 70, 0) adam@0: tab.gemOptimizedHeader:SetPoint("RIGHT", -30, 0) yellowfive@11: tab.gemOptimizedHeader:SetText(L.AMR_GEMTAB_OPTIMIZED) adam@0: tab.gemOptimizedHeader:SetJustifyH("LEFT") adam@0: tab.gemOptimizedHeader:Hide() adam@0: adam@0: tab.fauxScroll = CreateFrame("ScrollFrame", "testme", tab, "FauxScrollFrameTemplate") adam@0: tab.fauxScroll:SetPoint("BOTTOMRIGHT", -40, 15) adam@0: tab.fauxScroll:SetPoint("TOPLEFT", "AmrBadGemSlot0", "BOTTOMLEFT", -12, -5) adam@0: tab.fauxScroll.parent = tab adam@0: tab.fauxScroll:SetScript("OnVerticalScroll", AskMrRobot.GemTab.OnVerticalScroll) adam@0: adam@0: tab.jewelPanels = {} adam@0: for i = 1, MAX_SLOTS do adam@0: adam@0: tab.jewelPanels[i] = AskMrRobot.JewelPanel:new("AmrBadGemSlot" .. i, tab) adam@0: if i == 1 then adam@0: tab.jewelPanels[i]:SetPoint("TOPLEFT", "AmrBadGemSlot" .. (i-1), "BOTTOMLEFT", -12, -5) adam@0: --tab.jewelPanels[i]:SetPoint("TOPLEFT") adam@0: else adam@0: tab.jewelPanels[i]:SetPoint("TOPLEFT", "AmrBadGemSlot" .. (i-1), "BOTTOMLEFT", 0, -5) adam@0: end adam@0: tab.jewelPanels[i]:SetPoint("RIGHT", -40, 0) adam@0: end adam@0: adam@0: return tab adam@0: end adam@0: adam@0: function AskMrRobot.GemTab:startAutoGem() adam@0: if AskMrRobot.AutoGem(self.preferPerfects) == false then adam@0: StaticPopup_Show("AUTOGEM_ONCE") adam@0: end adam@0: end adam@0: adam@0: function AskMrRobot.GemTab:Update() adam@0: self.count = 0 adam@0: adam@0: local i = 1 adam@0: local badGemTotal = 0 adam@0: adam@17: if AskMrRobot.ComparisonResult.gems then adam@17: for iSlot = 1, #AskMrRobot.slotIds do adam@17: local slotId = AskMrRobot.slotIds[iSlot] adam@17: local badGems = AskMrRobot.ComparisonResult.gems[slotId] adam@17: if badGems ~= nil then adam@17: self.count = self.count + 1 adam@17: if i <= MAX_SLOTS then adam@17: self.jewelPanels[i]:Show() adam@17: end adam@17: for g = 1, #badGems.optimized do adam@17: if not AskMrRobot.AreGemsCompatible(badGems.optimized[g], badGems.current[g]) then adam@17: badGemTotal = badGemTotal + 1 adam@17: end adam@17: end adam@17: i = i + 1 adam@0: end adam@0: end adam@0: end adam@0: yellowfive@11: self.gemsTextToOptimize:SetFormattedText(L.AMR_GEMTAB_TO_OPTIMIZE, badGemTotal) adam@0: adam@0: --hide/show the headers, depending on if we have any bad gems adam@0: if self.count == 0 then adam@0: self.gemSlotHeader:Hide() adam@0: self.gemCurrentHeader:Hide() adam@0: self.gemOptimizedHeader:Hide() adam@0: self.gemsTextToOptimize:Hide() adam@0: self.button:Hide() adam@0: self.usePerfectButton:Hide() adam@0: self.stamp:Show() adam@0: else adam@0: self.gemSlotHeader:Show() adam@0: self.gemCurrentHeader:Show() adam@0: self.gemOptimizedHeader:Show() adam@0: self.gemsTextToOptimize:Show() adam@17: --self.button:Show() adam@17: --self.usePerfectButton:Show() adam@0: self.stamp:Hide() adam@0: end adam@0: adam@0: for i = self.count + 1, MAX_SLOTS do adam@0: self.jewelPanels[i]:Hide() adam@0: i = i + 1 adam@0: end adam@0: adam@0: AskMrRobot.GemTab.OnUpdate(self.fauxScroll, self.count, #self.jewelPanels, self.jewelPanels[1]:GetHeight()) adam@0: end adam@0: adam@0: function AskMrRobot.GemTab.OnVerticalScroll(scrollframe, offset) adam@0: local self = scrollframe.parent adam@0: FauxScrollFrame_OnVerticalScroll(self.fauxScroll, offset, self.jewelPanels[1]:GetHeight(), AskMrRobot.GemTab.OnUpdate) adam@0: end adam@0: adam@0: function AskMrRobot.GemTab.OnUpdate(scrollframe) adam@0: local self = scrollframe.parent adam@0: FauxScrollFrame_Update(self.fauxScroll, self.count, #self.jewelPanels, self.jewelPanels[1]:GetHeight()) adam@0: local offset = FauxScrollFrame_GetOffset(scrollframe) adam@0: adam@0: local i = 1 adam@17: if AskMrRobot.ComparisonResult.gems then adam@17: for iSlot = 1, #AskMrRobot.slotIds do adam@17: local slotId = AskMrRobot.slotIds[iSlot] adam@17: local badGems = AskMrRobot.ComparisonResult.gems[slotId] adam@17: if badGems ~= nil then adam@17: if offset > 0 then adam@17: offset = offset - 1 adam@17: else adam@0: adam@17: if i > MAX_SLOTS then adam@17: break adam@17: end adam@17: adam@17: self.jewelPanels[i]:SetItemLink(AskMrRobot.slotDisplayText[slotId], AmrDb.Equipped[AmrDb.ActiveSpec][slotId]) adam@17: self.jewelPanels[i]:SetOptimizedGems(badGems.optimized, badGems.current) adam@17: i = i + 1 adam@17: end adam@0: end adam@0: end adam@0: end adam@0: end