Mercurial > wow > inventory
comparison Modules/Summary.lua @ 122:6724bc8eface
Reduced usage of global functions by defining them locally.
author | Zerotorescue |
---|---|
date | Sat, 15 Jan 2011 18:52:01 +0100 |
parents | d3fbb5676a5e |
children | 396c2960d54d |
comparison
equal
deleted
inserted
replaced
121:ca6280dc2f5b | 122:6724bc8eface |
---|---|
1 local addon = select(2, ...); -- Get a reference to the main addon object | 1 local addon = select(2, ...); -- Get a reference to the main addon object |
2 local mod = addon:NewModule("Summary", "AceEvent-3.0", "AceTimer-3.0"); -- register a new module, Summary: resposible for building the summary window | 2 local mod = addon:NewModule("Summary", "AceEvent-3.0", "AceTimer-3.0"); -- register a new module, Summary: resposible for building the summary window |
3 | 3 |
4 local _G = _G; -- prevent looking up of the global table | |
5 local sformat, sgsub, supper, mceil, mfloor, tinsert, twipe, tsort = _G.string.format, _G.string.gsub, _G.string.upper, _G.math.ceil, _G.math.floor, _G.table.insert, _G.table.wipe, _G.table.sort; | |
6 local pairs, type, select = _G.pairs, _G.type, _G.select; | |
7 | |
4 local unknownItemName = "Unknown (#%d)"; | 8 local unknownItemName = "Unknown (#%d)"; |
5 | 9 |
6 local CACHE_ITEMS_TOTAL, CACHE_ITEMS_CURRENT, itemsCache = 0, 0, {}; | 10 local CACHE_ITEMS_TOTAL, CACHE_ITEMS_CURRENT, itemsCache = 0, 0, {}; |
7 local AceGUI, cacheStart; | 11 local AceGUI, cacheStart; |
8 | |
9 local _G = _G; -- prevent looking up of the global table | |
10 local sformat, sgsub, supper, tinsert, pairs, ceil, GetItemInfo = _G.string.format, _G.string.gsub, _G.string.upper, _G.table.insert, _G.pairs, _G.ceil, _G.GetItemInfo; -- prevent looking up of the most used globals all the time | |
11 | 12 |
12 function mod:OnEnable() | 13 function mod:OnEnable() |
13 -- Register the summary specific widget | 14 -- Register the summary specific widget |
14 addon:GetModule("Widgets"):InlineGroupWithButton(); | 15 addon:GetModule("Widgets"):InlineGroupWithButton(); |
15 | 16 |
83 mod.scrollFrame:SetLayout("Flow"); | 84 mod.scrollFrame:SetLayout("Flow"); |
84 | 85 |
85 mod.frame:AddChild(mod.scrollFrame); | 86 mod.frame:AddChild(mod.scrollFrame); |
86 | 87 |
87 -- Reset items cache | 88 -- Reset items cache |
88 table.wipe(itemsCache); | 89 twipe(itemsCache); |
89 end | 90 end |
90 | 91 |
91 function mod:CloseFrame() | 92 function mod:CloseFrame() |
92 if mod.frame then | 93 if mod.frame then |
93 mod.frame:Release(); | 94 mod.frame:Release(); |
119 | 120 |
120 -- From http://www.wowwiki.com/API_sort | 121 -- From http://www.wowwiki.com/API_sort |
121 local function pairsByKeys (t, f) | 122 local function pairsByKeys (t, f) |
122 local a = {} | 123 local a = {} |
123 for n in pairs(t) do tinsert(a, n) end | 124 for n in pairs(t) do tinsert(a, n) end |
124 table.sort(a, f) | 125 tsort(a, f) |
125 local i = 0 -- iterator variable | 126 local i = 0 -- iterator variable |
126 local iter = function () -- iterator function | 127 local iter = function () -- iterator function |
127 i = i + 1 | 128 i = i + 1 |
128 if a[i] == nil then return nil | 129 if a[i] == nil then return nil |
129 else return a[i], t[a[i]] | 130 else return a[i], t[a[i]] |
145 local btnRefresh = AceGUI:Create("Button"); | 146 local btnRefresh = AceGUI:Create("Button"); |
146 btnRefresh:SetText("Refresh"); | 147 btnRefresh:SetText("Refresh"); |
147 btnRefresh:SetRelativeWidth(.2); | 148 btnRefresh:SetRelativeWidth(.2); |
148 btnRefresh:SetCallback("OnClick", function() | 149 btnRefresh:SetCallback("OnClick", function() |
149 -- Reset items cache | 150 -- Reset items cache |
150 table.wipe(itemsCache); | 151 twipe(itemsCache); |
151 | 152 |
152 -- Rebuild itemlist and start caching | 153 -- Rebuild itemlist and start caching |
153 mod:Build(); | 154 mod:Build(); |
154 end); | 155 end); |
155 btnRefresh:SetCallback("OnEnter", ShowTooltip); | 156 btnRefresh:SetCallback("OnEnter", ShowTooltip); |
169 sdrSpeed:SetLabel("Processing speed"); | 170 sdrSpeed:SetLabel("Processing speed"); |
170 sdrSpeed:SetSliderValues(0.01, 5, 0.01); -- min, max, interval | 171 sdrSpeed:SetSliderValues(0.01, 5, 0.01); -- min, max, interval |
171 sdrSpeed:SetIsPercent(true); | 172 sdrSpeed:SetIsPercent(true); |
172 sdrSpeed:SetRelativeWidth(.3); | 173 sdrSpeed:SetRelativeWidth(.3); |
173 sdrSpeed:SetCallback("OnMouseUp", function(self, event, value) | 174 sdrSpeed:SetCallback("OnMouseUp", function(self, event, value) |
174 addon.db.profile.defaults.summary.speed = ceil( ( ( value * 100 ) / 5) - .5 ); | 175 addon.db.profile.defaults.summary.speed = mceil( ( ( value * 100 ) / 5) - .5 ); |
175 | |
176 CACHE_ITEMS_PER_UPDATE = addon.db.profile.defaults.summary.speed; -- max = 20, min = 1 | |
177 end); | 176 end); |
178 sdrSpeed:SetValue( addon.db.profile.defaults.summary.speed * 5 / 100 ); | 177 sdrSpeed:SetValue( addon.db.profile.defaults.summary.speed * 5 / 100 ); |
179 sdrSpeed:SetCallback("OnEnter", ShowTooltip); | 178 sdrSpeed:SetCallback("OnEnter", ShowTooltip); |
180 sdrSpeed:SetCallback("OnLeave", HideTooltip); | 179 sdrSpeed:SetCallback("OnLeave", HideTooltip); |
181 sdrSpeed.frame.tooltipTitle = "Caching Processing Speed"; | 180 sdrSpeed.frame.tooltipTitle = "Caching Processing Speed"; |
220 btnQueueAll.frame.tooltipTitle = "Queue all"; | 219 btnQueueAll.frame.tooltipTitle = "Queue all"; |
221 btnQueueAll.frame.tooltip = "Queue everything that requires restocking within every single visible group."; | 220 btnQueueAll.frame.tooltip = "Queue everything that requires restocking within every single visible group."; |
222 | 221 |
223 mod.scrollFrame:AddChild(btnQueueAll); | 222 mod.scrollFrame:AddChild(btnQueueAll); |
224 | 223 |
225 times.init = ceil( ( GetTime() - buildStartTime ) * 1000 ); | 224 times.init = mceil( ( GetTime() - buildStartTime ) * 1000 ); |
226 addon:Debug("Time spent legend: (init / sorting / preparing / building / all)."); | 225 addon:Debug("Time spent legend: (init / sorting / preparing / building / all)."); |
227 | 226 |
228 local playerName = UnitName("player"); | 227 local playerName = UnitName("player"); |
229 | 228 |
230 -- Go through all our stored groups | 229 -- Go through all our stored groups |
337 | 336 |
338 CACHE_ITEMS_TOTAL = CACHE_ITEMS_TOTAL + 1; | 337 CACHE_ITEMS_TOTAL = CACHE_ITEMS_TOTAL + 1; |
339 end | 338 end |
340 end | 339 end |
341 | 340 |
342 groupTimes.init = ceil( ( GetTime() - groupStartTime ) * 1000 ); | 341 groupTimes.init = mceil( ( GetTime() - groupStartTime ) * 1000 ); |
343 | 342 |
344 | 343 |
345 | 344 |
346 -- Sort items | 345 -- Sort items |
347 table.sort(itemsCache[groupName], function(a, b) | 346 tsort(itemsCache[groupName], function(a, b) |
348 local aRarity = a.rarity or 1; | 347 local aRarity = a.rarity or 1; |
349 local bRarity = b.rarity or 1; | 348 local bRarity = b.rarity or 1; |
350 | 349 |
351 if sortMethod == "item" and aRarity == bRarity then | 350 if sortMethod == "item" and aRarity == bRarity then |
352 -- Do a name-compare for items of the same rarity | 351 -- Do a name-compare for items of the same rarity |
385 return a.value > b.value; | 384 return a.value > b.value; |
386 end | 385 end |
387 end | 386 end |
388 end); | 387 end); |
389 | 388 |
390 groupTimes.sorting = ceil( ( GetTime() - groupStartTime ) * 1000 ); | 389 groupTimes.sorting = mceil( ( GetTime() - groupStartTime ) * 1000 ); |
391 | 390 |
392 | 391 |
393 | 392 |
394 | 393 |
395 -- Show itemslist | 394 -- Show itemslist |
446 item.set.globalCount = lblQuantity; | 445 item.set.globalCount = lblQuantity; |
447 item.set.localCount = lblLocal; | 446 item.set.localCount = lblLocal; |
448 end | 447 end |
449 end | 448 end |
450 | 449 |
451 groupTimes.preparing = ceil( ( GetTime() - groupStartTime ) * 1000 ); | 450 groupTimes.preparing = mceil( ( GetTime() - groupStartTime ) * 1000 ); |
452 | 451 |
453 iGroup:ResumeLayout(); | 452 iGroup:ResumeLayout(); |
454 mod.scrollFrame:AddChild(iGroup); -- this can take up to .5 seconds, might need to look into again at a later time | 453 mod.scrollFrame:AddChild(iGroup); -- this can take up to .5 seconds, might need to look into again at a later time |
455 | 454 |
456 groupTimes.building = ceil( ( GetTime() - groupStartTime ) * 1000 ); | 455 groupTimes.building = mceil( ( GetTime() - groupStartTime ) * 1000 ); |
457 end | 456 end |
458 | 457 |
459 if groupStartTime and groupTimes then | 458 if groupStartTime and groupTimes then |
460 addon:Debug("Building of %s took %d ms (%d / %d / %d / %d / %d).", groupName, ceil( ( GetTime() - groupStartTime ) * 1000 ), groupTimes.init or 0, groupTimes.sorting or 0, groupTimes.preparing or 0, groupTimes.building or 0, ceil( ( GetTime() - buildStartTime ) * 1000 )); | 459 addon:Debug("Building of %s took %d ms (%d / %d / %d / %d / %d).", groupName, mceil( ( GetTime() - groupStartTime ) * 1000 ), groupTimes.init or 0, groupTimes.sorting or 0, groupTimes.preparing or 0, groupTimes.building or 0, mceil( ( GetTime() - buildStartTime ) * 1000 )); |
461 end | 460 end |
462 end | 461 end |
463 | 462 |
464 mod.scrollFrame:ResumeLayout(); | 463 mod.scrollFrame:ResumeLayout(); |
465 mod.scrollFrame:DoLayout(); | 464 mod.scrollFrame:DoLayout(); |
466 | 465 |
467 addon:Debug("Done building summary after %d ms.", ceil( ( GetTime() - buildStartTime ) * 1000 )); | 466 addon:Debug("Done building summary after %d ms.", mceil( ( GetTime() - buildStartTime ) * 1000 )); |
468 | 467 |
469 if CACHE_ITEMS_TOTAL > 0 then | 468 if CACHE_ITEMS_TOTAL > 0 then |
470 cacheStart = GetTime(); | 469 cacheStart = GetTime(); |
471 self:CancelTimer(self.tmrUpdater, true); | 470 self:CancelTimer(self.tmrUpdater, true); |
472 self.tmrUpdater = self:ScheduleRepeatingTimer("UpdateNextItem", .01); -- Once every 100 frames (or once every x frames if you have less than 100 FPS, basically, once every frame) | 471 self.tmrUpdater = self:ScheduleRepeatingTimer("UpdateNextItem", .01); -- Once every 100 frames (or once every x frames if you have less than 100 FPS, basically, once every frame) |
515 | 514 |
516 i = i + 1; | 515 i = i + 1; |
517 CACHE_ITEMS_CURRENT = CACHE_ITEMS_CURRENT + 1; | 516 CACHE_ITEMS_CURRENT = CACHE_ITEMS_CURRENT + 1; |
518 | 517 |
519 if mod.frame then | 518 if mod.frame then |
520 mod.frame:SetStatusText(sformat("Caching auction values and item-counts... %d%% has already been processed.", floor(CACHE_ITEMS_CURRENT / CACHE_ITEMS_TOTAL * 100))); | 519 mod.frame:SetStatusText(sformat("Caching auction values and item-counts... %d%% has already been processed.", mfloor(CACHE_ITEMS_CURRENT / CACHE_ITEMS_TOTAL * 100))); |
521 end | 520 end |
522 | 521 |
523 if i >= addon.db.profile.defaults.summary.speed then | 522 if i >= addon.db.profile.defaults.summary.speed then |
524 return; | 523 return; |
525 end | 524 end |
536 | 535 |
537 -- Rebuild list so hidden items due to too low prices get added | 536 -- Rebuild list so hidden items due to too low prices get added |
538 self:Build(); | 537 self:Build(); |
539 | 538 |
540 -- Announce | 539 -- Announce |
541 mod.frame:SetStatusText("All required prices and itemcounts have been cached. This process took " .. ceil(GetTime() - cacheStart) .. " seconds."); | 540 mod.frame:SetStatusText("All required prices and itemcounts have been cached. This process took " .. mceil(GetTime() - cacheStart) .. " seconds."); |
542 | 541 |
543 -- Forget time | 542 -- Forget time |
544 cacheStart = nil; | 543 cacheStart = nil; |
545 end | 544 end |
546 | 545 |
562 end | 561 end |
563 end | 562 end |
564 | 563 |
565 function mod:NumberFormat(num) | 564 function mod:NumberFormat(num) |
566 local formatted = sgsub(num, "(%d)(%d%d%d)$", "%1,%2", 1); | 565 local formatted = sgsub(num, "(%d)(%d%d%d)$", "%1,%2", 1); |
566 local matches; | |
567 | 567 |
568 while true do | 568 while true do |
569 formatted, matches = sgsub(formatted, "(%d)(%d%d%d),", "%1,%2,", 1); | 569 formatted, matches = sgsub(formatted, "(%d)(%d%d%d),", "%1,%2,", 1); |
570 | 570 |
571 if matches == 0 then | 571 if matches == 0 then |