Mercurial > wow > inventory
comparison Summary.lua @ 9:3bac0bdd59e2
Close the summary frame when opening the config.
Remove ?track at? data when exporting/importing a group.
Don?t add items when importing a group that are already inside a group.
author | Zerotorescue |
---|---|
date | Sun, 10 Oct 2010 04:37:21 +0200 |
parents | 1a815139e4c3 |
children | c4d0e5d47e10 |
comparison
equal
deleted
inserted
replaced
8:1f30a9ac9027 | 9:3bac0bdd59e2 |
---|---|
70 -- Main Window | 70 -- Main Window |
71 mod.frame = AceGUI:Create("Frame"); | 71 mod.frame = AceGUI:Create("Frame"); |
72 mod.frame:SetTitle("Inventory Summary"); | 72 mod.frame:SetTitle("Inventory Summary"); |
73 mod.frame:SetLayout("Fill"); | 73 mod.frame:SetLayout("Fill"); |
74 mod.frame:SetCallback("OnClose", function(widget) | 74 mod.frame:SetCallback("OnClose", function(widget) |
75 AceGUI:Release(widget); | |
76 mod:CancelTimer(self.tmrUpdater, true); | 75 mod:CancelTimer(self.tmrUpdater, true); |
76 mod:CloseFrame(); | |
77 end); | 77 end); |
78 | 78 |
79 -- ScrollFrame child | 79 -- ScrollFrame child |
80 mod.scrollFrame = AceGUI:Create("ScrollFrame"); | 80 mod.scrollFrame = AceGUI:Create("ScrollFrame"); |
81 mod.scrollFrame:SetLayout("Flow"); | 81 mod.scrollFrame:SetLayout("Flow"); |
82 | 82 |
83 mod.frame:AddChild(mod.scrollFrame); | 83 mod.frame:AddChild(mod.scrollFrame); |
84 | 84 |
85 -- Reset items cache | 85 -- Reset items cache |
86 table.wipe(itemsCache); | 86 table.wipe(itemsCache); |
87 end | |
88 | |
89 function mod:CloseFrame() | |
90 if mod.frame then | |
91 mod.frame:Release(); | |
92 mod.frame = nil; | |
93 end | |
87 end | 94 end |
88 | 95 |
89 local sortMethod = "item"; | 96 local sortMethod = "item"; |
90 local sortDirectory = "ASC"; | 97 local sortDirectory = "ASC"; |
91 local function ReSort(subject) | 98 local function ReSort(subject) |
115 local trackAt = (values.trackAtCharacters or (values.trackAtCharacters == nil and addon.db.global.defaults.trackAtCharacters)); | 122 local trackAt = (values.trackAtCharacters or (values.trackAtCharacters == nil and addon.db.global.defaults.trackAtCharacters)); |
116 | 123 |
117 -- Does this group have any items and do we want to track it at this char? | 124 -- Does this group have any items and do we want to track it at this char? |
118 if values.items and trackAt[playerName] then | 125 if values.items and trackAt[playerName] then |
119 -- Get group settings | 126 -- Get group settings |
120 local stockRequired = (values.minimumStock or (values.minimumStock == nil and addon.db.global.defaults.minimumStock)); | 127 local minimumStock = (values.minimumStock or (values.minimumStock == nil and addon.db.global.defaults.minimumStock)); |
121 local showWhenBelow = (values.summaryThresholdShow or (values.summaryThresholdShow == nil and addon.db.global.defaults.summaryThresholdShow)); | 128 local showWhenBelow = (values.summaryThresholdShow or (values.summaryThresholdShow == nil and addon.db.global.defaults.summaryThresholdShow)); |
122 local priceThreshold = (values.priceThreshold or (values.priceThreshold == nil and addon.db.global.defaults.priceThreshold)); | 129 local priceThreshold = (values.priceThreshold or (values.priceThreshold == nil and addon.db.global.defaults.priceThreshold)); |
123 local hideWhenBelowPriceThreshold = (values.hideFromSummaryWhenBelowPriceThreshold or (values.hideFromSummaryWhenBelowPriceThreshold == nil and addon.db.global.defaults.hideFromSummaryWhenBelowPriceThreshold)); | 130 local hideWhenBelowPriceThreshold = (values.hideFromSummaryWhenBelowPriceThreshold or (values.hideFromSummaryWhenBelowPriceThreshold == nil and addon.db.global.defaults.hideFromSummaryWhenBelowPriceThreshold)); |
124 | 131 |
125 -- Make group container | 132 -- Make group container |
155 lblQuantity:SetCallback("OnClick", function() ReSort("current"); end); | 162 lblQuantity:SetCallback("OnClick", function() ReSort("current"); end); |
156 | 163 |
157 iGroup:AddChild(lblQuantity); | 164 iGroup:AddChild(lblQuantity); |
158 | 165 |
159 -- Required stock | 166 -- Required stock |
160 local lblStockRequired = AceGUI:Create("InteractiveLabel"); | 167 local lblMinimumStock = AceGUI:Create("InteractiveLabel"); |
161 lblStockRequired:SetText("|cfffed000Req.|r"); | 168 lblMinimumStock:SetText("|cfffed000Req.|r"); |
162 lblStockRequired:SetFontObject(GameFontHighlight); | 169 lblMinimumStock:SetFontObject(GameFontHighlight); |
163 lblStockRequired:SetRelativeWidth(0.099); | 170 lblMinimumStock:SetRelativeWidth(0.099); |
164 lblStockRequired:SetCallback("OnClick", function() ReSort("percentage"); end); | 171 lblMinimumStock:SetCallback("OnClick", function() ReSort("percentage"); end); |
165 | 172 |
166 iGroup:AddChild(lblStockRequired); | 173 iGroup:AddChild(lblMinimumStock); |
167 | 174 |
168 -- Lowest value | 175 -- Lowest value |
169 local lblValue = AceGUI:Create("InteractiveLabel"); | 176 local lblValue = AceGUI:Create("InteractiveLabel"); |
170 lblValue:SetText("|cfffed000Value|r"); | 177 lblValue:SetText("|cfffed000Value|r"); |
171 lblValue:SetFontObject(GameFontHighlight); | 178 lblValue:SetFontObject(GameFontHighlight); |
183 | 190 |
184 table.insert(itemsCache[groupName], { | 191 table.insert(itemsCache[groupName], { |
185 id = itemId, | 192 id = itemId, |
186 name = itemName, | 193 name = itemName, |
187 link = itemLink, | 194 link = itemLink, |
188 value = 0,--addon:GetAuctionValue(itemLink), | 195 value = -3,--addon:GetAuctionValue(itemLink), |
189 rarity = itemRarity, | 196 rarity = itemRarity, |
190 count = 0,--addon:GetItemCount(itemId), | 197 count = -3,--addon:GetItemCount(itemId), |
191 set = {}, | 198 set = {}, |
192 }); | 199 }); |
193 CACHE_ITEMS_TOTAL = CACHE_ITEMS_TOTAL + 1; | 200 CACHE_ITEMS_TOTAL = CACHE_ITEMS_TOTAL + 1; |
194 end | 201 end |
195 end | 202 end |
215 else | 222 else |
216 return a.count > b.count; | 223 return a.count > b.count; |
217 end | 224 end |
218 elseif sortMethod == "percentage" then | 225 elseif sortMethod == "percentage" then |
219 if sortDirectory == "ASC" then | 226 if sortDirectory == "ASC" then |
220 return ( a.count / stockRequired ) < ( b.count / stockRequired ); | 227 return ( a.count / lblMinimumStock ) < ( b.count / lblMinimumStock ); |
221 else | 228 else |
222 return ( a.count / stockRequired ) > ( b.count / stockRequired ); | 229 return ( a.count / lblMinimumStock ) > ( b.count / lblMinimumStock ); |
223 end | 230 end |
224 elseif sortMethod == "value" then | 231 elseif sortMethod == "value" then |
225 if sortDirectory == "ASC" then | 232 if sortDirectory == "ASC" then |
226 return a.value < b.value; | 233 return a.value < b.value; |
227 else | 234 else |
230 end | 237 end |
231 end); | 238 end); |
232 | 239 |
233 -- Show stuff | 240 -- Show stuff |
234 for i, item in pairs(itemsCache[groupName]) do | 241 for i, item in pairs(itemsCache[groupName]) do |
235 if ( item.count / stockRequired ) < showWhenBelow and not (hideWhenBelowPriceThreshold and item.value < priceThreshold) then | 242 if ( item.count / minimumStock ) < showWhenBelow and not (hideWhenBelowPriceThreshold and item.value < priceThreshold) then |
236 local btnItemLink = AceGUI:Create("ItemLinkButton"); | 243 local btnItemLink = AceGUI:Create("ItemLinkButton"); |
237 btnItemLink:SetUserData("exec", function() | 244 btnItemLink:SetUserData("exec", function() |
238 print("Win."); | 245 print("Win."); |
239 end); | 246 end); |
240 btnItemLink:SetRelativeWidth(0.7); | 247 btnItemLink:SetRelativeWidth(0.7); |
242 | 249 |
243 iGroup:AddChild(btnItemLink); | 250 iGroup:AddChild(btnItemLink); |
244 | 251 |
245 -- Current quantity | 252 -- Current quantity |
246 local lblQuantity = AceGUI:Create("Label"); | 253 local lblQuantity = AceGUI:Create("Label"); |
247 lblQuantity:SetText(self:ColorCode(item.count, stockRequired)); | 254 lblQuantity:SetText(self:DisplayItemCount(item.count, minimumStock)); |
248 lblQuantity:SetRelativeWidth(0.099); | 255 lblQuantity:SetRelativeWidth(0.099); |
249 | 256 |
250 iGroup:AddChild(lblQuantity); | 257 iGroup:AddChild(lblQuantity); |
251 | 258 |
252 -- Required stock | 259 -- Required stock |
253 local lblStockRequired = AceGUI:Create("Label"); | 260 local lblMinimumStock = AceGUI:Create("Label"); |
254 lblStockRequired:SetText(stockRequired); | 261 lblMinimumStock:SetText(minimumStock); |
255 lblStockRequired:SetRelativeWidth(0.099); | 262 lblMinimumStock:SetRelativeWidth(0.099); |
256 | 263 |
257 iGroup:AddChild(lblStockRequired); | 264 iGroup:AddChild(lblMinimumStock); |
258 | 265 |
259 -- Value | 266 -- Value |
260 local lblValue = AceGUI:Create("Label"); | 267 local lblValue = AceGUI:Create("Label"); |
261 lblValue:SetText(self:DisplayMoney(item.value, priceThreshold)); | 268 lblValue:SetText(self:DisplayMoney(item.value, priceThreshold)); |
262 lblValue:SetRelativeWidth(0.099); | 269 lblValue:SetRelativeWidth(0.099); |
290 local i = 0; | 297 local i = 0; |
291 | 298 |
292 for groupName, items in pairs(itemsCache) do | 299 for groupName, items in pairs(itemsCache) do |
293 local minimumStock = addon:GetOptionByKey(groupName, "minimumStock"); | 300 local minimumStock = addon:GetOptionByKey(groupName, "minimumStock"); |
294 local priceThreshold = addon:GetOptionByKey(groupName, "priceThreshold"); | 301 local priceThreshold = addon:GetOptionByKey(groupName, "priceThreshold"); |
302 local groupUpdated; | |
295 | 303 |
296 for _, item in pairs(items) do | 304 for _, item in pairs(items) do |
297 if item.set then | 305 if item.set then |
298 item.count = addon:GetItemCount(item.id); | 306 item.count = addon:GetItemCount(item.id); |
299 if item.set.current then | 307 if item.set.current and item.set.current.SetText then |
300 item.set.current:SetText(self:ColorCode(item.count, minimumStock)); | 308 item.set.current:SetText(self:DisplayItemCount(item.count, minimumStock)); |
301 end | 309 end |
302 | 310 |
303 item.value = addon:GetAuctionValue(item.link); | 311 item.value = addon:GetAuctionValue(item.link); |
304 if item.set.value then | 312 if item.set.value and item.set.value.SetText then |
305 item.set.value:SetText(self:DisplayMoney(item.value, priceThreshold)); | 313 item.set.value:SetText(self:DisplayMoney(item.value, priceThreshold)); |
306 end | 314 end |
307 | 315 |
308 item.set = nil; | 316 item.set = nil; |
309 | 317 |
310 i = i + 1; | 318 i = i + 1; |
311 CACHE_ITEMS_CURRENT = CACHE_ITEMS_CURRENT + 1; | 319 CACHE_ITEMS_CURRENT = CACHE_ITEMS_CURRENT + 1; |
312 | 320 groupUpdated = true; |
313 mod.frame:SetStatusText(("Caching auction values and item-counts... %d% has already been processed."):format(floor(CACHE_ITEMS_CURRENT / CACHE_ITEMS_TOTAL * 100))); | 321 |
322 if mod.frame then | |
323 mod.frame:SetStatusText(("Caching auction values and item-counts... %d%% has already been processed."):format(floor(CACHE_ITEMS_CURRENT / CACHE_ITEMS_TOTAL * 100))); | |
324 end | |
314 | 325 |
315 if i >= CACHE_ITEMS_PER_UPDATE then | 326 if i >= CACHE_ITEMS_PER_UPDATE then |
316 return; | 327 return; |
317 end | 328 end |
318 end | 329 end |
330 end | |
331 | |
332 if groupUpdated then | |
333 -- Rebuild list so hidden items due to too low prices get added | |
334 self:Build(); | |
319 end | 335 end |
320 end | 336 end |
321 | 337 |
322 -- Reset trackers | 338 -- Reset trackers |
323 CACHE_ITEMS_TOTAL = 0; | 339 CACHE_ITEMS_TOTAL = 0; |
324 CACHE_ITEMS_CURRENT = 0; | 340 CACHE_ITEMS_CURRENT = 0; |
325 | |
326 -- Rebuild list so hidden items due to too low prices get added | |
327 self:Build(); | |
328 | 341 |
329 -- Stop timer | 342 -- Stop timer |
330 self:CancelTimer(self.tmrUpdater, true); | 343 self:CancelTimer(self.tmrUpdater, true); |
331 | 344 |
332 -- Announce | 345 -- Announce |
353 function mod:DisplayMoney(value, priceThreshold) | 366 function mod:DisplayMoney(value, priceThreshold) |
354 if value == -1 then | 367 if value == -1 then |
355 return "|cff0000ffNone up|r"; | 368 return "|cff0000ffNone up|r"; |
356 elseif value == -2 then | 369 elseif value == -2 then |
357 return "|cff0000ffNo AH mod|r"; | 370 return "|cff0000ffNo AH mod|r"; |
371 elseif value == -3 then | |
372 return "|cffffff00Unknown|r"; | |
358 elseif value < priceThreshold then | 373 elseif value < priceThreshold then |
359 return ("|cffff0000%s|r"):format(addon:ReadableMoney(value or 0, true)); | 374 return ("|cffff0000%s|r"):format(addon:ReadableMoney(value or 0, true)); |
360 else | 375 else |
361 return addon:ReadableMoney(value or 0, true); | 376 return addon:ReadableMoney(value or 0, true); |
377 end | |
378 end | |
379 | |
380 function mod:DisplayItemCount(value, minimumStock) | |
381 if value == -3 then | |
382 return "|cffffff00Unknown|r"; | |
383 else | |
384 return self:ColorCode(value, minimumStock); | |
362 end | 385 end |
363 end | 386 end |
364 | 387 |
365 function mod:NumberFormat(num) | 388 function mod:NumberFormat(num) |
366 local formatted = string.gsub(num, "(%d)(%d%d%d)$", "%1,%2", 1); | 389 local formatted = string.gsub(num, "(%d)(%d%d%d)$", "%1,%2", 1); |