Mercurial > wow > askmrrobot
diff ui/GemTab.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/GemTab.lua Tue May 20 21:43:23 2014 -0500 @@ -0,0 +1,195 @@ +local _, AskMrRobot = ... + +StaticPopupDialogs["AUTOGEM_FINISHED"] = { + text = "Mr. Robot finished auto-gemming. \rIf some items aren't gemmed, you may need to acquire more gems. \rIf your belt isn't gemmed, you may still need to buy a belt buckle.", + button1 = "Ok", + timeout = 0, + whileDead = true, + hideOnEscape = true, + preferredIndex = 3, -- avoid some UI taint, see http://www.wowace.com/announcements/how-to-avoid-some-ui-taint/ +} + +StaticPopupDialogs["AUTOGEM_ONCE"] = { + text = "Autogemming already in progress.", + button1 = "Ok", + timeout = 0, + whileDead = true, + hideOnEscape = true, + preferredIndex = 3, -- avoid some UI taint, see http://www.wowace.com/announcements/how-to-avoid-some-ui-taint/ +} + +-- initialize the GemTab class +AskMrRobot.GemTab = AskMrRobot.inheritsFrom(AskMrRobot.Frame) + +local MAX_SLOTS = 4 + +-- GemTab contructor +function AskMrRobot.GemTab:new(name, parent) + -- create a new frame (if one isn't supplied) + local tab = AskMrRobot.Frame:new(name, parent) + tab:SetPoint("TOPLEFT") + tab:SetPoint("BOTTOMRIGHT") + -- use the GemTab class + setmetatable(tab, { __index = AskMrRobot.GemTab }) + tab:Hide() + + local text = tab:CreateFontString("AmrGemsText1", "ARTWORK", "GameFontNormalLarge") + text:SetPoint("TOPLEFT", 0, -5) + text:SetText("Gems") + + tab.stamp = AskMrRobot.RobotStamp:new(nil, tab) + tab.stamp:Hide() + tab.stamp.smallText:SetText("Your gems are 100% optimal! You are truly, truly outrageous.") + tab.stamp:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 2, -15) + tab.stamp:SetPoint("RIGHT", tab, "RIGHT", -20, 0) + + text = tab:CreateFontString("AmrGemsText2", "ARTWORK", "GameFontWhite") + text:SetText("You have X gems to optimize") + text:SetPoint("TOPLEFT", "AmrGemsText1", "BOTTOMLEFT", 0, -20) + text:SetWidth(200) + text:SetJustifyH("LEFT") + tab.gemsTextToOptimize = text + + -- autogem button + tab.button = CreateFrame("Button", "AmrAutoGemButton", tab, "UIPanelButtonTemplate") + tab.button:SetPoint("TOP", "AmrGemsText1", "BOTTOM", 0, -16) + tab.button:SetPoint("RIGHT", -40, 0) + tab.button:SetText("Auto Gem! (BETA)") + tab.button:SetWidth(150) + tab.button:SetHeight(20) + tab.button:SetScript("OnClick", function() tab:startAutoGem() end) + tab.button:Hide() + + -- autogem checkbox button + tab.usePerfectButton = CreateFrame("CheckButton", "AmrUsePerfectButton", tab, "ChatConfigCheckButtonTemplate") + tab.preferPerfects = true + tab.usePerfectButton:SetChecked(tab.preferPerfects) + tab.usePerfectButton:SetPoint("TOPLEFT", "AmrAutoGemButton", "BOTTOMLEFT", 0, -4) + tab.usePerfectButton:SetScript("OnClick", function () tab.preferPerfects = tab.usePerfectButton:GetChecked() end) + local text3 = getglobal(tab.usePerfectButton:GetName() .. 'Text') + text3:SetText("Prefer Perfect") + text3:SetWidth(150) + text3:SetPoint("TOPLEFT", tab.usePerfectButton, "TOPRIGHT", 2, -4) + tab.usePerfectButton:Hide() + + tab.gemSlotHeader = tab:CreateFontString("AmrBadGemSlot0", "ARTWORK", "GameFontNormal") + tab.gemSlotHeader:SetPoint("TOPLEFT", "AmrGemsText2", "BOTTOMLEFT", 0, -20) + tab.gemSlotHeader:SetText("Slot") + tab.gemSlotHeader:SetWidth(90) + tab.gemSlotHeader:SetJustifyH("LEFT") + tab.gemSlotHeader:Hide() + tab.gemCurrentHeader = tab:CreateFontString("AmrBadGemCurrent0_1", "ARTWORK", "GameFontNormal") + tab.gemCurrentHeader:SetPoint("TOPLEFT", "AmrBadGemSlot0", "TOPLEFT", 88, 0) + tab.gemCurrentHeader:SetWidth(110) + tab.gemCurrentHeader:SetText("Current") + tab.gemCurrentHeader:SetJustifyH("LEFT") + tab.gemCurrentHeader:Hide() + tab.gemOptimizedHeader = tab:CreateFontString("AmrBadGemOptimized0_1", "ARTWORK", "GameFontNormal") + tab.gemOptimizedHeader:SetPoint("TOPLEFT", "AmrBadGemCurrent0_1", "TOPLEFT", 70, 0) + tab.gemOptimizedHeader:SetPoint("RIGHT", -30, 0) + tab.gemOptimizedHeader:SetText("Optimized") + tab.gemOptimizedHeader:SetJustifyH("LEFT") + tab.gemOptimizedHeader:Hide() + + tab.fauxScroll = CreateFrame("ScrollFrame", "testme", tab, "FauxScrollFrameTemplate") + tab.fauxScroll:SetPoint("BOTTOMRIGHT", -40, 15) + tab.fauxScroll:SetPoint("TOPLEFT", "AmrBadGemSlot0", "BOTTOMLEFT", -12, -5) + tab.fauxScroll.parent = tab + tab.fauxScroll:SetScript("OnVerticalScroll", AskMrRobot.GemTab.OnVerticalScroll) + + tab.jewelPanels = {} + for i = 1, MAX_SLOTS do + + tab.jewelPanels[i] = AskMrRobot.JewelPanel:new("AmrBadGemSlot" .. i, tab) + if i == 1 then + tab.jewelPanels[i]:SetPoint("TOPLEFT", "AmrBadGemSlot" .. (i-1), "BOTTOMLEFT", -12, -5) + --tab.jewelPanels[i]:SetPoint("TOPLEFT") + else + tab.jewelPanels[i]:SetPoint("TOPLEFT", "AmrBadGemSlot" .. (i-1), "BOTTOMLEFT", 0, -5) + end + tab.jewelPanels[i]:SetPoint("RIGHT", -40, 0) + end + + return tab +end + +function AskMrRobot.GemTab:startAutoGem() + if AskMrRobot.AutoGem(self.preferPerfects) == false then + StaticPopup_Show("AUTOGEM_ONCE") + end +end + +function AskMrRobot.GemTab:Update() + self.count = 0 + + local i = 1 + local badGemTotal = 0 + + if AskMrRobot.itemDiffs.gems then + for slotNum, badGems in AskMrRobot.sortSlots(AskMrRobot.itemDiffs.gems) do + self.count = self.count + 1 + if i <= MAX_SLOTS then + self.jewelPanels[i]:Show() + end + for k, v in pairs(badGems.badGems) do + badGemTotal = badGemTotal + 1 + end + i = i + 1 + end + end + + self.gemsTextToOptimize:SetFormattedText("You have %d \1244gem:gems; to optimize", badGemTotal) + + --hide/show the headers, depending on if we have any bad gems + if self.count == 0 then + self.gemSlotHeader:Hide() + self.gemCurrentHeader:Hide() + self.gemOptimizedHeader:Hide() + self.gemsTextToOptimize:Hide() + self.button:Hide() + self.usePerfectButton:Hide() + self.stamp:Show() + else + self.gemSlotHeader:Show() + self.gemCurrentHeader:Show() + self.gemOptimizedHeader:Show() + self.gemsTextToOptimize:Show() + self.button:Show() + self.usePerfectButton:Show() + self.stamp:Hide() + end + + for i = self.count + 1, MAX_SLOTS do + self.jewelPanels[i]:Hide() + i = i + 1 + end + + AskMrRobot.GemTab.OnUpdate(self.fauxScroll, self.count, #self.jewelPanels, self.jewelPanels[1]:GetHeight()) +end + +function AskMrRobot.GemTab.OnVerticalScroll(scrollframe, offset) + local self = scrollframe.parent + FauxScrollFrame_OnVerticalScroll(self.fauxScroll, offset, self.jewelPanels[1]:GetHeight(), AskMrRobot.GemTab.OnUpdate) +end + +function AskMrRobot.GemTab.OnUpdate(scrollframe) + local self = scrollframe.parent + FauxScrollFrame_Update(self.fauxScroll, self.count, #self.jewelPanels, self.jewelPanels[1]:GetHeight()) + local offset = FauxScrollFrame_GetOffset(scrollframe) + + local i = 1 + for slotNum, badGems in AskMrRobot.sortSlots(AskMrRobot.itemDiffs.gems) do + if offset > 0 then + offset = offset - 1 + else + + if i > MAX_SLOTS then + break + end + + self.jewelPanels[i]:SetItemLink(_G[strupper(AskMrRobot.slotNames[slotNum])], badGems.current.link ) + self.jewelPanels[i]:SetOptimizedGems(badGems.optimized, badGems.badGems) + i = i + 1 + end + end +end \ No newline at end of file