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@0: function AskMrRobot.GemTab:new(name, parent) adam@0: -- create a new frame (if one isn't supplied) adam@0: local tab = AskMrRobot.Frame:new(name, 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@0: if AskMrRobot.itemDiffs.gems then adam@0: for slotNum, badGems in AskMrRobot.sortSlots(AskMrRobot.itemDiffs.gems) do adam@0: self.count = self.count + 1 adam@0: if i <= MAX_SLOTS then adam@0: self.jewelPanels[i]:Show() adam@0: end adam@0: for k, v in pairs(badGems.badGems) do adam@0: badGemTotal = badGemTotal + 1 adam@0: end adam@0: i = i + 1 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@0: self.button:Show() adam@0: 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@0: for slotNum, badGems in AskMrRobot.sortSlots(AskMrRobot.itemDiffs.gems) do adam@0: if offset > 0 then adam@0: offset = offset - 1 adam@0: else adam@0: adam@0: if i > MAX_SLOTS then adam@0: break adam@0: end adam@0: adam@0: self.jewelPanels[i]:SetItemLink(_G[strupper(AskMrRobot.slotNames[slotNum])], badGems.current.link ) adam@0: self.jewelPanels[i]:SetOptimizedGems(badGems.optimized, badGems.badGems) adam@0: i = i + 1 adam@0: end adam@0: end adam@0: end