adam@0
|
1 local _, AskMrRobot = ...
|
yellowfive@11
|
2 local L = AskMrRobot.L;
|
adam@0
|
3
|
adam@0
|
4 StaticPopupDialogs["AUTOGEM_FINISHED"] = {
|
yellowfive@11
|
5 text = L.AMR_GEMTAB_FINISHED,
|
yellowfive@11
|
6 button1 = L.AMR_GEMTAB_BUTTON_OK,
|
adam@0
|
7 timeout = 0,
|
adam@0
|
8 whileDead = true,
|
adam@0
|
9 hideOnEscape = true,
|
adam@0
|
10 preferredIndex = 3, -- avoid some UI taint, see http://www.wowace.com/announcements/how-to-avoid-some-ui-taint/
|
adam@0
|
11 }
|
adam@0
|
12
|
adam@0
|
13 StaticPopupDialogs["AUTOGEM_ONCE"] = {
|
yellowfive@11
|
14 text = L.AMR_GEMTAB_AUTOGEMMING_IN_PROGRESS,
|
yellowfive@11
|
15 button1 = L.AMR_GEMTAB_BUTTON_OK,
|
adam@0
|
16 timeout = 0,
|
adam@0
|
17 whileDead = true,
|
adam@0
|
18 hideOnEscape = true,
|
adam@0
|
19 preferredIndex = 3, -- avoid some UI taint, see http://www.wowace.com/announcements/how-to-avoid-some-ui-taint/
|
adam@0
|
20 }
|
adam@0
|
21
|
adam@0
|
22 -- initialize the GemTab class
|
adam@0
|
23 AskMrRobot.GemTab = AskMrRobot.inheritsFrom(AskMrRobot.Frame)
|
adam@0
|
24
|
adam@0
|
25 local MAX_SLOTS = 4
|
adam@0
|
26
|
adam@0
|
27 -- GemTab contructor
|
adam@17
|
28 function AskMrRobot.GemTab:new(parent)
|
adam@0
|
29 -- create a new frame (if one isn't supplied)
|
adam@17
|
30 local tab = AskMrRobot.Frame:new(nil, parent)
|
adam@0
|
31 tab:SetPoint("TOPLEFT")
|
adam@0
|
32 tab:SetPoint("BOTTOMRIGHT")
|
adam@0
|
33 -- use the GemTab class
|
adam@0
|
34 setmetatable(tab, { __index = AskMrRobot.GemTab })
|
adam@0
|
35 tab:Hide()
|
adam@0
|
36
|
adam@0
|
37 local text = tab:CreateFontString("AmrGemsText1", "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
38 text:SetPoint("TOPLEFT", 0, -5)
|
yellowfive@11
|
39 text:SetText(L.AMR_GEMTAB_GEMS)
|
adam@0
|
40
|
adam@0
|
41 tab.stamp = AskMrRobot.RobotStamp:new(nil, tab)
|
adam@0
|
42 tab.stamp:Hide()
|
yellowfive@11
|
43 tab.stamp.smallText:SetText(L.AMR_GEMTAB_OPTIMAL)
|
adam@0
|
44 tab.stamp:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 2, -15)
|
adam@0
|
45 tab.stamp:SetPoint("RIGHT", tab, "RIGHT", -20, 0)
|
adam@0
|
46
|
adam@0
|
47 text = tab:CreateFontString("AmrGemsText2", "ARTWORK", "GameFontWhite")
|
yellowfive@11
|
48 text:SetText(L.AMR_GEMTAB_X_OPTIMIZE)
|
adam@0
|
49 text:SetPoint("TOPLEFT", "AmrGemsText1", "BOTTOMLEFT", 0, -20)
|
adam@0
|
50 text:SetWidth(200)
|
adam@0
|
51 text:SetJustifyH("LEFT")
|
adam@0
|
52 tab.gemsTextToOptimize = text
|
adam@0
|
53
|
adam@0
|
54 -- autogem button
|
adam@0
|
55 tab.button = CreateFrame("Button", "AmrAutoGemButton", tab, "UIPanelButtonTemplate")
|
adam@0
|
56 tab.button:SetPoint("TOP", "AmrGemsText1", "BOTTOM", 0, -16)
|
adam@0
|
57 tab.button:SetPoint("RIGHT", -40, 0)
|
yellowfive@11
|
58 tab.button:SetText(L.AMR_GEMTAB_AUTOGEM_BUTTON)
|
adam@0
|
59 tab.button:SetWidth(150)
|
adam@0
|
60 tab.button:SetHeight(20)
|
adam@0
|
61 tab.button:SetScript("OnClick", function() tab:startAutoGem() end)
|
adam@0
|
62 tab.button:Hide()
|
adam@0
|
63
|
adam@0
|
64 -- autogem checkbox button
|
adam@0
|
65 tab.usePerfectButton = CreateFrame("CheckButton", "AmrUsePerfectButton", tab, "ChatConfigCheckButtonTemplate")
|
adam@0
|
66 tab.preferPerfects = true
|
adam@0
|
67 tab.usePerfectButton:SetChecked(tab.preferPerfects)
|
adam@0
|
68 tab.usePerfectButton:SetPoint("TOPLEFT", "AmrAutoGemButton", "BOTTOMLEFT", 0, -4)
|
adam@0
|
69 tab.usePerfectButton:SetScript("OnClick", function () tab.preferPerfects = tab.usePerfectButton:GetChecked() end)
|
adam@0
|
70 local text3 = getglobal(tab.usePerfectButton:GetName() .. 'Text')
|
yellowfive@11
|
71 text3:SetText(L.AMR_GEMTAB_PREFER_PERFECT)
|
adam@0
|
72 text3:SetWidth(150)
|
adam@0
|
73 text3:SetPoint("TOPLEFT", tab.usePerfectButton, "TOPRIGHT", 2, -4)
|
adam@0
|
74 tab.usePerfectButton:Hide()
|
adam@0
|
75
|
adam@0
|
76 tab.gemSlotHeader = tab:CreateFontString("AmrBadGemSlot0", "ARTWORK", "GameFontNormal")
|
adam@0
|
77 tab.gemSlotHeader:SetPoint("TOPLEFT", "AmrGemsText2", "BOTTOMLEFT", 0, -20)
|
yellowfive@11
|
78 tab.gemSlotHeader:SetText(L.AMR_GEMTAB_SLOT)
|
adam@0
|
79 tab.gemSlotHeader:SetWidth(90)
|
adam@0
|
80 tab.gemSlotHeader:SetJustifyH("LEFT")
|
adam@0
|
81 tab.gemSlotHeader:Hide()
|
adam@0
|
82 tab.gemCurrentHeader = tab:CreateFontString("AmrBadGemCurrent0_1", "ARTWORK", "GameFontNormal")
|
adam@0
|
83 tab.gemCurrentHeader:SetPoint("TOPLEFT", "AmrBadGemSlot0", "TOPLEFT", 88, 0)
|
adam@0
|
84 tab.gemCurrentHeader:SetWidth(110)
|
yellowfive@11
|
85 tab.gemCurrentHeader:SetText(L.AMR_GEMTAB_CURRENT)
|
adam@0
|
86 tab.gemCurrentHeader:SetJustifyH("LEFT")
|
adam@0
|
87 tab.gemCurrentHeader:Hide()
|
adam@0
|
88 tab.gemOptimizedHeader = tab:CreateFontString("AmrBadGemOptimized0_1", "ARTWORK", "GameFontNormal")
|
adam@0
|
89 tab.gemOptimizedHeader:SetPoint("TOPLEFT", "AmrBadGemCurrent0_1", "TOPLEFT", 70, 0)
|
adam@0
|
90 tab.gemOptimizedHeader:SetPoint("RIGHT", -30, 0)
|
yellowfive@11
|
91 tab.gemOptimizedHeader:SetText(L.AMR_GEMTAB_OPTIMIZED)
|
adam@0
|
92 tab.gemOptimizedHeader:SetJustifyH("LEFT")
|
adam@0
|
93 tab.gemOptimizedHeader:Hide()
|
adam@0
|
94
|
adam@0
|
95 tab.fauxScroll = CreateFrame("ScrollFrame", "testme", tab, "FauxScrollFrameTemplate")
|
adam@0
|
96 tab.fauxScroll:SetPoint("BOTTOMRIGHT", -40, 15)
|
adam@0
|
97 tab.fauxScroll:SetPoint("TOPLEFT", "AmrBadGemSlot0", "BOTTOMLEFT", -12, -5)
|
adam@0
|
98 tab.fauxScroll.parent = tab
|
adam@0
|
99 tab.fauxScroll:SetScript("OnVerticalScroll", AskMrRobot.GemTab.OnVerticalScroll)
|
adam@0
|
100
|
adam@0
|
101 tab.jewelPanels = {}
|
adam@0
|
102 for i = 1, MAX_SLOTS do
|
adam@0
|
103
|
adam@0
|
104 tab.jewelPanels[i] = AskMrRobot.JewelPanel:new("AmrBadGemSlot" .. i, tab)
|
adam@0
|
105 if i == 1 then
|
adam@0
|
106 tab.jewelPanels[i]:SetPoint("TOPLEFT", "AmrBadGemSlot" .. (i-1), "BOTTOMLEFT", -12, -5)
|
adam@0
|
107 --tab.jewelPanels[i]:SetPoint("TOPLEFT")
|
adam@0
|
108 else
|
adam@0
|
109 tab.jewelPanels[i]:SetPoint("TOPLEFT", "AmrBadGemSlot" .. (i-1), "BOTTOMLEFT", 0, -5)
|
adam@0
|
110 end
|
adam@0
|
111 tab.jewelPanels[i]:SetPoint("RIGHT", -40, 0)
|
adam@0
|
112 end
|
adam@0
|
113
|
adam@0
|
114 return tab
|
adam@0
|
115 end
|
adam@0
|
116
|
adam@0
|
117 function AskMrRobot.GemTab:startAutoGem()
|
adam@0
|
118 if AskMrRobot.AutoGem(self.preferPerfects) == false then
|
adam@0
|
119 StaticPopup_Show("AUTOGEM_ONCE")
|
adam@0
|
120 end
|
adam@0
|
121 end
|
adam@0
|
122
|
adam@0
|
123 function AskMrRobot.GemTab:Update()
|
adam@0
|
124 self.count = 0
|
adam@0
|
125
|
adam@0
|
126 local i = 1
|
adam@0
|
127 local badGemTotal = 0
|
adam@0
|
128
|
adam@17
|
129 if AskMrRobot.ComparisonResult.gems then
|
adam@17
|
130 for iSlot = 1, #AskMrRobot.slotIds do
|
adam@17
|
131 local slotId = AskMrRobot.slotIds[iSlot]
|
adam@17
|
132 local badGems = AskMrRobot.ComparisonResult.gems[slotId]
|
adam@17
|
133 if badGems ~= nil then
|
adam@17
|
134 self.count = self.count + 1
|
adam@17
|
135 if i <= MAX_SLOTS then
|
adam@17
|
136 self.jewelPanels[i]:Show()
|
adam@17
|
137 end
|
adam@17
|
138 for g = 1, #badGems.optimized do
|
adam@17
|
139 if not AskMrRobot.AreGemsCompatible(badGems.optimized[g], badGems.current[g]) then
|
adam@17
|
140 badGemTotal = badGemTotal + 1
|
adam@17
|
141 end
|
adam@17
|
142 end
|
adam@17
|
143 i = i + 1
|
adam@0
|
144 end
|
adam@0
|
145 end
|
adam@0
|
146 end
|
adam@0
|
147
|
yellowfive@11
|
148 self.gemsTextToOptimize:SetFormattedText(L.AMR_GEMTAB_TO_OPTIMIZE, badGemTotal)
|
adam@0
|
149
|
adam@0
|
150 --hide/show the headers, depending on if we have any bad gems
|
adam@0
|
151 if self.count == 0 then
|
adam@0
|
152 self.gemSlotHeader:Hide()
|
adam@0
|
153 self.gemCurrentHeader:Hide()
|
adam@0
|
154 self.gemOptimizedHeader:Hide()
|
adam@0
|
155 self.gemsTextToOptimize:Hide()
|
adam@0
|
156 self.button:Hide()
|
adam@0
|
157 self.usePerfectButton:Hide()
|
adam@0
|
158 self.stamp:Show()
|
adam@0
|
159 else
|
adam@0
|
160 self.gemSlotHeader:Show()
|
adam@0
|
161 self.gemCurrentHeader:Show()
|
adam@0
|
162 self.gemOptimizedHeader:Show()
|
adam@0
|
163 self.gemsTextToOptimize:Show()
|
adam@17
|
164 --self.button:Show()
|
adam@17
|
165 --self.usePerfectButton:Show()
|
adam@0
|
166 self.stamp:Hide()
|
adam@0
|
167 end
|
adam@0
|
168
|
adam@0
|
169 for i = self.count + 1, MAX_SLOTS do
|
adam@0
|
170 self.jewelPanels[i]:Hide()
|
adam@0
|
171 i = i + 1
|
adam@0
|
172 end
|
adam@0
|
173
|
adam@0
|
174 AskMrRobot.GemTab.OnUpdate(self.fauxScroll, self.count, #self.jewelPanels, self.jewelPanels[1]:GetHeight())
|
adam@0
|
175 end
|
adam@0
|
176
|
adam@0
|
177 function AskMrRobot.GemTab.OnVerticalScroll(scrollframe, offset)
|
adam@0
|
178 local self = scrollframe.parent
|
adam@0
|
179 FauxScrollFrame_OnVerticalScroll(self.fauxScroll, offset, self.jewelPanels[1]:GetHeight(), AskMrRobot.GemTab.OnUpdate)
|
adam@0
|
180 end
|
adam@0
|
181
|
adam@0
|
182 function AskMrRobot.GemTab.OnUpdate(scrollframe)
|
adam@0
|
183 local self = scrollframe.parent
|
adam@0
|
184 FauxScrollFrame_Update(self.fauxScroll, self.count, #self.jewelPanels, self.jewelPanels[1]:GetHeight())
|
adam@0
|
185 local offset = FauxScrollFrame_GetOffset(scrollframe)
|
adam@0
|
186
|
adam@0
|
187 local i = 1
|
adam@17
|
188 if AskMrRobot.ComparisonResult.gems then
|
adam@17
|
189 for iSlot = 1, #AskMrRobot.slotIds do
|
adam@17
|
190 local slotId = AskMrRobot.slotIds[iSlot]
|
adam@17
|
191 local badGems = AskMrRobot.ComparisonResult.gems[slotId]
|
adam@17
|
192 if badGems ~= nil then
|
adam@17
|
193 if offset > 0 then
|
adam@17
|
194 offset = offset - 1
|
adam@17
|
195 else
|
adam@0
|
196
|
adam@17
|
197 if i > MAX_SLOTS then
|
adam@17
|
198 break
|
adam@17
|
199 end
|
adam@17
|
200
|
adam@17
|
201 self.jewelPanels[i]:SetItemLink(AskMrRobot.slotDisplayText[slotId], AmrDb.Equipped[AmrDb.ActiveSpec][slotId])
|
adam@17
|
202 self.jewelPanels[i]:SetOptimizedGems(badGems.optimized, badGems.current)
|
adam@17
|
203 i = i + 1
|
adam@17
|
204 end
|
adam@0
|
205 end
|
adam@0
|
206 end
|
adam@0
|
207 end
|
adam@0
|
208 end |