adam@0
|
1 local _, AskMrRobot = ...
|
adam@0
|
2
|
adam@0
|
3 -- initialize the ShoppingListTab class
|
adam@0
|
4 AskMrRobot.ShoppingListTab = AskMrRobot.inheritsFrom(AskMrRobot.Frame)
|
adam@0
|
5
|
adam@0
|
6 StaticPopupDialogs["SHOPPING_TAB_PLEASE_OPEN"] = {
|
adam@0
|
7 text = "You need to open the mail window for this to work",
|
adam@0
|
8 button1 = "Ok",
|
adam@0
|
9 timeout = 0,
|
adam@0
|
10 whileDead = true,
|
adam@0
|
11 hideOnEscape = true,
|
adam@0
|
12 preferredIndex = 3, -- avoid some UI taint, see http://www.wowace.com/announcements/how-to-avoid-some-ui-taint/
|
adam@0
|
13 }
|
adam@0
|
14
|
adam@0
|
15 function AskMrRobot.ShoppingListTab:new(parent)
|
adam@0
|
16
|
adam@0
|
17 local tab = AskMrRobot.Frame:new(nil, parent)
|
adam@0
|
18 setmetatable(tab, { __index = AskMrRobot.ShoppingListTab })
|
adam@0
|
19 tab:SetPoint("TOPLEFT")
|
adam@0
|
20 tab:SetPoint("BOTTOMRIGHT")
|
adam@0
|
21 tab:Hide()
|
adam@0
|
22 tab:RegisterEvent("AUCTION_HOUSE_CLOSED")
|
adam@0
|
23 tab:RegisterEvent("AUCTION_HOUSE_SHOW")
|
adam@0
|
24 tab:RegisterEvent("MAIL_SHOW")
|
adam@0
|
25 tab:RegisterEvent("MAIL_CLOSED")
|
adam@0
|
26
|
adam@0
|
27 tab.isAuctionHouseVisible = false
|
adam@0
|
28
|
adam@0
|
29 tab:SetScript("OnEvent", function(...)
|
adam@0
|
30 tab:OnEvent(...)
|
adam@0
|
31 end)
|
adam@0
|
32
|
adam@0
|
33 tab.shoppingListHeader = AskMrRobot.FontString:new(tab, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
34 tab.shoppingListHeader:SetPoint("TOPLEFT", 0, -5)
|
adam@0
|
35 tab.shoppingListHeader:SetText("Shopping List")
|
adam@0
|
36
|
adam@0
|
37 tab.shoppingPanel = AskMrRobot.Frame:new(nil, tab)
|
adam@0
|
38 tab.shoppingPanel:SetPoint("TOPLEFT", tab.shoppingListHeader, "BOTTOMLEFT", 0, -10)
|
adam@0
|
39 tab.shoppingPanel:SetPoint("BOTTOMRIGHT", tab, "BOTTOMRIGHT", -20, 17)
|
adam@0
|
40
|
adam@0
|
41
|
adam@0
|
42 tab.sendButton = CreateFrame("Button", "AmrSendButton", tab.shoppingPanel, "UIPanelButtonTemplate")
|
adam@0
|
43 tab.sendButton:SetText("send it!")
|
adam@0
|
44 tab.sendButton:SetPoint("BOTTOMLEFT", 0, 0)
|
adam@0
|
45 tab.sendButton:SetHeight(25)
|
adam@0
|
46 tab.sendButton:SetNormalFontObject("GameFontNormalLarge")
|
adam@0
|
47 tab.sendButton:SetHighlightFontObject("GameFontHighlightLarge")
|
adam@0
|
48 tab.sendButton:SetWidth(150)
|
adam@0
|
49 tab.sendButton:SetScript("OnClick", function()
|
adam@0
|
50 tab:Send()
|
adam@0
|
51 end)
|
adam@0
|
52
|
adam@0
|
53 tab.enchantMaterialsCheckbox = CreateFrame("CheckButton", "AmrEnchantMaterialsCheckbox", tab.shoppingPanel, "ChatConfigCheckButtonTemplate");
|
adam@0
|
54 tab.enchantMaterialsCheckbox:SetChecked(AmrSendSettings.SendEnchantMaterials)
|
adam@0
|
55 tab.enchantMaterialsCheckbox:SetScript("OnClick", function () AmrSendSettings.SendEnchantMaterials = tab.enchantMaterialsCheckbox:GetChecked() end)
|
adam@0
|
56 tab.enchantMaterialsCheckbox:SetPoint("TOPLEFT", tab.sendButton, "TOPLEFT", 0, 25)
|
adam@0
|
57 local text3 = getglobal(tab.enchantMaterialsCheckbox:GetName() .. 'Text')
|
adam@0
|
58 text3:SetFontObject("GameFontHighlightLarge")
|
adam@0
|
59 text3:SetText("Enchant Materials")
|
adam@0
|
60 text3:SetWidth(150)
|
adam@0
|
61 text3:SetPoint("TOPLEFT", tab.enchantMaterialsCheckbox, "TOPRIGHT", 2, -4)
|
adam@0
|
62
|
adam@0
|
63
|
adam@0
|
64 tab.enchantsCheckbox = CreateFrame("CheckButton", "AmrEnchantsCheckbox", tab.shoppingPanel, "ChatConfigCheckButtonTemplate");
|
adam@0
|
65 tab.enchantsCheckbox:SetChecked(AmrSendSettings.SendEnchants)
|
adam@0
|
66 tab.enchantsCheckbox:SetScript("OnClick", function () AmrSendSettings.SendEnchants = tab.enchantsCheckbox:GetChecked() end)
|
adam@0
|
67 tab.enchantsCheckbox:SetPoint("TOPLEFT", tab.sendButton, "TOPLEFT", 0, 50)
|
adam@0
|
68 local text2 = getglobal(tab.enchantsCheckbox:GetName() .. 'Text')
|
adam@0
|
69 text2:SetFontObject("GameFontHighlightLarge")
|
adam@0
|
70 text2:SetText("Enchants")
|
adam@0
|
71 text2:SetWidth(150)
|
adam@0
|
72 text2:SetPoint("TOPLEFT", tab.enchantsCheckbox, "TOPRIGHT", 2, -4)
|
adam@0
|
73
|
adam@0
|
74
|
adam@0
|
75
|
adam@0
|
76 tab.gemsCheckbox = CreateFrame("CheckButton", "AmrGemsCheckbox", tab.shoppingPanel, "ChatConfigCheckButtonTemplate");
|
adam@0
|
77 tab.gemsCheckbox:SetPoint("TOPLEFT", tab.sendButton, "TOPLEFT", 0, 75)
|
adam@0
|
78 tab.gemsCheckbox:SetChecked(AmrSendSettings.SendGems)
|
adam@0
|
79 tab.gemsCheckbox:SetScript("OnClick", function () AmrSendSettings.SendGems = tab.gemsCheckbox:GetChecked() end)
|
adam@0
|
80 local text = getglobal(tab.gemsCheckbox:GetName() .. 'Text')
|
adam@0
|
81 text:SetFontObject("GameFontHighlightLarge")
|
adam@0
|
82 text:SetText("Gems")
|
adam@0
|
83 text:SetWidth(150)
|
adam@0
|
84 text:SetPoint("TOPLEFT", tab.gemsCheckbox, "TOPRIGHT", 2, -4)
|
adam@0
|
85
|
adam@0
|
86
|
adam@0
|
87 tab.sendMessage4 = AskMrRobot.FontString:new(tab.shoppingPanel, nil, "ARTWORK", "GameFontHighlightLarge")
|
adam@0
|
88 tab.sendMessage4:SetText("Include:")
|
adam@0
|
89 tab.sendMessage4:SetPoint("TOPLEFT", tab.gemsCheckbox, "TOPLEFT", 0, 20)
|
adam@0
|
90
|
adam@0
|
91
|
adam@0
|
92 tab.sendMessage3 = AskMrRobot.FontString:new(tab.shoppingPanel, nil, "ARTWORK", "GameFontHighlightLarge")
|
adam@0
|
93 tab.sendMessage3:SetText("Send list to")
|
adam@0
|
94 tab.sendMessage3:SetPoint("TOPLEFT", tab.sendMessage4, "TOPLEFT", 0, 25)
|
adam@0
|
95
|
adam@0
|
96
|
adam@0
|
97 tab.sendMessage2 = AskMrRobot.FontString:new(tab.shoppingPanel, nil, "ARTWORK", "GameFontNormal")
|
adam@0
|
98 tab.sendMessage2:SetTextColor(.5,.5,.5)
|
adam@0
|
99 tab.sendMessage2:SetText("Whisper to a friend or send to a channel, like /raid or /guild.")
|
adam@0
|
100 tab.sendMessage2:SetPoint("TOPLEFT", tab.sendMessage3, "TOPLEFT", 0, 25)
|
adam@0
|
101
|
adam@0
|
102
|
adam@0
|
103 tab.sendMessage1 = AskMrRobot.FontString:new(tab.shoppingPanel, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
104 tab.sendMessage1:SetTextColor(0,1,0)
|
adam@0
|
105 tab.sendMessage1:SetText("Send to a Jewelcraft or Enchanter friend :)")
|
adam@0
|
106 tab.sendMessage1:SetPoint("TOPLEFT", tab.sendMessage2, "TOPLEFT", 0, 25)
|
adam@0
|
107
|
adam@0
|
108
|
adam@0
|
109 tab.scrollFrame = CreateFrame("ScrollFrame", "AmrScrollFrame", tab.shoppingPanel, "UIPanelScrollFrameTemplate")
|
adam@0
|
110 tab.scrollFrame:SetPoint("TOPLEFT", 0, 0)
|
adam@0
|
111 tab.scrollFrame:SetPoint("RIGHT", -20, 0)
|
adam@0
|
112 tab.scrollFrame:SetPoint("BOTTOM", tab.sendMessage1, "TOP", 0, 10)
|
adam@0
|
113
|
adam@0
|
114 tab.scrollParent = AskMrRobot.Frame:new(nil, tab.shoppingPanel)
|
adam@0
|
115 tab.scrollParent:SetPoint("TOPLEFT", 0, 0)
|
adam@0
|
116 tab.scrollParent:SetWidth(tab:GetWidth() - 20)
|
adam@0
|
117 tab.scrollParent:SetHeight(500)
|
adam@0
|
118 tab.scrollFrame:SetScrollChild(tab.scrollParent)
|
adam@0
|
119
|
adam@0
|
120 -- magic to get the scrollbar to work with the scrollwheel...
|
adam@0
|
121 tab.scrollFrame:SetScript("OnMouseWheel", function(arg1, arg2)
|
adam@0
|
122 ScrollFrameTemplate_OnMouseWheel(arg1, arg2, arg1.ScrollBar)
|
adam@0
|
123 end)
|
adam@0
|
124
|
adam@0
|
125 tab.gemsHeader = AskMrRobot.FontString:new(tab.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
126 tab.gemsHeader:SetText("Gems")
|
adam@0
|
127 tab.gemsHeader:SetPoint("TOPLEFT", tab.scrollParent, "TOPLEFT", 0, 0)
|
adam@0
|
128
|
adam@0
|
129 tab.gemsQuantityHeader = AskMrRobot.FontString:new(tab.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
130 tab.gemsQuantityHeader:SetText("Total")
|
adam@0
|
131 tab.gemsQuantityHeader:SetPoint("TOPLEFT", tab.scrollParent, "TOPLEFT", 370, 0)
|
adam@0
|
132
|
adam@0
|
133 tab.enchantsHeader = AskMrRobot.FontString:new(tab.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
134 tab.enchantsHeader:SetText("Enchants")
|
adam@0
|
135
|
adam@0
|
136 tab.enchantsQuantityHeader = AskMrRobot.FontString:new(tab.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
137 tab.enchantsQuantityHeader:SetText("Total")
|
adam@0
|
138 tab.enchantsQuantityHeader:SetPoint("TOPLEFT", tab.enchantsHeader, "TOPLEFT", 370, 0)
|
adam@0
|
139
|
adam@0
|
140 tab.enchantMaterialsHeader = AskMrRobot.FontString:new(tab.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
141 tab.enchantMaterialsHeader:SetText("Enchant Materials")
|
adam@0
|
142
|
adam@0
|
143 tab.enchantMaterialsQuantityHeader = AskMrRobot.FontString:new(tab.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
144 tab.enchantMaterialsQuantityHeader:SetText("Total")
|
adam@0
|
145 tab.enchantMaterialsQuantityHeader:SetPoint("TOPLEFT", tab.enchantMaterialsHeader, "TOPLEFT", 370, 0)
|
adam@0
|
146
|
adam@0
|
147 tab.stamp = AskMrRobot.RobotStamp:new(nil, tab)
|
adam@0
|
148 tab.stamp:Hide()
|
adam@0
|
149 tab.stamp.bigText:SetText("YOUR SHOPPING IS ALL DONE!")
|
adam@0
|
150 tab.stamp.smallText:SetText("Unless you want to buy me a birthday present! I like titanium bolts and robot dogs... Or was it titanium dogs and robot bolts...")
|
adam@0
|
151 tab.stamp:SetPoint("TOPLEFT", tab.shoppingListHeader, "BOTTOMLEFT", 2, -15)
|
adam@0
|
152 tab.stamp:SetPoint("RIGHT", tab, "RIGHT", -30, 0)
|
adam@0
|
153 tab.stamp:SetHeight(92)
|
adam@0
|
154
|
adam@0
|
155 tab.gemIcons = {}
|
adam@0
|
156 tab.gemLinks = {}
|
adam@0
|
157 tab.gemQuantity = {}
|
adam@0
|
158 tab.enchantIcons = {}
|
adam@0
|
159 tab.enchantLinks = {}
|
adam@0
|
160 tab.enchantQuantity = {}
|
adam@0
|
161 tab.enchantMaterialIcons = {}
|
adam@0
|
162 tab.enchantMaterialLinks = {}
|
adam@0
|
163 tab.enchantMaterialQuantity = {}
|
adam@0
|
164
|
adam@0
|
165 -- Create the dropdown, and configure its appearance
|
adam@0
|
166 tab.dropDown = CreateFrame("FRAME", "AmrSendType", tab.shoppingPanel, "UIDropDownMenuTemplate")
|
adam@0
|
167 tab.dropDown:SetPoint("TOPLEFT", tab.sendMessage3, "TOPRIGHT", 0, 5)
|
adam@0
|
168 UIDropDownMenu_SetWidth(tab.dropDown, 140)
|
adam@0
|
169 UIDropDownMenu_SetText(tab.dropDown, AmrSendSettings.SendToType)
|
adam@0
|
170
|
adam@0
|
171 local text = getglobal(tab.dropDown:GetName() .. 'Text')
|
adam@0
|
172 text:SetFontObject("GameFontHighlightLarge")
|
adam@0
|
173
|
adam@0
|
174 local AddButton = function(list, optionText)
|
adam@0
|
175 local info = UIDropDownMenu_CreateInfo()
|
adam@0
|
176 info.justifyH = "RIGHT"
|
adam@0
|
177 info.text = optionText
|
adam@0
|
178 info.checked = AmrSendSettings.SendToType == optionText
|
adam@0
|
179 info.arg1 = optionText
|
adam@0
|
180 info.func = list.SetValue
|
adam@0
|
181 info.owner = list
|
adam@0
|
182 info.fontObject = "GameFontHighlightLarge"
|
adam@0
|
183 info.minWidth = 140
|
adam@0
|
184 return info
|
adam@0
|
185 end
|
adam@0
|
186
|
adam@0
|
187 -- Create and bind the initialization function to the dropdown menu
|
adam@0
|
188 UIDropDownMenu_Initialize(tab.dropDown, function(self, level, menuList)
|
adam@0
|
189 UIDropDownMenu_AddButton(AddButton(self, "a friend"))
|
adam@0
|
190 UIDropDownMenu_AddButton(AddButton(self, "party"))
|
adam@0
|
191 UIDropDownMenu_AddButton(AddButton(self, "raid"))
|
adam@0
|
192 UIDropDownMenu_AddButton(AddButton(self, "guild"))
|
adam@0
|
193 UIDropDownMenu_AddButton(AddButton(self, "channel"))
|
adam@0
|
194 UIDropDownMenu_AddButton(AddButton(self, "mail"))
|
adam@0
|
195 end)
|
adam@0
|
196
|
adam@0
|
197 function tab.dropDown:SetValue(newValue)
|
adam@0
|
198 AmrSendSettings.SendToType = newValue
|
adam@0
|
199 -- Update the text; if we merely wanted it to display newValue, we would not need to do this
|
adam@0
|
200 UIDropDownMenu_SetText(tab.dropDown, AmrSendSettings.SendToType)
|
adam@0
|
201 -- Because this is called from a sub-menu, only that menu level is closed by default.
|
adam@0
|
202 -- Close the entire menu with this next call
|
adam@0
|
203 CloseDropDownMenus()
|
adam@0
|
204 end
|
adam@0
|
205
|
adam@0
|
206 tab.sendTo = CreateFrame("EditBox", "AmrSendTo", tab.shoppingPanel, "InputBoxTemplate" )
|
adam@0
|
207 tab.sendTo:SetPoint("TOPLEFT", tab.dropDown, "TOPRIGHT", 0, 0)
|
adam@0
|
208 tab.sendTo:SetPoint("RIGHT", 0, 0)
|
adam@0
|
209 tab.sendTo:SetHeight(30)
|
adam@0
|
210 tab.sendTo:SetText(AmrSendSettings.SendTo or "")
|
adam@0
|
211 tab.sendTo:SetFontObject("GameFontHighlightLarge")
|
adam@0
|
212 tab.sendTo:SetAutoFocus(false)
|
adam@0
|
213 tab.sendTo:SetScript("OnChar", function()
|
adam@0
|
214 AmrSendSettings.SendTo = tab.sendTo:GetText()
|
adam@0
|
215 end)
|
adam@0
|
216
|
adam@0
|
217 tab.messageQueue = {}
|
adam@0
|
218 return tab
|
adam@0
|
219 end
|
adam@0
|
220
|
adam@0
|
221 -- display a gem icon in a row
|
adam@0
|
222 -- gemInfo is {id, enchantId, color, count }
|
adam@0
|
223 function AskMrRobot.ShoppingListTab:SetGemIcon(row, gemInfo)
|
adam@0
|
224 -- get gem icon for the row
|
adam@0
|
225 local gemIcon = self.gemIcons[row]
|
adam@0
|
226
|
adam@0
|
227 -- if we don't have one
|
adam@0
|
228 if gemIcon == nil then
|
adam@0
|
229 -- make one
|
adam@0
|
230 gemIcon = AskMrRobot.GemIcon:new(nil, self.scrollParent)
|
adam@0
|
231 self.gemIcons[row] = gemIcon
|
adam@0
|
232 gemIcon:SetScript("OnMouseDown", function()
|
adam@0
|
233 self:SearchForGem(row)
|
adam@0
|
234 end)
|
adam@0
|
235
|
adam@0
|
236 -- position it
|
adam@0
|
237 local previous = self.gemsHeader
|
adam@0
|
238 if row > 1 then
|
adam@0
|
239 previous = self.gemIcons[row - 1]
|
adam@0
|
240 end
|
adam@0
|
241 gemIcon:SetPoint("TOPLEFT", previous, "BOTTOMLEFT", 0, -7)
|
adam@0
|
242
|
adam@0
|
243 -- size it
|
adam@0
|
244 gemIcon:SetWidth(24)
|
adam@0
|
245 gemIcon:SetHeight(24)
|
adam@0
|
246
|
adam@0
|
247 -- give it a nice border
|
adam@0
|
248 gemIcon:SetRoundBorder()
|
adam@0
|
249 end
|
adam@0
|
250
|
adam@0
|
251 gemIcon:Show()
|
adam@0
|
252
|
adam@0
|
253 -- make a link for the optimized gem
|
adam@0
|
254 gemLink = select(2, GetItemInfo(gemInfo.id))
|
adam@0
|
255
|
adam@0
|
256 -- set the link (tooltip + icon)
|
adam@0
|
257 gemIcon:SetItemLink(gemLink)
|
adam@0
|
258 gemIcon:SetGemColor(gemInfo.color)
|
adam@0
|
259
|
adam@0
|
260 -- if we didn't get one, its because WoW is slow
|
adam@0
|
261 if not gemLink and gemInfo.id then
|
adam@0
|
262 -- when WoW finally returns the link, set the icon / tooltip
|
adam@0
|
263 AskMrRobot.RegisterItemInfoCallback(gemInfo.id, function(name, link)
|
adam@0
|
264 gemIcon:SetItemLink(link)
|
adam@0
|
265 end)
|
adam@0
|
266 end
|
adam@0
|
267
|
adam@0
|
268 end
|
adam@0
|
269
|
adam@0
|
270
|
adam@0
|
271 -- display a gem icon in a row
|
adam@0
|
272 -- gemInfo is {id, enchantId, color, count }
|
adam@0
|
273 function AskMrRobot.ShoppingListTab:SetGemText(row, gemInfo)
|
adam@0
|
274 -- get gem icon for the row
|
adam@0
|
275 local gemText = self.gemLinks[row]
|
adam@0
|
276
|
adam@0
|
277 -- if we don't have one
|
adam@0
|
278 if gemText == nil then
|
adam@0
|
279 -- make one
|
adam@0
|
280 gemText = AskMrRobot.ItemLinkText:new(nil, self.scrollParent)
|
adam@0
|
281 self.gemLinks[row] = gemText
|
adam@0
|
282 gemText:SetScript("OnMouseDown", function()
|
adam@0
|
283 self:SearchForGem(row)
|
adam@0
|
284 end)
|
adam@0
|
285
|
adam@0
|
286 -- position it
|
adam@0
|
287 local previous = self.gemsHeader
|
adam@0
|
288 if row > 1 then
|
adam@0
|
289 previous = self.gemIcons[row - 1]
|
adam@0
|
290 end
|
adam@0
|
291 gemText:SetPoint("TOPLEFT", previous, "BOTTOMLEFT", 30, -8)
|
adam@0
|
292 gemText:SetPoint("RIGHT", self, "RIGHT", -70, 0)
|
adam@0
|
293 gemText:SetHeight(18)
|
adam@0
|
294 gemText:SetFontSize(15)
|
adam@0
|
295 end
|
adam@0
|
296
|
adam@0
|
297 gemText:Show()
|
adam@0
|
298
|
adam@0
|
299 gemText:SetItemId(gemInfo.id)
|
adam@0
|
300 end
|
adam@0
|
301
|
adam@0
|
302 -- display a gem icon in a row
|
adam@0
|
303 -- gemInfo is {id, enchantId, color, count }
|
adam@0
|
304 function AskMrRobot.ShoppingListTab:SetGemQuantity(row, qty, total)
|
adam@0
|
305 if qty > total then qty = total end
|
adam@0
|
306
|
adam@0
|
307 -- get gem icon for the row
|
adam@0
|
308 local gemText = self.gemQuantity[row]
|
adam@0
|
309
|
adam@0
|
310 -- if we don't have one
|
adam@0
|
311 if gemText == nil then
|
adam@0
|
312 -- make one
|
adam@0
|
313 gemText = AskMrRobot.FontString:new(self.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
314 self.gemQuantity[row] = gemText
|
adam@0
|
315
|
adam@0
|
316 -- position it
|
adam@0
|
317 local previous = self.gemsHeader
|
adam@0
|
318 if row > 1 then
|
adam@0
|
319 previous = self.gemIcons[row - 1]
|
adam@0
|
320 end
|
adam@0
|
321 gemText:SetPoint("TOPLEFT", previous, "BOTTOMLEFT", 370, -8)
|
adam@0
|
322 gemText:SetHeight(18)
|
adam@0
|
323 gemText:SetFontSize(15)
|
adam@0
|
324 end
|
adam@0
|
325
|
adam@0
|
326 gemText:SetText('' .. qty .. '/' .. total)
|
adam@0
|
327 if qty == total then
|
adam@0
|
328 gemText:SetTextColor(0,1,0)
|
adam@0
|
329 else
|
adam@0
|
330 gemText:SetTextColor(1,0,0)
|
adam@0
|
331 end
|
adam@0
|
332 gemText:Show()
|
adam@0
|
333 end
|
adam@0
|
334
|
adam@0
|
335
|
adam@0
|
336 -- display an enchant icon in a row
|
adam@0
|
337 function AskMrRobot.ShoppingListTab:SetEnchantIcon(row, enchantId)
|
adam@0
|
338
|
adam@0
|
339 -- get enchant icon for the row
|
adam@0
|
340 local enchantIcon = self.enchantIcons[row]
|
adam@0
|
341
|
adam@0
|
342 -- if we don't have one
|
adam@0
|
343 if enchantIcon == nil then
|
adam@0
|
344 -- make one
|
adam@0
|
345 enchantIcon = AskMrRobot.EnchantLinkIconAndText:new(nil, self.scrollParent)
|
adam@0
|
346 self.enchantIcons[row] = enchantIcon
|
adam@0
|
347 enchantIcon:SetScript("OnMouseDown", function()
|
adam@0
|
348 self:SearchForEnchant(row)
|
adam@0
|
349 end)
|
adam@0
|
350
|
adam@0
|
351 -- position it
|
adam@0
|
352 if row == 1 then
|
adam@0
|
353 enchantIcon:SetPoint("TOPLEFT", self.enchantsHeader, "BOTTOMLEFT", 0, -12)
|
adam@0
|
354 enchantIcon:SetPoint("RIGHT", self.scrollParent, "RIGHT", -30, 0)
|
adam@0
|
355 else
|
adam@0
|
356 enchantIcon:SetPoint("TOPLEFT", self.enchantIcons[row - 1], "BOTTOMLEFT", 0, -7)
|
adam@0
|
357 enchantIcon:SetPoint("RIGHT", self.scrollParent, "RIGHT", -30, 0)
|
adam@0
|
358 end
|
adam@0
|
359
|
adam@0
|
360 -- size it
|
adam@0
|
361 enchantIcon:SetWidth(24)
|
adam@0
|
362 enchantIcon:SetHeight(24)
|
adam@0
|
363 enchantIcon:SetFontSize(15)
|
adam@0
|
364
|
adam@0
|
365 -- give it a nice border
|
adam@0
|
366 enchantIcon:SetRoundBorder()
|
adam@0
|
367
|
adam@0
|
368 enchantIcon:UseSpellName()
|
adam@0
|
369 end
|
adam@0
|
370
|
adam@0
|
371 enchantIcon:SetEnchantId(enchantId)
|
adam@0
|
372
|
adam@0
|
373 enchantIcon:Show()
|
adam@0
|
374 end
|
adam@0
|
375
|
adam@0
|
376 -- display a gem icon in a row
|
adam@0
|
377 -- gemInfo is {id, enchantId, color, count }
|
adam@0
|
378 function AskMrRobot.ShoppingListTab:SetEnchantQuantity(row, qty, total)
|
adam@0
|
379 if qty > total then qty = total end
|
adam@0
|
380
|
adam@0
|
381 -- get gem icon for the row
|
adam@0
|
382 local enchantText = self.enchantQuantity[row]
|
adam@0
|
383
|
adam@0
|
384 -- if we don't have one
|
adam@0
|
385 if enchantText == nil then
|
adam@0
|
386 -- make one
|
adam@0
|
387 enchantText = AskMrRobot.FontString:new(self.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
388 self.enchantQuantity[row] = enchantText
|
adam@0
|
389
|
adam@0
|
390 -- position it
|
adam@0
|
391 local previous = self.enchantsHeader
|
adam@0
|
392 if row > 1 then
|
adam@0
|
393 previous = self.enchantIcons[row - 1]
|
adam@0
|
394 end
|
adam@0
|
395 enchantText:SetPoint("TOPLEFT", previous, "BOTTOMLEFT", 370, -8)
|
adam@0
|
396 enchantText:SetHeight(18)
|
adam@0
|
397 enchantText:SetFontSize(15)
|
adam@0
|
398 end
|
adam@0
|
399
|
adam@0
|
400 enchantText:SetText('' .. qty .. '/' .. total)
|
adam@0
|
401 if qty == total then
|
adam@0
|
402 enchantText:SetTextColor(0,1,0)
|
adam@0
|
403 else
|
adam@0
|
404 enchantText:SetTextColor(1,0,0)
|
adam@0
|
405 end
|
adam@0
|
406 enchantText:Show()
|
adam@0
|
407 end
|
adam@0
|
408
|
adam@0
|
409 function AskMrRobot.ShoppingListTab:SearchForItem(itemName)
|
adam@0
|
410 if self.isAuctionHouseVisible then
|
adam@0
|
411 QueryAuctionItems(itemName, nil, nil, 0, 0, 0, 0, 0, 0, 0)
|
adam@0
|
412 end
|
adam@0
|
413 end
|
adam@0
|
414
|
adam@0
|
415 function AskMrRobot.ShoppingListTab:SearchForGem(row)
|
adam@0
|
416 self:SearchForItem(self.gemLinks[row].itemName)
|
adam@0
|
417 end
|
adam@0
|
418
|
adam@0
|
419 function AskMrRobot.ShoppingListTab:SearchForEnchant(row)
|
adam@0
|
420 self:SearchForItem(self.enchantIcons[row].itemName)
|
adam@0
|
421 end
|
adam@0
|
422
|
adam@0
|
423 function AskMrRobot.ShoppingListTab:SearchForEnchantMaterial(row)
|
adam@0
|
424 self:SearchForItem(self.enchantMaterialLinks[row].itemName)
|
adam@0
|
425 end
|
adam@0
|
426
|
adam@0
|
427
|
adam@0
|
428 -- display an enchant material icon in a row
|
adam@0
|
429 function AskMrRobot.ShoppingListTab:SetEnchantMaterialIcon(row, itemId)
|
adam@0
|
430 -- get enchant material icon for the row
|
adam@0
|
431 local materialIcon = self.enchantMaterialIcons[row]
|
adam@0
|
432
|
adam@0
|
433 -- if we don't have one
|
adam@0
|
434 if materialIcon == nil then
|
adam@0
|
435 -- make one
|
adam@0
|
436 materialIcon = AskMrRobot.ItemIcon:new(nil, self.scrollParent)
|
adam@0
|
437 self.enchantMaterialIcons[row] = materialIcon
|
adam@0
|
438 materialIcon:SetScript("OnMouseDown", function()
|
adam@0
|
439 self:SearchForEnchantMaterial(row)
|
adam@0
|
440 end)
|
adam@0
|
441
|
adam@0
|
442 -- position it
|
adam@0
|
443 local previous = self.enchantMaterialsHeader
|
adam@0
|
444 if row > 1 then
|
adam@0
|
445 previous = self.enchantMaterialIcons[row - 1]
|
adam@0
|
446 end
|
adam@0
|
447 materialIcon:SetPoint("TOPLEFT", previous, "BOTTOMLEFT", 0, -7)
|
adam@0
|
448
|
adam@0
|
449 -- size it
|
adam@0
|
450 materialIcon:SetWidth(24)
|
adam@0
|
451 materialIcon:SetHeight(24)
|
adam@0
|
452
|
adam@0
|
453 -- give it a nice border
|
adam@0
|
454 materialIcon:SetRoundBorder()
|
adam@0
|
455 end
|
adam@0
|
456
|
adam@0
|
457 materialIcon:Show()
|
adam@0
|
458
|
adam@0
|
459 -- make a link for the optimized gem
|
adam@0
|
460 local itemLink = select(2, GetItemInfo(itemId))
|
adam@0
|
461
|
adam@0
|
462 materialIcon:SetItemLink(itemLink)
|
adam@0
|
463
|
adam@0
|
464 -- if we didn't get one, its because WoW is slow
|
adam@0
|
465 if not itemLink and itemId then
|
adam@0
|
466 -- when WoW finally returns the link, set the icon / tooltip
|
adam@0
|
467 AskMrRobot.RegisterItemInfoCallback(itemId, function(name, link)
|
adam@0
|
468 materialIcon:SetItemLink(link)
|
adam@0
|
469 end)
|
adam@0
|
470 end
|
adam@0
|
471 end
|
adam@0
|
472
|
adam@0
|
473
|
adam@0
|
474 -- display an enchant material link in a row
|
adam@0
|
475 function AskMrRobot.ShoppingListTab:SetEnchantMaterialLink(row, itemId)
|
adam@0
|
476 -- get gem icon for the row
|
adam@0
|
477 local materialLink = self.enchantMaterialLinks[row]
|
adam@0
|
478
|
adam@0
|
479 -- if we don't have one
|
adam@0
|
480 if materialLink == nil then
|
adam@0
|
481 -- make one
|
adam@0
|
482 materialLink = AskMrRobot.ItemLinkText:new(nil, self.scrollParent)
|
adam@0
|
483 self.enchantMaterialLinks[row] = materialLink
|
adam@0
|
484 materialLink:SetScript("OnMouseDown", function()
|
adam@0
|
485 self:SearchForEnchantMaterial(row)
|
adam@0
|
486 end)
|
adam@0
|
487
|
adam@0
|
488 -- position it
|
adam@0
|
489 local previous = self.enchantMaterialsHeader
|
adam@0
|
490 if row > 1 then
|
adam@0
|
491 previous = self.enchantMaterialIcons[row - 1]
|
adam@0
|
492 end
|
adam@0
|
493 materialLink:SetPoint("TOPLEFT", previous, "BOTTOMLEFT", 30, -8)
|
adam@0
|
494 materialLink:SetPoint("RIGHT", self, "RIGHT", -30, 0)
|
adam@0
|
495 materialLink:SetHeight(18)
|
adam@0
|
496 materialLink:SetFontSize(15)
|
adam@0
|
497 end
|
adam@0
|
498
|
adam@0
|
499 materialLink:Show()
|
adam@0
|
500
|
adam@0
|
501 materialLink:SetItemId(itemId)
|
adam@0
|
502 materialLink.itemId = itemId
|
adam@0
|
503 end
|
adam@0
|
504
|
adam@0
|
505 -- display a gem icon in a row
|
adam@0
|
506 -- gemInfo is {id, enchantId, color, count }
|
adam@0
|
507 function AskMrRobot.ShoppingListTab:SetEnchantMaterialQuantity(row, qty, total)
|
adam@0
|
508 if qty > total then qty = total end
|
adam@0
|
509
|
adam@0
|
510 -- get gem icon for the row
|
adam@0
|
511 local enchantText = self.enchantMaterialQuantity[row]
|
adam@0
|
512
|
adam@0
|
513 -- if we don't have one
|
adam@0
|
514 if enchantText == nil then
|
adam@0
|
515 -- make one
|
adam@0
|
516 enchantText = AskMrRobot.FontString:new(self.scrollParent, nil, "ARTWORK", "GameFontNormalLarge")
|
adam@0
|
517 self.enchantMaterialQuantity[row] = enchantText
|
adam@0
|
518
|
adam@0
|
519 -- position it
|
adam@0
|
520 local previous = self.enchantMaterialsHeader
|
adam@0
|
521 if row > 1 then
|
adam@0
|
522 previous = self.enchantMaterialIcons[row - 1]
|
adam@0
|
523 end
|
adam@0
|
524 enchantText:SetPoint("TOPLEFT", previous, "BOTTOMLEFT", 370, -8)
|
adam@0
|
525 enchantText:SetHeight(18)
|
adam@0
|
526 enchantText:SetFontSize(15)
|
adam@0
|
527 end
|
adam@0
|
528
|
adam@0
|
529 enchantText:SetText('' .. qty .. '/' .. total)
|
adam@0
|
530 if qty == total then
|
adam@0
|
531 enchantText:SetTextColor(0,1,0)
|
adam@0
|
532 else
|
adam@0
|
533 enchantText:SetTextColor(1,0,0)
|
adam@0
|
534 end
|
adam@0
|
535 enchantText:Show()
|
adam@0
|
536 end
|
adam@0
|
537
|
adam@0
|
538 function AskMrRobot.ShoppingListTab:HasStuffToBuy()
|
adam@0
|
539
|
adam@0
|
540 local gemList, enchantList, enchantMaterials = self:CalculateItems()
|
adam@0
|
541
|
adam@0
|
542 local count = 0
|
adam@0
|
543 for gemId, gemInfo in AskMrRobot.spairs(gemList) do
|
adam@0
|
544 count = count + gemInfo.total - gemInfo.count
|
adam@0
|
545 end
|
adam@0
|
546 for slot, enchant in AskMrRobot.spairs(enchantList) do
|
adam@0
|
547 count = count + enchant.total - enchant.count
|
adam@0
|
548 end
|
adam@0
|
549
|
adam@0
|
550 return count > 0
|
adam@0
|
551 end
|
adam@0
|
552
|
adam@0
|
553 function AskMrRobot.ShoppingListTab:CalculateItems()
|
adam@0
|
554 -- build a map of missing gem-ids -> {id, color, enchantid, count, total}
|
adam@0
|
555 local gemList = {}
|
adam@0
|
556 for slotNum, badGems in pairs(AskMrRobot.itemDiffs.gems) do
|
adam@0
|
557 --badGems: {current: array of enchant ids, optimized: (array of {id, color, enchantId})
|
adam@0
|
558 for i = 1, #badGems.optimized do
|
adam@0
|
559 if badGems.badGems[i] then
|
adam@0
|
560 local goodGem = badGems.optimized[i]
|
adam@0
|
561 if goodGem.id ~= 0 then
|
adam@0
|
562 local gem = gemList[goodGem.id]
|
adam@0
|
563 if gem == nil then
|
adam@0
|
564 gemList[goodGem.id] = {id = goodGem.id, enchantId = goodGem.enchantId, color = goodGem.color, count = 0, total = 1}
|
adam@0
|
565 else
|
adam@0
|
566 gem.total = gem.total + 1
|
adam@0
|
567 end
|
adam@0
|
568 end
|
adam@0
|
569 end
|
adam@0
|
570 end
|
adam@0
|
571 end
|
adam@0
|
572
|
adam@0
|
573 local enchantList = {}
|
adam@0
|
574 for slot, enchantData in AskMrRobot.sortSlots(AskMrRobot.itemDiffs.enchants) do
|
adam@0
|
575 local id = AskMrRobot.getEnchantItemId(enchantData.optimized) or enchantData.optimized
|
adam@0
|
576 local qty = enchantList[id]
|
adam@0
|
577 if qty then
|
adam@0
|
578 qty.total = qty.total + 1
|
adam@0
|
579 else
|
adam@0
|
580 qty = { count = 0, total = 1, optimized = enchantData.optimized }
|
adam@0
|
581 enchantList[id] = qty
|
adam@0
|
582 end
|
adam@0
|
583 end
|
adam@0
|
584
|
adam@0
|
585 local enchantMaterials = {}
|
adam@0
|
586 for slot, enchantData in pairs(AskMrRobot.itemDiffs.enchants) do
|
adam@0
|
587 AskMrRobot.addEnchantMaterials(enchantMaterials, enchantData.optimized)
|
adam@0
|
588 end
|
adam@0
|
589
|
adam@0
|
590 --substract any inventory we already have in the bank
|
adam@0
|
591 for i = 1, #AmrBankItemsAndCounts do
|
adam@0
|
592 local itemId = AskMrRobot.getItemIdFromLink(AmrBankItemsAndCounts[i].link)
|
adam@0
|
593 if itemId then
|
adam@0
|
594 local gem = gemList[itemId]
|
adam@0
|
595 if gem then
|
adam@0
|
596 gem.count = gem.count + AmrBankItemsAndCounts[i].count
|
adam@0
|
597 else
|
adam@0
|
598 local alternateGemId = AskMrRobot.gemDuplicates[itemId]
|
adam@0
|
599 if alternateGemId then
|
adam@0
|
600 gem = gemList[alternateGemId]
|
adam@0
|
601 if gem then
|
adam@0
|
602 gem.count = gem.count + AmrBankItemsAndCounts[i].count
|
adam@0
|
603 end
|
adam@0
|
604 end
|
adam@0
|
605 end
|
adam@0
|
606 local material = enchantMaterials[itemId]
|
adam@0
|
607 if material then
|
adam@0
|
608 material.count = material.count + AmrBankItemsAndCounts[i].count
|
adam@0
|
609 end
|
adam@0
|
610 local enchant = enchantList[itemId]
|
adam@0
|
611 if enchant then
|
adam@0
|
612 enchant.count = enchant.count + AmrBankItemsAndCounts[i].count
|
adam@0
|
613 end
|
adam@0
|
614 end
|
adam@0
|
615 end
|
adam@0
|
616
|
adam@0
|
617 local _ , bagItemsWithCount = AskMrRobot.ScanBags()
|
adam@0
|
618
|
adam@0
|
619 --substract any inventory we already have in bags
|
adam@0
|
620 for i = 1, #bagItemsWithCount do
|
adam@0
|
621 local itemId = AskMrRobot.getItemIdFromLink(bagItemsWithCount[i].link)
|
adam@0
|
622 if itemId then
|
adam@0
|
623 local gem = gemList[itemId]
|
adam@0
|
624 if gem then
|
adam@0
|
625 gem.count = gem.count + bagItemsWithCount[i].count
|
adam@0
|
626 else
|
adam@0
|
627 local alternateGemId = AskMrRobot.gemDuplicates[itemId]
|
adam@0
|
628 if alternateGemId then
|
adam@0
|
629 gem = gemList[alternateGemId]
|
adam@0
|
630 if gem then
|
adam@0
|
631 gem.count = gem.count + bagItemsWithCount[i].count
|
adam@0
|
632 end
|
adam@0
|
633 end
|
adam@0
|
634 end
|
adam@0
|
635 local material = enchantMaterials[itemId]
|
adam@0
|
636 if material then
|
adam@0
|
637 material.count = material.count + bagItemsWithCount[i].count
|
adam@0
|
638 end
|
adam@0
|
639 local enchant = enchantList[itemId]
|
adam@0
|
640 if enchant then
|
adam@0
|
641 enchant.count = enchant.count + bagItemsWithCount[i].count
|
adam@0
|
642 end
|
adam@0
|
643 end
|
adam@0
|
644 end
|
adam@0
|
645
|
adam@0
|
646 return gemList, enchantList, enchantMaterials
|
adam@0
|
647 end
|
adam@0
|
648
|
adam@0
|
649 function AskMrRobot.ShoppingListTab:Update()
|
adam@0
|
650
|
adam@0
|
651 local gemList, enchantList, enchantMaterials = self:CalculateItems()
|
adam@0
|
652
|
adam@0
|
653 -- update the UI
|
adam@0
|
654 local lastControl = nil
|
adam@0
|
655 local row = 1
|
adam@0
|
656 for gemId, gemInfo in AskMrRobot.spairs(gemList) do
|
adam@0
|
657 self:SetGemIcon(row, gemInfo)
|
adam@0
|
658 self:SetGemText(row, gemInfo)
|
adam@0
|
659 self:SetGemQuantity(row, gemInfo.count, gemInfo.total)
|
adam@0
|
660 lastControl = self.gemIcons[row]
|
adam@0
|
661 row = row + 1
|
adam@0
|
662 end
|
adam@0
|
663
|
adam@0
|
664 -- hide any extra gem icons
|
adam@0
|
665 for i = row, #self.gemIcons do
|
adam@0
|
666 self.gemIcons[i]:Hide()
|
adam@0
|
667 self.gemLinks[i]:Hide()
|
adam@0
|
668 self.gemQuantity[i]:Hide()
|
adam@0
|
669 end
|
adam@0
|
670
|
adam@0
|
671 -- hide / show the gems header, and position the enchant headers
|
adam@0
|
672 if row > 1 then
|
adam@0
|
673 self.gemsHeader:Show()
|
adam@0
|
674 self.gemsQuantityHeader:Show()
|
adam@0
|
675 self.enchantsHeader:SetPoint("TOPLEFT", self.gemIcons[row - 1], "BOTTOMLEFT", 0, -15)
|
adam@0
|
676 else
|
adam@0
|
677 self.gemsHeader:Hide()
|
adam@0
|
678 self.gemsQuantityHeader:Hide()
|
adam@0
|
679 self.enchantsHeader:SetPoint("TOPLEFT", self.scrollParent, "TOPLEFT", 0, 0)
|
adam@0
|
680 end
|
adam@0
|
681
|
adam@0
|
682 row = 1
|
adam@0
|
683 for slot, enchant in AskMrRobot.spairs(enchantList) do
|
adam@0
|
684 self:SetEnchantIcon(row, enchant.optimized)
|
adam@0
|
685 self:SetEnchantQuantity(row, enchant.count, enchant.total)
|
adam@0
|
686 lastControl = self.enchantIcons[row]
|
adam@0
|
687 row = row + 1
|
adam@0
|
688 end
|
adam@0
|
689
|
adam@0
|
690 -- hide any extra enchant icons
|
adam@0
|
691 for i = row, #self.enchantIcons do
|
adam@0
|
692 self.enchantIcons[i]:Hide()
|
adam@0
|
693 self.enchantQuantity[i]:Hide()
|
adam@0
|
694 end
|
adam@0
|
695
|
adam@0
|
696 -- hide / show the enchants header, and position the enchant materials headers
|
adam@0
|
697 if row > 1 then
|
adam@0
|
698 self.enchantsHeader:Show()
|
adam@0
|
699 self.enchantsQuantityHeader:Show()
|
adam@0
|
700 self.enchantMaterialsHeader:SetPoint("TOPLEFT", self.enchantIcons[row - 1], "BOTTOMLEFT", 0, -15)
|
adam@0
|
701 else
|
adam@0
|
702 self.enchantsHeader:Hide()
|
adam@0
|
703 self.enchantsQuantityHeader:Hide()
|
adam@0
|
704 self.enchantMaterialsHeader:SetPoint("TOPLEFT", self.scrollParent, "TOPLEFT", 0, 0)
|
adam@0
|
705 end
|
adam@0
|
706
|
adam@0
|
707 row = 1
|
adam@0
|
708 for itemId, count in AskMrRobot.spairs(enchantMaterials) do
|
adam@0
|
709 self:SetEnchantMaterialIcon(row, itemId)
|
adam@0
|
710 self:SetEnchantMaterialLink(row, itemId)
|
adam@0
|
711 self:SetEnchantMaterialQuantity(row, count.count, count.total)
|
adam@0
|
712 lastControl = self.enchantMaterialIcons[row]
|
adam@0
|
713 row = row + 1
|
adam@0
|
714 end
|
adam@0
|
715
|
adam@0
|
716 for i = row, #self.enchantMaterialIcons do
|
adam@0
|
717 self.enchantMaterialIcons[i]:Hide()
|
adam@0
|
718 self.enchantMaterialLinks[i]:Hide()
|
adam@0
|
719 self.enchantMaterialQuantity[i]:Hide()
|
adam@0
|
720 end
|
adam@0
|
721
|
adam@0
|
722 if row == 1 then
|
adam@0
|
723 self.enchantMaterialsHeader:Hide()
|
adam@0
|
724 self.enchantMaterialsQuantityHeader:Hide()
|
adam@0
|
725 else
|
adam@0
|
726 self.enchantMaterialsHeader:Show()
|
adam@0
|
727 self.enchantMaterialsQuantityHeader:Show()
|
adam@0
|
728 end
|
adam@0
|
729
|
adam@0
|
730 -- fix up the scrollbar length
|
adam@0
|
731 if lastControl then
|
adam@0
|
732 local height = self.scrollParent:GetTop() - lastControl:GetBottom()
|
adam@0
|
733 self.scrollParent:SetHeight(height)
|
adam@0
|
734 if height < self.scrollFrame:GetHeight() then
|
adam@0
|
735 self.scrollFrame.ScrollBar:Hide()
|
adam@0
|
736 else
|
adam@0
|
737 self.scrollFrame:Show()
|
adam@0
|
738 self.scrollFrame.ScrollBar:Show()
|
adam@0
|
739 end
|
adam@0
|
740 self.stamp:Hide()
|
adam@0
|
741 self.shoppingPanel:Show()
|
adam@0
|
742 else
|
adam@0
|
743 self.scrollFrame.ScrollBar:Hide()
|
adam@0
|
744 self.shoppingPanel:Hide()
|
adam@0
|
745 self.stamp:Show()
|
adam@0
|
746 end
|
adam@0
|
747 end
|
adam@0
|
748
|
adam@0
|
749
|
adam@0
|
750 function AskMrRobot.ShoppingListTab:OnEvent(frame, event, ...)
|
adam@0
|
751 local handler = self["On_" .. event]
|
adam@0
|
752 if handler then
|
adam@0
|
753 handler(self, ...)
|
adam@0
|
754 end
|
adam@0
|
755 end
|
adam@0
|
756
|
adam@0
|
757 function AskMrRobot.ShoppingListTab:On_MAIL_SHOW()
|
adam@0
|
758 self.mailOpen = true
|
adam@0
|
759 end
|
adam@0
|
760
|
adam@0
|
761 function AskMrRobot.ShoppingListTab:On_MAIL_CLOSED()
|
adam@0
|
762 self.mailOpen = nil
|
adam@0
|
763 end
|
adam@0
|
764
|
adam@0
|
765 function AskMrRobot.ShoppingListTab:On_AUCTION_HOUSE_SHOW()
|
adam@0
|
766 self.isAuctionHouseVisible = true
|
adam@0
|
767 end
|
adam@0
|
768
|
adam@0
|
769 function AskMrRobot.ShoppingListTab:On_AUCTION_HOUSE_CLOSED()
|
adam@0
|
770 self.isAuctionHouseVisible = false
|
adam@0
|
771 end
|
adam@0
|
772
|
adam@0
|
773 function AskMrRobot.ShoppingListTab:sendMail()
|
adam@0
|
774
|
adam@0
|
775 -- need mail window to be open for this to work
|
adam@0
|
776 if not self.mailOpen then
|
adam@0
|
777 StaticPopup_Show("SHOPPING_TAB_PLEASE_OPEN")
|
adam@0
|
778 return
|
adam@0
|
779 end
|
adam@0
|
780
|
adam@0
|
781 local message = "Mr. Robot says I need the following to optimize my gear:\n"
|
adam@0
|
782
|
adam@0
|
783 local gemList, enchantList, enchantMaterials = self:CalculateItems()
|
adam@0
|
784
|
adam@0
|
785 if AmrSendSettings.SendGems then
|
adam@0
|
786 for k,v in pairs(gemList) do
|
adam@0
|
787 --exclude jewelcrafter gems
|
adam@0
|
788 if not AskMrRobot.JewelcrafterGems[k] then
|
adam@0
|
789 local needed = v.total - v.count
|
adam@0
|
790 if needed > 0 then
|
adam@0
|
791 local itemName = GetItemInfo(k)
|
adam@0
|
792 if itemName then
|
adam@0
|
793 message = message .. "\n" .. needed .. "x " .. itemName
|
adam@0
|
794 end
|
adam@0
|
795 end
|
adam@0
|
796 end
|
adam@0
|
797 end
|
adam@0
|
798 end
|
adam@0
|
799
|
adam@0
|
800 if AmrSendSettings.SendEnchants then
|
adam@0
|
801 for k,v in pairs(enchantList) do
|
adam@0
|
802 local needed = v.total - v.count
|
adam@0
|
803 if needed > 0 then
|
adam@0
|
804 local itemName = GetItemInfo(k)
|
adam@0
|
805 if itemName then
|
adam@0
|
806 message = message .. "\n" .. needed .. "x " .. itemName
|
adam@0
|
807 end
|
adam@0
|
808 end
|
adam@0
|
809 end
|
adam@0
|
810 end
|
adam@0
|
811
|
adam@0
|
812 if AmrSendSettings.SendEnchantMaterials then
|
adam@0
|
813 for k,v in pairs(enchantMaterials) do
|
adam@0
|
814 local needed = v.total - v.count
|
adam@0
|
815 if needed > 0 then
|
adam@0
|
816 local itemName = GetItemInfo(k)
|
adam@0
|
817 if itemName then
|
adam@0
|
818 message = message .. "\n" .. needed .. "x " .. itemName
|
adam@0
|
819 end
|
adam@0
|
820 end
|
adam@0
|
821 end
|
adam@0
|
822 end
|
adam@0
|
823
|
adam@0
|
824 MailFrameTab_OnClick(nil, 2)
|
adam@0
|
825 if AmrSendSettings.SendGems then
|
adam@0
|
826 if AmrSendSettings.SendEnchants then
|
adam@0
|
827 SendMailSubjectEditBox:SetText('Request for gems and enchants')
|
adam@0
|
828 else
|
adam@0
|
829 SendMailSubjectEditBox:SetText('Request for gems')
|
adam@0
|
830 end
|
adam@0
|
831 else
|
adam@0
|
832 SendMailSubjectEditBox:SetText('Request for enchants')
|
adam@0
|
833 end
|
adam@0
|
834 SendMailNameEditBox:SetText(AmrSendSettings.SendTo)
|
adam@0
|
835 SendMailBodyEditBox:SetText(message)
|
adam@0
|
836 end
|
adam@0
|
837
|
adam@0
|
838 function AskMrRobot.ShoppingListTab:Send()
|
adam@0
|
839 local chatType = nil
|
adam@0
|
840 if AmrSendSettings.SendToType == "party" then
|
adam@0
|
841 chatType = "PARTY"
|
adam@0
|
842 elseif AmrSendSettings.SendToType == "guild" then
|
adam@0
|
843 chatType = "GUILD"
|
adam@0
|
844 elseif AmrSendSettings.SendToType == "raid" then
|
adam@0
|
845 chatType = "RAID"
|
adam@0
|
846 elseif AmrSendSettings.SendToType == "channel" then
|
adam@0
|
847 chatType = "CHANNEL"
|
adam@0
|
848 elseif AmrSendSettings.SendToType == "mail" then
|
adam@0
|
849 self:sendMail()
|
adam@0
|
850 return
|
adam@0
|
851 else
|
adam@0
|
852 chatType = "WHISPER"
|
adam@0
|
853 end
|
adam@0
|
854
|
adam@0
|
855 local message = "Mr. Robot says I need"
|
adam@0
|
856 local count = 0
|
adam@0
|
857
|
adam@0
|
858
|
adam@0
|
859 local gemList, enchantList, enchantMaterials = self:CalculateItems()
|
adam@0
|
860
|
adam@0
|
861 local items = {}
|
adam@0
|
862 if AmrSendSettings.SendGems then
|
adam@0
|
863 for k,v in pairs(gemList) do
|
adam@0
|
864 if not AskMrRobot.JewelcrafterGems[k] then
|
adam@0
|
865 local needed = v.total - v.count
|
adam@0
|
866 if needed > 0 then
|
adam@0
|
867 tinsert(items, {id = k, needed = needed})
|
adam@0
|
868 end
|
adam@0
|
869 end
|
adam@0
|
870 end
|
adam@0
|
871 end
|
adam@0
|
872
|
adam@0
|
873 if AmrSendSettings.SendEnchants then
|
adam@0
|
874 for k,v in pairs(enchantList) do
|
adam@0
|
875 local needed = v.total - v.count
|
adam@0
|
876 if needed > 0 then
|
adam@0
|
877 tinsert(items, {id = k, needed = needed})
|
adam@0
|
878 end
|
adam@0
|
879 end
|
adam@0
|
880 end
|
adam@0
|
881
|
adam@0
|
882 if AmrSendSettings.SendEnchantMaterials then
|
adam@0
|
883 for k,v in pairs(enchantMaterials) do
|
adam@0
|
884 local needed = v.total - v.count
|
adam@0
|
885 if needed > 0 then
|
adam@0
|
886 tinsert(items, {id = k, needed = needed})
|
adam@0
|
887 end
|
adam@0
|
888 end
|
adam@0
|
889 end
|
adam@0
|
890
|
adam@0
|
891 for i, entry in ipairs(items) do
|
adam@0
|
892 local _, link = GetItemInfo(entry.id)
|
adam@0
|
893 if link then
|
adam@0
|
894 message = message .. " " .. entry.needed .. "x " .. link
|
adam@0
|
895 count = count + 1
|
adam@0
|
896 if count == 2 then
|
adam@0
|
897 tinsert(self.messageQueue, {message = message, chatType = chatType, chatChannel = AmrSendSettings.SendTo})
|
adam@0
|
898 count = 0
|
adam@0
|
899 message = "Mr. Robot says I need"
|
adam@0
|
900 end
|
adam@0
|
901 end
|
adam@0
|
902 end
|
adam@0
|
903
|
adam@0
|
904 if count > 0 then
|
adam@0
|
905 tinsert(self.messageQueue, {message = message, chatType = chatType, chatChannel = AmrSendSettings.SendTo})
|
adam@0
|
906 end
|
adam@0
|
907
|
adam@0
|
908 self:SendNextMessage()
|
adam@0
|
909 end
|
adam@0
|
910
|
adam@0
|
911 function AskMrRobot.ShoppingListTab:SendNextMessage()
|
adam@0
|
912 while #self.messageQueue > 0 do
|
adam@0
|
913 local entry = self.messageQueue[1]
|
adam@0
|
914 table.remove(self.messageQueue, 1)
|
adam@0
|
915 SendChatMessage(entry.message, entry.chatType, nil, entry.chatChannel)
|
adam@0
|
916 end
|
adam@0
|
917 end |