annotate ui/ShoppingListTab.lua @ 17:e77e01abce98

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