annotate Config.lua @ 65:ac1189599769

Added warning to AuctionLite pricing addon selection stating the addon wasn?t tested properly yet. Premade groups check now occurs when the config is opened rather than upon login. All multiselects are now dropdowns as they are meant to be. Please ensure the pullouts are closed before switching groups or closing the window or you may get some LUA errors (thanks Wowace for not fixing what seems to be a year old issue). Hopefully added support for the crafting addon ?Cauldron?, but this still has to be tested.
author Zerotorescue
date Thu, 23 Dec 2010 03:19:27 +0100
parents fee06221176f
children 710f03653aaf
rev   line source
Zerotorescue@62 1 local addon = select(2, ...);
Zerotorescue@62 2 local mod = addon:NewModule("Config");
Zerotorescue@62 3
Zerotorescue@62 4 local options, groupIdToName, groupIsVirtual, temp, count, includeTradeSkillItems, currentGroupType = {}, {}, {}, {}, 0, 500, "Normal";
Zerotorescue@62 5 local AceConfigDialog, AceConfigRegistry, AceSerializer;
Zerotorescue@62 6
Zerotorescue@62 7 -- Private functions and tables
Zerotorescue@62 8
Zerotorescue@62 9 local function SetOption(info, value, multiSelectEnabled)
Zerotorescue@62 10 local groupName = groupIdToName[info[2]];
Zerotorescue@62 11 local optionName = info[#info];
Zerotorescue@62 12
Zerotorescue@62 13 -- Special treatment for override toggle boxes
Zerotorescue@62 14 if optionName:find("override") then
Zerotorescue@62 15 if not value and info.arg then
Zerotorescue@62 16 -- If this override was disabled and a saved variable name was provided, set it to nil rather than false
Zerotorescue@62 17
Zerotorescue@62 18 value = nil;
Zerotorescue@62 19
Zerotorescue@62 20 -- If this is an override toggler then also set the related field to nil
Zerotorescue@62 21 addon.db.profile.groups[groupName][info.arg] = nil;
Zerotorescue@62 22 elseif value and info.arg then
Zerotorescue@62 23 -- If this override is now enabled, we need to copy the default into this field (unless it is not nil (which is supposed to be impossible), in which case we'll use the already selected value)
Zerotorescue@62 24
Zerotorescue@62 25 addon.db.profile.groups[groupName][info.arg] = addon:GetOptionByKey(groupName, info.arg);
Zerotorescue@62 26 end
Zerotorescue@62 27 end
Zerotorescue@62 28
Zerotorescue@62 29 if multiSelectEnabled ~= nil then
Zerotorescue@62 30 -- The saved vars for a multiselect will always be an array, it may not yet exist in which case it must be created.
Zerotorescue@62 31 if not addon.db.profile.groups[groupName][optionName] then
Zerotorescue@62 32 addon.db.profile.groups[groupName][optionName] = {};
Zerotorescue@62 33 end
Zerotorescue@62 34
Zerotorescue@62 35 addon.db.profile.groups[groupName][optionName][value] = multiSelectEnabled or nil;
Zerotorescue@62 36 else
Zerotorescue@62 37 addon.db.profile.groups[groupName][optionName] = value;
Zerotorescue@62 38 end
Zerotorescue@62 39 end
Zerotorescue@62 40
Zerotorescue@62 41 local function GetOption(info)
Zerotorescue@62 42 local groupName = groupIdToName[info[2]];
Zerotorescue@62 43 local optionName = info[#info];
Zerotorescue@62 44
Zerotorescue@62 45 local noDefault;
Zerotorescue@62 46
Zerotorescue@62 47 if optionName:find("override") then
Zerotorescue@62 48 noDefault = true;
Zerotorescue@62 49 end
Zerotorescue@62 50
Zerotorescue@62 51 return addon:GetOptionByKey(groupName, optionName, noDefault);
Zerotorescue@62 52 end
Zerotorescue@62 53
Zerotorescue@62 54 local function GetMultiOption(info, value)
Zerotorescue@62 55 local groupName = groupIdToName[info[2]];
Zerotorescue@62 56 local optionName = info[#info];
Zerotorescue@62 57
Zerotorescue@62 58 if addon.db.profile.groups[groupName][optionName] ~= nil then
Zerotorescue@62 59 return addon.db.profile.groups[groupName][optionName][value];
Zerotorescue@62 60 elseif addon.db.profile.defaults[optionName] then
Zerotorescue@62 61 return addon.db.profile.defaults[optionName][value];
Zerotorescue@62 62 else
Zerotorescue@62 63 return nil;
Zerotorescue@62 64 end
Zerotorescue@62 65 end
Zerotorescue@62 66
Zerotorescue@62 67 local function GetDisabled(info)
Zerotorescue@62 68 local groupName = groupIdToName[info[2]];
Zerotorescue@62 69 local optionName = info[#info];
Zerotorescue@62 70
Zerotorescue@62 71 if optionName:find("override") or not info.arg then
Zerotorescue@62 72 return false;
Zerotorescue@62 73 end
Zerotorescue@62 74
Zerotorescue@62 75 return (addon:GetOptionByKey(groupName, info.arg, true) == nil);
Zerotorescue@62 76 end
Zerotorescue@62 77
Zerotorescue@62 78 local function ValidateGroupName(_, value)
Zerotorescue@62 79 value = string.lower(string.trim(value or ""));
Zerotorescue@62 80
Zerotorescue@62 81 for name, _ in pairs(addon.db.profile.groups) do
Zerotorescue@62 82 if string.lower(name) == value then
Zerotorescue@62 83 return ("A group named \"%s\" already exists."):format(name);
Zerotorescue@62 84 end
Zerotorescue@62 85 end
Zerotorescue@62 86
Zerotorescue@62 87 return true;
Zerotorescue@62 88 end
Zerotorescue@62 89
Zerotorescue@62 90 local tblAddItemTemplate = {
Zerotorescue@62 91 order = 0,
Zerotorescue@62 92 type = "input",
Zerotorescue@62 93 name = function(info)
Zerotorescue@62 94 local itemName, _, itemRarity = GetItemInfo(info[#info]);
Zerotorescue@62 95 return tostring( 7 - (itemRarity or 0) ) .. (itemName or "");
Zerotorescue@62 96 end,
Zerotorescue@62 97 get = function(info)
Zerotorescue@62 98 return tostring(info[#info]); -- Ace is going to be anal about this if it's a numeric value, so we transmute it into a string here then back to a number on the other side
Zerotorescue@62 99 end,
Zerotorescue@62 100 set = function(groupId, itemId)
Zerotorescue@62 101 -- This is NOT a real "set", we pass the widget reference to this function which contains similar, but not the same, info.
Zerotorescue@62 102
Zerotorescue@62 103 if itemId then
Zerotorescue@62 104 local groupName = groupIdToName[groupId];
Zerotorescue@62 105
Zerotorescue@62 106 if not addon:AddItemToGroup(groupName, itemId) then
Zerotorescue@62 107 print("|cffff0000Couldn't add the item with itemId (" .. itemId .. ") because it is already in a group.|r");
Zerotorescue@62 108 end
Zerotorescue@62 109 end
Zerotorescue@62 110 end,
Zerotorescue@62 111 width = "double",
Zerotorescue@62 112 dialogControl = "ConfigItemLinkButton",
Zerotorescue@62 113 };
Zerotorescue@62 114
Zerotorescue@62 115 local tblRemoveItemTemplate = {
Zerotorescue@62 116 order = 0,
Zerotorescue@62 117 type = "input",
Zerotorescue@62 118 name = function(info)
Zerotorescue@62 119 local itemName, _, itemRarity = GetItemInfo(info[#info]);
Zerotorescue@62 120 return tostring( 7 - (itemRarity or 0) ) .. (itemName or "");
Zerotorescue@62 121 end,
Zerotorescue@62 122 get = function(info)
Zerotorescue@62 123 return tostring(info[#info]); -- Ace is going to be anal about this if it's a numeric value, so we transmute it into a string here then back to a number on the other side
Zerotorescue@62 124 end,
Zerotorescue@62 125 set = function(groupId, itemId)
Zerotorescue@62 126 -- This is NOT a real "set", we pass the widget reference to this function which contains similar, but not the same, info.
Zerotorescue@62 127
Zerotorescue@62 128 if itemId then
Zerotorescue@62 129 local groupName = groupIdToName[groupId];
Zerotorescue@62 130
Zerotorescue@62 131 addon:RemoveItemFromGroup(groupName, itemId);
Zerotorescue@62 132
Zerotorescue@62 133 -- Now rebuild the list
Zerotorescue@62 134 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@62 135 end
Zerotorescue@62 136 end,
Zerotorescue@62 137 width = "double",
Zerotorescue@62 138 dialogControl = "ConfigItemLinkButton",
Zerotorescue@62 139 };
Zerotorescue@62 140
Zerotorescue@62 141 local function UpdateAddItemList(info)
Zerotorescue@62 142 local groupName = groupIdToName[info[2]];
Zerotorescue@62 143
Zerotorescue@62 144 if not addon.db.profile.groups[groupName].items then
Zerotorescue@62 145 addon.db.profile.groups[groupName].items = {};
Zerotorescue@62 146 end
Zerotorescue@62 147
Zerotorescue@62 148 -- Merge all items from all groups together
Zerotorescue@62 149 local items = {};
Zerotorescue@62 150 for groupName, values in pairs(addon.db.profile.groups) do
Zerotorescue@62 151 if values.items then
Zerotorescue@62 152 for itemId, _ in pairs(values.items) do
Zerotorescue@62 153 items[itemId] = true;
Zerotorescue@62 154 end
Zerotorescue@62 155 end
Zerotorescue@62 156 end
Zerotorescue@62 157
Zerotorescue@62 158 local ref = options.args.groups.args[info[2]].args.add.args.list.args;
Zerotorescue@62 159
Zerotorescue@62 160 -- Remaking the list, so out with the old, in with the new
Zerotorescue@62 161 table.wipe(ref);
Zerotorescue@62 162
Zerotorescue@62 163 -- Parse bags and show these
Zerotorescue@62 164 for bagID = 4, 0, -1 do
Zerotorescue@62 165 for slot = 1, GetContainerNumSlots(bagID) do
Zerotorescue@62 166 local itemId = addon:GetItemId(GetContainerItemLink(bagID, slot));
Zerotorescue@62 167
Zerotorescue@62 168 if itemId then
Zerotorescue@62 169 if not items[itemId] then
Zerotorescue@62 170 -- If this item isn't used in any group yet
Zerotorescue@62 171 ref[itemId] = tblAddItemTemplate;
Zerotorescue@62 172 else
Zerotorescue@62 173 -- It's already used in a group, don't show it
Zerotorescue@62 174 ref[itemId] = nil;
Zerotorescue@62 175 end
Zerotorescue@62 176 end
Zerotorescue@62 177 end
Zerotorescue@62 178 end
Zerotorescue@62 179
Zerotorescue@62 180 if includeTradeSkillItems ~= 500 then
Zerotorescue@62 181 -- Include tradeskill items
Zerotorescue@62 182
Zerotorescue@62 183 -- Go through all trade skills for the profession
Zerotorescue@62 184 for i = 1, GetNumTradeSkills() do
Zerotorescue@62 185 -- Try to retrieve the itemlink, this will be nil if current item is a group instead
Zerotorescue@62 186 local itemLink = GetTradeSkillItemLink(i);
Zerotorescue@62 187
Zerotorescue@62 188 if itemLink then
Zerotorescue@62 189 local itemId = addon:GetItemId(itemLink);
Zerotorescue@62 190 if not itemId then
Zerotorescue@62 191 -- If this isn't an item, it can only be an enchant instead
Zerotorescue@62 192 itemId = tonumber(itemLink:match("|Henchant:([-0-9]+)|h"));
Zerotorescue@62 193
Zerotorescue@62 194 itemId = addon.scrollIds[itemId]; -- change enchantIds into scrollIds
Zerotorescue@62 195 end
Zerotorescue@62 196
Zerotorescue@62 197 if itemId then
Zerotorescue@62 198 local itemLevel = select(4, GetItemInfo(itemId)) or 0;
Zerotorescue@62 199
Zerotorescue@62 200 if includeTradeSkillItems == 0 or itemLevel >= includeTradeSkillItems then
Zerotorescue@62 201 if not items[itemId] then
Zerotorescue@62 202 -- If this item isn't used in any group yet
Zerotorescue@62 203 ref[itemId] = tblAddItemTemplate;
Zerotorescue@62 204 else
Zerotorescue@62 205 -- It's already used in a group, don't show it
Zerotorescue@62 206 ref[itemId] = nil;
Zerotorescue@62 207 end
Zerotorescue@62 208 end
Zerotorescue@62 209 else
Zerotorescue@62 210 addon:Debug("|cffff0000ERROR|r: Couldn't find proper item id for " .. itemLink);
Zerotorescue@62 211 end
Zerotorescue@62 212 end
Zerotorescue@62 213 end
Zerotorescue@62 214 end
Zerotorescue@62 215 end
Zerotorescue@62 216
Zerotorescue@62 217 local function UpdateRemoveItemList(info)
Zerotorescue@62 218 local groupName = groupIdToName[info[2]];
Zerotorescue@62 219
Zerotorescue@62 220 if not addon.db.profile.groups[groupName].items then
Zerotorescue@62 221 addon.db.profile.groups[groupName].items = {};
Zerotorescue@62 222 end
Zerotorescue@62 223
Zerotorescue@62 224 local ref = options.args.groups.args[info[2]].args.remove.args.list.args;
Zerotorescue@62 225
Zerotorescue@62 226 -- Unset all
Zerotorescue@62 227 for itemId, _ in pairs(ref) do
Zerotorescue@62 228 ref[itemId] = nil;
Zerotorescue@62 229 end
Zerotorescue@62 230
Zerotorescue@62 231 -- Parse items in group and show these
Zerotorescue@62 232 for itemId, _ in pairs(addon.db.profile.groups[groupName].items) do
Zerotorescue@62 233 ref[itemId] = tblRemoveItemTemplate;
Zerotorescue@62 234 end
Zerotorescue@62 235 end
Zerotorescue@62 236
Zerotorescue@62 237 -- Default group
Zerotorescue@62 238 local defaultGroup = {
Zerotorescue@62 239 order = 0,
Zerotorescue@62 240 type = "group",
Zerotorescue@62 241 childGroups = "tab",
Zerotorescue@62 242 name = function(info)
Zerotorescue@62 243 local groupId = info[#info];
Zerotorescue@62 244 if groupIsVirtual[groupId] then
Zerotorescue@62 245 return ("%s |cfffed000Virtual|r"):format(groupIdToName[groupId]);
Zerotorescue@62 246 else
Zerotorescue@62 247 return groupIdToName[groupId];
Zerotorescue@62 248 end
Zerotorescue@62 249 end,
Zerotorescue@62 250 desc = function(info)
Zerotorescue@62 251 local groupId = info[#info];
Zerotorescue@62 252 if groupIsVirtual[groupId] then
Zerotorescue@62 253 return "This is a virtual group, you can use it to override the defaults for other groups.";
Zerotorescue@62 254 end
Zerotorescue@62 255 end,
Zerotorescue@62 256 args = {
Zerotorescue@62 257 general = {
Zerotorescue@62 258 order = 10,
Zerotorescue@62 259 type = "group",
Zerotorescue@62 260 name = "General",
Zerotorescue@62 261 desc = "Change the general settings for just this group.",
Zerotorescue@62 262 args = {
Zerotorescue@62 263 general = {
Zerotorescue@62 264 order = 0,
Zerotorescue@62 265 type = "group",
Zerotorescue@62 266 inline = true,
Zerotorescue@62 267 name = "General",
Zerotorescue@62 268 set = SetOption,
Zerotorescue@62 269 get = GetOption,
Zerotorescue@62 270 disabled = GetDisabled,
Zerotorescue@62 271 args = {
Zerotorescue@62 272 description = {
Zerotorescue@62 273 order = 0,
Zerotorescue@62 274 type = "description",
Zerotorescue@62 275 name = function(info)
Zerotorescue@62 276 local groupName = groupIdToName[info[2]];
Zerotorescue@62 277
Zerotorescue@62 278 local t = "Here you can set general settings for the currently selected group. If you do not wish to override a setting, the default setting specified in the general group will be used.\n\n";
Zerotorescue@62 279
Zerotorescue@62 280 local currentAddon, selectedAddonName = addon:GetItemCountAddon(groupName);
Zerotorescue@62 281 local preferedAddon = addon:GetOptionByKey(groupName, "itemCountAddon");
Zerotorescue@62 282
Zerotorescue@62 283 if currentAddon then
Zerotorescue@62 284 --GetCharacterCount
Zerotorescue@62 285 --addon.supportedAddons.itemCount[selectedExternalAddon]
Zerotorescue@62 286 t = t .. "Currently using |cfffed000" .. selectedAddonName .. "|r as your item count addon. This addon is " .. ((currentAddon.IsEnabled() and "|cff00ff00enabled|r") or "|cffff0000disabled|r") .. ".";
Zerotorescue@62 287
Zerotorescue@62 288 if currentAddon.GetTotalCount and currentAddon.GetCharacterCount then
Zerotorescue@62 289 t = t .. " This addon supports |cfffed000both total as local|r item counts.";
Zerotorescue@62 290 elseif currentAddon.GetTotalCount then
Zerotorescue@62 291 t = t .. " This addon supports |cfffed000only total|r item counts.";
Zerotorescue@62 292 elseif currentAddon.GetCharacterCount then
Zerotorescue@62 293 t = t .. " This addon supports |cfffed000only local|r item counts.";
Zerotorescue@62 294 end
Zerotorescue@62 295
Zerotorescue@62 296 if preferedAddon ~= selectedAddonName then
Zerotorescue@62 297 t = t .. "\n\n|cffff0000You have selected |cfffed000" .. preferedAddon .. "|r|cffff0000 as your item count addon, but this appears to be disabled and thus a random alternative was selected.|r";
Zerotorescue@62 298 end
Zerotorescue@62 299 end
Zerotorescue@62 300
Zerotorescue@62 301 return t;
Zerotorescue@62 302 end,
Zerotorescue@62 303 },
Zerotorescue@62 304 header = {
Zerotorescue@62 305 order = 5,
Zerotorescue@62 306 type = "header",
Zerotorescue@62 307 name = "",
Zerotorescue@62 308 },
Zerotorescue@62 309 overrideAuctionPricingAddon = {
Zerotorescue@62 310 order = 9,
Zerotorescue@62 311 type = "toggle",
Zerotorescue@62 312 name = "Override pricing addon",
Zerotorescue@62 313 desc = "Allows you to override the pricing addon setting for this group.",
Zerotorescue@62 314 arg = "auctionPricingAddon",
Zerotorescue@62 315 },
Zerotorescue@62 316 auctionPricingAddon = {
Zerotorescue@62 317 order = 10,
Zerotorescue@62 318 type = "select",
Zerotorescue@62 319 name = "Prefered pricing addon",
Zerotorescue@62 320 desc = "Select the addon you prefer data for this group to be retrieved from. A random supported addon will be used if the selected addon can not be found.",
Zerotorescue@62 321 values = function()
Zerotorescue@62 322 local temp = {};
Zerotorescue@62 323 for name, value in pairs(addon.supportedAddons.auctionPricing) do
Zerotorescue@62 324 temp[name] = name;
Zerotorescue@62 325 end
Zerotorescue@62 326
Zerotorescue@62 327 return temp;
Zerotorescue@62 328 end,
Zerotorescue@62 329 set = function(info, value)
Zerotorescue@62 330 local groupName = groupIdToName[info[2]];
Zerotorescue@62 331 local optionName = info[#info];
Zerotorescue@62 332
Zerotorescue@62 333 addon.db.profile.groups[groupName][optionName] = value ~= "" and value;
Zerotorescue@62 334
Zerotorescue@62 335 if addon.supportedAddons.auctionPricing[value].OnSelect then
Zerotorescue@62 336 addon.supportedAddons.auctionPricing[value].OnSelect();
Zerotorescue@62 337 end
Zerotorescue@62 338 end,
Zerotorescue@62 339 arg = "overrideAuctionPricingAddon",
Zerotorescue@62 340 },
Zerotorescue@62 341 overrideItemCountAddon = {
Zerotorescue@62 342 order = 19,
Zerotorescue@62 343 type = "toggle",
Zerotorescue@62 344 name = "Override item count addon",
Zerotorescue@62 345 desc = "Allows you to override the item count addon setting for this group.",
Zerotorescue@62 346 arg = "itemCountAddon",
Zerotorescue@62 347 },
Zerotorescue@62 348 itemCountAddon = {
Zerotorescue@62 349 order = 20,
Zerotorescue@62 350 type = "select",
Zerotorescue@62 351 name = "Prefered item count addon",
Zerotorescue@62 352 desc = "Select the addon you prefer data for this group to be retrieved from. A random supported addon will be used if the selected addon can not be found.",
Zerotorescue@62 353 values = function()
Zerotorescue@62 354 local temp = {};
Zerotorescue@62 355 for name, value in pairs(addon.supportedAddons.itemCount) do
Zerotorescue@62 356 temp[name] = name;
Zerotorescue@62 357 end
Zerotorescue@62 358
Zerotorescue@62 359 return temp;
Zerotorescue@62 360 end,
Zerotorescue@62 361 set = function(info, value)
Zerotorescue@62 362 local groupName = groupIdToName[info[2]];
Zerotorescue@62 363 local optionName = info[#info];
Zerotorescue@62 364
Zerotorescue@62 365 addon.db.profile.groups[groupName][optionName] = value ~= "" and value;
Zerotorescue@62 366
Zerotorescue@62 367 if addon.supportedAddons.itemCount[value].OnSelect then
Zerotorescue@62 368 addon.supportedAddons.itemCount[value].OnSelect();
Zerotorescue@62 369 end
Zerotorescue@62 370 end,
Zerotorescue@62 371 arg = "overrideItemCountAddon",
Zerotorescue@62 372 },
Zerotorescue@62 373 overrideCraftingAddon = {
Zerotorescue@62 374 order = 29,
Zerotorescue@62 375 type = "toggle",
Zerotorescue@62 376 name = "Override crafting addon",
Zerotorescue@62 377 desc = "Allows you to override the crafting addon setting for this group.",
Zerotorescue@62 378 arg = "craftingAddon",
Zerotorescue@62 379 },
Zerotorescue@62 380 craftingAddon = {
Zerotorescue@62 381 order = 30,
Zerotorescue@62 382 type = "select",
Zerotorescue@62 383 name = "Prefered crafting addon",
Zerotorescue@62 384 desc = "Select the addon you prefer data from this group to be queued into. A random supported addon will be used if the selected addon can not be found.",
Zerotorescue@62 385 values = function()
Zerotorescue@62 386 local temp = {};
Zerotorescue@62 387 for name, value in pairs(addon.supportedAddons.crafting) do
Zerotorescue@62 388 temp[name] = name;
Zerotorescue@62 389 end
Zerotorescue@62 390
Zerotorescue@62 391 return temp;
Zerotorescue@62 392 end,
Zerotorescue@62 393 set = function(info, value)
Zerotorescue@62 394 local groupName = groupIdToName[info[2]];
Zerotorescue@62 395 local optionName = info[#info];
Zerotorescue@62 396
Zerotorescue@62 397 addon.db.profile.groups[groupName][optionName] = value ~= "" and value;
Zerotorescue@62 398
Zerotorescue@62 399 if addon.supportedAddons.crafting[value].OnSelect then
Zerotorescue@62 400 addon.supportedAddons.crafting[value].OnSelect();
Zerotorescue@62 401 end
Zerotorescue@62 402 end,
Zerotorescue@62 403 arg = "overrideCraftingAddon",
Zerotorescue@62 404 },
Zerotorescue@62 405 overrideLocalItemData = {
Zerotorescue@62 406 order = 39,
Zerotorescue@62 407 type = "toggle",
Zerotorescue@62 408 name = "Override local item data",
Zerotorescue@62 409 desc = "Allows you to override the local item data setting for this group.",
Zerotorescue@62 410 arg = "localItemData",
Zerotorescue@62 411 },
Zerotorescue@62 412 localItemData = {
Zerotorescue@62 413 order = 40,
Zerotorescue@62 414 type = "multiselect",
Zerotorescue@62 415 name = "Include in local item data",
Zerotorescue@62 416 desc = "Select which data should be included in the local item data.",
Zerotorescue@62 417 values = {
Zerotorescue@62 418 ["Bag"] = "Bag",
Zerotorescue@62 419 ["Bank"] = "Bank",
Zerotorescue@62 420 ["Auction House"] = "Auction House",
Zerotorescue@62 421 ["Mailbox"] = "Mailbox",
Zerotorescue@62 422 },
Zerotorescue@62 423 get = GetMultiOption,
Zerotorescue@65 424 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.
Zerotorescue@62 425 arg = "overrideLocalItemData",
Zerotorescue@62 426 },
Zerotorescue@62 427 virtualGroup = {
Zerotorescue@62 428 order = 50,
Zerotorescue@62 429 type = "select",
Zerotorescue@62 430 name = "Use virtual group settings",
Zerotorescue@62 431 desc = "Use the settings from a virtual group before using the general defaults.\n\n|cffff9933This is an advanced option, you will probably not need it unless you manage a lot of groups.|r\n\n|cfffed000Off|r: Use the overridden options in this group and then the defaults.\n\n|cfffed000On|r: Use the overridden options in this group, then the ones in the selected virtual group and then the defaults.",
Zerotorescue@62 432 values = function(info)
Zerotorescue@62 433 local groupName = groupIdToName[info[2]];
Zerotorescue@62 434
Zerotorescue@62 435 local temp = {};
Zerotorescue@62 436
Zerotorescue@62 437 temp[""] = "";
Zerotorescue@62 438 for name, values in pairs(addon.db.profile.groups) do
Zerotorescue@62 439 if values.isVirtual and name ~= groupName then
Zerotorescue@62 440 temp[name] = name;
Zerotorescue@62 441 end
Zerotorescue@62 442 end
Zerotorescue@62 443
Zerotorescue@62 444 return temp;
Zerotorescue@62 445 end,
Zerotorescue@62 446 set = function(info, value)
Zerotorescue@62 447 local groupName = groupIdToName[info[2]];
Zerotorescue@62 448 local optionName = info[#info];
Zerotorescue@62 449
Zerotorescue@62 450 addon.db.profile.groups[groupName][optionName] = value ~= "" and value;
Zerotorescue@62 451 end,
Zerotorescue@62 452 disabled = false,
Zerotorescue@62 453 },
Zerotorescue@62 454 },
Zerotorescue@62 455 },
Zerotorescue@62 456 minimumStock = {
Zerotorescue@62 457 order = 10,
Zerotorescue@62 458 type = "group",
Zerotorescue@62 459 inline = true,
Zerotorescue@62 460 name = "Minimum stock",
Zerotorescue@62 461 set = SetOption,
Zerotorescue@62 462 get = GetOption,
Zerotorescue@62 463 disabled = GetDisabled,
Zerotorescue@62 464 args = {
Zerotorescue@62 465 description = {
Zerotorescue@62 466 order = 0,
Zerotorescue@62 467 type = "description",
Zerotorescue@62 468 name = "Here you can specify the minimum amount of items you wish to keep in stock and related settings for the currently selected group. Please note the values entered here do not affect the queued quantities, you must set settings for that in the area below.",
Zerotorescue@62 469 },
Zerotorescue@62 470 header = {
Zerotorescue@62 471 order = 5,
Zerotorescue@62 472 type = "header",
Zerotorescue@62 473 name = "",
Zerotorescue@62 474 },
Zerotorescue@62 475
Zerotorescue@62 476 overrideMinLocalStock = {
Zerotorescue@62 477 order = 10,
Zerotorescue@62 478 type = "toggle",
Zerotorescue@62 479 name = "Override min local stock",
Zerotorescue@62 480 desc = "Allows you to override the minimum local stock setting for this group.",
Zerotorescue@62 481 arg = "minLocalStock",
Zerotorescue@62 482 },
Zerotorescue@62 483 minLocalStock = {
Zerotorescue@62 484 order = 11,
Zerotorescue@62 485 type = "range",
Zerotorescue@62 486 min = 0,
Zerotorescue@62 487 max = 100000,
Zerotorescue@62 488 softMax = 100,
Zerotorescue@62 489 step = 1,
Zerotorescue@62 490 name = "Minimum local stock",
Zerotorescue@62 491 desc = "You can manually enter a value between 100 and 100.000 in the text box below if the provided range is insufficient.",
Zerotorescue@62 492 arg = "overrideMinLocalStock",
Zerotorescue@62 493 },
Zerotorescue@62 494 overrideAlertBelowLocalMinimum = {
Zerotorescue@62 495 order = 15,
Zerotorescue@62 496 type = "toggle",
Zerotorescue@62 497 name = "Override local minimum alert",
Zerotorescue@62 498 desc = "Allows you to override wether an alert should be shown when an item in this group gets below the local minimum stock threshold.",
Zerotorescue@62 499 arg = "alertBelowLocalMinimum",
Zerotorescue@62 500 },
Zerotorescue@62 501 alertBelowLocalMinimum = {
Zerotorescue@62 502 order = 16,
Zerotorescue@62 503 type = "toggle",
Zerotorescue@62 504 name = "Alert when below local minimum (NYI)",
Zerotorescue@62 505 desc = "Show an alert when an item in this group gets below the local minimum stock threshold.",
Zerotorescue@62 506 arg = "overrideAlertBelowLocalMinimum",
Zerotorescue@62 507 },
Zerotorescue@62 508
Zerotorescue@62 509 overrideMinGlobalStock = {
Zerotorescue@62 510 order = 20,
Zerotorescue@62 511 type = "toggle",
Zerotorescue@62 512 name = "Override min global stock",
Zerotorescue@62 513 desc = "Allows you to override the minimum global stock setting for this group.",
Zerotorescue@62 514 arg = "minGlobalStock",
Zerotorescue@62 515 },
Zerotorescue@62 516 minGlobalStock = {
Zerotorescue@62 517 order = 21,
Zerotorescue@62 518 type = "range",
Zerotorescue@62 519 min = 0,
Zerotorescue@62 520 max = 100000,
Zerotorescue@62 521 softMax = 100,
Zerotorescue@62 522 step = 1,
Zerotorescue@62 523 name = "Minimum global stock",
Zerotorescue@62 524 desc = "You can manually enter a value between 100 and 100.000 in the text box below if the provided range is insufficient.",
Zerotorescue@62 525 arg = "overrideMinGlobalStock",
Zerotorescue@62 526 },
Zerotorescue@62 527 overrideAlertBelowGlobalMinimum = {
Zerotorescue@62 528 order = 25,
Zerotorescue@62 529 type = "toggle",
Zerotorescue@62 530 name = "Override global minimum alert",
Zerotorescue@62 531 desc = "Allows you to override wether an alert should be shown when an item in this group gets below the global minimum stock threshold.",
Zerotorescue@62 532 arg = "alertBelowGlobalMinimum",
Zerotorescue@62 533 },
Zerotorescue@62 534 alertBelowGlobalMinimum = {
Zerotorescue@62 535 order = 26,
Zerotorescue@62 536 type = "toggle",
Zerotorescue@62 537 name = "Alert when below global minimum (NYI)",
Zerotorescue@62 538 desc = "Show an alert when an item in this group gets below the global minimum stock threshold.",
Zerotorescue@62 539 arg = "overrideAlertBelowGlobalMinimum",
Zerotorescue@62 540 },
Zerotorescue@62 541
Zerotorescue@62 542 overrideSummaryThresholdShow = {
Zerotorescue@62 543 order = 34,
Zerotorescue@62 544 type = "toggle",
Zerotorescue@62 545 name = "Override summary showing",
Zerotorescue@62 546 desc = "Allows you to override when this group should appear in the summary.",
Zerotorescue@62 547 arg = "summaryThresholdShow",
Zerotorescue@62 548 },
Zerotorescue@62 549 summaryThresholdShow = {
Zerotorescue@62 550 order = 35,
Zerotorescue@62 551 type = "range",
Zerotorescue@62 552 min = 0,
Zerotorescue@62 553 max = 10,
Zerotorescue@62 554 softMax = 100,
Zerotorescue@62 555 step = 0.05,
Zerotorescue@62 556 isPercent = true,
Zerotorescue@62 557 name = "Show in summary when below",
Zerotorescue@62 558 desc = "Show items in the summary when below the specified percentage of the minimum stock.\n\nYou can manually enter a value between 1.000% and 10.000% in the edit box if the provided range is insufficient.",
Zerotorescue@62 559 arg = "overrideSummaryThresholdShow",
Zerotorescue@62 560 },
Zerotorescue@62 561 overrideTrackAtCharacters = {
Zerotorescue@62 562 order = 39,
Zerotorescue@62 563 type = "toggle",
Zerotorescue@62 564 name = "Override track at",
Zerotorescue@62 565 desc = "Allows you to override at which characters items in this group should appear in the summary and generate alerts.",
Zerotorescue@62 566 arg = "trackAtCharacters",
Zerotorescue@62 567 },
Zerotorescue@62 568 trackAtCharacters = {
Zerotorescue@62 569 order = 40,
Zerotorescue@62 570 type = "multiselect",
Zerotorescue@62 571 name = "Track at",
Zerotorescue@62 572 desc = "Select at which characters this should appear in the summary and generate alerts.",
Zerotorescue@62 573 values = function()
Zerotorescue@62 574 local temp = {};
Zerotorescue@62 575 for charName in pairs(addon.db.factionrealm.characters) do
Zerotorescue@62 576 temp[charName] = charName;
Zerotorescue@62 577 end
Zerotorescue@62 578
Zerotorescue@62 579 return temp;
Zerotorescue@62 580 end,
Zerotorescue@62 581 get = GetMultiOption,
Zerotorescue@65 582 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.
Zerotorescue@62 583 arg = "overrideTrackAtCharacters",
Zerotorescue@62 584 },
Zerotorescue@62 585 },
Zerotorescue@62 586 },
Zerotorescue@62 587 refill = {
Zerotorescue@62 588 order = 20,
Zerotorescue@62 589 type = "group",
Zerotorescue@62 590 inline = true,
Zerotorescue@62 591 name = "Replenishing stock",
Zerotorescue@62 592 set = SetOption,
Zerotorescue@62 593 get = GetOption,
Zerotorescue@62 594 disabled = GetDisabled,
Zerotorescue@62 595 args = {
Zerotorescue@62 596 description = {
Zerotorescue@62 597 order = 0,
Zerotorescue@62 598 type = "description",
Zerotorescue@62 599 name = function(info)
Zerotorescue@62 600 local groupName = groupIdToName[info[2]];
Zerotorescue@62 601 local r = "Here you can specify the amount of items to which you wish to restock when you are collecting new items for the currently selected group. This may be higher than the minimum stock.\n\n";
Zerotorescue@62 602
Zerotorescue@62 603 r = r .. "When restocking the target amount is |cfffed000" .. addon:GetOptionByKey(groupName, "restockTarget") .. "|r of every item. Not queueing craftable items when only missing |cfffed000" .. floor( addon:GetOptionByKey(groupName, "minCraftingQueue") * addon:GetOptionByKey(groupName, "restockTarget") ) .. "|r (|cfffed000" .. ( addon:GetOptionByKey(groupName, "minCraftingQueue") * 100 ) .. "%|r) of the restock target and making |cfffed000" .. floor( ( addon:GetOptionByKey(groupName, "bonusQueue") * addon:GetOptionByKey(groupName, "restockTarget") ) + .5 ) .. "|r (|cfffed000" .. ( addon:GetOptionByKey(groupName, "bonusQueue") * 100 ) .. "%|r) extra items when you completely ran out. ";
Zerotorescue@62 604
Zerotorescue@62 605 if addon:GetOptionByKey(groupName, "priceThreshold") == 0 then
Zerotorescue@62 606 r = r .. "Queueing items at |cfffed000any|r auction value.";
Zerotorescue@62 607 else
Zerotorescue@62 608 r = r .. "Queueing items worth |cfffed000" .. addon:ReadableMoney(addon:GetOptionByKey(groupName, "priceThreshold")) .. "|r or more.";
Zerotorescue@62 609 end
Zerotorescue@62 610
Zerotorescue@62 611 return r;
Zerotorescue@62 612 end,
Zerotorescue@62 613 },
Zerotorescue@62 614 header = {
Zerotorescue@62 615 order = 5,
Zerotorescue@62 616 type = "header",
Zerotorescue@62 617 name = "",
Zerotorescue@62 618 },
Zerotorescue@62 619 overrideRestockTarget = {
Zerotorescue@62 620 order = 9,
Zerotorescue@62 621 type = "toggle",
Zerotorescue@62 622 name = "Override restock target",
Zerotorescue@62 623 desc = "Allows you to override the restock target setting for this group.",
Zerotorescue@62 624 arg = "restockTarget",
Zerotorescue@62 625 },
Zerotorescue@62 626 restockTarget = {
Zerotorescue@62 627 order = 10,
Zerotorescue@62 628 type = "range",
Zerotorescue@62 629 min = 0,
Zerotorescue@62 630 max = 100000,
Zerotorescue@62 631 softMax = 100,
Zerotorescue@62 632 step = 1,
Zerotorescue@62 633 name = "Restock target",
Zerotorescue@62 634 desc = "You can manually enter a value between 100 and 100.000 in the edit box if the provided range is insufficient.",
Zerotorescue@62 635 arg = "overrideRestockTarget",
Zerotorescue@62 636 },
Zerotorescue@62 637 overrideMinCraftingQueue = {
Zerotorescue@62 638 order = 19,
Zerotorescue@62 639 type = "toggle",
Zerotorescue@62 640 name = "Override min queue",
Zerotorescue@62 641 desc = "Allows you to override the minimum craftable items queue setting for this group.",
Zerotorescue@62 642 arg = "minCraftingQueue",
Zerotorescue@62 643 },
Zerotorescue@62 644 minCraftingQueue = {
Zerotorescue@62 645 order = 20,
Zerotorescue@62 646 type = "range",
Zerotorescue@62 647 min = 0,
Zerotorescue@62 648 max = 1,
Zerotorescue@62 649 step = 0.01,
Zerotorescue@62 650 isPercent = true,
Zerotorescue@62 651 name = "Don't queue if I only miss",
Zerotorescue@62 652 desc = "Don't add a craftable item to the queue if I only miss this much or less of the restock target.\n\nExample: if your restock target is set to 60 and this is set to 5%, an item won't be queued unless you are missing more than 3 of it.",
Zerotorescue@62 653 arg = "overrideMinCraftingQueue",
Zerotorescue@62 654 },
Zerotorescue@62 655 overrideBonusQueue = {
Zerotorescue@62 656 order = 29,
Zerotorescue@62 657 type = "toggle",
Zerotorescue@62 658 name = "Override bonus queue",
Zerotorescue@62 659 desc = "Allows you to override the bonus craftable items queue setting for this group.",
Zerotorescue@62 660 arg = "bonusQueue",
Zerotorescue@62 661 },
Zerotorescue@62 662 bonusQueue = {
Zerotorescue@62 663 order = 30,
Zerotorescue@62 664 type = "range",
Zerotorescue@62 665 min = 0,
Zerotorescue@62 666 max = 10, -- 1000%
Zerotorescue@62 667 step = 0.01, -- 1%
Zerotorescue@62 668 isPercent = true,
Zerotorescue@62 669 name = "Bonus queue",
Zerotorescue@62 670 desc = "Get additional items when there are none left.\n\nExample: if your restock target is set to 60 and this is set to 10%, you will get 66 items instead of just 60 if you end up with none left while queueing.",
Zerotorescue@62 671 arg = "overrideBonusQueue",
Zerotorescue@62 672 },
Zerotorescue@62 673 overridePriceThreshold = {
Zerotorescue@62 674 order = 39,
Zerotorescue@62 675 type = "toggle",
Zerotorescue@62 676 name = "Override price threshold",
Zerotorescue@62 677 desc = "Allows you to override the price threshold setting for this group.",
Zerotorescue@62 678 arg = "priceThreshold",
Zerotorescue@62 679 },
Zerotorescue@62 680 priceThreshold = {
Zerotorescue@62 681 order = 40,
Zerotorescue@62 682 type = "input",
Zerotorescue@62 683 name = "Price threshold",
Zerotorescue@62 684 desc = "Only queue craftable items when they are worth at least this much according to your auction house addon.\n\nSet to 0 to ignore auction prices.",
Zerotorescue@62 685 validate = function(info, value) return addon:ValidateReadableMoney(info, value); end,
Zerotorescue@62 686 get = function(i) return addon:ReadableMoney(GetOption(i)); end,
Zerotorescue@62 687 set = function(i, v) SetOption(i, addon:ReadableMoneyToCopper(v)); end,
Zerotorescue@62 688 arg = "overridePriceThreshold",
Zerotorescue@62 689 },
Zerotorescue@62 690 overrideSummaryHidePriceThreshold = {
Zerotorescue@62 691 order = 49,
Zerotorescue@62 692 type = "toggle",
Zerotorescue@62 693 name = "Override summary showing",
Zerotorescue@62 694 desc = "Allows you to override if items in this group should be hidden from the summary while their value is below the price threshold.",
Zerotorescue@62 695 arg = "summaryHidePriceThreshold",
Zerotorescue@62 696 },
Zerotorescue@62 697 summaryHidePriceThreshold = {
Zerotorescue@62 698 order = 50,
Zerotorescue@62 699 type = "toggle",
Zerotorescue@62 700 name = "Hide when below threshold",
Zerotorescue@62 701 desc = "Hide items from the summary when their value is below the set price threshold.",
Zerotorescue@62 702 arg = "overrideSummaryHidePriceThreshold",
Zerotorescue@62 703 },
Zerotorescue@62 704 overrideAlwaysGetAuctionValue = {
Zerotorescue@62 705 order = 59,
Zerotorescue@62 706 type = "toggle",
Zerotorescue@62 707 name = "Override auction value showing",
Zerotorescue@62 708 desc = "Allows you to override if the auction value of items in this group should be cached and displayed even when the price threshold is set to 0|cffeda55fc|r.",
Zerotorescue@62 709 arg = "alwaysGetAuctionValue",
Zerotorescue@62 710 },
Zerotorescue@62 711 alwaysGetAuctionValue = {
Zerotorescue@62 712 order = 60,
Zerotorescue@62 713 type = "toggle",
Zerotorescue@62 714 name = "Always show auction value",
Zerotorescue@62 715 desc = "Always cache and show the auction value of items in this group, even if the price threshold is set to 0|cffeda55fc|r.",
Zerotorescue@62 716 arg = "overrideAlwaysGetAuctionValue",
Zerotorescue@62 717 },
Zerotorescue@62 718 },
Zerotorescue@62 719 },
Zerotorescue@62 720 },
Zerotorescue@62 721 },
Zerotorescue@62 722 group = {
Zerotorescue@62 723 order = 20,
Zerotorescue@62 724 type = "group",
Zerotorescue@62 725 name = "Management",
Zerotorescue@62 726 desc = "Rename, delete, duplicate or export this group.",
Zerotorescue@62 727 args = {
Zerotorescue@62 728 actions = {
Zerotorescue@62 729 order = 10,
Zerotorescue@62 730 type = "group",
Zerotorescue@62 731 name = "Actions",
Zerotorescue@62 732 inline = true,
Zerotorescue@62 733 args = {
Zerotorescue@62 734 rename = {
Zerotorescue@62 735 order = 10,
Zerotorescue@62 736 type = "input",
Zerotorescue@62 737 name = "Rename group - New name",
Zerotorescue@62 738 desc = "Change the name of this group to something else. You can also use item links here as you wish.",
Zerotorescue@62 739 validate = ValidateGroupName,
Zerotorescue@62 740 set = function(info, value)
Zerotorescue@62 741 local oldGroupName = groupIdToName[info[2]];
Zerotorescue@62 742
Zerotorescue@62 743 addon.db.profile.groups[value] = CopyTable(addon.db.profile.groups[oldGroupName]);
Zerotorescue@62 744 addon.db.profile.groups[oldGroupName] = nil;
Zerotorescue@62 745
Zerotorescue@62 746 groupIdToName[info[2]] = value;
Zerotorescue@62 747 groupIdToName[value] = true;
Zerotorescue@62 748 groupIdToName[oldGroupName] = nil;
Zerotorescue@62 749
Zerotorescue@62 750 mod:FillGroupOptions();
Zerotorescue@62 751 end,
Zerotorescue@62 752 get = function(info)
Zerotorescue@62 753 return groupIdToName[info[2]];
Zerotorescue@62 754 end,
Zerotorescue@62 755 },
Zerotorescue@62 756 duplicate = {
Zerotorescue@62 757 order = 20,
Zerotorescue@62 758 type = "input",
Zerotorescue@62 759 name = "Duplicate group - New name",
Zerotorescue@62 760 desc = "Duplicate this group. You can also use item links here as you wish.\n\nAll item data will be erased.",
Zerotorescue@62 761 validate = ValidateGroupName,
Zerotorescue@62 762 set = function(info, value)
Zerotorescue@62 763 local oldGroupName = groupIdToName[info[2]];
Zerotorescue@62 764
Zerotorescue@62 765 addon.db.profile.groups[value] = CopyTable(addon.db.profile.groups[oldGroupName]);
Zerotorescue@62 766
Zerotorescue@62 767 -- Reset item data (duplicate items me no want)
Zerotorescue@62 768 addon.db.profile.groups[value].items = nil;
Zerotorescue@62 769
Zerotorescue@62 770 mod:FillGroupOptions();
Zerotorescue@62 771 end,
Zerotorescue@62 772 get = false,
Zerotorescue@62 773 },
Zerotorescue@62 774 delete = {
Zerotorescue@62 775 order = 30,
Zerotorescue@62 776 type = "execute",
Zerotorescue@62 777 name = "Delete group",
Zerotorescue@62 778 desc = "Delete the currently selected group.",
Zerotorescue@62 779 confirm = true,
Zerotorescue@62 780 confirmText = "Are you sure you wish to |cffff0000DELETE|r this group? This action is not reversable!",
Zerotorescue@62 781 func = function(info)
Zerotorescue@62 782 local groupName = groupIdToName[info[2]];
Zerotorescue@62 783
Zerotorescue@62 784 addon.db.profile.groups[groupName] = nil;
Zerotorescue@62 785
Zerotorescue@62 786 mod:FillGroupOptions();
Zerotorescue@62 787 end,
Zerotorescue@62 788 },
Zerotorescue@62 789 },
Zerotorescue@62 790 },
Zerotorescue@62 791 export = {
Zerotorescue@62 792 order = 40,
Zerotorescue@62 793 type = "group",
Zerotorescue@62 794 name = "Export",
Zerotorescue@62 795 inline = true,
Zerotorescue@62 796 args = {
Zerotorescue@62 797 input = {
Zerotorescue@62 798 order = 10,
Zerotorescue@62 799 type = "input",
Zerotorescue@62 800 multiline = true,
Zerotorescue@62 801 name = "Group data",
Zerotorescue@62 802 width = "full",
Zerotorescue@62 803 desc = "Export the group data for the currently selected group. Press CTRL-A to select all and CTRL-C to copy the text.",
Zerotorescue@62 804 set = false,
Zerotorescue@62 805 get = function(info)
Zerotorescue@62 806 local groupName = groupIdToName[info[2]];
Zerotorescue@62 807
Zerotorescue@62 808 -- We want to include the group name, so we copy the table then set another value
Zerotorescue@62 809 local temp = CopyTable(addon.db.profile.groups[groupName]);
Zerotorescue@62 810 temp.name = groupName;
Zerotorescue@62 811 temp.trackAtCharacters = nil;
Zerotorescue@62 812 temp.overrideTrackAtCharacters = nil;
Zerotorescue@62 813
Zerotorescue@62 814 if not AceSerializer then
Zerotorescue@62 815 AceSerializer = LibStub("AceSerializer-3.0");
Zerotorescue@62 816 end
Zerotorescue@62 817
Zerotorescue@62 818 return AceSerializer:Serialize(temp);
Zerotorescue@62 819 end,
Zerotorescue@62 820 },
Zerotorescue@62 821 },
Zerotorescue@62 822 },
Zerotorescue@62 823 },
Zerotorescue@62 824 },
Zerotorescue@62 825 add = {
Zerotorescue@62 826 order = 30,
Zerotorescue@62 827 type = "group",
Zerotorescue@62 828 name = "Add items",
Zerotorescue@62 829 desc = "Add new items to this group.",
Zerotorescue@62 830 hidden = function(info) return groupIsVirtual[info[2]]; end,
Zerotorescue@62 831 args = {
Zerotorescue@62 832 singleAdd = {
Zerotorescue@62 833 order = 10,
Zerotorescue@62 834 type = "group",
Zerotorescue@62 835 inline = true,
Zerotorescue@62 836 name = "Add items",
Zerotorescue@62 837 args = {
Zerotorescue@62 838 help = {
Zerotorescue@62 839 order = 10,
Zerotorescue@62 840 type = "description",
Zerotorescue@62 841 name = "You can add a single item to this group at a time by pasting the item-id or an item-link in the field to the left or you can also import multiple items at once by pasting exported item data in the field to the right. Scroll further down to add items based on your inventory contents.",
Zerotorescue@62 842 },
Zerotorescue@62 843 itemLink = {
Zerotorescue@62 844 order = 20,
Zerotorescue@62 845 type = "input",
Zerotorescue@62 846 name = "Single item add (item-link or item-id)",
Zerotorescue@62 847 desc = "Shift-click an item-link or enter an item-id to add the related item to this group. You can only add one item link or item id at a time.",
Zerotorescue@62 848 validate = function(info, value)
Zerotorescue@62 849 -- If the value is empty we'll allow passing to clear the carret
Zerotorescue@62 850 if value == "" then return true; end
Zerotorescue@62 851
Zerotorescue@62 852 local groupName = groupIdToName[info[2]];
Zerotorescue@62 853
Zerotorescue@62 854 local itemId = addon:GetItemId(string.trim(value or "")) or tonumber(string.trim(value or ""));
Zerotorescue@62 855
Zerotorescue@62 856 if not itemId then
Zerotorescue@62 857 return "This is not a valid item link.";
Zerotorescue@62 858 elseif addon:InGroup(itemId) then
Zerotorescue@62 859 return ("This item is already in the group \"%s\"."):format(addon:InGroup(itemId));
Zerotorescue@62 860 end
Zerotorescue@62 861
Zerotorescue@62 862 return true;
Zerotorescue@62 863 end,
Zerotorescue@62 864 set = function(info, value)
Zerotorescue@62 865 if value and value ~= "" then
Zerotorescue@62 866 local groupName = groupIdToName[info[2]];
Zerotorescue@62 867
Zerotorescue@62 868 local itemId = addon:GetItemId(string.trim(value or "")) or tonumber(string.trim(value or ""));
Zerotorescue@62 869
Zerotorescue@62 870 addon:AddItemToGroup(groupName, itemId);
Zerotorescue@62 871
Zerotorescue@62 872 print(("Added %s"):format(select(2, GetItemInfo(itemId)) or ("Unknown (#%d)"):format(itemId)));
Zerotorescue@62 873 end
Zerotorescue@62 874 end,
Zerotorescue@62 875 get = false,
Zerotorescue@62 876 },
Zerotorescue@62 877 importItemData = {
Zerotorescue@62 878 order = 30,
Zerotorescue@62 879 type = "input",
Zerotorescue@62 880 name = "Import item data",
Zerotorescue@62 881 desc = "Import item data from an exported item data-string. Any items already grouped will be skipped.",
Zerotorescue@62 882 set = function(info, value)
Zerotorescue@62 883 local groupName = groupIdToName[info[2]];
Zerotorescue@62 884
Zerotorescue@62 885 local allItemIds = { string.split(";", value or "") };
Zerotorescue@62 886
Zerotorescue@62 887 for _, value in pairs(allItemIds) do
Zerotorescue@62 888 local itemId = tonumber(value);
Zerotorescue@62 889
Zerotorescue@62 890 if not itemId then
Zerotorescue@62 891 print(("\"%s\" is not a number."):format(value));
Zerotorescue@62 892 elseif addon:InGroup(itemId) then
Zerotorescue@62 893 print(("Skipping %s (#%d) as it is already in the group |cfffed000%s|r."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, addon:InGroup(itemId)));
Zerotorescue@62 894 else
Zerotorescue@62 895 addon:AddItemToGroup(groupName, itemId);
Zerotorescue@62 896 end
Zerotorescue@62 897 end
Zerotorescue@62 898 end,
Zerotorescue@62 899 get = false,
Zerotorescue@62 900 },
Zerotorescue@62 901 importPremadeData = {
Zerotorescue@62 902 order = 40,
Zerotorescue@62 903 type = "select",
Zerotorescue@62 904 name = "Import premade data",
Zerotorescue@62 905 desc = "Import item data from a premade item-group. Any items already grouped will be skipped.",
Zerotorescue@62 906 values = function()
Zerotorescue@62 907 local temp = {};
Zerotorescue@62 908 for key, group in pairs(addon.defaultGroups) do
Zerotorescue@62 909 temp[key] = key;
Zerotorescue@62 910 end
Zerotorescue@62 911
Zerotorescue@62 912 return temp;
Zerotorescue@62 913 end,
Zerotorescue@62 914 set = function(info, value)
Zerotorescue@62 915 local groupName = groupIdToName[info[2]];
Zerotorescue@62 916
Zerotorescue@62 917 print(("Importing items from the premade group \"|cfffed000%s|r\"."):format(value));
Zerotorescue@62 918
Zerotorescue@62 919 -- Remember we imported this group and it's version so if it is ever changed, people can be notified
Zerotorescue@62 920 if not addon.db.profile.groups[groupName].premadeGroups then
Zerotorescue@62 921 addon.db.profile.groups[groupName].premadeGroups = {};
Zerotorescue@62 922 end
Zerotorescue@62 923 addon.db.profile.groups[groupName].premadeGroups[value] = addon.defaultGroups[value].version;
Zerotorescue@62 924
Zerotorescue@62 925 for itemId, version in pairs(addon.defaultGroups[value].items) do
Zerotorescue@62 926 if version > 0 then
Zerotorescue@62 927 itemId = itemId and tonumber(itemId);
Zerotorescue@62 928
Zerotorescue@62 929 if not itemId then
Zerotorescue@62 930 print(("\"|cfffed000%s|r\" is not a number."):format(value));
Zerotorescue@62 931 elseif addon:InGroup(itemId) then
Zerotorescue@62 932 print(("|cffff0000Skipping|r |cfffed000%s|r (#%d) as it is already in the group |cfffed000%s|r."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, addon:InGroup(itemId)));
Zerotorescue@62 933 else
Zerotorescue@62 934 addon:AddItemToGroup(groupName, itemId);
Zerotorescue@62 935 print(("|cff00ff00Added|r |cfffed000%s|r (#%d) to the group |cfffed000%s|r."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, groupName));
Zerotorescue@62 936 end
Zerotorescue@62 937 end
Zerotorescue@62 938 end
Zerotorescue@62 939 end,
Zerotorescue@62 940 get = false,
Zerotorescue@62 941 },
Zerotorescue@62 942 },
Zerotorescue@62 943 },
Zerotorescue@62 944 massAdd = {
Zerotorescue@62 945 order = 20,
Zerotorescue@62 946 type = "group",
Zerotorescue@62 947 inline = true,
Zerotorescue@62 948 name = "Mass add",
Zerotorescue@62 949 args = {
Zerotorescue@62 950 help = {
Zerotorescue@62 951 order = 10,
Zerotorescue@62 952 type = "description",
Zerotorescue@62 953 name = "Click the items you wish to add to this group or add multiple of these items at once by providing a name filter in the field below.",
Zerotorescue@62 954 },
Zerotorescue@62 955 massAdd = {
Zerotorescue@62 956 order = 20,
Zerotorescue@62 957 type = "input",
Zerotorescue@62 958 name = "Add all items matching...",
Zerotorescue@62 959 desc = "Add every item in your inventory matching the name entered in this field. If you enter \"Glyph\" as a filter, any items in your inventory containing this in their name will be added to this group.",
Zerotorescue@62 960 set = function(info, value)
Zerotorescue@62 961 local groupName = groupIdToName[info[2]];
Zerotorescue@62 962
Zerotorescue@62 963 if not value then return; end
Zerotorescue@62 964
Zerotorescue@62 965 value = value:lower();
Zerotorescue@62 966
Zerotorescue@62 967 local ref = options.args.groups.args[info[2]].args.add.args.list.args;
Zerotorescue@62 968
Zerotorescue@62 969 for itemId, test in pairs(ref) do
Zerotorescue@62 970 if test then
Zerotorescue@62 971 local itemName = GetItemInfo(itemId);
Zerotorescue@62 972
Zerotorescue@62 973 if itemName:lower():find(value) then
Zerotorescue@62 974 if not addon:AddItemToGroup(groupName, itemId) then
Zerotorescue@62 975 print("|cffff0000Couldn't add the item with itemId (" .. itemId .. ") because it is already in a group.|r");
Zerotorescue@62 976 end
Zerotorescue@62 977 end
Zerotorescue@62 978 end
Zerotorescue@62 979 end
Zerotorescue@62 980 end,
Zerotorescue@62 981 get = false,
Zerotorescue@62 982 },
Zerotorescue@62 983 minItemLevel = {
Zerotorescue@62 984 order = 40,
Zerotorescue@62 985 type = "select",
Zerotorescue@62 986 values = function()
Zerotorescue@62 987 local temp = {};
Zerotorescue@62 988
Zerotorescue@62 989 temp[0] = "Include everything";
Zerotorescue@62 990
Zerotorescue@62 991 local itemLevelTemplate = "Itemlevel >= %d";
Zerotorescue@62 992
Zerotorescue@62 993 for i = 1, 49 do
Zerotorescue@62 994 temp[( i * 10 )] = itemLevelTemplate:format(( i * 10 ));
Zerotorescue@62 995 end
Zerotorescue@62 996
Zerotorescue@62 997 temp[500] = "Include nothing";
Zerotorescue@62 998
Zerotorescue@62 999 return temp;
Zerotorescue@62 1000 end,
Zerotorescue@62 1001 name = "Include tradeskill items",
Zerotorescue@62 1002 desc = "Include all items above this item level from the currently opened tradeskill window in the below item list.\n\nSetting this very low this might considerably slow down this config window.\n\nSet to 500 to disable showing of items completely.",
Zerotorescue@62 1003 set = function(i, v) includeTradeSkillItems = v; end,
Zerotorescue@62 1004 get = function() return includeTradeSkillItems; end,
Zerotorescue@62 1005 disabled = function()
Zerotorescue@62 1006 if GetTradeSkillLine() == "UNKNOWN" then
Zerotorescue@62 1007 includeTradeSkillItems = 500;
Zerotorescue@62 1008 return true; -- disabled
Zerotorescue@62 1009 else
Zerotorescue@62 1010 return false;
Zerotorescue@62 1011 end
Zerotorescue@62 1012 end,
Zerotorescue@62 1013 },
Zerotorescue@62 1014 },
Zerotorescue@62 1015 },
Zerotorescue@62 1016 list = {
Zerotorescue@62 1017 order = 30,
Zerotorescue@62 1018 type = "group",
Zerotorescue@62 1019 inline = true,
Zerotorescue@62 1020 name = "Item list",
Zerotorescue@62 1021 hidden = UpdateAddItemList,
Zerotorescue@62 1022 args = {
Zerotorescue@62 1023
Zerotorescue@62 1024 },
Zerotorescue@62 1025 },
Zerotorescue@62 1026 },
Zerotorescue@62 1027 },
Zerotorescue@62 1028 remove = {
Zerotorescue@62 1029 order = 40,
Zerotorescue@62 1030 type = "group",
Zerotorescue@62 1031 name = "Current items",
Zerotorescue@62 1032 desc = "View, export or remove items from this group.",
Zerotorescue@62 1033 hidden = function(info) return groupIsVirtual[info[2]]; end,
Zerotorescue@62 1034 args = {
Zerotorescue@62 1035 help = {
Zerotorescue@62 1036 order = 10,
Zerotorescue@62 1037 type = "group",
Zerotorescue@62 1038 inline = true,
Zerotorescue@62 1039 name = "Help",
Zerotorescue@62 1040 hidden = false,
Zerotorescue@62 1041 args = {
Zerotorescue@62 1042 help = {
Zerotorescue@62 1043 order = 10,
Zerotorescue@62 1044 type = "description",
Zerotorescue@62 1045 name = "Click the items you wish to remove from this group.",
Zerotorescue@62 1046 },
Zerotorescue@62 1047 massRemove = {
Zerotorescue@62 1048 order = 20,
Zerotorescue@62 1049 type = "input",
Zerotorescue@62 1050 name = "Remove all items matching...",
Zerotorescue@62 1051 desc = "Remove every item in this group matching the name entered in this field. If you enter \"Glyph\" as a filter, any items in this group containing this in their name will be removed from this group.",
Zerotorescue@62 1052 set = function(info, value)
Zerotorescue@62 1053 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1054
Zerotorescue@62 1055 if not value then return; end
Zerotorescue@62 1056
Zerotorescue@62 1057 value = value:lower();
Zerotorescue@62 1058
Zerotorescue@62 1059 local ref = options.args.groups.args[info[2]].args.remove.args.list.args;
Zerotorescue@62 1060
Zerotorescue@62 1061 for itemId, test in pairs(ref) do
Zerotorescue@62 1062 if test then
Zerotorescue@62 1063 local itemName = GetItemInfo(itemId);
Zerotorescue@62 1064
Zerotorescue@62 1065 if itemName:lower():find(value) then
Zerotorescue@62 1066 addon:RemoveItemFromGroup(groupName, itemId);
Zerotorescue@62 1067 print(("|cffff0000Removed|r %s (#%d)."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId));
Zerotorescue@62 1068 end
Zerotorescue@62 1069 end
Zerotorescue@62 1070 end
Zerotorescue@62 1071
Zerotorescue@62 1072 -- Now rebuild the list
Zerotorescue@62 1073 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@62 1074 end,
Zerotorescue@62 1075 get = false,
Zerotorescue@62 1076 },
Zerotorescue@62 1077 premadeGroups = {
Zerotorescue@62 1078 order = 30,
Zerotorescue@62 1079 type = "select",
Zerotorescue@62 1080 name = "Imported premade groups",
Zerotorescue@62 1081 desc = "This is a list of all premade groups that were imported into this group. You will be notified when any of these premade groups have changed and you will be able to import these changes.\n\nSelect a group to stop reminding you of changes to the premade group (the item list will be unaffected). Doing so will require you to manually update this when new items are added to the game.",
Zerotorescue@62 1082 values = function(info)
Zerotorescue@62 1083 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1084
Zerotorescue@62 1085 local temp = {};
Zerotorescue@62 1086 if addon.db.profile.groups[groupName].premadeGroups then
Zerotorescue@62 1087 for name, version in pairs(addon.db.profile.groups[groupName].premadeGroups) do
Zerotorescue@62 1088 temp[name] = name;
Zerotorescue@62 1089 end
Zerotorescue@62 1090 end
Zerotorescue@62 1091
Zerotorescue@62 1092 return temp;
Zerotorescue@62 1093 end,
Zerotorescue@62 1094 set = function(info, value)
Zerotorescue@62 1095 -- Remove premade group from this group
Zerotorescue@62 1096 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1097
Zerotorescue@62 1098 addon.db.profile.groups[groupName].premadeGroups[value] = nil;
Zerotorescue@62 1099
Zerotorescue@62 1100 print(("No longer notifying you about changes made to the premade group named \"|cfffed000%s|r\"."):format(value));
Zerotorescue@62 1101 end,
Zerotorescue@62 1102 get = false,
Zerotorescue@62 1103 disabled = function(info)
Zerotorescue@62 1104 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1105
Zerotorescue@62 1106 return (not addon.db.profile.groups[groupName].premadeGroups);
Zerotorescue@62 1107 end,
Zerotorescue@62 1108 },
Zerotorescue@62 1109 },
Zerotorescue@62 1110 },
Zerotorescue@62 1111 list = {
Zerotorescue@62 1112 order = 20,
Zerotorescue@62 1113 type = "group",
Zerotorescue@62 1114 inline = true,
Zerotorescue@62 1115 name = "Item list",
Zerotorescue@62 1116 hidden = UpdateRemoveItemList,
Zerotorescue@62 1117 args = {
Zerotorescue@62 1118
Zerotorescue@62 1119 },
Zerotorescue@62 1120 },
Zerotorescue@62 1121 export = {
Zerotorescue@62 1122 order = 30,
Zerotorescue@62 1123 type = "group",
Zerotorescue@62 1124 name = "Export",
Zerotorescue@62 1125 inline = true,
Zerotorescue@62 1126 args = {
Zerotorescue@62 1127 input = {
Zerotorescue@62 1128 order = 10,
Zerotorescue@62 1129 type = "input",
Zerotorescue@62 1130 name = "Item data",
Zerotorescue@62 1131 width = "full",
Zerotorescue@62 1132 desc = "Export the item data for the currently selected group. Press CTRL-A to select all and CTRL-C to copy the text.",
Zerotorescue@62 1133 set = false,
Zerotorescue@62 1134 get = function(info)
Zerotorescue@62 1135 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1136
Zerotorescue@62 1137 local combinedItemIds;
Zerotorescue@62 1138 -- Parse items in group and show these
Zerotorescue@62 1139 for itemId, _ in pairs(addon.db.profile.groups[groupName].items) do
Zerotorescue@62 1140 if not combinedItemIds then
Zerotorescue@62 1141 combinedItemIds = tostring(itemId);
Zerotorescue@62 1142 else
Zerotorescue@62 1143 combinedItemIds = combinedItemIds .. (";%d"):format(itemId);
Zerotorescue@62 1144 end
Zerotorescue@62 1145 end
Zerotorescue@62 1146
Zerotorescue@62 1147 return combinedItemIds; -- We don't serialize this because we actually DO want people to be able to manually modify it - besides, parsing it isn't going to be hard
Zerotorescue@62 1148 end,
Zerotorescue@62 1149 },
Zerotorescue@62 1150 },
Zerotorescue@62 1151 },
Zerotorescue@62 1152 },
Zerotorescue@62 1153 },
Zerotorescue@62 1154 },
Zerotorescue@62 1155 };
Zerotorescue@62 1156
Zerotorescue@62 1157
Zerotorescue@62 1158
Zerotorescue@62 1159
Zerotorescue@62 1160
Zerotorescue@62 1161
Zerotorescue@62 1162
Zerotorescue@62 1163
Zerotorescue@62 1164
Zerotorescue@62 1165 -- Object functions
Zerotorescue@62 1166
Zerotorescue@62 1167 function mod:OnEnable()
Zerotorescue@62 1168 -- Register our config slash command
Zerotorescue@62 1169 -- /im config
Zerotorescue@62 1170 addon:RegisterSlash(function(this)
Zerotorescue@62 1171 -- We don't want any other windows open at this time.
Zerotorescue@62 1172 for name, module in this:IterateModules() do
Zerotorescue@62 1173 if module.CloseFrame then
Zerotorescue@62 1174 module:CloseFrame();
Zerotorescue@62 1175 end
Zerotorescue@62 1176 end
Zerotorescue@62 1177
Zerotorescue@62 1178 this:GetModule("Config"):Show();
Zerotorescue@62 1179 end, { "c", "config", "conf", "option", "options", "opt", "setting", "settings" }, "|Hfunction:InventoriumCommandHandler:config|h|cff00fff7/im config|r|h (or /im c) - Open the config window to change the settings and manage groups.");
Zerotorescue@62 1180
Zerotorescue@62 1181 -- Whenever the profile is changed, update the groups | args: (object for the functionName, eventName, functionName)
Zerotorescue@62 1182 addon.db.RegisterCallback(self, "OnProfileChanged", "RefreshConfig");
Zerotorescue@62 1183 addon.db.RegisterCallback(self, "OnProfileCopied", "RefreshConfig");
Zerotorescue@62 1184 addon.db.RegisterCallback(self, "OnProfileReset", "RefreshConfig");
Zerotorescue@62 1185
Zerotorescue@62 1186 -- Register our custom widgets
Zerotorescue@62 1187 local Widgets = addon:GetModule("Widgets");
Zerotorescue@62 1188 Widgets:ItemLinkButton();
Zerotorescue@62 1189 Widgets:ConfigItemLinkButton();
Zerotorescue@62 1190 end
Zerotorescue@62 1191
Zerotorescue@62 1192 function mod:RefreshConfig()
Zerotorescue@65 1193 self:PremadeGroupsCheck();
Zerotorescue@65 1194
Zerotorescue@62 1195 self:FillGroupOptions();
Zerotorescue@62 1196 end
Zerotorescue@62 1197
Zerotorescue@62 1198 function mod:Load()
Zerotorescue@62 1199 if not AceConfigDialog and not AceConfigRegistry then
Zerotorescue@65 1200 self:PremadeGroupsCheck();
Zerotorescue@65 1201
Zerotorescue@62 1202 self:FillOptions();
Zerotorescue@62 1203
Zerotorescue@62 1204 -- Build options dialog
Zerotorescue@62 1205 AceConfigDialog = LibStub("AceConfigDialog-3.0");
Zerotorescue@62 1206 AceConfigRegistry = LibStub("AceConfigRegistry-3.0");
Zerotorescue@62 1207 -- Register options table
Zerotorescue@62 1208 LibStub("AceConfig-3.0"):RegisterOptionsTable("InventoriumOptions", options);
Zerotorescue@62 1209 -- Set a nice default size (so that 4 normal sized elements fit next to eachother)
Zerotorescue@62 1210 AceConfigDialog:SetDefaultSize("InventoriumOptions", 975, 600);
Zerotorescue@62 1211
Zerotorescue@62 1212 -- In case the addon is loaded from another condition, always call the remove interface options
Zerotorescue@62 1213 if AddonLoader and AddonLoader.RemoveInterfaceOptions then
Zerotorescue@62 1214 AddonLoader:RemoveInterfaceOptions("Inventorium");
Zerotorescue@62 1215 end
Zerotorescue@62 1216
Zerotorescue@62 1217 -- Add to the blizzard addons options thing
Zerotorescue@62 1218 AceConfigDialog:AddToBlizOptions("InventoriumOptions");
Zerotorescue@62 1219 end
Zerotorescue@62 1220 end
Zerotorescue@62 1221
Zerotorescue@62 1222 function mod:Show()
Zerotorescue@62 1223 self:Load();
Zerotorescue@62 1224
Zerotorescue@62 1225 AceConfigDialog:Open("InventoriumOptions");
Zerotorescue@62 1226 end
Zerotorescue@62 1227
Zerotorescue@62 1228 function mod:FillOptions()
Zerotorescue@62 1229 options = {
Zerotorescue@62 1230 type = "group",
Zerotorescue@62 1231 name = "Inventorium Config",
Zerotorescue@62 1232 childGroups = "tree",
Zerotorescue@62 1233 args = {
Zerotorescue@62 1234 },
Zerotorescue@62 1235 };
Zerotorescue@62 1236
Zerotorescue@62 1237 -- General
Zerotorescue@62 1238 self:FillGeneralOptions();
Zerotorescue@62 1239
Zerotorescue@62 1240 -- Help
Zerotorescue@62 1241 self:FillHelpOptions();
Zerotorescue@62 1242
Zerotorescue@62 1243 -- Profile
Zerotorescue@62 1244 options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(addon.db, true);
Zerotorescue@62 1245 options.args.profiles.order = 200;
Zerotorescue@62 1246
Zerotorescue@62 1247 -- Groups
Zerotorescue@62 1248 self:MakeGroupOptions();
Zerotorescue@62 1249
Zerotorescue@62 1250 -- Groups-contents
Zerotorescue@62 1251 self:FillGroupOptions();
Zerotorescue@62 1252 end
Zerotorescue@62 1253
Zerotorescue@62 1254 function mod:FillGeneralOptions()
Zerotorescue@62 1255 options.args.general = {
Zerotorescue@62 1256 order = 100,
Zerotorescue@62 1257 type = "group",
Zerotorescue@62 1258 name = "General",
Zerotorescue@62 1259 desc = "Change general Inventorium settings.",
Zerotorescue@62 1260 args = {
Zerotorescue@62 1261 general = {
Zerotorescue@62 1262 order = 1,
Zerotorescue@62 1263 type = "group",
Zerotorescue@62 1264 inline = true,
Zerotorescue@62 1265 name = "General",
Zerotorescue@62 1266 args = {
Zerotorescue@62 1267 description = {
Zerotorescue@62 1268 order = 0,
Zerotorescue@62 1269 type = "description",
Zerotorescue@62 1270 name = function()
Zerotorescue@62 1271 local t = "Here you can set general settings. The settings entered here will be used when you choose not to override the settings within an individual group.\n\n";
Zerotorescue@62 1272
Zerotorescue@62 1273 local currentAddon, selectedAddonName = addon:GetItemCountAddon();
Zerotorescue@62 1274 local preferedAddon = addon.db.profile.defaults.itemCountAddon;
Zerotorescue@62 1275
Zerotorescue@62 1276 if currentAddon then
Zerotorescue@62 1277 t = t .. "Currently using |cfffed000" .. selectedAddonName .. "|r as your item count addon. This addon is " .. ((currentAddon.IsEnabled() and "|cff00ff00enabled|r") or "|cffff0000disabled|r") .. ".";
Zerotorescue@62 1278
Zerotorescue@62 1279 if currentAddon.GetTotalCount and currentAddon.GetCharacterCount then
Zerotorescue@62 1280 t = t .. " This addon supports |cfffed000both total as local|r item counts.";
Zerotorescue@62 1281 elseif currentAddon.GetTotalCount then
Zerotorescue@62 1282 t = t .. " This addon supports |cfffed000only total|r item counts.";
Zerotorescue@62 1283 elseif currentAddon.GetCharacterCount then
Zerotorescue@62 1284 t = t .. " This addon supports |cfffed000only local|r item counts.";
Zerotorescue@62 1285 end
Zerotorescue@62 1286
Zerotorescue@62 1287 if preferedAddon ~= selectedAddonName then
Zerotorescue@62 1288 t = t .. "\n\n|cffff0000You have selected |cfffed000" .. preferedAddon .. "|r|cffff0000 as your item count addon, but this appears to be disabled and thus a random alternative was selected.|r";
Zerotorescue@62 1289 end
Zerotorescue@62 1290 end
Zerotorescue@62 1291
Zerotorescue@62 1292 return t;
Zerotorescue@62 1293 end,
Zerotorescue@62 1294 },
Zerotorescue@62 1295 header = {
Zerotorescue@62 1296 order = 5,
Zerotorescue@62 1297 type = "header",
Zerotorescue@62 1298 name = "",
Zerotorescue@62 1299 },
Zerotorescue@62 1300 auctionPricingAddon = {
Zerotorescue@62 1301 order = 10,
Zerotorescue@62 1302 type = "select",
Zerotorescue@62 1303 name = "Prefered pricing addon",
Zerotorescue@62 1304 desc = "Select the addon you prefer data to be retrieved from. A random supported addon will be used if the selected addon can not be found.",
Zerotorescue@62 1305 values = function()
Zerotorescue@62 1306 local temp = {};
Zerotorescue@62 1307 for name, value in pairs(addon.supportedAddons.auctionPricing) do
Zerotorescue@62 1308 temp[name] = name;
Zerotorescue@62 1309 end
Zerotorescue@62 1310
Zerotorescue@62 1311 return temp;
Zerotorescue@62 1312 end,
Zerotorescue@62 1313 get = function() return addon.db.profile.defaults.auctionPricingAddon; end,
Zerotorescue@62 1314 set = function(i, v)
Zerotorescue@62 1315 addon.db.profile.defaults.auctionPricingAddon = v;
Zerotorescue@62 1316
Zerotorescue@62 1317 if addon.supportedAddons.auctionPricing[v].OnSelect then
Zerotorescue@62 1318 addon.supportedAddons.auctionPricing[v].OnSelect();
Zerotorescue@62 1319 end
Zerotorescue@62 1320 end,
Zerotorescue@62 1321 },
Zerotorescue@62 1322 itemCountAddon = {
Zerotorescue@62 1323 order = 20,
Zerotorescue@62 1324 type = "select",
Zerotorescue@62 1325 name = "Prefered item count addon",
Zerotorescue@62 1326 desc = "Select the addon you prefer data to be retrieved from. A random supported addon will be used if the selected addon can not be found.",
Zerotorescue@62 1327 values = function()
Zerotorescue@62 1328 local temp = {};
Zerotorescue@62 1329 for name, value in pairs(addon.supportedAddons.itemCount) do
Zerotorescue@62 1330 temp[name] = name;
Zerotorescue@62 1331 end
Zerotorescue@62 1332
Zerotorescue@62 1333 return temp;
Zerotorescue@62 1334 end,
Zerotorescue@62 1335 get = function() return addon.db.profile.defaults.itemCountAddon; end,
Zerotorescue@62 1336 set = function(i, v)
Zerotorescue@62 1337 addon.db.profile.defaults.itemCountAddon = v;
Zerotorescue@62 1338
Zerotorescue@62 1339 if addon.supportedAddons.itemCount[v].OnSelect then
Zerotorescue@62 1340 addon.supportedAddons.itemCount[v].OnSelect();
Zerotorescue@62 1341 end
Zerotorescue@62 1342 end,
Zerotorescue@62 1343 },
Zerotorescue@62 1344 craftingAddon = {
Zerotorescue@62 1345 order = 30,
Zerotorescue@62 1346 type = "select",
Zerotorescue@62 1347 name = "Prefered crafting addon",
Zerotorescue@62 1348 desc = "Select the addon you prefer data to be queued into. A random supported addon will be used if the selected addon can not be found.",
Zerotorescue@62 1349 values = function()
Zerotorescue@62 1350 local temp = {};
Zerotorescue@62 1351 for name, value in pairs(addon.supportedAddons.crafting) do
Zerotorescue@62 1352 temp[name] = name;
Zerotorescue@62 1353 end
Zerotorescue@62 1354
Zerotorescue@62 1355 return temp;
Zerotorescue@62 1356 end,
Zerotorescue@62 1357 get = function() return addon.db.profile.defaults.craftingAddon; end,
Zerotorescue@62 1358 set = function(i, v)
Zerotorescue@62 1359 addon.db.profile.defaults.craftingAddon = v;
Zerotorescue@62 1360
Zerotorescue@62 1361 if addon.supportedAddons.crafting[v].OnSelect then
Zerotorescue@62 1362 addon.supportedAddons.crafting[v].OnSelect();
Zerotorescue@62 1363 end
Zerotorescue@62 1364 end,
Zerotorescue@62 1365 },
Zerotorescue@62 1366 localItemData = {
Zerotorescue@62 1367 order = 40,
Zerotorescue@62 1368 type = "multiselect",
Zerotorescue@62 1369 name = "Include in local item data",
Zerotorescue@62 1370 desc = "Select which data should be included in the local item data.",
Zerotorescue@62 1371 values = {
Zerotorescue@62 1372 ["Bag"] = "Bag",
Zerotorescue@62 1373 ["Bank"] = "Bank",
Zerotorescue@62 1374 ["Auction House"] = "Auction House",
Zerotorescue@62 1375 ["Mailbox"] = "Mailbox",
Zerotorescue@62 1376 },
Zerotorescue@62 1377 get = function(i, v) return addon.db.profile.defaults.localItemData and addon.db.profile.defaults.localItemData[v]; end,
Zerotorescue@62 1378 set = function(i, v, e) addon.db.profile.defaults.localItemData[v] = e or nil; end,
Zerotorescue@65 1379 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.
Zerotorescue@62 1380 },
Zerotorescue@62 1381 },
Zerotorescue@62 1382 },
Zerotorescue@62 1383 minimumStock = {
Zerotorescue@62 1384 order = 10,
Zerotorescue@62 1385 type = "group",
Zerotorescue@62 1386 inline = true,
Zerotorescue@62 1387 name = "Minimum stock",
Zerotorescue@62 1388 args = {
Zerotorescue@62 1389 description = {
Zerotorescue@62 1390 order = 0,
Zerotorescue@62 1391 type = "description",
Zerotorescue@62 1392 name = "Here you can specify the default minimum amount of items you wish to keep in stock and related settings. The settings entered here will be used when you choose not to override the settings within an individual group.",
Zerotorescue@62 1393 },
Zerotorescue@62 1394 header = {
Zerotorescue@62 1395 order = 5,
Zerotorescue@62 1396 type = "header",
Zerotorescue@62 1397 name = "",
Zerotorescue@62 1398 },
Zerotorescue@62 1399 minLocalStock = {
Zerotorescue@62 1400 order = 10,
Zerotorescue@62 1401 type = "range",
Zerotorescue@62 1402 min = 0,
Zerotorescue@62 1403 max = 100000,
Zerotorescue@62 1404 softMax = 100,
Zerotorescue@62 1405 step = 1,
Zerotorescue@62 1406 name = "Minimum local stock",
Zerotorescue@62 1407 desc = "You can manually enter a value between 100 and 100.000 in the text box below if the provided range is insufficient.",
Zerotorescue@62 1408 get = function() return addon.db.profile.defaults.minLocalStock; end,
Zerotorescue@62 1409 set = function(i, v) addon.db.profile.defaults.minLocalStock = v; end,
Zerotorescue@62 1410 },
Zerotorescue@62 1411 alertBelowLocalMinimum = {
Zerotorescue@62 1412 order = 11,
Zerotorescue@62 1413 type = "toggle",
Zerotorescue@62 1414 name = "Alert when below local minimum (NYI)",
Zerotorescue@62 1415 desc = "Show an alert when this item gets below this threshold.",
Zerotorescue@62 1416 get = function() return addon.db.profile.defaults.alertBelowLocalMinimum; end,
Zerotorescue@62 1417 set = function(i, v) addon.db.profile.defaults.alertBelowLocalMinimum = v; end,
Zerotorescue@62 1418 },
Zerotorescue@62 1419 minGlobalStock = {
Zerotorescue@62 1420 order = 20,
Zerotorescue@62 1421 type = "range",
Zerotorescue@62 1422 min = 0,
Zerotorescue@62 1423 max = 100000,
Zerotorescue@62 1424 softMax = 100,
Zerotorescue@62 1425 step = 1,
Zerotorescue@62 1426 name = "Minimum global stock",
Zerotorescue@62 1427 desc = "You can manually enter a value between 100 and 100.000 in the text box below if the provided range is insufficient.",
Zerotorescue@62 1428 get = function() return addon.db.profile.defaults.minGlobalStock; end,
Zerotorescue@62 1429 set = function(i, v) addon.db.profile.defaults.minGlobalStock = v; end,
Zerotorescue@62 1430 },
Zerotorescue@62 1431 alertBelowGlobalMinimum = {
Zerotorescue@62 1432 order = 21,
Zerotorescue@62 1433 type = "toggle",
Zerotorescue@62 1434 name = "Alert when below global minimum (NYI)",
Zerotorescue@62 1435 desc = "Show an alert when this item gets below this threshold.",
Zerotorescue@62 1436 get = function() return addon.db.profile.defaults.alertBelowGlobalMinimum; end,
Zerotorescue@62 1437 set = function(i, v) addon.db.profile.defaults.alertBelowGlobalMinimum = v; end,
Zerotorescue@62 1438 },
Zerotorescue@62 1439 summaryThresholdShow = {
Zerotorescue@62 1440 order = 30,
Zerotorescue@62 1441 type = "range",
Zerotorescue@62 1442 min = 0,
Zerotorescue@62 1443 max = 10,
Zerotorescue@62 1444 softMax = 100,
Zerotorescue@62 1445 step = 0.05,
Zerotorescue@62 1446 isPercent = true,
Zerotorescue@62 1447 name = "Show in summary when below",
Zerotorescue@62 1448 desc = "Show items in the summary when below this percentage of the minimum stock. This can be either below the minimum or the global stock.\n\nYou can manually enter a value between 1.000% and 10.000% in the edit box if the provided range is insufficient.",
Zerotorescue@62 1449 get = function() return addon.db.profile.defaults.summaryThresholdShow; end,
Zerotorescue@62 1450 set = function(i, v) addon.db.profile.defaults.summaryThresholdShow = v; end,
Zerotorescue@62 1451 },
Zerotorescue@62 1452 trackAtCharacters = {
Zerotorescue@62 1453 order = 40,
Zerotorescue@62 1454 type = "multiselect",
Zerotorescue@62 1455 name = "Track at",
Zerotorescue@62 1456 desc = "Select at which characters this should appear in the summary and generate alerts.",
Zerotorescue@62 1457 values = function()
Zerotorescue@62 1458 local temp = {};
Zerotorescue@62 1459 for charName in pairs(addon.db.factionrealm.characters) do
Zerotorescue@62 1460 temp[charName] = charName;
Zerotorescue@62 1461 end
Zerotorescue@62 1462
Zerotorescue@62 1463 return temp;
Zerotorescue@62 1464 end,
Zerotorescue@62 1465 get = function(i, v) return addon.db.profile.defaults.trackAtCharacters[v]; end,
Zerotorescue@62 1466 set = function(i, v, e) addon.db.profile.defaults.trackAtCharacters[v] = e or nil; end,
Zerotorescue@65 1467 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.
Zerotorescue@62 1468 },
Zerotorescue@62 1469 },
Zerotorescue@62 1470 },
Zerotorescue@62 1471 refill = {
Zerotorescue@62 1472 order = 20,
Zerotorescue@62 1473 type = "group",
Zerotorescue@62 1474 inline = true,
Zerotorescue@62 1475 name = "Replenishing stock",
Zerotorescue@62 1476 args = {
Zerotorescue@62 1477 description = {
Zerotorescue@62 1478 order = 0,
Zerotorescue@62 1479 type = "description",
Zerotorescue@62 1480 name = function()
Zerotorescue@62 1481 local r = "Here you can specify the default amount of items to which you wish to restock when you are collecting new items. This may be higher than the minimum stock. The settings entered here will be used when you choose not to override the settings within an individual group.\n\n";
Zerotorescue@62 1482
Zerotorescue@62 1483 r = r .. "When restocking the target amount is |cfffed000" .. addon.db.profile.defaults.restockTarget .. "|r of every item. Not queueing craftable items when only missing |cfffed000" .. floor( addon.db.profile.defaults.minCraftingQueue * addon.db.profile.defaults.restockTarget ) .. "|r (|cfffed000" .. ( addon.db.profile.defaults.minCraftingQueue * 100 ) .. "%|r) of the restock target.";
Zerotorescue@62 1484
Zerotorescue@62 1485 return r;
Zerotorescue@62 1486 end,
Zerotorescue@62 1487 },
Zerotorescue@62 1488 header = {
Zerotorescue@62 1489 order = 5,
Zerotorescue@62 1490 type = "header",
Zerotorescue@62 1491 name = "",
Zerotorescue@62 1492 },
Zerotorescue@62 1493 restockTarget = {
Zerotorescue@62 1494 order = 10,
Zerotorescue@62 1495 type = "range",
Zerotorescue@62 1496 min = 0,
Zerotorescue@62 1497 max = 100000,
Zerotorescue@62 1498 softMax = 100,
Zerotorescue@62 1499 step = 1,
Zerotorescue@62 1500 name = "Restock target",
Zerotorescue@62 1501 desc = "You can manually enter a value between 100 and 100.000 in the edit box if the provided range is insufficient.",
Zerotorescue@62 1502 get = function() return addon.db.profile.defaults.restockTarget; end,
Zerotorescue@62 1503 set = function(i, v) addon.db.profile.defaults.restockTarget = v; end,
Zerotorescue@62 1504 },
Zerotorescue@62 1505 minCraftingQueue = {
Zerotorescue@62 1506 order = 20,
Zerotorescue@62 1507 type = "range",
Zerotorescue@62 1508 min = 0,
Zerotorescue@62 1509 max = 1,
Zerotorescue@62 1510 step = 0.01, -- 1%
Zerotorescue@62 1511 isPercent = true,
Zerotorescue@62 1512 name = "Don't queue if I only miss",
Zerotorescue@62 1513 desc = "Don't add a craftable item to the queue if I only miss this much or less of the restock target.\n\nExample: if your restock target is set to 60 and this is set to 5%, an item won't be queued unless you are missing more than 3 of it.",
Zerotorescue@62 1514 get = function() return addon.db.profile.defaults.minCraftingQueue; end,
Zerotorescue@62 1515 set = function(i, v) addon.db.profile.defaults.minCraftingQueue = v; end,
Zerotorescue@62 1516 },
Zerotorescue@62 1517 bonusQueue = {
Zerotorescue@62 1518 order = 30,
Zerotorescue@62 1519 type = "range",
Zerotorescue@62 1520 min = 0,
Zerotorescue@62 1521 max = 10, -- 1000%
Zerotorescue@62 1522 step = 0.01, -- 1%
Zerotorescue@62 1523 isPercent = true,
Zerotorescue@62 1524 name = "Bonus queue",
Zerotorescue@62 1525 desc = "Get additional items when there are none left.\n\nExample: if your restock target is set to 60 and this is set to 10%, you will get 66 items instead of just 60 if you end up with none left while queueing.",
Zerotorescue@62 1526 get = function() return addon.db.profile.defaults.bonusQueue; end,
Zerotorescue@62 1527 set = function(i, v) addon.db.profile.defaults.bonusQueue = v; end,
Zerotorescue@62 1528 },
Zerotorescue@62 1529 priceThreshold = {
Zerotorescue@62 1530 order = 40,
Zerotorescue@62 1531 type = "input",
Zerotorescue@62 1532 name = "Price threshold",
Zerotorescue@62 1533 desc = "Only queue craftable items when they are worth at least this much according to your auction house addon.\n\nSet to 0 to ignore auction prices.",
Zerotorescue@62 1534 validate = function(info, value) return addon:ValidateReadableMoney(info, value); end,
Zerotorescue@62 1535 get = function() return addon:ReadableMoney(addon.db.profile.defaults.priceThreshold); end,
Zerotorescue@62 1536 set = function(i, v) addon.db.profile.defaults.priceThreshold = addon:ReadableMoneyToCopper(v); end,
Zerotorescue@62 1537 },
Zerotorescue@62 1538 summaryHidePriceThreshold = {
Zerotorescue@62 1539 order = 50,
Zerotorescue@62 1540 type = "toggle",
Zerotorescue@62 1541 name = "Hide when below threshold",
Zerotorescue@62 1542 desc = "Hide items from the summary when their value is below the set price threshold.",
Zerotorescue@62 1543 get = function() return addon.db.profile.defaults.summaryHidePriceThreshold; end,
Zerotorescue@62 1544 set = function(i, v) addon.db.profile.defaults.summaryHidePriceThreshold = v; end,
Zerotorescue@62 1545 },
Zerotorescue@62 1546 alwaysGetAuctionValue = {
Zerotorescue@62 1547 order = 60,
Zerotorescue@62 1548 type = "toggle",
Zerotorescue@62 1549 name = "Always show auction value",
Zerotorescue@62 1550 desc = "Always cache and show the auction value of items, even if the price threshold is set to 0|cffeda55fc|r.",
Zerotorescue@62 1551 get = function() return addon.db.profile.defaults.alwaysGetAuctionValue; end,
Zerotorescue@62 1552 set = function(i, v) addon.db.profile.defaults.alwaysGetAuctionValue = v; end,
Zerotorescue@62 1553 },
Zerotorescue@62 1554 },
Zerotorescue@62 1555 },
Zerotorescue@62 1556 colorCodes = {
Zerotorescue@62 1557 order = 30,
Zerotorescue@62 1558 type = "group",
Zerotorescue@62 1559 inline = true,
Zerotorescue@62 1560 name = "Color codes",
Zerotorescue@62 1561 args = {
Zerotorescue@62 1562 description = {
Zerotorescue@62 1563 order = 0,
Zerotorescue@62 1564 type = "description",
Zerotorescue@62 1565 name = "Change the color code thresholds based on the current stock remaining of the required minimum stock.",
Zerotorescue@62 1566 },
Zerotorescue@62 1567 header = {
Zerotorescue@62 1568 order = 5,
Zerotorescue@62 1569 type = "header",
Zerotorescue@62 1570 name = "",
Zerotorescue@62 1571 },
Zerotorescue@62 1572 green = {
Zerotorescue@62 1573 order = 10,
Zerotorescue@62 1574 type = "range",
Zerotorescue@62 1575 min = 0,
Zerotorescue@62 1576 max = 1,
Zerotorescue@62 1577 step = 0.01,
Zerotorescue@62 1578 isPercent = true,
Zerotorescue@62 1579 name = "|cff00ff00Green|r",
Zerotorescue@62 1580 desc = "Show quantity in green when at least this much of the minimum stock is available.",
Zerotorescue@62 1581 get = function() return addon.db.profile.defaults.colors.green; end,
Zerotorescue@62 1582 set = function(i, v) addon.db.profile.defaults.colors.green = v; end,
Zerotorescue@62 1583 },
Zerotorescue@62 1584 yellow = {
Zerotorescue@62 1585 order = 20,
Zerotorescue@62 1586 type = "range",
Zerotorescue@62 1587 min = 0,
Zerotorescue@62 1588 max = 1,
Zerotorescue@62 1589 step = 0.01,
Zerotorescue@62 1590 isPercent = true,
Zerotorescue@62 1591 name = "|cffffff00Yellow|r",
Zerotorescue@62 1592 desc = "Show quantity in yellow when at least this much of the minimum stock is available.",
Zerotorescue@62 1593 get = function() return addon.db.profile.defaults.colors.yellow; end,
Zerotorescue@62 1594 set = function(i, v) addon.db.profile.defaults.colors.yellow = v; end,
Zerotorescue@62 1595 },
Zerotorescue@62 1596 orange = {
Zerotorescue@62 1597 order = 30,
Zerotorescue@62 1598 type = "range",
Zerotorescue@62 1599 min = 0,
Zerotorescue@62 1600 max = 1,
Zerotorescue@62 1601 step = 0.01,
Zerotorescue@62 1602 isPercent = true,
Zerotorescue@62 1603 name = "|cffff9933Orange|r",
Zerotorescue@62 1604 desc = "Show quantity in orange when at least this much of the minimum stock is available.",
Zerotorescue@62 1605 get = function() return addon.db.profile.defaults.colors.orange; end,
Zerotorescue@62 1606 set = function(i, v) addon.db.profile.defaults.colors.orange = v; end,
Zerotorescue@62 1607 },
Zerotorescue@62 1608 red = {
Zerotorescue@62 1609 order = 40,
Zerotorescue@62 1610 type = "range",
Zerotorescue@62 1611 min = 0,
Zerotorescue@62 1612 max = 1,
Zerotorescue@62 1613 step = 0.01,
Zerotorescue@62 1614 isPercent = true,
Zerotorescue@62 1615 name = "|cffff0000Red|r",
Zerotorescue@62 1616 desc = "Show quantity in red when at least this much of the minimum stock is available.",
Zerotorescue@62 1617 get = function() return addon.db.profile.defaults.colors.red; end,
Zerotorescue@62 1618 set = function(i, v) addon.db.profile.defaults.colors.red = v; end,
Zerotorescue@62 1619 },
Zerotorescue@62 1620 },
Zerotorescue@62 1621 },
Zerotorescue@62 1622 },
Zerotorescue@62 1623 };
Zerotorescue@62 1624 end
Zerotorescue@62 1625
Zerotorescue@62 1626 function mod:FillHelpOptions()
Zerotorescue@62 1627 options.args.help = {
Zerotorescue@62 1628 order = 150,
Zerotorescue@62 1629 type = "group",
Zerotorescue@62 1630 childGroups = "tab",
Zerotorescue@62 1631 name = "Help",
Zerotorescue@62 1632 desc = "Useful information for if you're unfamiliar with a part of the addon.",
Zerotorescue@62 1633 args = {
Zerotorescue@62 1634 general = {
Zerotorescue@62 1635 order = 1,
Zerotorescue@62 1636 type = "group",
Zerotorescue@62 1637 name = "General",
Zerotorescue@62 1638 args = {
Zerotorescue@62 1639 description = {
Zerotorescue@62 1640 order = 0,
Zerotorescue@62 1641 type = "description",
Zerotorescue@62 1642 name = "Please note that all multi-select |cfffed000dropdown|r boxes were turned into multi-select |cfffed000toggle|r boxes. I do not intend to keep it this way, however it can not yet be reverted due to a major bug in one of the libraries used by Inventorium. The layout of this config may look terribly organized in it's current state.\n\n" ..
Zerotorescue@62 1643 "Since this is a beta some functionality might not be implemented yet while the options are available (usually - but not always - tagged as \"NYI\"). These options are used to indicate a feature is on the way and will be implemented before Inventorium is tagged as a release.\n\n" ..
Zerotorescue@62 1644 "Please request things you want and report anything that's clunky, weird, vague or otherwise buggy at |cfffed000the Inventorium development addon page|r. You can find this by searching for \"|cfffed000Inventorium|r\" at |cfffed000CurseForge.com|r.\n\n" ..
Zerotorescue@62 1645 "Tutorials for Inventorium will be created after the first stable release. If you require any help before that you can always contact me in the |cfffed000#JMTC|r IRC channel at |cfffed000QuakeNet.org|r. You may also report issues and request things there if you wish.\n\n" ..
Zerotorescue@62 1646 "You might notice the summary window currently gets very slow when refreshed once you get over 100-200 items in the list, this is a known issue and will be fixed in |cfffed000version 1.1|r or a little later (which is after the initial release).",
Zerotorescue@62 1647 },
Zerotorescue@62 1648 },
Zerotorescue@62 1649 },
Zerotorescue@62 1650 manual = {
Zerotorescue@62 1651 order = 2,
Zerotorescue@62 1652 type = "group",
Zerotorescue@62 1653 name = "Manual",
Zerotorescue@62 1654 args = {
Zerotorescue@62 1655 intro = {
Zerotorescue@62 1656 order = 1,
Zerotorescue@62 1657 type = "group",
Zerotorescue@62 1658 inline = true,
Zerotorescue@62 1659 name = "Intro",
Zerotorescue@62 1660 args = {
Zerotorescue@62 1661 description = {
Zerotorescue@62 1662 order = 0,
Zerotorescue@62 1663 type = "description",
Zerotorescue@62 1664 name = "|cfffed000Inventorium|r is an inventory tracking and restocking addon aimed towards making it extremely easy to keep enough stock of specific items at your characters. It provides a quick overview where you can see your current stock compared to the required stock and the current item value at the auction house whenever you find this relevant. From this overview you can queue craftable items into your favorite crafting profession addon and even restock from a vendor.",
Zerotorescue@62 1665 },
Zerotorescue@62 1666 },
Zerotorescue@62 1667 },
Zerotorescue@62 1668 Overview = {
Zerotorescue@62 1669 order = 2,
Zerotorescue@62 1670 type = "group",
Zerotorescue@62 1671 inline = true,
Zerotorescue@62 1672 name = "Overview",
Zerotorescue@62 1673 args = {
Zerotorescue@62 1674 description = {
Zerotorescue@62 1675 order = 0,
Zerotorescue@62 1676 type = "description",
Zerotorescue@62 1677 name = "In the stock overview, which is called the summary, you can view a list with all items relevant to your current character with their updated stock and auction house values. You can sort this list on item quality, current stock, percentage of stock missing, and item values and this way easily manually find the items you wish to process. If you prefer to automate the process, you can also configure the groups exactly as you wish and hit the queue button to process everything in that group.\n\n" ..
Zerotorescue@62 1678
Zerotorescue@62 1679 "The item count data can be retrieved from most popular item count addons. This includes |cfffed000ItemCount|r and |cfffed000DataStore|r, but also |cfffed000Altoholic|r (even though this is not really a proper item count addon).\n" ..
Zerotorescue@62 1680 "The auction house values data can also be retrieved from most popular auction house addons. This includes |cfffed000Auctionator|r, |cfffed000Auctioneer|r, |cfffed000AuctionLite|r, |cfffed000AuctionMaster|r and any other addon implementing the standard for retrieving item values. Item values from the summary windows of |cfffed000AuctionProfitMaster|r and |cfffed000ZeroAuctions|r are also supported, but not recommended.",
Zerotorescue@62 1681 },
Zerotorescue@62 1682 },
Zerotorescue@62 1683 },
Zerotorescue@62 1684 Groups = {
Zerotorescue@62 1685 order = 3,
Zerotorescue@62 1686 type = "group",
Zerotorescue@62 1687 inline = true,
Zerotorescue@62 1688 name = "Groups",
Zerotorescue@62 1689 args = {
Zerotorescue@62 1690 description = {
Zerotorescue@62 1691 order = 0,
Zerotorescue@62 1692 type = "description",
Zerotorescue@62 1693 name = "All items can be distributed over multiple groups to configure them exactly as you want. You can put all your glyphs in one group, gems in another and scrolls in a third with every single one of them having it's own set of unique settings. Per group you can set a price threshold, required item count, relevant characters and much more. The setup will feel very familiar to anyone that has used Quick Auctions to some extend as it uses a similar standard (though with many enhancements).",
Zerotorescue@62 1694 },
Zerotorescue@62 1695 },
Zerotorescue@62 1696 },
Zerotorescue@62 1697 Queueing = {
Zerotorescue@62 1698 order = 4,
Zerotorescue@62 1699 type = "group",
Zerotorescue@62 1700 inline = true,
Zerotorescue@62 1701 name = "Queueing",
Zerotorescue@62 1702 args = {
Zerotorescue@62 1703 description = {
Zerotorescue@62 1704 order = 0,
Zerotorescue@62 1705 type = "description",
Zerotorescue@62 1706 name = "Queueing items into your crafting profession addon can be done per group or for all visible groups at once. This requires the relevant profession window to be open. All queueing is done based on the filters set in the config for the related group, any items falling outside will be ignored.\n\n" ..
Zerotorescue@62 1707
Zerotorescue@62 1708 "The queueing can be done into most popular crafting profession window replacing addons. This includes |cfffed000AdvancedTradeSkillWindow|r, |cfffed000GnomeWorks|r and |cfffed000Skillet|r.",
Zerotorescue@62 1709 },
Zerotorescue@62 1710 },
Zerotorescue@62 1711 },
Zerotorescue@62 1712 Configuring = {
Zerotorescue@62 1713 order = 5,
Zerotorescue@62 1714 type = "group",
Zerotorescue@62 1715 inline = true,
Zerotorescue@62 1716 name = "Configuring",
Zerotorescue@62 1717 args = {
Zerotorescue@62 1718 description = {
Zerotorescue@62 1719 order = 0,
Zerotorescue@62 1720 type = "description",
Zerotorescue@62 1721 name = "The system resources used by this addon while it is stand-by are at a minimum, so you can just leave it enabled for all your characters unless you wish otherwise.\n\n" ..
Zerotorescue@62 1722
Zerotorescue@62 1723 "To start using Inventorium write |cfffed000/im|r in your chat. This will show a list of all available commands; |cfffed000/im config|r, |cfffed000summary|r and some others. Tip: Most of these commands have short alternatives, such as |cfffed000c|r for |cfffed000config|r and |cfffed000s|r for |cfffed000summary|r.\n\n" ..
Zerotorescue@62 1724
Zerotorescue@62 1725 "Write |cfffed000/im c|r to open the config window to start configuring your groups. The first tab you will find opened is the |cfffed000General|r config. Go ahead and select your prefered item count, crafting and pricing addons. Scroll down and quickly take note of all other options there, you won't really need everything (yet) but knowing it is available will save you from searching later on.\n\n" ..
Zerotorescue@62 1726
Zerotorescue@62 1727 "Click on the |cfffed000Groups|r tab. Here you will see a view handy options, in the future you might be able to find complete groups to import at popular blogs or forums making Inventorium very easy to import and initially setup, but for now we will have to make one manually. Quickly think about an easy-to-use and handy naming pattern and enter a name for your new group (e.g. |cfffed000Glyphs (Hunter)|r) and hit enter (leave the group type to the default). This group will be created and added to the list under the groups tab. Open the config for this group by clicking the group name.\n\n" ..
Zerotorescue@62 1728
Zerotorescue@62 1729 "You are now seeing a copy of the general config with override boxes next to everything. Configure this as you wish, for example override the |cfffed000minimum global stock|r to 20, |cfffed000track at|r to your banker and crafter (ensure your current char is also included) and the |cfffed000price threshold|r to 5g or so. Once done go to the \"add items\" tab to add items to this group so this group manages them. Again observice the available functionality so you know what you can do. Based on our previous example of Hunter glyphs we have three possibilities: one is to get all Hunter glyphs in our bags and add these, the second is to open the profession window and include everything above or equal to an item level of 0 and the third and in this case best possibility is to add items from a premade group. Select |cfffed000Glyphs (Hunter)|r from the |cfffed000premade groups|r select box to import all Hunter glyphs into this group. After doing so you can close the config window to check the results. Write |cfffed000/im s|r to view the summary window.\n\n" ..
Zerotorescue@62 1730
Zerotorescue@62 1731 "You can now copy this group and repeat the same steps to add all other groups you require. Think of things like one group per class for glyphs, one group per color for gems, one group per type of scroll (e.g. Heirloom, Twinks and Popular), one group for craftable epics, one group for flasks, one group for inks, one for parchments, etc.",
Zerotorescue@62 1732 },
Zerotorescue@62 1733 },
Zerotorescue@62 1734 },
Zerotorescue@62 1735 VirtualGroups = {
Zerotorescue@62 1736 order = 6,
Zerotorescue@62 1737 type = "group",
Zerotorescue@62 1738 inline = true,
Zerotorescue@62 1739 name = "Virtual groups",
Zerotorescue@62 1740 args = {
Zerotorescue@62 1741 description = {
Zerotorescue@62 1742 order = 0,
Zerotorescue@62 1743 type = "description",
Zerotorescue@62 1744 name = "|cffccccccThis is advanced optional functionality. I recommend skipping this paragraph if you are new to Inventorium.|r\n\n" ..
Zerotorescue@62 1745
Zerotorescue@62 1746 "To allow changing the settings of multiple groups at once you can make virtual groups. These groups are basically like the general tab as their values are used when you aren't overriding a setting in a more specific group. After making a virtual group you still have to select it in all the \"child\"-groups so these groups know where to look for their settings when they are empty. Going back to our |cfffed000Glyphs (Hunter)|r group, we could make a virtual group called |cfffed000Glyphs|r which contained info like a default price threshold of 5g and a minimum crafting queue for all glyph groups. In each specific group you can then further specify that you would - for example - want 20 Hunter glyphs but 40 Druid glyphs as these might just sell a lot more often.",
Zerotorescue@62 1747 },
Zerotorescue@62 1748 },
Zerotorescue@62 1749 },
Zerotorescue@62 1750 },
Zerotorescue@62 1751 },
Zerotorescue@62 1752 FAQ = {
Zerotorescue@62 1753 order = 3,
Zerotorescue@62 1754 type = "group",
Zerotorescue@62 1755 name = "FAQ",
Zerotorescue@62 1756 args = {
Zerotorescue@62 1757 description = {
Zerotorescue@62 1758 order = 0,
Zerotorescue@62 1759 type = "description",
Zerotorescue@62 1760 name = "|cfffed000My groups don't appear in the summary window.|r\nPlease ensure your current character is toggled on at the \"track at\" option beneath the \"minimum stock\" category within a group or the defaults.\n\n" ..
Zerotorescue@62 1761 "|cfffed000The auction value collumn always shows a \"-\".|r\nThe auction value will not be cached when you set the \"price threshold\" beneath the \"replenishing stock\" category to |cfffed0000c|r. You can change this behavior by adjusting this value or toggling the \"Always show auction value\" option on.\n\n" ..
Zerotorescue@62 1762 "|cfffed000What relation does Inventorium have to ZeroAuctions or AuctionProfitMaster?|r\nNone. ZA/APM and IM are two completely seperate addons and do not interfere with eachother. At best you can use the auction pricing data displayed at the ZA/APM summary window as pricing source by selecting either addon as pricing addon, but neither IM nor ZA/APM will adjust any settings nor execute any other actions at one another. ZA/APM is an auction house addon. IM is a stock management addon. We are not related. We do not work together. We probably never will.\n\n" ..
Zerotorescue@62 1763 "|cfffed000What use do profiles have?|r\nBecause there is already the \"track at\" option, profiles may not be useful to anyone. Nevertheless someone might find a use for it in some way and thus it is left available. You can use it to test certain things for example without the risk of your main groups being destroyed (although this should never be an excuse not to back up your settings from time to time).\n\n" ..
Zerotorescue@62 1764 "|cfffed000Can you provide me with a sample scenario for virtual groups?|r\nNot really. If you are just getting to know Inventorium then I suggest leaving this functionality for the moment. It only makes things more complicated.\n\nAnyway, the simplest (and possibly most popular) setup to imagine are glyphs. There are over 300 glyphs available distributed over 10 classes. Glyphs for certain classes (such as the tribrids; Druids & Paladins) might sell a lot more often than those for others (such as pure DPS; Hunters, etc.).\n\nTo get an easily adjustable setup you can make one virtual group, called \"Glyphs\" and override all your prefered settings in there. After you are done, make a glyph-group for each class (such as \"Glyphs (Death Knight)\" etc.) and select \"Glyphs\" as virtual group for every one of them (you can easily insert item data to these class specific groups by selecting premade data).\n\nNow, to change the settings for all glyph groups you can just change the settings within the virtual \"Glyph\" group. To change the settings for one class in particular, such as Paladins because they sell more often than others, you can click this group and override the appropriate settings for just that group. There are many more possibilities for you to find out.\n\n" ..
Zerotorescue@62 1765 "",
Zerotorescue@62 1766 },
Zerotorescue@62 1767 },
Zerotorescue@62 1768 },
Zerotorescue@62 1769 },
Zerotorescue@62 1770 };
Zerotorescue@62 1771 end
Zerotorescue@62 1772
Zerotorescue@62 1773 function mod:MakeGroupOptions()
Zerotorescue@62 1774 options.args.groups = {
Zerotorescue@62 1775 order = 1100,
Zerotorescue@62 1776 type = "group",
Zerotorescue@62 1777 name = "Groups",
Zerotorescue@62 1778 desc = "Change a group.",
Zerotorescue@62 1779 args = {
Zerotorescue@62 1780 create = {
Zerotorescue@62 1781 order = 10,
Zerotorescue@62 1782 type = "group",
Zerotorescue@62 1783 inline = true,
Zerotorescue@62 1784 name = "Create a brand new group",
Zerotorescue@62 1785 args = {
Zerotorescue@62 1786 name = {
Zerotorescue@62 1787 order = 10,
Zerotorescue@62 1788 type = "input",
Zerotorescue@62 1789 name = "Group name",
Zerotorescue@62 1790 desc = "The name of the group. You can also use item links as you wish.",
Zerotorescue@62 1791 validate = ValidateGroupName,
Zerotorescue@62 1792 set = function(_, value)
Zerotorescue@62 1793 addon.db.profile.groups[value] = {};
Zerotorescue@62 1794 if currentGroupType == "Virtual" then
Zerotorescue@62 1795 addon.db.profile.groups[value].isVirtual = true;
Zerotorescue@62 1796 end
Zerotorescue@62 1797
Zerotorescue@62 1798 mod:FillGroupOptions();
Zerotorescue@62 1799 end,
Zerotorescue@62 1800 get = false,
Zerotorescue@62 1801 width = "double",
Zerotorescue@62 1802 },
Zerotorescue@62 1803 type = {
Zerotorescue@62 1804 order = 20,
Zerotorescue@62 1805 type = "select",
Zerotorescue@62 1806 name = "Type (advanced)",
Zerotorescue@62 1807 desc = "The type of the new group. This can not be changed at a later time.\n\n|cffff9933This is an advanced option, you will probably not need it unless you manage a lot of groups.|r\n\n|cfffed000Normal|r: A normal group with complete functionality.\n\n|cfffed000Virtual|r: A virtual group which you can use to override the defaults for a set of groups. You can not add items to virtual groups.",
Zerotorescue@62 1808 values = {
Zerotorescue@62 1809 ["Normal"] = "Normal",
Zerotorescue@62 1810 ["Virtual"] = "Virtual",
Zerotorescue@62 1811 },
Zerotorescue@62 1812 set = function(_, value) currentGroupType = value; end,
Zerotorescue@62 1813 get = function() return currentGroupType; end,
Zerotorescue@62 1814 },
Zerotorescue@62 1815 },
Zerotorescue@62 1816 },
Zerotorescue@62 1817 import = {
Zerotorescue@62 1818 order = 20,
Zerotorescue@62 1819 type = "group",
Zerotorescue@62 1820 inline = true,
Zerotorescue@62 1821 name = "Import a group",
Zerotorescue@62 1822 args = {
Zerotorescue@62 1823 input = {
Zerotorescue@62 1824 order = 10,
Zerotorescue@62 1825 type = "input",
Zerotorescue@62 1826 multiline = true,
Zerotorescue@62 1827 name = "Group data",
Zerotorescue@62 1828 desc = "Paste the group data as provided by a group export. If you are trying to import multiple groups at the same time, make sure to use newlines to seperate them.",
Zerotorescue@62 1829 set = function(info, value)
Zerotorescue@62 1830 local data = { string.split("\n", value or "") };
Zerotorescue@62 1831
Zerotorescue@62 1832 for _, current in pairs(data) do
Zerotorescue@62 1833 if not AceSerializer then
Zerotorescue@62 1834 AceSerializer = LibStub("AceSerializer-3.0");
Zerotorescue@62 1835 end
Zerotorescue@62 1836
Zerotorescue@62 1837 local result, temp = AceSerializer:Deserialize(current);
Zerotorescue@62 1838
Zerotorescue@62 1839 if not temp.name then
Zerotorescue@62 1840 print("|cffff0000The provided data is not supported.|r");
Zerotorescue@62 1841 elseif ValidateGroupName(nil, temp.name) ~= true then
Zerotorescue@62 1842 print(("|cffff0000Aborting: A group named \"%s\" already exists.|r"):format(temp.name));
Zerotorescue@62 1843 else
Zerotorescue@62 1844 local name = temp.name;
Zerotorescue@62 1845 temp.name = nil;
Zerotorescue@62 1846 print(("Importing %s..."):format(name));
Zerotorescue@62 1847
Zerotorescue@62 1848 if temp.items then
Zerotorescue@62 1849 -- Remove items that are already in another group
Zerotorescue@62 1850 for value, _ in pairs(temp.items) do
Zerotorescue@62 1851 local itemId = tonumber(value);
Zerotorescue@62 1852
Zerotorescue@62 1853 if not itemId then
Zerotorescue@62 1854 print(("\"%s\" is not a number."):format(value));
Zerotorescue@62 1855 temp.items[value] = nil;
Zerotorescue@62 1856 elseif addon:InGroup(itemId) then
Zerotorescue@62 1857 print(("Skipping %s (#%d) as it is already in the group |cfffed000%s|r."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, addon:InGroup(itemId)));
Zerotorescue@62 1858 temp.items[value] = nil;
Zerotorescue@62 1859 else
Zerotorescue@62 1860 -- Ensure the keys are numeric
Zerotorescue@62 1861 temp.items[value] = nil;
Zerotorescue@62 1862 temp.items[itemId] = true;
Zerotorescue@62 1863 end
Zerotorescue@62 1864 end
Zerotorescue@62 1865 end
Zerotorescue@62 1866
Zerotorescue@62 1867 -- Ensure this data isn't received (this would be silly/buggy as exports from other accounts - with different characters - won't know what to do with this)
Zerotorescue@62 1868 temp.trackAtCharacters = nil;
Zerotorescue@62 1869 temp.overrideTrackAtCharacters = nil;
Zerotorescue@62 1870
Zerotorescue@62 1871 addon.db.profile.groups[name] = temp;
Zerotorescue@62 1872 end
Zerotorescue@62 1873 end
Zerotorescue@62 1874
Zerotorescue@62 1875 self:FillGroupOptions();
Zerotorescue@62 1876 end,
Zerotorescue@62 1877 get = false,
Zerotorescue@62 1878 width = "full",
Zerotorescue@62 1879 },
Zerotorescue@62 1880 },
Zerotorescue@62 1881 },
Zerotorescue@62 1882 },
Zerotorescue@62 1883 };
Zerotorescue@62 1884 end
Zerotorescue@62 1885
Zerotorescue@62 1886 function mod:FillGroupOptions()
Zerotorescue@62 1887 for id, name in pairs(groupIdToName) do
Zerotorescue@62 1888 if type(name) == "string" and not addon.db.profile.groups[name] then
Zerotorescue@62 1889 options.args.groups.args[id] = nil;
Zerotorescue@62 1890 groupIdToName[id] = nil;
Zerotorescue@62 1891 groupIdToName[name] = nil;
Zerotorescue@62 1892 groupIsVirtual[id] = nil;
Zerotorescue@62 1893 end
Zerotorescue@62 1894 end
Zerotorescue@62 1895
Zerotorescue@62 1896 for name, values in pairs(addon.db.profile.groups) do
Zerotorescue@62 1897 if not groupIdToName[name] then
Zerotorescue@62 1898 options.args.groups.args[tostring(count)] = defaultGroup;
Zerotorescue@62 1899
Zerotorescue@62 1900 groupIdToName[tostring(count)] = name;
Zerotorescue@62 1901 groupIdToName[name] = true;
Zerotorescue@62 1902 if values.isVirtual then
Zerotorescue@62 1903 groupIsVirtual[tostring(count)] = true;
Zerotorescue@62 1904 end
Zerotorescue@62 1905
Zerotorescue@62 1906 count = ( count + 1 );
Zerotorescue@62 1907 end
Zerotorescue@62 1908 end
Zerotorescue@62 1909 end
Zerotorescue@65 1910
Zerotorescue@65 1911
Zerotorescue@65 1912
Zerotorescue@65 1913
Zerotorescue@65 1914
Zerotorescue@65 1915
Zerotorescue@65 1916 -- Verify premade groups
Zerotorescue@65 1917
Zerotorescue@65 1918 function mod:PremadeGroupsCheck(updateGroupName, updateKey, accept)
Zerotorescue@65 1919 -- Compare the current premade groups with those used, notify about changes
Zerotorescue@65 1920 if addon.defaultGroups then
Zerotorescue@65 1921 for premadeGroupName, groupInfo in pairs(addon.defaultGroups) do
Zerotorescue@65 1922 -- Go through all default groups
Zerotorescue@65 1923
Zerotorescue@65 1924 for groupName, values in pairs(addon.db.profile.groups) do
Zerotorescue@65 1925 -- Go through all groups to find those with this premade group
Zerotorescue@65 1926
Zerotorescue@65 1927 if values.premadeGroups and values.premadeGroups[premadeGroupName] and values.premadeGroups[premadeGroupName] < groupInfo.version then
Zerotorescue@65 1928 -- Outdated group
Zerotorescue@65 1929
Zerotorescue@65 1930 if updateGroupName and updateKey then
Zerotorescue@65 1931 -- This function was called after pressing yes or no in a confirm box
Zerotorescue@65 1932
Zerotorescue@65 1933 if accept then
Zerotorescue@65 1934 -- Yes was clicked
Zerotorescue@65 1935
Zerotorescue@65 1936 for itemId, version in pairs(groupInfo.items) do
Zerotorescue@65 1937 -- Go through all items in this premade group
Zerotorescue@65 1938
Zerotorescue@65 1939 if version > values.premadeGroups[premadeGroupName] then
Zerotorescue@65 1940 -- This item was added in a more recent version than this group: Add item
Zerotorescue@65 1941
Zerotorescue@65 1942 if addon:InGroup(itemId) then
Zerotorescue@65 1943 print(("Skipping %s (#%d) as it is already in the group |cfffed000%s|r."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, addon:InGroup(itemId)));
Zerotorescue@65 1944 elseif addon:AddItemToGroup(groupName, itemId) then
Zerotorescue@65 1945 print(("|cff00ff00Added|r %s (#%d) found in the premade group |cfffed000%s|r to the group |cfffed000%s|r."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, premadeGroupName, addon:InGroup(itemId)));
Zerotorescue@65 1946 end
Zerotorescue@65 1947 elseif ( version * -1 ) > values.premadeGroups[premadeGroupName] then
Zerotorescue@65 1948 if addon:InGroup(itemId) == groupName then
Zerotorescue@65 1949 print(("|cffff0000Removed|r %s (#%d) from the group |cfffed000%s|r as it was removed from the premade group |cfffed000%s|r."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, addon:InGroup(itemId), premadeGroupName));
Zerotorescue@65 1950 addon:RemoveItemFromGroup(groupName, itemId);
Zerotorescue@65 1951 else
Zerotorescue@65 1952 print(("Skipping the removal of %s (#%d) as it isn't in this group."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, addon:InGroup(itemId)));
Zerotorescue@65 1953 end
Zerotorescue@65 1954 end
Zerotorescue@65 1955 end
Zerotorescue@65 1956
Zerotorescue@65 1957 -- Remember the new version
Zerotorescue@65 1958 values.premadeGroups[premadeGroupName] = groupInfo.version;
Zerotorescue@65 1959 else
Zerotorescue@65 1960 -- No was clicked
Zerotorescue@65 1961
Zerotorescue@65 1962 -- Let user know what was not added
Zerotorescue@65 1963 for itemId, version in pairs(groupInfo.items) do
Zerotorescue@65 1964 -- Go through all items in this premade group
Zerotorescue@65 1965
Zerotorescue@65 1966 if version > values.premadeGroups[premadeGroupName] then
Zerotorescue@65 1967 -- This item was added in a more recent version than this group: don't add (since we clicked no), but announce it
Zerotorescue@65 1968
Zerotorescue@65 1969 print(("Skipping %s (#%d) found in the premade group |cfffed000%s|r."):format(select(2, GetItemInfo(itemId)) or "Unknown", itemId, addon:InGroup(itemId)));
Zerotorescue@65 1970 end
Zerotorescue@65 1971 end
Zerotorescue@65 1972
Zerotorescue@65 1973 -- Remember the new version
Zerotorescue@65 1974 values.premadeGroups[premadeGroupName] = groupInfo.version;
Zerotorescue@65 1975 end
Zerotorescue@65 1976 else
Zerotorescue@65 1977 StaticPopupDialogs["InventoriumConfirmUpdatePremadeGroup"] = {
Zerotorescue@65 1978 text = "The premade group |cfffed000%s|r used in the group |cfffed000%s|r has been changed. Do you wish to copy these changes?",
Zerotorescue@65 1979 button1 = YES,
Zerotorescue@65 1980 button2 = NO,
Zerotorescue@65 1981 OnAccept = function()
Zerotorescue@65 1982 addon:PremadeGroupsCheck(groupName, premadeGroupName, true);
Zerotorescue@65 1983 end,
Zerotorescue@65 1984 OnCancel = function(_, _, reason)
Zerotorescue@65 1985 if reason == "clicked" then
Zerotorescue@65 1986 addon:PremadeGroupsCheck(groupName, premadeGroupName, false);
Zerotorescue@65 1987 end
Zerotorescue@65 1988 end,
Zerotorescue@65 1989 timeout = 0,
Zerotorescue@65 1990 whileDead = 1,
Zerotorescue@65 1991 hideOnEscape = 1,
Zerotorescue@65 1992 };
Zerotorescue@65 1993 StaticPopup_Show("InventoriumConfirmUpdatePremadeGroup", premadeGroupName, groupName);
Zerotorescue@65 1994
Zerotorescue@65 1995 return;
Zerotorescue@65 1996 end
Zerotorescue@65 1997 end
Zerotorescue@65 1998 end
Zerotorescue@65 1999 end
Zerotorescue@65 2000 end
Zerotorescue@65 2001 end