comparison Modules/Scanner.lua @ 101:6ae44d372360

The confirmation window when refilling from the (guild) bank is enabled can now be skipped at the general config. It defaults to false. Added a window displaying a list of movable items when at least one is available at the (guild) bank. Resetting the queue when closing the storage.
author Zerotorescue
date Tue, 11 Jan 2011 19:48:35 +0100
parents 252292b703ce
children d3fbb5676a5e
comparison
equal deleted inserted replaced
100:dbb239fcc91b 101:6ae44d372360
5 Bag = 0, 5 Bag = 0,
6 Bank = 1, 6 Bank = 1,
7 Guild = 2, 7 Guild = 2,
8 }; 8 };
9 9
10 local Mover, paused; 10 local Mover, paused, currentLocation;
11 local itemCache = {}; 11 local itemCache = {};
12
13 local function OnMoveAccept(this)
14 mod:Pause();
15 Mover:BeginMove(currentLocation, mod.Unpause);
16
17 InventoriumItemMover:Hide();
18 end
19
20 local function OnMoveCancel(this)
21 Mover:ResetQueue();
22 currentLocation = nil;
23
24 InventoriumItemMover:Hide();
25 end
12 26
13 function mod:ClearCache() 27 function mod:ClearCache()
14 table.wipe(itemCache); 28 table.wipe(itemCache);
15 end 29 end
16 30
113 return; 127 return;
114 end 128 end
115 129
116 local playerName = UnitName("player"); 130 local playerName = UnitName("player");
117 131
132 currentLocation = location;
118 self:CacheLocation(location, true); 133 self:CacheLocation(location, true);
119 134
120 -- Go through all groups 135 -- Go through all groups
121 for groupName, values in pairs(addon.db.profile.groups) do 136 for groupName, values in pairs(addon.db.profile.groups) do
122 local trackAt = addon:GetOptionByKey(groupName, "trackAtCharacters"); 137 local trackAt = addon:GetOptionByKey(groupName, "trackAtCharacters");
134 local missingItems = itemCache[itemId] and (minLocalStock - addon:GetLocalItemCount(itemId, groupName)); 149 local missingItems = itemCache[itemId] and (minLocalStock - addon:GetLocalItemCount(itemId, groupName));
135 150
136 if itemCache[itemId] and missingItems > 0 then 151 if itemCache[itemId] and missingItems > 0 then
137 -- Check how many are available 152 -- Check how many are available
138 local availableItems = ((itemCache[itemId] and itemCache[itemId].totalCount) or 0); 153 local availableItems = ((itemCache[itemId] and itemCache[itemId].totalCount) or 0);
154 -- Calculate how many we'll be moving (less missing than available? use missing, otherwise use available)
155 local moving = (((missingItems <= availableItems) and missingItems) or availableItems);
139 156
140 if availableItems > 0 then 157 if availableItems > 0 then
141 addon:Print("Insufficient " .. select(2, GetItemInfo(itemId)) .. " but this location has " .. availableItems .. " (moving " .. missingItems .. ")"); 158 --addon:Print("Insufficient " .. IdToItemLink(itemId) .. " but this location has " .. availableItems .. " (moving " .. moving .. ")");
142 159
143 Mover:AddMove(itemId, missingItems); 160 Mover:AddMove(itemId, moving, missingItems, availableItems);
144 else 161 else
145 addon:Print("Insufficient " .. IdToItemLink(itemId)); 162 --addon:Print("Insufficient " .. IdToItemLink(itemId));
146 end 163 end
147 end 164 end
148 end 165 end
149 end 166 end
150 end 167 end
151 168
152 self:ClearCache(); 169 self:ClearCache();
153 170
154 if Mover:HasMoves() then 171 if Mover:HasMoves() then
155 StaticPopupDialogs["InventoriumRefill"] = { 172 if addon.db.profile.defaults.autoRefillSkipConfirm then
156 text = "There are items that can be refilled from this location, do you wish to proceed?", 173 OnMoveAccept(true);
157 button1 = YES, 174 else
158 button2 = NO, 175 local data = {};
159 OnAccept = function() 176
160 mod:Pause(); 177 local columns = {
161 Mover:BeginMove(location, self.Unpause); 178 {
162 end, 179 value = function(d, cols, realrow, column, table)
163 timeout = 0, 180 return IdToItemLink(d[realrow].colorargs[2]);
164 whileDead = 1, 181 end,
165 hideOnEscape = 1, 182 }, -- item
166 exclusive = 1, 183 {
167 }; 184 value = function(d, cols, realrow, column, table)
168 StaticPopup_Show("InventoriumRefill"); 185 local queue = Mover:GetMoves();
186 return queue[d[realrow].colorargs[1]].num;
187 end,
188 }, -- moving
189 {
190 value = function(d, cols, realrow, column, table)
191 local queue = Mover:GetMoves();
192 return queue[d[realrow].colorargs[1]].missing;
193 end,
194 }, -- missing
195 {
196 value = function(d, cols, realrow, column, table)
197 local queue = Mover:GetMoves();
198 return queue[d[realrow].colorargs[1]].available;
199 end,
200 color = function(d, cols, realrow, column, table)
201 local queue = Mover:GetMoves();
202 return ((queue[d[realrow].colorargs[1]].available < queue[d[realrow].colorargs[1]].missing) and { r = 1, g = 0, b = 0, a = 1 }) or { r = 1, g = 1, b = 1, a = 1 };
203 end,
204 }, -- available
205 };
206
207 local queue = Mover:GetMoves();
208
209 for i, move in pairs(Mover:GetMoves()) do
210 local row = {
211 ["colorargs"] = { i, queue[i].id },
212 ["cols"] = columns,
213 };
214
215 table.insert(data, row);
216 end
217
218 addon:SetMoverFrameData(data);
219
220 --[[
221 StaticPopupDialogs["InventoriumRefill"] = {
222 text = "There are items that can be refilled from this location, do you wish to proceed?",
223 button1 = YES,
224 button2 = NO,
225 OnAccept = function()
226 mod:Pause();
227 Mover:BeginMove(location, self.Unpause);
228 end,
229 timeout = 0,
230 whileDead = 1,
231 hideOnEscape = 1,
232 exclusive = 1,
233 };
234 StaticPopup_Show("InventoriumRefill");]]
235 end
169 end 236 end
170 end 237 end
171 238
172 239
173 240
189 256
190 self:ClearCache(); 257 self:ClearCache();
191 258
192 mod:UnregisterEvent("BANKFRAME_CLOSED"); 259 mod:UnregisterEvent("BANKFRAME_CLOSED");
193 260
194 StaticPopup_Hide("InventoriumRefill"); 261 --StaticPopup_Hide("InventoriumRefill");
262 InventoriumItemMover:Hide();
263 Mover:ResetQueue();
195 end 264 end
196 265
197 -- Guild bank 266 -- Guild bank
198 267
199 local tmrScanGuild, scanned; 268 local tmrScanGuild, scanned;
224 self:UnregisterEvent("GUILDBANKFRAME_CLOSED"); 293 self:UnregisterEvent("GUILDBANKFRAME_CLOSED");
225 self:UnregisterEvent("GUILDBANKBAGSLOTS_CHANGED"); 294 self:UnregisterEvent("GUILDBANKBAGSLOTS_CHANGED");
226 295
227 self:CancelTimer(tmrScanGuild, true); -- silent 296 self:CancelTimer(tmrScanGuild, true); -- silent
228 297
229 StaticPopup_Hide("InventoriumRefill"); 298 --StaticPopup_Hide("InventoriumRefill");
299 InventoriumItemMover:Hide();
300 Mover:ResetQueue();
230 end 301 end
231 302
232 function mod:GUILDBANKFRAME_OPENED() 303 function mod:GUILDBANKFRAME_OPENED()
233 addon:Debug("Scanner:GUILDBANKFRAME_OPENED"); 304 addon:Debug("Scanner:GUILDBANKFRAME_OPENED");
234 305
250 -- Scan once when the bankframe is opened 321 -- Scan once when the bankframe is opened
251 self:RegisterEvent("BANKFRAME_OPENED"); 322 self:RegisterEvent("BANKFRAME_OPENED");
252 self:RegisterEvent("GUILDBANKFRAME_OPENED"); 323 self:RegisterEvent("GUILDBANKFRAME_OPENED");
253 324
254 Mover = addon:GetModule("Mover"); 325 Mover = addon:GetModule("Mover");
326
327 if not InventoriumItemMover then
328 addon:CreateMoverFrame(OnMoveAccept, OnMoveCancel);
329 end
255 end 330 end
256 331
257 function mod:OnDisable() 332 function mod:OnDisable()
258 Mover = nil; 333 Mover = nil;
334 currentLocation = nil;
335 paused = nil;
259 336
260 -- Bank 337 -- Bank
261 self:UnregisterEvent("BANKFRAME_OPENED"); 338 self:UnregisterEvent("BANKFRAME_OPENED");
262 339
263 -- Guild 340 -- Guild