diff Core.lua @ 50:9607b3251655

Added OnSelect event support to both item count as crafting addons. Added basic local item count data support. Fixed "Show in summary when below" option to allow a value of up to 10.000%. Summary should now respect virtual groups.
author Zerotorescue
date Sat, 18 Dec 2010 00:22:06 +0100
parents 87d68ccf0a8f
children 03c0610e9c1e
line wrap: on
line diff
--- a/Core.lua	Fri Dec 17 00:51:00 2010 +0100
+++ b/Core.lua	Sat Dec 18 00:22:06 2010 +0100
@@ -649,7 +649,13 @@
 							return temp;
 						end,
 						get = function() return self.db.global.defaults.itemCountAddon; end,
-						set = function(i, v) self.db.global.defaults.itemCountAddon = v; end,
+						set = function(i, v)
+							self.db.global.defaults.itemCountAddon = v;
+							
+							if self.supportedAddons.itemCount[v].OnSelect then
+								self.supportedAddons.itemCount[v].OnSelect();
+							end
+						end,
 					},
 					craftingAddon = {
 						order = 30,
@@ -665,9 +671,15 @@
 							return temp;
 						end,
 						get = function() return self.db.global.defaults.craftingAddon; end,
-						set = function(i, v) self.db.global.defaults.craftingAddon = v; end,
+						set = function(i, v)
+							self.db.global.defaults.craftingAddon = v;
+							
+							if self.supportedAddons.crafting[v].OnSelect then
+								self.supportedAddons.crafting[v].OnSelect();
+							end
+						end,
 					},
-					--[[localItemData = {
+					localItemData = {
 						order = 40,
 						type = "multiselect",
 						name = "Include in local item data",
@@ -681,7 +693,7 @@
 						get = function(i, v) return self.db.global.defaults.localItemData and self.db.global.defaults.localItemData[v]; end,
 						set = function(i, v, e) self.db.global.defaults.localItemData[v] = e or nil; end,
 						--dialogControl = "Dropdown", -- this is not standard, normal multiselect control gives us a list of all chars with toggle-boxes. UGLY! We want a multiselect-box instead.
-					},]]
+					},
 				},
 			},
 			minimumStock = {
@@ -716,8 +728,8 @@
 						order = 20,
 						type = "range",
 						min = 0,
-						max = 100,
-						softMax = 10,
+						max = 10,
+						softMax = 100,
 						step = 0.05,
 						isPercent = true,
 						name = "Show in summary when below",
@@ -1280,6 +1292,16 @@
 								
 								return temp;
 							end,
+							set = function(info, value)
+								local groupName = groupIdToName[info[2]];
+								local optionName = info[#info];
+								
+								addon.db.global.groups[groupName][optionName] = value ~= "" and value;
+								
+								if addon.supportedAddons.itemCount[value].OnSelect then
+									addon.supportedAddons.itemCount[value].OnSelect();
+								end
+							end,
 							arg = "overrideItemCountAddon",
 						},
 						overrideCraftingAddon = {
@@ -1302,9 +1324,19 @@
 								
 								return temp;
 							end,
+							set = function(info, value)
+								local groupName = groupIdToName[info[2]];
+								local optionName = info[#info];
+								
+								addon.db.global.groups[groupName][optionName] = value ~= "" and value;
+								
+								if addon.supportedAddons.crafting[value].OnSelect then
+									addon.supportedAddons.crafting[value].OnSelect();
+								end
+							end,
 							arg = "overrideCraftingAddon",
 						},
-						--[[overrideLocalItemData = {
+						overrideLocalItemData = {
 							order = 39,
 							type = "toggle",
 							name = "Override local item data",
@@ -1325,7 +1357,7 @@
 							get = GetMultiOption,
 							--dialogControl = "Dropdown", -- this is not standard, normal multiselect control gives us a list of all chars with toggle-boxes. UGLY! We want a multiselect-box instead.
 							arg = "overrideLocalItemData",
-						},]]
+						},
 						virtualGroup = {
 							order = 50,
 							type = "select",
@@ -1403,8 +1435,8 @@
 							order = 20,
 							type = "range",
 							min = 0,
-							max = 100,
-							softMax = 10,
+							max = 10,
+							softMax = 100,
 							step = 0.05,
 							isPercent = true,
 							name = "Show in summary when below",
@@ -2192,6 +2224,38 @@
 	return (itemCountAddon and itemCountAddon.GetTotalCount(itemId)) or -1;
 end
 
+function addon:GetLocalItemCount(itemId, group)
+	itemId = tonumber(itemId);
+	
+	if not itemId then return; end
+	
+	local itemCountAddon = self:GetItemCountAddon(group);
+	
+	local currentItemCount;
+	
+	if itemCountAddon and itemCountAddon.GetCharacterCount then
+		local bag, bank, auctionHouse, mail = itemCountAddon.GetCharacterCount(itemId);
+		
+		local selectedLocalItemCountSources = self:GetOptionByKey(group, "localItemData");
+		
+		currentItemCount = 0;
+		if selectedLocalItemCountSources["Bag"] then
+			currentItemCount = currentItemCount + bag;
+		end
+		if selectedLocalItemCountSources["Bank"] then
+			currentItemCount = currentItemCount + bank;
+		end
+		if selectedLocalItemCountSources["Auction House"] then
+			currentItemCount = currentItemCount + auctionHouse;
+		end
+		if selectedLocalItemCountSources["Mailbox"] then
+			currentItemCount = currentItemCount + mail;
+		end
+	end
+	
+	return currentItemCount or -1;
+end
+
 function addon:GetAuctionValue(itemLink, group)
 	if not itemLink then return -5; end
 	
@@ -2226,18 +2290,20 @@
 	};
 end
 
-function IMRegisterItemCountAddon(name, getTotal, getCharacter, enabled)
+function IMRegisterItemCountAddon(name, getTotal, getCharacter, enabled, onSelect)
 	addon.supportedAddons.itemCount[name] = {
 		GetTotalCount = getTotal,
 		GetCharacterCount = getCharacter,
 		IsEnabled = enabled,
+		OnSelect = onSelect,
 	};
 end
 
-function IMRegisterCraftingAddon(name, queue, enabled)
+function IMRegisterCraftingAddon(name, queue, enabled, onSelect)
 	addon.supportedAddons.crafting[name] = {
 		Queue = queue,
 		IsEnabled = enabled,
+		OnSelect = onSelect,
 	};
 end