annotate Config.lua @ 76:958aba5f3297

Moved the group functions to the item data class. Added a new subgroup under the general config group called ?extra? which will provide features such as database character removal and perhaps guild selecting. Added a new custom .Print function to the addon object which takes two parameters: (string)text, (Color)color. The latter can be retrieved from the addon.Colors var (e.g. addon.Colors.Red). The ItemId parameter of the ItemData class constructor is now optional.
author Zerotorescue
date Sat, 25 Dec 2010 22:07:07 +0100
parents 2127ab01ed4a
children f885805da5d6
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@76 7 local unknownItemName = "Unknown (#%d)";
Zerotorescue@76 8
Zerotorescue@62 9 -- Private functions and tables
Zerotorescue@62 10
Zerotorescue@62 11 local function SetOption(info, value, multiSelectEnabled)
Zerotorescue@62 12 local groupName = groupIdToName[info[2]];
Zerotorescue@62 13 local optionName = info[#info];
Zerotorescue@62 14
Zerotorescue@62 15 -- Special treatment for override toggle boxes
Zerotorescue@62 16 if optionName:find("override") then
Zerotorescue@62 17 if not value and info.arg then
Zerotorescue@62 18 -- If this override was disabled and a saved variable name was provided, set it to nil rather than false
Zerotorescue@62 19
Zerotorescue@62 20 value = nil;
Zerotorescue@62 21
Zerotorescue@62 22 -- If this is an override toggler then also set the related field to nil
Zerotorescue@62 23 addon.db.profile.groups[groupName][info.arg] = nil;
Zerotorescue@62 24 elseif value and info.arg then
Zerotorescue@62 25 -- 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 26
Zerotorescue@68 27 local inheritedValue = addon:GetOptionByKey(groupName, info.arg);
Zerotorescue@68 28
Zerotorescue@75 29 addon.db.profile.groups[groupName][info.arg] = (type(inheritedValue) == "table" and CopyTable(inheritedValue)) or inheritedValue; -- copying defaults by reference would let one (unintendedly) change the defaults
Zerotorescue@62 30 end
Zerotorescue@62 31 end
Zerotorescue@62 32
Zerotorescue@62 33 if multiSelectEnabled ~= nil then
Zerotorescue@62 34 -- 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 35 if not addon.db.profile.groups[groupName][optionName] then
Zerotorescue@62 36 addon.db.profile.groups[groupName][optionName] = {};
Zerotorescue@62 37 end
Zerotorescue@62 38
Zerotorescue@62 39 addon.db.profile.groups[groupName][optionName][value] = multiSelectEnabled or nil;
Zerotorescue@62 40 else
Zerotorescue@62 41 addon.db.profile.groups[groupName][optionName] = value;
Zerotorescue@62 42 end
Zerotorescue@62 43 end
Zerotorescue@62 44
Zerotorescue@62 45 local function GetOption(info)
Zerotorescue@62 46 local groupName = groupIdToName[info[2]];
Zerotorescue@62 47 local optionName = info[#info];
Zerotorescue@62 48
Zerotorescue@62 49 local noDefault;
Zerotorescue@62 50
Zerotorescue@62 51 if optionName:find("override") then
Zerotorescue@62 52 noDefault = true;
Zerotorescue@62 53 end
Zerotorescue@62 54
Zerotorescue@62 55 return addon:GetOptionByKey(groupName, optionName, noDefault);
Zerotorescue@62 56 end
Zerotorescue@62 57
Zerotorescue@62 58 local function GetMultiOption(info, value)
Zerotorescue@62 59 local groupName = groupIdToName[info[2]];
Zerotorescue@62 60 local optionName = info[#info];
Zerotorescue@62 61
Zerotorescue@68 62 local multiSelectValue = addon:GetOptionByKey(groupName, optionName);
Zerotorescue@68 63
Zerotorescue@68 64 return multiSelectValue and multiSelectValue[value];
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@75 100 set = function(groupId, itemData)
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@76 103 if itemData then
Zerotorescue@76 104 local groupName = groupIdToName[groupId];
Zerotorescue@76 105
Zerotorescue@76 106 if not itemData:AddToGroup(groupName) then
Zerotorescue@76 107 print("|cffff0000Couldn't add the item with itemId (" .. itemData.id .. ") because it is already in a group.|r");
Zerotorescue@76 108 end
Zerotorescue@76 109
Zerotorescue@76 110 if AceConfigRegistry then
Zerotorescue@76 111 -- Now rebuild the list
Zerotorescue@76 112 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@76 113 end
Zerotorescue@62 114 end
Zerotorescue@62 115 end,
Zerotorescue@62 116 width = "double",
Zerotorescue@62 117 dialogControl = "ConfigItemLinkButton",
Zerotorescue@62 118 };
Zerotorescue@62 119
Zerotorescue@62 120 local tblRemoveItemTemplate = {
Zerotorescue@62 121 order = 0,
Zerotorescue@62 122 type = "input",
Zerotorescue@62 123 name = function(info)
Zerotorescue@62 124 local itemName, _, itemRarity = GetItemInfo(info[#info]);
Zerotorescue@62 125 return tostring( 7 - (itemRarity or 0) ) .. (itemName or "");
Zerotorescue@62 126 end,
Zerotorescue@62 127 get = function(info)
Zerotorescue@62 128 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 129 end,
Zerotorescue@75 130 set = function(groupId, itemData)
Zerotorescue@62 131 -- This is NOT a real "set", we pass the widget reference to this function which contains similar, but not the same, info.
Zerotorescue@62 132
Zerotorescue@76 133 if itemData then
Zerotorescue@62 134 local groupName = groupIdToName[groupId];
Zerotorescue@62 135
Zerotorescue@76 136 itemData:RemoveFromGroup(groupName);
Zerotorescue@62 137
Zerotorescue@76 138 if AceConfigRegistry then
Zerotorescue@76 139 -- Now rebuild the list
Zerotorescue@76 140 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@76 141 end
Zerotorescue@62 142 end
Zerotorescue@62 143 end,
Zerotorescue@62 144 width = "double",
Zerotorescue@62 145 dialogControl = "ConfigItemLinkButton",
Zerotorescue@62 146 };
Zerotorescue@62 147
Zerotorescue@62 148 local function UpdateAddItemList(info)
Zerotorescue@62 149 local groupName = groupIdToName[info[2]];
Zerotorescue@62 150
Zerotorescue@62 151 if not addon.db.profile.groups[groupName].items then
Zerotorescue@62 152 addon.db.profile.groups[groupName].items = {};
Zerotorescue@62 153 end
Zerotorescue@62 154
Zerotorescue@62 155 -- Merge all items from all groups together
Zerotorescue@62 156 local items = {};
Zerotorescue@62 157 for groupName, values in pairs(addon.db.profile.groups) do
Zerotorescue@62 158 if values.items then
Zerotorescue@62 159 for itemId, _ in pairs(values.items) do
Zerotorescue@62 160 items[itemId] = true;
Zerotorescue@62 161 end
Zerotorescue@62 162 end
Zerotorescue@62 163 end
Zerotorescue@62 164
Zerotorescue@62 165 local ref = options.args.groups.args[info[2]].args.add.args.list.args;
Zerotorescue@62 166
Zerotorescue@62 167 -- Remaking the list, so out with the old, in with the new
Zerotorescue@62 168 table.wipe(ref);
Zerotorescue@62 169
Zerotorescue@62 170 -- Parse bags and show these
Zerotorescue@62 171 for bagID = 4, 0, -1 do
Zerotorescue@62 172 for slot = 1, GetContainerNumSlots(bagID) do
Zerotorescue@62 173 local itemId = addon:GetItemId(GetContainerItemLink(bagID, slot));
Zerotorescue@62 174
Zerotorescue@62 175 if itemId then
Zerotorescue@62 176 if not items[itemId] then
Zerotorescue@62 177 -- If this item isn't used in any group yet
Zerotorescue@62 178 ref[itemId] = tblAddItemTemplate;
Zerotorescue@62 179 else
Zerotorescue@62 180 -- It's already used in a group, don't show it
Zerotorescue@62 181 ref[itemId] = nil;
Zerotorescue@62 182 end
Zerotorescue@62 183 end
Zerotorescue@62 184 end
Zerotorescue@62 185 end
Zerotorescue@62 186
Zerotorescue@62 187 if includeTradeSkillItems ~= 500 then
Zerotorescue@62 188 -- Include tradeskill items
Zerotorescue@62 189
Zerotorescue@62 190 -- Go through all trade skills for the profession
Zerotorescue@62 191 for i = 1, GetNumTradeSkills() do
Zerotorescue@62 192 -- Try to retrieve the itemlink, this will be nil if current item is a group instead
Zerotorescue@62 193 local itemLink = GetTradeSkillItemLink(i);
Zerotorescue@62 194
Zerotorescue@62 195 if itemLink then
Zerotorescue@62 196 local itemId = addon:GetItemId(itemLink);
Zerotorescue@62 197 if not itemId then
Zerotorescue@62 198 -- If this isn't an item, it can only be an enchant instead
Zerotorescue@62 199 itemId = tonumber(itemLink:match("|Henchant:([-0-9]+)|h"));
Zerotorescue@62 200
Zerotorescue@62 201 itemId = addon.scrollIds[itemId]; -- change enchantIds into scrollIds
Zerotorescue@62 202 end
Zerotorescue@62 203
Zerotorescue@62 204 if itemId then
Zerotorescue@62 205 local itemLevel = select(4, GetItemInfo(itemId)) or 0;
Zerotorescue@62 206
Zerotorescue@62 207 if includeTradeSkillItems == 0 or itemLevel >= includeTradeSkillItems then
Zerotorescue@62 208 if not items[itemId] then
Zerotorescue@62 209 -- If this item isn't used in any group yet
Zerotorescue@62 210 ref[itemId] = tblAddItemTemplate;
Zerotorescue@62 211 else
Zerotorescue@62 212 -- It's already used in a group, don't show it
Zerotorescue@62 213 ref[itemId] = nil;
Zerotorescue@62 214 end
Zerotorescue@62 215 end
Zerotorescue@62 216 else
Zerotorescue@62 217 addon:Debug("|cffff0000ERROR|r: Couldn't find proper item id for " .. itemLink);
Zerotorescue@62 218 end
Zerotorescue@62 219 end
Zerotorescue@62 220 end
Zerotorescue@62 221 end
Zerotorescue@62 222 end
Zerotorescue@62 223
Zerotorescue@62 224 local function UpdateRemoveItemList(info)
Zerotorescue@62 225 local groupName = groupIdToName[info[2]];
Zerotorescue@62 226
Zerotorescue@62 227 if not addon.db.profile.groups[groupName].items then
Zerotorescue@62 228 addon.db.profile.groups[groupName].items = {};
Zerotorescue@62 229 end
Zerotorescue@62 230
Zerotorescue@62 231 local ref = options.args.groups.args[info[2]].args.remove.args.list.args;
Zerotorescue@62 232
Zerotorescue@62 233 -- Unset all
Zerotorescue@62 234 for itemId, _ in pairs(ref) do
Zerotorescue@62 235 ref[itemId] = nil;
Zerotorescue@62 236 end
Zerotorescue@62 237
Zerotorescue@62 238 -- Parse items in group and show these
Zerotorescue@62 239 for itemId, _ in pairs(addon.db.profile.groups[groupName].items) do
Zerotorescue@62 240 ref[itemId] = tblRemoveItemTemplate;
Zerotorescue@62 241 end
Zerotorescue@62 242 end
Zerotorescue@62 243
Zerotorescue@62 244 -- Default group
Zerotorescue@62 245 local defaultGroup = {
Zerotorescue@62 246 order = 0,
Zerotorescue@62 247 type = "group",
Zerotorescue@62 248 childGroups = "tab",
Zerotorescue@62 249 name = function(info)
Zerotorescue@62 250 local groupId = info[#info];
Zerotorescue@62 251 if groupIsVirtual[groupId] then
Zerotorescue@62 252 return ("%s |cfffed000Virtual|r"):format(groupIdToName[groupId]);
Zerotorescue@62 253 else
Zerotorescue@62 254 return groupIdToName[groupId];
Zerotorescue@62 255 end
Zerotorescue@62 256 end,
Zerotorescue@62 257 desc = function(info)
Zerotorescue@62 258 local groupId = info[#info];
Zerotorescue@62 259 if groupIsVirtual[groupId] then
Zerotorescue@62 260 return "This is a virtual group, you can use it to override the defaults for other groups.";
Zerotorescue@62 261 end
Zerotorescue@62 262 end,
Zerotorescue@62 263 args = {
Zerotorescue@62 264 general = {
Zerotorescue@62 265 order = 10,
Zerotorescue@62 266 type = "group",
Zerotorescue@62 267 name = "General",
Zerotorescue@62 268 desc = "Change the general settings for just this group.",
Zerotorescue@62 269 args = {
Zerotorescue@62 270 general = {
Zerotorescue@62 271 order = 0,
Zerotorescue@62 272 type = "group",
Zerotorescue@62 273 inline = true,
Zerotorescue@62 274 name = "General",
Zerotorescue@62 275 set = SetOption,
Zerotorescue@62 276 get = GetOption,
Zerotorescue@62 277 disabled = GetDisabled,
Zerotorescue@62 278 args = {
Zerotorescue@62 279 description = {
Zerotorescue@62 280 order = 0,
Zerotorescue@62 281 type = "description",
Zerotorescue@62 282 name = function(info)
Zerotorescue@62 283 local groupName = groupIdToName[info[2]];
Zerotorescue@62 284
Zerotorescue@62 285 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 286
Zerotorescue@62 287 local currentAddon, selectedAddonName = addon:GetItemCountAddon(groupName);
Zerotorescue@62 288 local preferedAddon = addon:GetOptionByKey(groupName, "itemCountAddon");
Zerotorescue@62 289
Zerotorescue@62 290 if currentAddon then
Zerotorescue@62 291 --GetCharacterCount
Zerotorescue@62 292 --addon.supportedAddons.itemCount[selectedExternalAddon]
Zerotorescue@62 293 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 294
Zerotorescue@62 295 if currentAddon.GetTotalCount and currentAddon.GetCharacterCount then
Zerotorescue@62 296 t = t .. " This addon supports |cfffed000both total as local|r item counts.";
Zerotorescue@62 297 elseif currentAddon.GetTotalCount then
Zerotorescue@62 298 t = t .. " This addon supports |cfffed000only total|r item counts.";
Zerotorescue@62 299 elseif currentAddon.GetCharacterCount then
Zerotorescue@62 300 t = t .. " This addon supports |cfffed000only local|r item counts.";
Zerotorescue@62 301 end
Zerotorescue@62 302
Zerotorescue@62 303 if preferedAddon ~= selectedAddonName then
Zerotorescue@62 304 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 305 end
Zerotorescue@62 306 end
Zerotorescue@62 307
Zerotorescue@62 308 return t;
Zerotorescue@62 309 end,
Zerotorescue@62 310 },
Zerotorescue@62 311 header = {
Zerotorescue@62 312 order = 5,
Zerotorescue@62 313 type = "header",
Zerotorescue@62 314 name = "",
Zerotorescue@62 315 },
Zerotorescue@62 316 overrideAuctionPricingAddon = {
Zerotorescue@62 317 order = 9,
Zerotorescue@62 318 type = "toggle",
Zerotorescue@62 319 name = "Override pricing addon",
Zerotorescue@62 320 desc = "Allows you to override the pricing addon setting for this group.",
Zerotorescue@62 321 arg = "auctionPricingAddon",
Zerotorescue@62 322 },
Zerotorescue@62 323 auctionPricingAddon = {
Zerotorescue@62 324 order = 10,
Zerotorescue@62 325 type = "select",
Zerotorescue@62 326 name = "Prefered pricing addon",
Zerotorescue@62 327 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 328 values = function()
Zerotorescue@62 329 local temp = {};
Zerotorescue@62 330 for name, value in pairs(addon.supportedAddons.auctionPricing) do
Zerotorescue@62 331 temp[name] = name;
Zerotorescue@62 332 end
Zerotorescue@62 333
Zerotorescue@62 334 return temp;
Zerotorescue@62 335 end,
Zerotorescue@62 336 set = function(info, value)
Zerotorescue@62 337 local groupName = groupIdToName[info[2]];
Zerotorescue@62 338 local optionName = info[#info];
Zerotorescue@62 339
Zerotorescue@62 340 addon.db.profile.groups[groupName][optionName] = value ~= "" and value;
Zerotorescue@62 341
Zerotorescue@62 342 if addon.supportedAddons.auctionPricing[value].OnSelect then
Zerotorescue@62 343 addon.supportedAddons.auctionPricing[value].OnSelect();
Zerotorescue@62 344 end
Zerotorescue@62 345 end,
Zerotorescue@62 346 arg = "overrideAuctionPricingAddon",
Zerotorescue@62 347 },
Zerotorescue@62 348 overrideItemCountAddon = {
Zerotorescue@62 349 order = 19,
Zerotorescue@62 350 type = "toggle",
Zerotorescue@62 351 name = "Override item count addon",
Zerotorescue@62 352 desc = "Allows you to override the item count addon setting for this group.",
Zerotorescue@62 353 arg = "itemCountAddon",
Zerotorescue@62 354 },
Zerotorescue@62 355 itemCountAddon = {
Zerotorescue@62 356 order = 20,
Zerotorescue@62 357 type = "select",
Zerotorescue@62 358 name = "Prefered item count addon",
Zerotorescue@62 359 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 360 values = function()
Zerotorescue@62 361 local temp = {};
Zerotorescue@62 362 for name, value in pairs(addon.supportedAddons.itemCount) do
Zerotorescue@62 363 temp[name] = name;
Zerotorescue@62 364 end
Zerotorescue@62 365
Zerotorescue@62 366 return temp;
Zerotorescue@62 367 end,
Zerotorescue@62 368 set = function(info, value)
Zerotorescue@62 369 local groupName = groupIdToName[info[2]];
Zerotorescue@62 370 local optionName = info[#info];
Zerotorescue@62 371
Zerotorescue@62 372 addon.db.profile.groups[groupName][optionName] = value ~= "" and value;
Zerotorescue@62 373
Zerotorescue@62 374 if addon.supportedAddons.itemCount[value].OnSelect then
Zerotorescue@62 375 addon.supportedAddons.itemCount[value].OnSelect();
Zerotorescue@62 376 end
Zerotorescue@62 377 end,
Zerotorescue@62 378 arg = "overrideItemCountAddon",
Zerotorescue@62 379 },
Zerotorescue@62 380 overrideCraftingAddon = {
Zerotorescue@62 381 order = 29,
Zerotorescue@62 382 type = "toggle",
Zerotorescue@62 383 name = "Override crafting addon",
Zerotorescue@62 384 desc = "Allows you to override the crafting addon setting for this group.",
Zerotorescue@62 385 arg = "craftingAddon",
Zerotorescue@62 386 },
Zerotorescue@62 387 craftingAddon = {
Zerotorescue@62 388 order = 30,
Zerotorescue@62 389 type = "select",
Zerotorescue@62 390 name = "Prefered crafting addon",
Zerotorescue@62 391 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 392 values = function()
Zerotorescue@62 393 local temp = {};
Zerotorescue@62 394 for name, value in pairs(addon.supportedAddons.crafting) do
Zerotorescue@62 395 temp[name] = name;
Zerotorescue@62 396 end
Zerotorescue@62 397
Zerotorescue@62 398 return temp;
Zerotorescue@62 399 end,
Zerotorescue@62 400 set = function(info, value)
Zerotorescue@62 401 local groupName = groupIdToName[info[2]];
Zerotorescue@62 402 local optionName = info[#info];
Zerotorescue@62 403
Zerotorescue@62 404 addon.db.profile.groups[groupName][optionName] = value ~= "" and value;
Zerotorescue@62 405
Zerotorescue@62 406 if addon.supportedAddons.crafting[value].OnSelect then
Zerotorescue@62 407 addon.supportedAddons.crafting[value].OnSelect();
Zerotorescue@62 408 end
Zerotorescue@62 409 end,
Zerotorescue@62 410 arg = "overrideCraftingAddon",
Zerotorescue@62 411 },
Zerotorescue@62 412 overrideLocalItemData = {
Zerotorescue@62 413 order = 39,
Zerotorescue@62 414 type = "toggle",
Zerotorescue@62 415 name = "Override local item data",
Zerotorescue@62 416 desc = "Allows you to override the local item data setting for this group.",
Zerotorescue@62 417 arg = "localItemData",
Zerotorescue@62 418 },
Zerotorescue@62 419 localItemData = {
Zerotorescue@62 420 order = 40,
Zerotorescue@62 421 type = "multiselect",
Zerotorescue@62 422 name = "Include in local item data",
Zerotorescue@62 423 desc = "Select which data should be included in the local item data.",
Zerotorescue@62 424 values = {
Zerotorescue@62 425 ["Bag"] = "Bag",
Zerotorescue@62 426 ["Bank"] = "Bank",
Zerotorescue@62 427 ["Auction House"] = "Auction House",
Zerotorescue@62 428 ["Mailbox"] = "Mailbox",
Zerotorescue@62 429 },
Zerotorescue@62 430 get = GetMultiOption,
Zerotorescue@65 431 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 432 arg = "overrideLocalItemData",
Zerotorescue@62 433 },
Zerotorescue@62 434 virtualGroup = {
Zerotorescue@62 435 order = 50,
Zerotorescue@62 436 type = "select",
Zerotorescue@62 437 name = "Use virtual group settings",
Zerotorescue@62 438 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 439 values = function(info)
Zerotorescue@62 440 local groupName = groupIdToName[info[2]];
Zerotorescue@62 441
Zerotorescue@62 442 local temp = {};
Zerotorescue@62 443
Zerotorescue@62 444 temp[""] = "";
Zerotorescue@62 445 for name, values in pairs(addon.db.profile.groups) do
Zerotorescue@62 446 if values.isVirtual and name ~= groupName then
Zerotorescue@62 447 temp[name] = name;
Zerotorescue@62 448 end
Zerotorescue@62 449 end
Zerotorescue@62 450
Zerotorescue@62 451 return temp;
Zerotorescue@62 452 end,
Zerotorescue@62 453 set = function(info, value)
Zerotorescue@62 454 local groupName = groupIdToName[info[2]];
Zerotorescue@62 455 local optionName = info[#info];
Zerotorescue@62 456
Zerotorescue@62 457 addon.db.profile.groups[groupName][optionName] = value ~= "" and value;
Zerotorescue@62 458 end,
Zerotorescue@62 459 disabled = false,
Zerotorescue@62 460 },
Zerotorescue@62 461 },
Zerotorescue@62 462 },
Zerotorescue@62 463 minimumStock = {
Zerotorescue@62 464 order = 10,
Zerotorescue@62 465 type = "group",
Zerotorescue@62 466 inline = true,
Zerotorescue@62 467 name = "Minimum stock",
Zerotorescue@62 468 set = SetOption,
Zerotorescue@62 469 get = GetOption,
Zerotorescue@62 470 disabled = GetDisabled,
Zerotorescue@62 471 args = {
Zerotorescue@62 472 description = {
Zerotorescue@62 473 order = 0,
Zerotorescue@62 474 type = "description",
Zerotorescue@62 475 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 476 },
Zerotorescue@62 477 header = {
Zerotorescue@62 478 order = 5,
Zerotorescue@62 479 type = "header",
Zerotorescue@62 480 name = "",
Zerotorescue@62 481 },
Zerotorescue@62 482
Zerotorescue@62 483 overrideMinLocalStock = {
Zerotorescue@62 484 order = 10,
Zerotorescue@62 485 type = "toggle",
Zerotorescue@62 486 name = "Override min local stock",
Zerotorescue@62 487 desc = "Allows you to override the minimum local stock setting for this group.",
Zerotorescue@62 488 arg = "minLocalStock",
Zerotorescue@62 489 },
Zerotorescue@62 490 minLocalStock = {
Zerotorescue@62 491 order = 11,
Zerotorescue@62 492 type = "range",
Zerotorescue@62 493 min = 0,
Zerotorescue@62 494 max = 100000,
Zerotorescue@62 495 softMax = 100,
Zerotorescue@62 496 step = 1,
Zerotorescue@62 497 name = "Minimum local stock",
Zerotorescue@62 498 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 499 arg = "overrideMinLocalStock",
Zerotorescue@62 500 },
Zerotorescue@62 501 overrideAlertBelowLocalMinimum = {
Zerotorescue@62 502 order = 15,
Zerotorescue@62 503 type = "toggle",
Zerotorescue@62 504 name = "Override local minimum alert",
Zerotorescue@62 505 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 506 arg = "alertBelowLocalMinimum",
Zerotorescue@62 507 },
Zerotorescue@62 508 alertBelowLocalMinimum = {
Zerotorescue@62 509 order = 16,
Zerotorescue@62 510 type = "toggle",
Zerotorescue@62 511 name = "Alert when below local minimum (NYI)",
Zerotorescue@62 512 desc = "Show an alert when an item in this group gets below the local minimum stock threshold.",
Zerotorescue@62 513 arg = "overrideAlertBelowLocalMinimum",
Zerotorescue@62 514 },
Zerotorescue@62 515
Zerotorescue@62 516 overrideMinGlobalStock = {
Zerotorescue@62 517 order = 20,
Zerotorescue@62 518 type = "toggle",
Zerotorescue@62 519 name = "Override min global stock",
Zerotorescue@62 520 desc = "Allows you to override the minimum global stock setting for this group.",
Zerotorescue@62 521 arg = "minGlobalStock",
Zerotorescue@62 522 },
Zerotorescue@62 523 minGlobalStock = {
Zerotorescue@62 524 order = 21,
Zerotorescue@62 525 type = "range",
Zerotorescue@62 526 min = 0,
Zerotorescue@62 527 max = 100000,
Zerotorescue@62 528 softMax = 100,
Zerotorescue@62 529 step = 1,
Zerotorescue@62 530 name = "Minimum global stock",
Zerotorescue@62 531 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 532 arg = "overrideMinGlobalStock",
Zerotorescue@62 533 },
Zerotorescue@62 534 overrideAlertBelowGlobalMinimum = {
Zerotorescue@62 535 order = 25,
Zerotorescue@62 536 type = "toggle",
Zerotorescue@62 537 name = "Override global minimum alert",
Zerotorescue@62 538 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 539 arg = "alertBelowGlobalMinimum",
Zerotorescue@62 540 },
Zerotorescue@62 541 alertBelowGlobalMinimum = {
Zerotorescue@62 542 order = 26,
Zerotorescue@62 543 type = "toggle",
Zerotorescue@62 544 name = "Alert when below global minimum (NYI)",
Zerotorescue@62 545 desc = "Show an alert when an item in this group gets below the global minimum stock threshold.",
Zerotorescue@62 546 arg = "overrideAlertBelowGlobalMinimum",
Zerotorescue@62 547 },
Zerotorescue@62 548
Zerotorescue@62 549 overrideSummaryThresholdShow = {
Zerotorescue@62 550 order = 34,
Zerotorescue@62 551 type = "toggle",
Zerotorescue@62 552 name = "Override summary showing",
Zerotorescue@62 553 desc = "Allows you to override when this group should appear in the summary.",
Zerotorescue@62 554 arg = "summaryThresholdShow",
Zerotorescue@62 555 },
Zerotorescue@62 556 summaryThresholdShow = {
Zerotorescue@62 557 order = 35,
Zerotorescue@62 558 type = "range",
Zerotorescue@62 559 min = 0,
Zerotorescue@62 560 max = 10,
Zerotorescue@62 561 softMax = 100,
Zerotorescue@62 562 step = 0.05,
Zerotorescue@62 563 isPercent = true,
Zerotorescue@62 564 name = "Show in summary when below",
Zerotorescue@62 565 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 566 arg = "overrideSummaryThresholdShow",
Zerotorescue@62 567 },
Zerotorescue@62 568 overrideTrackAtCharacters = {
Zerotorescue@62 569 order = 39,
Zerotorescue@62 570 type = "toggle",
Zerotorescue@62 571 name = "Override track at",
Zerotorescue@62 572 desc = "Allows you to override at which characters items in this group should appear in the summary and generate alerts.",
Zerotorescue@62 573 arg = "trackAtCharacters",
Zerotorescue@62 574 },
Zerotorescue@62 575 trackAtCharacters = {
Zerotorescue@62 576 order = 40,
Zerotorescue@62 577 type = "multiselect",
Zerotorescue@62 578 name = "Track at",
Zerotorescue@62 579 desc = "Select at which characters this should appear in the summary and generate alerts.",
Zerotorescue@62 580 values = function()
Zerotorescue@62 581 local temp = {};
Zerotorescue@62 582 for charName in pairs(addon.db.factionrealm.characters) do
Zerotorescue@62 583 temp[charName] = charName;
Zerotorescue@62 584 end
Zerotorescue@62 585
Zerotorescue@62 586 return temp;
Zerotorescue@62 587 end,
Zerotorescue@62 588 get = GetMultiOption,
Zerotorescue@65 589 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 590 arg = "overrideTrackAtCharacters",
Zerotorescue@62 591 },
Zerotorescue@62 592 },
Zerotorescue@62 593 },
Zerotorescue@62 594 refill = {
Zerotorescue@62 595 order = 20,
Zerotorescue@62 596 type = "group",
Zerotorescue@62 597 inline = true,
Zerotorescue@62 598 name = "Replenishing stock",
Zerotorescue@62 599 set = SetOption,
Zerotorescue@62 600 get = GetOption,
Zerotorescue@62 601 disabled = GetDisabled,
Zerotorescue@62 602 args = {
Zerotorescue@62 603 description = {
Zerotorescue@62 604 order = 0,
Zerotorescue@62 605 type = "description",
Zerotorescue@62 606 name = function(info)
Zerotorescue@62 607 local groupName = groupIdToName[info[2]];
Zerotorescue@62 608 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 609
Zerotorescue@62 610 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 611
Zerotorescue@62 612 if addon:GetOptionByKey(groupName, "priceThreshold") == 0 then
Zerotorescue@62 613 r = r .. "Queueing items at |cfffed000any|r auction value.";
Zerotorescue@62 614 else
Zerotorescue@62 615 r = r .. "Queueing items worth |cfffed000" .. addon:ReadableMoney(addon:GetOptionByKey(groupName, "priceThreshold")) .. "|r or more.";
Zerotorescue@62 616 end
Zerotorescue@62 617
Zerotorescue@62 618 return r;
Zerotorescue@62 619 end,
Zerotorescue@62 620 },
Zerotorescue@62 621 header = {
Zerotorescue@62 622 order = 5,
Zerotorescue@62 623 type = "header",
Zerotorescue@62 624 name = "",
Zerotorescue@62 625 },
Zerotorescue@62 626 overrideRestockTarget = {
Zerotorescue@62 627 order = 9,
Zerotorescue@62 628 type = "toggle",
Zerotorescue@62 629 name = "Override restock target",
Zerotorescue@62 630 desc = "Allows you to override the restock target setting for this group.",
Zerotorescue@62 631 arg = "restockTarget",
Zerotorescue@62 632 },
Zerotorescue@62 633 restockTarget = {
Zerotorescue@62 634 order = 10,
Zerotorescue@62 635 type = "range",
Zerotorescue@62 636 min = 0,
Zerotorescue@62 637 max = 100000,
Zerotorescue@62 638 softMax = 100,
Zerotorescue@62 639 step = 1,
Zerotorescue@62 640 name = "Restock target",
Zerotorescue@62 641 desc = "You can manually enter a value between 100 and 100.000 in the edit box if the provided range is insufficient.",
Zerotorescue@62 642 arg = "overrideRestockTarget",
Zerotorescue@62 643 },
Zerotorescue@62 644 overrideMinCraftingQueue = {
Zerotorescue@62 645 order = 19,
Zerotorescue@62 646 type = "toggle",
Zerotorescue@62 647 name = "Override min queue",
Zerotorescue@62 648 desc = "Allows you to override the minimum craftable items queue setting for this group.",
Zerotorescue@62 649 arg = "minCraftingQueue",
Zerotorescue@62 650 },
Zerotorescue@62 651 minCraftingQueue = {
Zerotorescue@62 652 order = 20,
Zerotorescue@62 653 type = "range",
Zerotorescue@62 654 min = 0,
Zerotorescue@62 655 max = 1,
Zerotorescue@62 656 step = 0.01,
Zerotorescue@62 657 isPercent = true,
Zerotorescue@62 658 name = "Don't queue if I only miss",
Zerotorescue@62 659 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 660 arg = "overrideMinCraftingQueue",
Zerotorescue@62 661 },
Zerotorescue@62 662 overrideBonusQueue = {
Zerotorescue@62 663 order = 29,
Zerotorescue@62 664 type = "toggle",
Zerotorescue@62 665 name = "Override bonus queue",
Zerotorescue@62 666 desc = "Allows you to override the bonus craftable items queue setting for this group.",
Zerotorescue@62 667 arg = "bonusQueue",
Zerotorescue@62 668 },
Zerotorescue@62 669 bonusQueue = {
Zerotorescue@62 670 order = 30,
Zerotorescue@62 671 type = "range",
Zerotorescue@62 672 min = 0,
Zerotorescue@62 673 max = 10, -- 1000%
Zerotorescue@62 674 step = 0.01, -- 1%
Zerotorescue@62 675 isPercent = true,
Zerotorescue@62 676 name = "Bonus queue",
Zerotorescue@62 677 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 678 arg = "overrideBonusQueue",
Zerotorescue@62 679 },
Zerotorescue@62 680 overridePriceThreshold = {
Zerotorescue@62 681 order = 39,
Zerotorescue@62 682 type = "toggle",
Zerotorescue@62 683 name = "Override price threshold",
Zerotorescue@62 684 desc = "Allows you to override the price threshold setting for this group.",
Zerotorescue@62 685 arg = "priceThreshold",
Zerotorescue@62 686 },
Zerotorescue@62 687 priceThreshold = {
Zerotorescue@62 688 order = 40,
Zerotorescue@62 689 type = "input",
Zerotorescue@62 690 name = "Price threshold",
Zerotorescue@62 691 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 692 validate = function(info, value) return addon:ValidateReadableMoney(info, value); end,
Zerotorescue@62 693 get = function(i) return addon:ReadableMoney(GetOption(i)); end,
Zerotorescue@62 694 set = function(i, v) SetOption(i, addon:ReadableMoneyToCopper(v)); end,
Zerotorescue@62 695 arg = "overridePriceThreshold",
Zerotorescue@62 696 },
Zerotorescue@62 697 overrideSummaryHidePriceThreshold = {
Zerotorescue@62 698 order = 49,
Zerotorescue@62 699 type = "toggle",
Zerotorescue@62 700 name = "Override summary showing",
Zerotorescue@62 701 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 702 arg = "summaryHidePriceThreshold",
Zerotorescue@62 703 },
Zerotorescue@62 704 summaryHidePriceThreshold = {
Zerotorescue@62 705 order = 50,
Zerotorescue@62 706 type = "toggle",
Zerotorescue@62 707 name = "Hide when below threshold",
Zerotorescue@62 708 desc = "Hide items from the summary when their value is below the set price threshold.",
Zerotorescue@62 709 arg = "overrideSummaryHidePriceThreshold",
Zerotorescue@62 710 },
Zerotorescue@62 711 overrideAlwaysGetAuctionValue = {
Zerotorescue@62 712 order = 59,
Zerotorescue@62 713 type = "toggle",
Zerotorescue@62 714 name = "Override auction value showing",
Zerotorescue@62 715 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 716 arg = "alwaysGetAuctionValue",
Zerotorescue@62 717 },
Zerotorescue@62 718 alwaysGetAuctionValue = {
Zerotorescue@62 719 order = 60,
Zerotorescue@62 720 type = "toggle",
Zerotorescue@62 721 name = "Always show auction value",
Zerotorescue@62 722 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 723 arg = "overrideAlwaysGetAuctionValue",
Zerotorescue@62 724 },
Zerotorescue@62 725 },
Zerotorescue@62 726 },
Zerotorescue@62 727 },
Zerotorescue@62 728 },
Zerotorescue@62 729 group = {
Zerotorescue@62 730 order = 20,
Zerotorescue@62 731 type = "group",
Zerotorescue@62 732 name = "Management",
Zerotorescue@62 733 desc = "Rename, delete, duplicate or export this group.",
Zerotorescue@62 734 args = {
Zerotorescue@62 735 actions = {
Zerotorescue@62 736 order = 10,
Zerotorescue@62 737 type = "group",
Zerotorescue@62 738 name = "Actions",
Zerotorescue@62 739 inline = true,
Zerotorescue@62 740 args = {
Zerotorescue@62 741 rename = {
Zerotorescue@62 742 order = 10,
Zerotorescue@62 743 type = "input",
Zerotorescue@62 744 name = "Rename group - New name",
Zerotorescue@62 745 desc = "Change the name of this group to something else. You can also use item links here as you wish.",
Zerotorescue@62 746 validate = ValidateGroupName,
Zerotorescue@62 747 set = function(info, value)
Zerotorescue@62 748 local oldGroupName = groupIdToName[info[2]];
Zerotorescue@62 749
Zerotorescue@62 750 addon.db.profile.groups[value] = CopyTable(addon.db.profile.groups[oldGroupName]);
Zerotorescue@62 751 addon.db.profile.groups[oldGroupName] = nil;
Zerotorescue@62 752
Zerotorescue@62 753 groupIdToName[info[2]] = value;
Zerotorescue@62 754 groupIdToName[value] = true;
Zerotorescue@62 755 groupIdToName[oldGroupName] = nil;
Zerotorescue@62 756
Zerotorescue@62 757 mod:FillGroupOptions();
Zerotorescue@62 758 end,
Zerotorescue@62 759 get = function(info)
Zerotorescue@62 760 return groupIdToName[info[2]];
Zerotorescue@62 761 end,
Zerotorescue@62 762 },
Zerotorescue@62 763 duplicate = {
Zerotorescue@62 764 order = 20,
Zerotorescue@62 765 type = "input",
Zerotorescue@62 766 name = "Duplicate group - New name",
Zerotorescue@62 767 desc = "Duplicate this group. You can also use item links here as you wish.\n\nAll item data will be erased.",
Zerotorescue@62 768 validate = ValidateGroupName,
Zerotorescue@62 769 set = function(info, value)
Zerotorescue@62 770 local oldGroupName = groupIdToName[info[2]];
Zerotorescue@62 771
Zerotorescue@62 772 addon.db.profile.groups[value] = CopyTable(addon.db.profile.groups[oldGroupName]);
Zerotorescue@62 773
Zerotorescue@62 774 -- Reset item data (duplicate items me no want)
Zerotorescue@62 775 addon.db.profile.groups[value].items = nil;
Zerotorescue@62 776
Zerotorescue@62 777 mod:FillGroupOptions();
Zerotorescue@62 778 end,
Zerotorescue@62 779 get = false,
Zerotorescue@62 780 },
Zerotorescue@62 781 delete = {
Zerotorescue@62 782 order = 30,
Zerotorescue@62 783 type = "execute",
Zerotorescue@62 784 name = "Delete group",
Zerotorescue@62 785 desc = "Delete the currently selected group.",
Zerotorescue@62 786 confirm = true,
Zerotorescue@62 787 confirmText = "Are you sure you wish to |cffff0000DELETE|r this group? This action is not reversable!",
Zerotorescue@62 788 func = function(info)
Zerotorescue@62 789 local groupName = groupIdToName[info[2]];
Zerotorescue@62 790
Zerotorescue@62 791 addon.db.profile.groups[groupName] = nil;
Zerotorescue@62 792
Zerotorescue@62 793 mod:FillGroupOptions();
Zerotorescue@62 794 end,
Zerotorescue@62 795 },
Zerotorescue@62 796 },
Zerotorescue@62 797 },
Zerotorescue@62 798 export = {
Zerotorescue@62 799 order = 40,
Zerotorescue@62 800 type = "group",
Zerotorescue@62 801 name = "Export",
Zerotorescue@62 802 inline = true,
Zerotorescue@62 803 args = {
Zerotorescue@62 804 input = {
Zerotorescue@62 805 order = 10,
Zerotorescue@62 806 type = "input",
Zerotorescue@62 807 multiline = true,
Zerotorescue@62 808 name = "Group data",
Zerotorescue@62 809 width = "full",
Zerotorescue@62 810 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 811 set = false,
Zerotorescue@62 812 get = function(info)
Zerotorescue@62 813 local groupName = groupIdToName[info[2]];
Zerotorescue@62 814
Zerotorescue@62 815 -- We want to include the group name, so we copy the table then set another value
Zerotorescue@62 816 local temp = CopyTable(addon.db.profile.groups[groupName]);
Zerotorescue@62 817 temp.name = groupName;
Zerotorescue@62 818 temp.trackAtCharacters = nil;
Zerotorescue@62 819 temp.overrideTrackAtCharacters = nil;
Zerotorescue@62 820
Zerotorescue@62 821 if not AceSerializer then
Zerotorescue@62 822 AceSerializer = LibStub("AceSerializer-3.0");
Zerotorescue@62 823 end
Zerotorescue@62 824
Zerotorescue@62 825 return AceSerializer:Serialize(temp);
Zerotorescue@62 826 end,
Zerotorescue@62 827 },
Zerotorescue@62 828 },
Zerotorescue@62 829 },
Zerotorescue@62 830 },
Zerotorescue@62 831 },
Zerotorescue@62 832 add = {
Zerotorescue@62 833 order = 30,
Zerotorescue@62 834 type = "group",
Zerotorescue@62 835 name = "Add items",
Zerotorescue@62 836 desc = "Add new items to this group.",
Zerotorescue@62 837 hidden = function(info) return groupIsVirtual[info[2]]; end,
Zerotorescue@62 838 args = {
Zerotorescue@62 839 singleAdd = {
Zerotorescue@62 840 order = 10,
Zerotorescue@62 841 type = "group",
Zerotorescue@62 842 inline = true,
Zerotorescue@62 843 name = "Add items",
Zerotorescue@62 844 args = {
Zerotorescue@62 845 help = {
Zerotorescue@62 846 order = 10,
Zerotorescue@62 847 type = "description",
Zerotorescue@62 848 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 849 },
Zerotorescue@62 850 itemLink = {
Zerotorescue@62 851 order = 20,
Zerotorescue@62 852 type = "input",
Zerotorescue@62 853 name = "Single item add (item-link or item-id)",
Zerotorescue@62 854 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 855 validate = function(info, value)
Zerotorescue@62 856 -- If the value is empty we'll allow passing to clear the carret
Zerotorescue@62 857 if value == "" then return true; end
Zerotorescue@62 858
Zerotorescue@62 859 local groupName = groupIdToName[info[2]];
Zerotorescue@62 860
Zerotorescue@76 861 local itemId = (addon:GetItemId(string.trim(value)) or tonumber(string.trim(value)));
Zerotorescue@76 862
Zerotorescue@76 863 local itemData = addon.ItemData:New(itemId);
Zerotorescue@62 864
Zerotorescue@62 865 if not itemId then
Zerotorescue@76 866 return "This is not a valid item link or id.";
Zerotorescue@76 867 elseif itemData:InGroup() then
Zerotorescue@76 868 return ("This item is already in the group |cfffed000%s|r."):format(itemData:InGroup());
Zerotorescue@62 869 end
Zerotorescue@62 870
Zerotorescue@62 871 return true;
Zerotorescue@62 872 end,
Zerotorescue@62 873 set = function(info, value)
Zerotorescue@62 874 if value and value ~= "" then
Zerotorescue@62 875 local groupName = groupIdToName[info[2]];
Zerotorescue@62 876
Zerotorescue@76 877 local itemId = (addon:GetItemId(string.trim(value)) or tonumber(string.trim(value)));
Zerotorescue@62 878
Zerotorescue@76 879 local itemData = addon.ItemData:New(itemId);
Zerotorescue@76 880
Zerotorescue@76 881 if itemData:AddToGroup(groupName) then
Zerotorescue@76 882 addon.Print(("Added %s to the selected group."):format( (itemData.link or unknownItemName:format(itemId)) ), addon.Colors.Green);
Zerotorescue@76 883
Zerotorescue@76 884 if AceConfigRegistry then
Zerotorescue@76 885 -- Now rebuild the list
Zerotorescue@76 886 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@76 887 end
Zerotorescue@76 888 else
Zerotorescue@76 889 addon.Print(("%s is already in the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup() ), addon.Colors.Red);
Zerotorescue@76 890 end
Zerotorescue@62 891 end
Zerotorescue@62 892 end,
Zerotorescue@62 893 get = false,
Zerotorescue@62 894 },
Zerotorescue@62 895 importItemData = {
Zerotorescue@62 896 order = 30,
Zerotorescue@62 897 type = "input",
Zerotorescue@62 898 name = "Import item data",
Zerotorescue@62 899 desc = "Import item data from an exported item data-string. Any items already grouped will be skipped.",
Zerotorescue@62 900 set = function(info, value)
Zerotorescue@62 901 local groupName = groupIdToName[info[2]];
Zerotorescue@62 902
Zerotorescue@62 903 local allItemIds = { string.split(";", value or "") };
Zerotorescue@62 904
Zerotorescue@62 905 for _, value in pairs(allItemIds) do
Zerotorescue@62 906 local itemId = tonumber(value);
Zerotorescue@62 907
Zerotorescue@76 908 if itemId then
Zerotorescue@76 909 local itemData = addon.ItemData:New(itemId);
Zerotorescue@76 910
Zerotorescue@76 911 if itemData:InGroup() then
Zerotorescue@76 912 addon.Print(("Skipping %s (#%d) as it is already in the group |cfffed000%s|r."):format(itemData.link or "Unknown", itemId, itemData:InGroup()), addon.Colors.Red);
Zerotorescue@76 913 elseif itemData:AddToGroup(groupName) then
Zerotorescue@76 914 addon.Print(("Added %s to the group |cfffed000%s|r."):format(itemData.link or unknownItemName:format(itemId), groupName), addon.Colors.Green);
Zerotorescue@76 915 end
Zerotorescue@62 916 else
Zerotorescue@76 917 addon.Print(("\"%s\" is not a number."):format(value), addon.Colors.Red);
Zerotorescue@62 918 end
Zerotorescue@62 919 end
Zerotorescue@76 920
Zerotorescue@76 921 if AceConfigRegistry then
Zerotorescue@76 922 -- Now rebuild the list
Zerotorescue@76 923 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@76 924 end
Zerotorescue@62 925 end,
Zerotorescue@62 926 get = false,
Zerotorescue@62 927 },
Zerotorescue@62 928 importPremadeData = {
Zerotorescue@62 929 order = 40,
Zerotorescue@62 930 type = "select",
Zerotorescue@62 931 name = "Import premade data",
Zerotorescue@62 932 desc = "Import item data from a premade item-group. Any items already grouped will be skipped.",
Zerotorescue@62 933 values = function()
Zerotorescue@62 934 local temp = {};
Zerotorescue@62 935 for key, group in pairs(addon.defaultGroups) do
Zerotorescue@62 936 temp[key] = key;
Zerotorescue@62 937 end
Zerotorescue@62 938
Zerotorescue@62 939 return temp;
Zerotorescue@62 940 end,
Zerotorescue@62 941 set = function(info, value)
Zerotorescue@62 942 local groupName = groupIdToName[info[2]];
Zerotorescue@62 943
Zerotorescue@62 944 print(("Importing items from the premade group \"|cfffed000%s|r\"."):format(value));
Zerotorescue@62 945
Zerotorescue@62 946 -- Remember we imported this group and it's version so if it is ever changed, people can be notified
Zerotorescue@62 947 if not addon.db.profile.groups[groupName].premadeGroups then
Zerotorescue@62 948 addon.db.profile.groups[groupName].premadeGroups = {};
Zerotorescue@62 949 end
Zerotorescue@62 950 addon.db.profile.groups[groupName].premadeGroups[value] = addon.defaultGroups[value].version;
Zerotorescue@62 951
Zerotorescue@62 952 for itemId, version in pairs(addon.defaultGroups[value].items) do
Zerotorescue@62 953 if version > 0 then
Zerotorescue@76 954 -- Sanity check
Zerotorescue@62 955 itemId = itemId and tonumber(itemId);
Zerotorescue@62 956
Zerotorescue@76 957 local itemData = addon.ItemData:New(itemId);
Zerotorescue@76 958
Zerotorescue@62 959 if not itemId then
Zerotorescue@76 960 addon.Print(("\"|cfffed000%s|r\" is not a number."):format(value), addon.Colors.Red);
Zerotorescue@76 961 elseif itemData:InGroup() then
Zerotorescue@76 962 addon.Print(("Skipping |cfffed000%s|r as it is already in the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup() ), addon.Colors.Red);
Zerotorescue@76 963 elseif itemData:AddToGroup(groupName) then
Zerotorescue@76 964 addon.Print(("Added %s to the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), groupName ), addon.Colors.Green);
Zerotorescue@62 965 end
Zerotorescue@62 966 end
Zerotorescue@62 967 end
Zerotorescue@76 968
Zerotorescue@76 969 if AceConfigRegistry then
Zerotorescue@76 970 -- Now rebuild the list
Zerotorescue@76 971 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@76 972 end
Zerotorescue@62 973 end,
Zerotorescue@62 974 get = false,
Zerotorescue@62 975 },
Zerotorescue@62 976 },
Zerotorescue@62 977 },
Zerotorescue@62 978 massAdd = {
Zerotorescue@62 979 order = 20,
Zerotorescue@62 980 type = "group",
Zerotorescue@62 981 inline = true,
Zerotorescue@62 982 name = "Mass add",
Zerotorescue@62 983 args = {
Zerotorescue@62 984 help = {
Zerotorescue@62 985 order = 10,
Zerotorescue@62 986 type = "description",
Zerotorescue@62 987 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 988 },
Zerotorescue@62 989 massAdd = {
Zerotorescue@62 990 order = 20,
Zerotorescue@62 991 type = "input",
Zerotorescue@62 992 name = "Add all items matching...",
Zerotorescue@62 993 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 994 set = function(info, value)
Zerotorescue@62 995 local groupName = groupIdToName[info[2]];
Zerotorescue@62 996
Zerotorescue@62 997 if not value then return; end
Zerotorescue@62 998
Zerotorescue@62 999 value = value:lower();
Zerotorescue@62 1000
Zerotorescue@62 1001 local ref = options.args.groups.args[info[2]].args.add.args.list.args;
Zerotorescue@62 1002
Zerotorescue@62 1003 for itemId, test in pairs(ref) do
Zerotorescue@62 1004 if test then
Zerotorescue@76 1005 local itemData = addon.ItemData:New(itemId);
Zerotorescue@62 1006
Zerotorescue@76 1007 if itemData.name:lower():find(value) then
Zerotorescue@76 1008 if itemData:AddToGroup(groupName) then
Zerotorescue@76 1009 addon.Print(("Added %s to the selected group."):format( (itemData.link or unknownItemName:format(itemId)) ), addon.Colors.Green);
Zerotorescue@76 1010 else
Zerotorescue@76 1011 addon.Print(("Couldn't add %s because it is already in a group."):format(itemData.link or unknownItemName:format(itemId)), addon.Colors.Red);
Zerotorescue@62 1012 end
Zerotorescue@62 1013 end
Zerotorescue@62 1014 end
Zerotorescue@62 1015 end
Zerotorescue@76 1016
Zerotorescue@76 1017 if AceConfigRegistry then
Zerotorescue@76 1018 -- Now rebuild the list
Zerotorescue@76 1019 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@76 1020 end
Zerotorescue@62 1021 end,
Zerotorescue@62 1022 get = false,
Zerotorescue@62 1023 },
Zerotorescue@62 1024 minItemLevel = {
Zerotorescue@62 1025 order = 40,
Zerotorescue@62 1026 type = "select",
Zerotorescue@62 1027 values = function()
Zerotorescue@62 1028 local temp = {};
Zerotorescue@62 1029
Zerotorescue@62 1030 temp[0] = "Include everything";
Zerotorescue@62 1031
Zerotorescue@62 1032 local itemLevelTemplate = "Itemlevel >= %d";
Zerotorescue@62 1033
Zerotorescue@62 1034 for i = 1, 49 do
Zerotorescue@62 1035 temp[( i * 10 )] = itemLevelTemplate:format(( i * 10 ));
Zerotorescue@62 1036 end
Zerotorescue@62 1037
Zerotorescue@62 1038 temp[500] = "Include nothing";
Zerotorescue@62 1039
Zerotorescue@62 1040 return temp;
Zerotorescue@62 1041 end,
Zerotorescue@62 1042 name = "Include tradeskill items",
Zerotorescue@62 1043 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 1044 set = function(i, v) includeTradeSkillItems = v; end,
Zerotorescue@62 1045 get = function() return includeTradeSkillItems; end,
Zerotorescue@62 1046 disabled = function()
Zerotorescue@62 1047 if GetTradeSkillLine() == "UNKNOWN" then
Zerotorescue@62 1048 includeTradeSkillItems = 500;
Zerotorescue@62 1049 return true; -- disabled
Zerotorescue@62 1050 else
Zerotorescue@62 1051 return false;
Zerotorescue@62 1052 end
Zerotorescue@62 1053 end,
Zerotorescue@62 1054 },
Zerotorescue@62 1055 },
Zerotorescue@62 1056 },
Zerotorescue@62 1057 list = {
Zerotorescue@62 1058 order = 30,
Zerotorescue@62 1059 type = "group",
Zerotorescue@62 1060 inline = true,
Zerotorescue@62 1061 name = "Item list",
Zerotorescue@62 1062 hidden = UpdateAddItemList,
Zerotorescue@62 1063 args = {
Zerotorescue@62 1064
Zerotorescue@62 1065 },
Zerotorescue@62 1066 },
Zerotorescue@62 1067 },
Zerotorescue@62 1068 },
Zerotorescue@62 1069 remove = {
Zerotorescue@62 1070 order = 40,
Zerotorescue@62 1071 type = "group",
Zerotorescue@62 1072 name = "Current items",
Zerotorescue@62 1073 desc = "View, export or remove items from this group.",
Zerotorescue@62 1074 hidden = function(info) return groupIsVirtual[info[2]]; end,
Zerotorescue@62 1075 args = {
Zerotorescue@62 1076 help = {
Zerotorescue@62 1077 order = 10,
Zerotorescue@62 1078 type = "group",
Zerotorescue@62 1079 inline = true,
Zerotorescue@62 1080 name = "Help",
Zerotorescue@62 1081 hidden = false,
Zerotorescue@62 1082 args = {
Zerotorescue@62 1083 help = {
Zerotorescue@62 1084 order = 10,
Zerotorescue@62 1085 type = "description",
Zerotorescue@62 1086 name = "Click the items you wish to remove from this group.",
Zerotorescue@62 1087 },
Zerotorescue@62 1088 massRemove = {
Zerotorescue@62 1089 order = 20,
Zerotorescue@62 1090 type = "input",
Zerotorescue@62 1091 name = "Remove all items matching...",
Zerotorescue@62 1092 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 1093 set = function(info, value)
Zerotorescue@62 1094 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1095
Zerotorescue@62 1096 if not value then return; end
Zerotorescue@62 1097
Zerotorescue@62 1098 value = value:lower();
Zerotorescue@62 1099
Zerotorescue@62 1100 local ref = options.args.groups.args[info[2]].args.remove.args.list.args;
Zerotorescue@62 1101
Zerotorescue@62 1102 for itemId, test in pairs(ref) do
Zerotorescue@62 1103 if test then
Zerotorescue@76 1104 local itemData = addon.ItemData:New(itemId);
Zerotorescue@62 1105
Zerotorescue@76 1106 if itemData.name:lower():find(value) then
Zerotorescue@76 1107 itemData:RemoveFromGroup(groupName);
Zerotorescue@76 1108
Zerotorescue@76 1109 addon.Print(("Removed %s from the selected group."):format( (itemData.link or unknownItemName:format(itemId)) ), addon.Colors.Red);
Zerotorescue@62 1110 end
Zerotorescue@62 1111 end
Zerotorescue@62 1112 end
Zerotorescue@62 1113
Zerotorescue@76 1114 if AceConfigRegistry then
Zerotorescue@76 1115 -- Now rebuild the list
Zerotorescue@76 1116 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@76 1117 end
Zerotorescue@62 1118 end,
Zerotorescue@62 1119 get = false,
Zerotorescue@62 1120 },
Zerotorescue@62 1121 premadeGroups = {
Zerotorescue@62 1122 order = 30,
Zerotorescue@62 1123 type = "select",
Zerotorescue@62 1124 name = "Imported premade groups",
Zerotorescue@62 1125 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 1126 values = function(info)
Zerotorescue@62 1127 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1128
Zerotorescue@62 1129 local temp = {};
Zerotorescue@76 1130 temp[""] = "";
Zerotorescue@62 1131 if addon.db.profile.groups[groupName].premadeGroups then
Zerotorescue@62 1132 for name, version in pairs(addon.db.profile.groups[groupName].premadeGroups) do
Zerotorescue@62 1133 temp[name] = name;
Zerotorescue@62 1134 end
Zerotorescue@62 1135 end
Zerotorescue@62 1136
Zerotorescue@62 1137 return temp;
Zerotorescue@62 1138 end,
Zerotorescue@62 1139 set = function(info, value)
Zerotorescue@76 1140 if value and value ~= "" then
Zerotorescue@76 1141 -- Remove premade group from this group
Zerotorescue@76 1142 local groupName = groupIdToName[info[2]];
Zerotorescue@76 1143
Zerotorescue@76 1144 addon.db.profile.groups[groupName].premadeGroups[value] = nil;
Zerotorescue@76 1145
Zerotorescue@76 1146 print(("No longer notifying you about changes made to the premade group named \"|cfffed000%s|r\"."):format(value));
Zerotorescue@76 1147 end
Zerotorescue@62 1148 end,
Zerotorescue@62 1149 get = false,
Zerotorescue@62 1150 disabled = function(info)
Zerotorescue@62 1151 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1152
Zerotorescue@62 1153 return (not addon.db.profile.groups[groupName].premadeGroups);
Zerotorescue@62 1154 end,
Zerotorescue@62 1155 },
Zerotorescue@62 1156 },
Zerotorescue@62 1157 },
Zerotorescue@62 1158 list = {
Zerotorescue@62 1159 order = 20,
Zerotorescue@62 1160 type = "group",
Zerotorescue@62 1161 inline = true,
Zerotorescue@62 1162 name = "Item list",
Zerotorescue@62 1163 hidden = UpdateRemoveItemList,
Zerotorescue@62 1164 args = {
Zerotorescue@62 1165
Zerotorescue@62 1166 },
Zerotorescue@62 1167 },
Zerotorescue@62 1168 export = {
Zerotorescue@62 1169 order = 30,
Zerotorescue@62 1170 type = "group",
Zerotorescue@62 1171 name = "Export",
Zerotorescue@62 1172 inline = true,
Zerotorescue@62 1173 args = {
Zerotorescue@62 1174 input = {
Zerotorescue@62 1175 order = 10,
Zerotorescue@62 1176 type = "input",
Zerotorescue@62 1177 name = "Item data",
Zerotorescue@62 1178 width = "full",
Zerotorescue@62 1179 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 1180 set = false,
Zerotorescue@62 1181 get = function(info)
Zerotorescue@62 1182 local groupName = groupIdToName[info[2]];
Zerotorescue@62 1183
Zerotorescue@62 1184 local combinedItemIds;
Zerotorescue@62 1185 -- Parse items in group and show these
Zerotorescue@62 1186 for itemId, _ in pairs(addon.db.profile.groups[groupName].items) do
Zerotorescue@62 1187 if not combinedItemIds then
Zerotorescue@62 1188 combinedItemIds = tostring(itemId);
Zerotorescue@62 1189 else
Zerotorescue@62 1190 combinedItemIds = combinedItemIds .. (";%d"):format(itemId);
Zerotorescue@62 1191 end
Zerotorescue@62 1192 end
Zerotorescue@62 1193
Zerotorescue@62 1194 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 1195 end,
Zerotorescue@62 1196 },
Zerotorescue@62 1197 },
Zerotorescue@62 1198 },
Zerotorescue@62 1199 },
Zerotorescue@62 1200 },
Zerotorescue@62 1201 },
Zerotorescue@62 1202 };
Zerotorescue@62 1203
Zerotorescue@62 1204
Zerotorescue@62 1205
Zerotorescue@62 1206
Zerotorescue@62 1207
Zerotorescue@62 1208
Zerotorescue@62 1209
Zerotorescue@62 1210
Zerotorescue@62 1211
Zerotorescue@62 1212 -- Object functions
Zerotorescue@62 1213
Zerotorescue@62 1214 function mod:OnEnable()
Zerotorescue@62 1215 -- Register our config slash command
Zerotorescue@62 1216 -- /im config
Zerotorescue@62 1217 addon:RegisterSlash(function(this)
Zerotorescue@62 1218 -- We don't want any other windows open at this time.
Zerotorescue@62 1219 for name, module in this:IterateModules() do
Zerotorescue@62 1220 if module.CloseFrame then
Zerotorescue@62 1221 module:CloseFrame();
Zerotorescue@62 1222 end
Zerotorescue@62 1223 end
Zerotorescue@62 1224
Zerotorescue@62 1225 this:GetModule("Config"):Show();
Zerotorescue@62 1226 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 1227
Zerotorescue@62 1228 -- Whenever the profile is changed, update the groups | args: (object for the functionName, eventName, functionName)
Zerotorescue@62 1229 addon.db.RegisterCallback(self, "OnProfileChanged", "RefreshConfig");
Zerotorescue@62 1230 addon.db.RegisterCallback(self, "OnProfileCopied", "RefreshConfig");
Zerotorescue@62 1231 addon.db.RegisterCallback(self, "OnProfileReset", "RefreshConfig");
Zerotorescue@62 1232
Zerotorescue@62 1233 -- Register our custom widgets
Zerotorescue@62 1234 local Widgets = addon:GetModule("Widgets");
Zerotorescue@62 1235 Widgets:ItemLinkButton();
Zerotorescue@62 1236 Widgets:ConfigItemLinkButton();
Zerotorescue@62 1237 end
Zerotorescue@62 1238
Zerotorescue@62 1239 function mod:RefreshConfig()
Zerotorescue@65 1240 self:PremadeGroupsCheck();
Zerotorescue@65 1241
Zerotorescue@62 1242 self:FillGroupOptions();
Zerotorescue@62 1243 end
Zerotorescue@62 1244
Zerotorescue@62 1245 function mod:Load()
Zerotorescue@62 1246 if not AceConfigDialog and not AceConfigRegistry then
Zerotorescue@65 1247 self:PremadeGroupsCheck();
Zerotorescue@65 1248
Zerotorescue@62 1249 self:FillOptions();
Zerotorescue@62 1250
Zerotorescue@62 1251 -- Build options dialog
Zerotorescue@62 1252 AceConfigDialog = LibStub("AceConfigDialog-3.0");
Zerotorescue@62 1253 AceConfigRegistry = LibStub("AceConfigRegistry-3.0");
Zerotorescue@62 1254 -- Register options table
Zerotorescue@62 1255 LibStub("AceConfig-3.0"):RegisterOptionsTable("InventoriumOptions", options);
Zerotorescue@62 1256 -- Set a nice default size (so that 4 normal sized elements fit next to eachother)
Zerotorescue@62 1257 AceConfigDialog:SetDefaultSize("InventoriumOptions", 975, 600);
Zerotorescue@62 1258
Zerotorescue@62 1259 -- In case the addon is loaded from another condition, always call the remove interface options
Zerotorescue@62 1260 if AddonLoader and AddonLoader.RemoveInterfaceOptions then
Zerotorescue@62 1261 AddonLoader:RemoveInterfaceOptions("Inventorium");
Zerotorescue@62 1262 end
Zerotorescue@62 1263
Zerotorescue@62 1264 -- Add to the blizzard addons options thing
Zerotorescue@62 1265 AceConfigDialog:AddToBlizOptions("InventoriumOptions");
Zerotorescue@62 1266 end
Zerotorescue@62 1267 end
Zerotorescue@62 1268
Zerotorescue@62 1269 function mod:Show()
Zerotorescue@62 1270 self:Load();
Zerotorescue@62 1271
Zerotorescue@62 1272 AceConfigDialog:Open("InventoriumOptions");
Zerotorescue@62 1273 end
Zerotorescue@62 1274
Zerotorescue@62 1275 function mod:FillOptions()
Zerotorescue@62 1276 options = {
Zerotorescue@62 1277 type = "group",
Zerotorescue@62 1278 name = "Inventorium Config",
Zerotorescue@62 1279 childGroups = "tree",
Zerotorescue@62 1280 args = {
Zerotorescue@62 1281 },
Zerotorescue@62 1282 };
Zerotorescue@62 1283
Zerotorescue@62 1284 -- General
Zerotorescue@62 1285 self:FillGeneralOptions();
Zerotorescue@62 1286
Zerotorescue@62 1287 -- Help
Zerotorescue@62 1288 self:FillHelpOptions();
Zerotorescue@62 1289
Zerotorescue@62 1290 -- Profile
Zerotorescue@62 1291 options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(addon.db, true);
Zerotorescue@62 1292 options.args.profiles.order = 200;
Zerotorescue@62 1293
Zerotorescue@62 1294 -- Groups
Zerotorescue@62 1295 self:MakeGroupOptions();
Zerotorescue@62 1296
Zerotorescue@62 1297 -- Groups-contents
Zerotorescue@62 1298 self:FillGroupOptions();
Zerotorescue@62 1299 end
Zerotorescue@62 1300
Zerotorescue@62 1301 function mod:FillGeneralOptions()
Zerotorescue@62 1302 options.args.general = {
Zerotorescue@62 1303 order = 100,
Zerotorescue@62 1304 type = "group",
Zerotorescue@62 1305 name = "General",
Zerotorescue@62 1306 desc = "Change general Inventorium settings.",
Zerotorescue@62 1307 args = {
Zerotorescue@62 1308 general = {
Zerotorescue@62 1309 order = 1,
Zerotorescue@62 1310 type = "group",
Zerotorescue@62 1311 inline = true,
Zerotorescue@62 1312 name = "General",
Zerotorescue@62 1313 args = {
Zerotorescue@62 1314 description = {
Zerotorescue@62 1315 order = 0,
Zerotorescue@62 1316 type = "description",
Zerotorescue@62 1317 name = function()
Zerotorescue@62 1318 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 1319
Zerotorescue@62 1320 local currentAddon, selectedAddonName = addon:GetItemCountAddon();
Zerotorescue@62 1321 local preferedAddon = addon.db.profile.defaults.itemCountAddon;
Zerotorescue@62 1322
Zerotorescue@62 1323 if currentAddon then
Zerotorescue@62 1324 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 1325
Zerotorescue@62 1326 if currentAddon.GetTotalCount and currentAddon.GetCharacterCount then
Zerotorescue@62 1327 t = t .. " This addon supports |cfffed000both total as local|r item counts.";
Zerotorescue@62 1328 elseif currentAddon.GetTotalCount then
Zerotorescue@62 1329 t = t .. " This addon supports |cfffed000only total|r item counts.";
Zerotorescue@62 1330 elseif currentAddon.GetCharacterCount then
Zerotorescue@62 1331 t = t .. " This addon supports |cfffed000only local|r item counts.";
Zerotorescue@62 1332 end
Zerotorescue@62 1333
Zerotorescue@62 1334 if preferedAddon ~= selectedAddonName then
Zerotorescue@62 1335 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 1336 end
Zerotorescue@62 1337 end
Zerotorescue@62 1338
Zerotorescue@62 1339 return t;
Zerotorescue@62 1340 end,
Zerotorescue@62 1341 },
Zerotorescue@62 1342 header = {
Zerotorescue@62 1343 order = 5,
Zerotorescue@62 1344 type = "header",
Zerotorescue@62 1345 name = "",
Zerotorescue@62 1346 },
Zerotorescue@62 1347 auctionPricingAddon = {
Zerotorescue@62 1348 order = 10,
Zerotorescue@62 1349 type = "select",
Zerotorescue@62 1350 name = "Prefered pricing addon",
Zerotorescue@62 1351 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 1352 values = function()
Zerotorescue@62 1353 local temp = {};
Zerotorescue@62 1354 for name, value in pairs(addon.supportedAddons.auctionPricing) do
Zerotorescue@62 1355 temp[name] = name;
Zerotorescue@62 1356 end
Zerotorescue@62 1357
Zerotorescue@62 1358 return temp;
Zerotorescue@62 1359 end,
Zerotorescue@62 1360 get = function() return addon.db.profile.defaults.auctionPricingAddon; end,
Zerotorescue@62 1361 set = function(i, v)
Zerotorescue@62 1362 addon.db.profile.defaults.auctionPricingAddon = v;
Zerotorescue@62 1363
Zerotorescue@62 1364 if addon.supportedAddons.auctionPricing[v].OnSelect then
Zerotorescue@62 1365 addon.supportedAddons.auctionPricing[v].OnSelect();
Zerotorescue@62 1366 end
Zerotorescue@62 1367 end,
Zerotorescue@62 1368 },
Zerotorescue@62 1369 itemCountAddon = {
Zerotorescue@62 1370 order = 20,
Zerotorescue@62 1371 type = "select",
Zerotorescue@62 1372 name = "Prefered item count addon",
Zerotorescue@62 1373 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 1374 values = function()
Zerotorescue@62 1375 local temp = {};
Zerotorescue@62 1376 for name, value in pairs(addon.supportedAddons.itemCount) do
Zerotorescue@62 1377 temp[name] = name;
Zerotorescue@62 1378 end
Zerotorescue@62 1379
Zerotorescue@62 1380 return temp;
Zerotorescue@62 1381 end,
Zerotorescue@62 1382 get = function() return addon.db.profile.defaults.itemCountAddon; end,
Zerotorescue@62 1383 set = function(i, v)
Zerotorescue@62 1384 addon.db.profile.defaults.itemCountAddon = v;
Zerotorescue@62 1385
Zerotorescue@62 1386 if addon.supportedAddons.itemCount[v].OnSelect then
Zerotorescue@62 1387 addon.supportedAddons.itemCount[v].OnSelect();
Zerotorescue@62 1388 end
Zerotorescue@62 1389 end,
Zerotorescue@62 1390 },
Zerotorescue@62 1391 craftingAddon = {
Zerotorescue@62 1392 order = 30,
Zerotorescue@62 1393 type = "select",
Zerotorescue@62 1394 name = "Prefered crafting addon",
Zerotorescue@62 1395 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 1396 values = function()
Zerotorescue@62 1397 local temp = {};
Zerotorescue@62 1398 for name, value in pairs(addon.supportedAddons.crafting) do
Zerotorescue@62 1399 temp[name] = name;
Zerotorescue@62 1400 end
Zerotorescue@62 1401
Zerotorescue@62 1402 return temp;
Zerotorescue@62 1403 end,
Zerotorescue@62 1404 get = function() return addon.db.profile.defaults.craftingAddon; end,
Zerotorescue@62 1405 set = function(i, v)
Zerotorescue@62 1406 addon.db.profile.defaults.craftingAddon = v;
Zerotorescue@62 1407
Zerotorescue@62 1408 if addon.supportedAddons.crafting[v].OnSelect then
Zerotorescue@62 1409 addon.supportedAddons.crafting[v].OnSelect();
Zerotorescue@62 1410 end
Zerotorescue@62 1411 end,
Zerotorescue@62 1412 },
Zerotorescue@62 1413 localItemData = {
Zerotorescue@62 1414 order = 40,
Zerotorescue@62 1415 type = "multiselect",
Zerotorescue@62 1416 name = "Include in local item data",
Zerotorescue@62 1417 desc = "Select which data should be included in the local item data.",
Zerotorescue@62 1418 values = {
Zerotorescue@62 1419 ["Bag"] = "Bag",
Zerotorescue@62 1420 ["Bank"] = "Bank",
Zerotorescue@62 1421 ["Auction House"] = "Auction House",
Zerotorescue@62 1422 ["Mailbox"] = "Mailbox",
Zerotorescue@62 1423 },
Zerotorescue@62 1424 get = function(i, v) return addon.db.profile.defaults.localItemData and addon.db.profile.defaults.localItemData[v]; end,
Zerotorescue@62 1425 set = function(i, v, e) addon.db.profile.defaults.localItemData[v] = e or nil; end,
Zerotorescue@65 1426 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 1427 },
Zerotorescue@62 1428 },
Zerotorescue@62 1429 },
Zerotorescue@62 1430 minimumStock = {
Zerotorescue@62 1431 order = 10,
Zerotorescue@62 1432 type = "group",
Zerotorescue@62 1433 inline = true,
Zerotorescue@62 1434 name = "Minimum stock",
Zerotorescue@62 1435 args = {
Zerotorescue@62 1436 description = {
Zerotorescue@62 1437 order = 0,
Zerotorescue@62 1438 type = "description",
Zerotorescue@62 1439 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 1440 },
Zerotorescue@62 1441 header = {
Zerotorescue@62 1442 order = 5,
Zerotorescue@62 1443 type = "header",
Zerotorescue@62 1444 name = "",
Zerotorescue@62 1445 },
Zerotorescue@62 1446 minLocalStock = {
Zerotorescue@62 1447 order = 10,
Zerotorescue@62 1448 type = "range",
Zerotorescue@62 1449 min = 0,
Zerotorescue@62 1450 max = 100000,
Zerotorescue@62 1451 softMax = 100,
Zerotorescue@62 1452 step = 1,
Zerotorescue@62 1453 name = "Minimum local stock",
Zerotorescue@62 1454 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 1455 get = function() return addon.db.profile.defaults.minLocalStock; end,
Zerotorescue@62 1456 set = function(i, v) addon.db.profile.defaults.minLocalStock = v; end,
Zerotorescue@62 1457 },
Zerotorescue@62 1458 alertBelowLocalMinimum = {
Zerotorescue@62 1459 order = 11,
Zerotorescue@62 1460 type = "toggle",
Zerotorescue@62 1461 name = "Alert when below local minimum (NYI)",
Zerotorescue@62 1462 desc = "Show an alert when this item gets below this threshold.",
Zerotorescue@62 1463 get = function() return addon.db.profile.defaults.alertBelowLocalMinimum; end,
Zerotorescue@62 1464 set = function(i, v) addon.db.profile.defaults.alertBelowLocalMinimum = v; end,
Zerotorescue@62 1465 },
Zerotorescue@62 1466 minGlobalStock = {
Zerotorescue@62 1467 order = 20,
Zerotorescue@62 1468 type = "range",
Zerotorescue@62 1469 min = 0,
Zerotorescue@62 1470 max = 100000,
Zerotorescue@62 1471 softMax = 100,
Zerotorescue@62 1472 step = 1,
Zerotorescue@62 1473 name = "Minimum global stock",
Zerotorescue@62 1474 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 1475 get = function() return addon.db.profile.defaults.minGlobalStock; end,
Zerotorescue@62 1476 set = function(i, v) addon.db.profile.defaults.minGlobalStock = v; end,
Zerotorescue@62 1477 },
Zerotorescue@62 1478 alertBelowGlobalMinimum = {
Zerotorescue@62 1479 order = 21,
Zerotorescue@62 1480 type = "toggle",
Zerotorescue@62 1481 name = "Alert when below global minimum (NYI)",
Zerotorescue@62 1482 desc = "Show an alert when this item gets below this threshold.",
Zerotorescue@62 1483 get = function() return addon.db.profile.defaults.alertBelowGlobalMinimum; end,
Zerotorescue@62 1484 set = function(i, v) addon.db.profile.defaults.alertBelowGlobalMinimum = v; end,
Zerotorescue@62 1485 },
Zerotorescue@62 1486 summaryThresholdShow = {
Zerotorescue@62 1487 order = 30,
Zerotorescue@62 1488 type = "range",
Zerotorescue@62 1489 min = 0,
Zerotorescue@62 1490 max = 10,
Zerotorescue@62 1491 softMax = 100,
Zerotorescue@62 1492 step = 0.05,
Zerotorescue@62 1493 isPercent = true,
Zerotorescue@62 1494 name = "Show in summary when below",
Zerotorescue@62 1495 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 1496 get = function() return addon.db.profile.defaults.summaryThresholdShow; end,
Zerotorescue@62 1497 set = function(i, v) addon.db.profile.defaults.summaryThresholdShow = v; end,
Zerotorescue@62 1498 },
Zerotorescue@62 1499 trackAtCharacters = {
Zerotorescue@62 1500 order = 40,
Zerotorescue@62 1501 type = "multiselect",
Zerotorescue@62 1502 name = "Track at",
Zerotorescue@62 1503 desc = "Select at which characters this should appear in the summary and generate alerts.",
Zerotorescue@62 1504 values = function()
Zerotorescue@62 1505 local temp = {};
Zerotorescue@62 1506 for charName in pairs(addon.db.factionrealm.characters) do
Zerotorescue@62 1507 temp[charName] = charName;
Zerotorescue@62 1508 end
Zerotorescue@62 1509
Zerotorescue@62 1510 return temp;
Zerotorescue@62 1511 end,
Zerotorescue@68 1512 get = function(i, v)
Zerotorescue@68 1513 return addon.db.profile.defaults.trackAtCharacters[v];
Zerotorescue@68 1514 end,
Zerotorescue@68 1515 set = function(i, v, e)
Zerotorescue@68 1516 addon.db.profile.defaults.trackAtCharacters[v] = e or nil;
Zerotorescue@68 1517 end,
Zerotorescue@65 1518 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 1519 },
Zerotorescue@62 1520 },
Zerotorescue@62 1521 },
Zerotorescue@62 1522 refill = {
Zerotorescue@62 1523 order = 20,
Zerotorescue@62 1524 type = "group",
Zerotorescue@62 1525 inline = true,
Zerotorescue@62 1526 name = "Replenishing stock",
Zerotorescue@62 1527 args = {
Zerotorescue@62 1528 description = {
Zerotorescue@62 1529 order = 0,
Zerotorescue@62 1530 type = "description",
Zerotorescue@62 1531 name = function()
Zerotorescue@62 1532 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 1533
Zerotorescue@62 1534 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 1535
Zerotorescue@62 1536 return r;
Zerotorescue@62 1537 end,
Zerotorescue@62 1538 },
Zerotorescue@62 1539 header = {
Zerotorescue@62 1540 order = 5,
Zerotorescue@62 1541 type = "header",
Zerotorescue@62 1542 name = "",
Zerotorescue@62 1543 },
Zerotorescue@62 1544 restockTarget = {
Zerotorescue@62 1545 order = 10,
Zerotorescue@62 1546 type = "range",
Zerotorescue@62 1547 min = 0,
Zerotorescue@62 1548 max = 100000,
Zerotorescue@62 1549 softMax = 100,
Zerotorescue@62 1550 step = 1,
Zerotorescue@62 1551 name = "Restock target",
Zerotorescue@62 1552 desc = "You can manually enter a value between 100 and 100.000 in the edit box if the provided range is insufficient.",
Zerotorescue@62 1553 get = function() return addon.db.profile.defaults.restockTarget; end,
Zerotorescue@62 1554 set = function(i, v) addon.db.profile.defaults.restockTarget = v; end,
Zerotorescue@62 1555 },
Zerotorescue@62 1556 minCraftingQueue = {
Zerotorescue@62 1557 order = 20,
Zerotorescue@62 1558 type = "range",
Zerotorescue@62 1559 min = 0,
Zerotorescue@62 1560 max = 1,
Zerotorescue@62 1561 step = 0.01, -- 1%
Zerotorescue@62 1562 isPercent = true,
Zerotorescue@62 1563 name = "Don't queue if I only miss",
Zerotorescue@62 1564 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 1565 get = function() return addon.db.profile.defaults.minCraftingQueue; end,
Zerotorescue@62 1566 set = function(i, v) addon.db.profile.defaults.minCraftingQueue = v; end,
Zerotorescue@62 1567 },
Zerotorescue@62 1568 bonusQueue = {
Zerotorescue@62 1569 order = 30,
Zerotorescue@62 1570 type = "range",
Zerotorescue@62 1571 min = 0,
Zerotorescue@62 1572 max = 10, -- 1000%
Zerotorescue@62 1573 step = 0.01, -- 1%
Zerotorescue@62 1574 isPercent = true,
Zerotorescue@62 1575 name = "Bonus queue",
Zerotorescue@62 1576 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 1577 get = function() return addon.db.profile.defaults.bonusQueue; end,
Zerotorescue@62 1578 set = function(i, v) addon.db.profile.defaults.bonusQueue = v; end,
Zerotorescue@62 1579 },
Zerotorescue@62 1580 priceThreshold = {
Zerotorescue@62 1581 order = 40,
Zerotorescue@62 1582 type = "input",
Zerotorescue@62 1583 name = "Price threshold",
Zerotorescue@62 1584 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 1585 validate = function(info, value) return addon:ValidateReadableMoney(info, value); end,
Zerotorescue@62 1586 get = function() return addon:ReadableMoney(addon.db.profile.defaults.priceThreshold); end,
Zerotorescue@62 1587 set = function(i, v) addon.db.profile.defaults.priceThreshold = addon:ReadableMoneyToCopper(v); end,
Zerotorescue@62 1588 },
Zerotorescue@62 1589 summaryHidePriceThreshold = {
Zerotorescue@62 1590 order = 50,
Zerotorescue@62 1591 type = "toggle",
Zerotorescue@62 1592 name = "Hide when below threshold",
Zerotorescue@62 1593 desc = "Hide items from the summary when their value is below the set price threshold.",
Zerotorescue@62 1594 get = function() return addon.db.profile.defaults.summaryHidePriceThreshold; end,
Zerotorescue@62 1595 set = function(i, v) addon.db.profile.defaults.summaryHidePriceThreshold = v; end,
Zerotorescue@62 1596 },
Zerotorescue@62 1597 alwaysGetAuctionValue = {
Zerotorescue@62 1598 order = 60,
Zerotorescue@62 1599 type = "toggle",
Zerotorescue@62 1600 name = "Always show auction value",
Zerotorescue@62 1601 desc = "Always cache and show the auction value of items, even if the price threshold is set to 0|cffeda55fc|r.",
Zerotorescue@62 1602 get = function() return addon.db.profile.defaults.alwaysGetAuctionValue; end,
Zerotorescue@62 1603 set = function(i, v) addon.db.profile.defaults.alwaysGetAuctionValue = v; end,
Zerotorescue@62 1604 },
Zerotorescue@62 1605 },
Zerotorescue@62 1606 },
Zerotorescue@62 1607 colorCodes = {
Zerotorescue@62 1608 order = 30,
Zerotorescue@62 1609 type = "group",
Zerotorescue@62 1610 inline = true,
Zerotorescue@62 1611 name = "Color codes",
Zerotorescue@62 1612 args = {
Zerotorescue@62 1613 description = {
Zerotorescue@62 1614 order = 0,
Zerotorescue@62 1615 type = "description",
Zerotorescue@62 1616 name = "Change the color code thresholds based on the current stock remaining of the required minimum stock.",
Zerotorescue@62 1617 },
Zerotorescue@62 1618 header = {
Zerotorescue@62 1619 order = 5,
Zerotorescue@62 1620 type = "header",
Zerotorescue@62 1621 name = "",
Zerotorescue@62 1622 },
Zerotorescue@62 1623 green = {
Zerotorescue@62 1624 order = 10,
Zerotorescue@62 1625 type = "range",
Zerotorescue@62 1626 min = 0,
Zerotorescue@62 1627 max = 1,
Zerotorescue@62 1628 step = 0.01,
Zerotorescue@62 1629 isPercent = true,
Zerotorescue@62 1630 name = "|cff00ff00Green|r",
Zerotorescue@62 1631 desc = "Show quantity in green when at least this much of the minimum stock is available.",
Zerotorescue@62 1632 get = function() return addon.db.profile.defaults.colors.green; end,
Zerotorescue@62 1633 set = function(i, v) addon.db.profile.defaults.colors.green = v; end,
Zerotorescue@62 1634 },
Zerotorescue@62 1635 yellow = {
Zerotorescue@62 1636 order = 20,
Zerotorescue@62 1637 type = "range",
Zerotorescue@62 1638 min = 0,
Zerotorescue@62 1639 max = 1,
Zerotorescue@62 1640 step = 0.01,
Zerotorescue@62 1641 isPercent = true,
Zerotorescue@62 1642 name = "|cffffff00Yellow|r",
Zerotorescue@62 1643 desc = "Show quantity in yellow when at least this much of the minimum stock is available.",
Zerotorescue@62 1644 get = function() return addon.db.profile.defaults.colors.yellow; end,
Zerotorescue@62 1645 set = function(i, v) addon.db.profile.defaults.colors.yellow = v; end,
Zerotorescue@62 1646 },
Zerotorescue@62 1647 orange = {
Zerotorescue@62 1648 order = 30,
Zerotorescue@62 1649 type = "range",
Zerotorescue@62 1650 min = 0,
Zerotorescue@62 1651 max = 1,
Zerotorescue@62 1652 step = 0.01,
Zerotorescue@62 1653 isPercent = true,
Zerotorescue@62 1654 name = "|cffff9933Orange|r",
Zerotorescue@62 1655 desc = "Show quantity in orange when at least this much of the minimum stock is available.",
Zerotorescue@62 1656 get = function() return addon.db.profile.defaults.colors.orange; end,
Zerotorescue@62 1657 set = function(i, v) addon.db.profile.defaults.colors.orange = v; end,
Zerotorescue@62 1658 },
Zerotorescue@62 1659 red = {
Zerotorescue@62 1660 order = 40,
Zerotorescue@62 1661 type = "range",
Zerotorescue@62 1662 min = 0,
Zerotorescue@62 1663 max = 1,
Zerotorescue@62 1664 step = 0.01,
Zerotorescue@62 1665 isPercent = true,
Zerotorescue@62 1666 name = "|cffff0000Red|r",
Zerotorescue@62 1667 desc = "Show quantity in red when at least this much of the minimum stock is available.",
Zerotorescue@62 1668 get = function() return addon.db.profile.defaults.colors.red; end,
Zerotorescue@62 1669 set = function(i, v) addon.db.profile.defaults.colors.red = v; end,
Zerotorescue@62 1670 },
Zerotorescue@62 1671 },
Zerotorescue@62 1672 },
Zerotorescue@76 1673 extra = {
Zerotorescue@76 1674 order = 40,
Zerotorescue@76 1675 type = "group",
Zerotorescue@76 1676 inline = true,
Zerotorescue@76 1677 name = "Extra",
Zerotorescue@76 1678 args = {
Zerotorescue@76 1679 description = {
Zerotorescue@76 1680 order = 0,
Zerotorescue@76 1681 type = "description",
Zerotorescue@76 1682 name = "Additional optional settings.",
Zerotorescue@76 1683 },
Zerotorescue@76 1684 header = {
Zerotorescue@76 1685 order = 5,
Zerotorescue@76 1686 type = "header",
Zerotorescue@76 1687 name = "",
Zerotorescue@76 1688 },
Zerotorescue@76 1689 removeCharacter = {
Zerotorescue@76 1690 order = 40,
Zerotorescue@76 1691 type = "select",
Zerotorescue@76 1692 name = "Forget character",
Zerotorescue@76 1693 desc = "Select a character to remove all traces of it from Inventorium's memory.\n\nYour current character can not be removed, you must login to a different character to do so.",
Zerotorescue@76 1694 values = function()
Zerotorescue@76 1695 local temp = {};
Zerotorescue@76 1696
Zerotorescue@76 1697 temp[""] = "";
Zerotorescue@76 1698
Zerotorescue@76 1699 local playerName = UnitName("player");
Zerotorescue@76 1700 for charName in pairs(addon.db.factionrealm.characters) do
Zerotorescue@76 1701 if playerName ~= charName then
Zerotorescue@76 1702 temp[charName] = charName;
Zerotorescue@76 1703 end
Zerotorescue@76 1704 end
Zerotorescue@76 1705
Zerotorescue@76 1706 return temp;
Zerotorescue@76 1707 end,
Zerotorescue@76 1708 set = function(i, value)
Zerotorescue@76 1709 if value and value ~= "" then
Zerotorescue@76 1710 addon.db.factionrealm.characters[value] = nil;
Zerotorescue@76 1711 addon.db.profile.defaults.trackAtCharacters[value] = nil;
Zerotorescue@76 1712 for name, values in pairs(addon.db.profile.groups) do
Zerotorescue@76 1713 if values.trackAtCharacters then
Zerotorescue@76 1714 values.trackAtCharacters[name] = nil;
Zerotorescue@76 1715 end
Zerotorescue@76 1716 end
Zerotorescue@76 1717 end
Zerotorescue@76 1718 end,
Zerotorescue@76 1719 },
Zerotorescue@76 1720 },
Zerotorescue@76 1721 },
Zerotorescue@62 1722 },
Zerotorescue@62 1723 };
Zerotorescue@62 1724 end
Zerotorescue@62 1725
Zerotorescue@62 1726 function mod:FillHelpOptions()
Zerotorescue@62 1727 options.args.help = {
Zerotorescue@62 1728 order = 150,
Zerotorescue@62 1729 type = "group",
Zerotorescue@62 1730 childGroups = "tab",
Zerotorescue@62 1731 name = "Help",
Zerotorescue@62 1732 desc = "Useful information for if you're unfamiliar with a part of the addon.",
Zerotorescue@62 1733 args = {
Zerotorescue@62 1734 general = {
Zerotorescue@62 1735 order = 1,
Zerotorescue@62 1736 type = "group",
Zerotorescue@62 1737 name = "General",
Zerotorescue@62 1738 args = {
Zerotorescue@62 1739 description = {
Zerotorescue@62 1740 order = 0,
Zerotorescue@62 1741 type = "description",
Zerotorescue@62 1742 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 1743 "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 1744 "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 1745 "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 1746 "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 1747 },
Zerotorescue@62 1748 },
Zerotorescue@62 1749 },
Zerotorescue@62 1750 manual = {
Zerotorescue@62 1751 order = 2,
Zerotorescue@62 1752 type = "group",
Zerotorescue@62 1753 name = "Manual",
Zerotorescue@62 1754 args = {
Zerotorescue@62 1755 intro = {
Zerotorescue@62 1756 order = 1,
Zerotorescue@62 1757 type = "group",
Zerotorescue@62 1758 inline = true,
Zerotorescue@62 1759 name = "Intro",
Zerotorescue@62 1760 args = {
Zerotorescue@62 1761 description = {
Zerotorescue@62 1762 order = 0,
Zerotorescue@62 1763 type = "description",
Zerotorescue@62 1764 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 1765 },
Zerotorescue@62 1766 },
Zerotorescue@62 1767 },
Zerotorescue@62 1768 Overview = {
Zerotorescue@62 1769 order = 2,
Zerotorescue@62 1770 type = "group",
Zerotorescue@62 1771 inline = true,
Zerotorescue@62 1772 name = "Overview",
Zerotorescue@62 1773 args = {
Zerotorescue@62 1774 description = {
Zerotorescue@62 1775 order = 0,
Zerotorescue@62 1776 type = "description",
Zerotorescue@62 1777 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 1778
Zerotorescue@62 1779 "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 1780 "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 1781 },
Zerotorescue@62 1782 },
Zerotorescue@62 1783 },
Zerotorescue@62 1784 Groups = {
Zerotorescue@62 1785 order = 3,
Zerotorescue@62 1786 type = "group",
Zerotorescue@62 1787 inline = true,
Zerotorescue@62 1788 name = "Groups",
Zerotorescue@62 1789 args = {
Zerotorescue@62 1790 description = {
Zerotorescue@62 1791 order = 0,
Zerotorescue@62 1792 type = "description",
Zerotorescue@62 1793 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 1794 },
Zerotorescue@62 1795 },
Zerotorescue@62 1796 },
Zerotorescue@62 1797 Queueing = {
Zerotorescue@62 1798 order = 4,
Zerotorescue@62 1799 type = "group",
Zerotorescue@62 1800 inline = true,
Zerotorescue@62 1801 name = "Queueing",
Zerotorescue@62 1802 args = {
Zerotorescue@62 1803 description = {
Zerotorescue@62 1804 order = 0,
Zerotorescue@62 1805 type = "description",
Zerotorescue@62 1806 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 1807
Zerotorescue@62 1808 "The queueing can be done into most popular crafting profession window replacing addons. This includes |cfffed000AdvancedTradeSkillWindow|r, |cfffed000GnomeWorks|r and |cfffed000Skillet|r.",
Zerotorescue@62 1809 },
Zerotorescue@62 1810 },
Zerotorescue@62 1811 },
Zerotorescue@62 1812 Configuring = {
Zerotorescue@62 1813 order = 5,
Zerotorescue@62 1814 type = "group",
Zerotorescue@62 1815 inline = true,
Zerotorescue@62 1816 name = "Configuring",
Zerotorescue@62 1817 args = {
Zerotorescue@62 1818 description = {
Zerotorescue@62 1819 order = 0,
Zerotorescue@62 1820 type = "description",
Zerotorescue@62 1821 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 1822
Zerotorescue@62 1823 "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 1824
Zerotorescue@62 1825 "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 1826
Zerotorescue@62 1827 "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 1828
Zerotorescue@62 1829 "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 1830
Zerotorescue@62 1831 "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 1832 },
Zerotorescue@62 1833 },
Zerotorescue@62 1834 },
Zerotorescue@62 1835 VirtualGroups = {
Zerotorescue@62 1836 order = 6,
Zerotorescue@62 1837 type = "group",
Zerotorescue@62 1838 inline = true,
Zerotorescue@62 1839 name = "Virtual groups",
Zerotorescue@62 1840 args = {
Zerotorescue@62 1841 description = {
Zerotorescue@62 1842 order = 0,
Zerotorescue@62 1843 type = "description",
Zerotorescue@62 1844 name = "|cffccccccThis is advanced optional functionality. I recommend skipping this paragraph if you are new to Inventorium.|r\n\n" ..
Zerotorescue@62 1845
Zerotorescue@62 1846 "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 1847 },
Zerotorescue@62 1848 },
Zerotorescue@62 1849 },
Zerotorescue@62 1850 },
Zerotorescue@62 1851 },
Zerotorescue@62 1852 FAQ = {
Zerotorescue@62 1853 order = 3,
Zerotorescue@62 1854 type = "group",
Zerotorescue@62 1855 name = "FAQ",
Zerotorescue@62 1856 args = {
Zerotorescue@62 1857 description = {
Zerotorescue@62 1858 order = 0,
Zerotorescue@62 1859 type = "description",
Zerotorescue@62 1860 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 1861 "|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 1862 "|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 1863 "|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 1864 "|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 1865 "",
Zerotorescue@62 1866 },
Zerotorescue@62 1867 },
Zerotorescue@62 1868 },
Zerotorescue@62 1869 },
Zerotorescue@62 1870 };
Zerotorescue@62 1871 end
Zerotorescue@62 1872
Zerotorescue@62 1873 function mod:MakeGroupOptions()
Zerotorescue@62 1874 options.args.groups = {
Zerotorescue@62 1875 order = 1100,
Zerotorescue@62 1876 type = "group",
Zerotorescue@62 1877 name = "Groups",
Zerotorescue@62 1878 desc = "Change a group.",
Zerotorescue@62 1879 args = {
Zerotorescue@62 1880 create = {
Zerotorescue@62 1881 order = 10,
Zerotorescue@62 1882 type = "group",
Zerotorescue@62 1883 inline = true,
Zerotorescue@62 1884 name = "Create a brand new group",
Zerotorescue@62 1885 args = {
Zerotorescue@62 1886 name = {
Zerotorescue@62 1887 order = 10,
Zerotorescue@62 1888 type = "input",
Zerotorescue@62 1889 name = "Group name",
Zerotorescue@62 1890 desc = "The name of the group. You can also use item links as you wish.",
Zerotorescue@62 1891 validate = ValidateGroupName,
Zerotorescue@62 1892 set = function(_, value)
Zerotorescue@62 1893 addon.db.profile.groups[value] = {};
Zerotorescue@62 1894 if currentGroupType == "Virtual" then
Zerotorescue@62 1895 addon.db.profile.groups[value].isVirtual = true;
Zerotorescue@62 1896 end
Zerotorescue@62 1897
Zerotorescue@62 1898 mod:FillGroupOptions();
Zerotorescue@62 1899 end,
Zerotorescue@62 1900 get = false,
Zerotorescue@62 1901 width = "double",
Zerotorescue@62 1902 },
Zerotorescue@62 1903 type = {
Zerotorescue@62 1904 order = 20,
Zerotorescue@62 1905 type = "select",
Zerotorescue@62 1906 name = "Type (advanced)",
Zerotorescue@62 1907 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 1908 values = {
Zerotorescue@62 1909 ["Normal"] = "Normal",
Zerotorescue@62 1910 ["Virtual"] = "Virtual",
Zerotorescue@62 1911 },
Zerotorescue@62 1912 set = function(_, value) currentGroupType = value; end,
Zerotorescue@62 1913 get = function() return currentGroupType; end,
Zerotorescue@62 1914 },
Zerotorescue@62 1915 },
Zerotorescue@62 1916 },
Zerotorescue@62 1917 import = {
Zerotorescue@62 1918 order = 20,
Zerotorescue@62 1919 type = "group",
Zerotorescue@62 1920 inline = true,
Zerotorescue@62 1921 name = "Import a group",
Zerotorescue@62 1922 args = {
Zerotorescue@62 1923 input = {
Zerotorescue@62 1924 order = 10,
Zerotorescue@62 1925 type = "input",
Zerotorescue@62 1926 multiline = true,
Zerotorescue@62 1927 name = "Group data",
Zerotorescue@62 1928 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 1929 set = function(info, value)
Zerotorescue@62 1930 local data = { string.split("\n", value or "") };
Zerotorescue@62 1931
Zerotorescue@62 1932 for _, current in pairs(data) do
Zerotorescue@62 1933 if not AceSerializer then
Zerotorescue@62 1934 AceSerializer = LibStub("AceSerializer-3.0");
Zerotorescue@62 1935 end
Zerotorescue@62 1936
Zerotorescue@62 1937 local result, temp = AceSerializer:Deserialize(current);
Zerotorescue@62 1938
Zerotorescue@62 1939 if not temp.name then
Zerotorescue@62 1940 print("|cffff0000The provided data is not supported.|r");
Zerotorescue@62 1941 elseif ValidateGroupName(nil, temp.name) ~= true then
Zerotorescue@62 1942 print(("|cffff0000Aborting: A group named \"%s\" already exists.|r"):format(temp.name));
Zerotorescue@62 1943 else
Zerotorescue@62 1944 local name = temp.name;
Zerotorescue@62 1945 temp.name = nil;
Zerotorescue@62 1946 print(("Importing %s..."):format(name));
Zerotorescue@62 1947
Zerotorescue@62 1948 if temp.items then
Zerotorescue@62 1949 -- Remove items that are already in another group
Zerotorescue@62 1950 for value, _ in pairs(temp.items) do
Zerotorescue@62 1951 local itemId = tonumber(value);
Zerotorescue@62 1952
Zerotorescue@76 1953 local itemData = addon.ItemData:New(itemId);
Zerotorescue@76 1954
Zerotorescue@62 1955 if not itemId then
Zerotorescue@62 1956 print(("\"%s\" is not a number."):format(value));
Zerotorescue@62 1957 temp.items[value] = nil;
Zerotorescue@76 1958 elseif itemData:InGroup() then
Zerotorescue@76 1959 print(("Skipping %s as it is already in the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup() ));
Zerotorescue@62 1960 temp.items[value] = nil;
Zerotorescue@62 1961 else
Zerotorescue@62 1962 -- Ensure the keys are numeric
Zerotorescue@62 1963 temp.items[value] = nil;
Zerotorescue@62 1964 temp.items[itemId] = true;
Zerotorescue@62 1965 end
Zerotorescue@62 1966 end
Zerotorescue@62 1967 end
Zerotorescue@62 1968
Zerotorescue@62 1969 -- 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 1970 temp.trackAtCharacters = nil;
Zerotorescue@62 1971 temp.overrideTrackAtCharacters = nil;
Zerotorescue@62 1972
Zerotorescue@62 1973 addon.db.profile.groups[name] = temp;
Zerotorescue@62 1974 end
Zerotorescue@62 1975 end
Zerotorescue@62 1976
Zerotorescue@62 1977 self:FillGroupOptions();
Zerotorescue@62 1978 end,
Zerotorescue@62 1979 get = false,
Zerotorescue@62 1980 width = "full",
Zerotorescue@62 1981 },
Zerotorescue@62 1982 },
Zerotorescue@62 1983 },
Zerotorescue@62 1984 },
Zerotorescue@62 1985 };
Zerotorescue@62 1986 end
Zerotorescue@62 1987
Zerotorescue@62 1988 function mod:FillGroupOptions()
Zerotorescue@62 1989 for id, name in pairs(groupIdToName) do
Zerotorescue@62 1990 if type(name) == "string" and not addon.db.profile.groups[name] then
Zerotorescue@62 1991 options.args.groups.args[id] = nil;
Zerotorescue@62 1992 groupIdToName[id] = nil;
Zerotorescue@62 1993 groupIdToName[name] = nil;
Zerotorescue@62 1994 groupIsVirtual[id] = nil;
Zerotorescue@62 1995 end
Zerotorescue@62 1996 end
Zerotorescue@62 1997
Zerotorescue@62 1998 for name, values in pairs(addon.db.profile.groups) do
Zerotorescue@62 1999 if not groupIdToName[name] then
Zerotorescue@62 2000 options.args.groups.args[tostring(count)] = defaultGroup;
Zerotorescue@62 2001
Zerotorescue@62 2002 groupIdToName[tostring(count)] = name;
Zerotorescue@62 2003 groupIdToName[name] = true;
Zerotorescue@62 2004 if values.isVirtual then
Zerotorescue@62 2005 groupIsVirtual[tostring(count)] = true;
Zerotorescue@62 2006 end
Zerotorescue@62 2007
Zerotorescue@62 2008 count = ( count + 1 );
Zerotorescue@62 2009 end
Zerotorescue@62 2010 end
Zerotorescue@62 2011 end
Zerotorescue@65 2012
Zerotorescue@65 2013
Zerotorescue@65 2014
Zerotorescue@65 2015
Zerotorescue@65 2016
Zerotorescue@65 2017
Zerotorescue@65 2018 -- Verify premade groups
Zerotorescue@65 2019
Zerotorescue@65 2020 function mod:PremadeGroupsCheck(updateGroupName, updateKey, accept)
Zerotorescue@65 2021 -- Compare the current premade groups with those used, notify about changes
Zerotorescue@65 2022 if addon.defaultGroups then
Zerotorescue@65 2023 for premadeGroupName, groupInfo in pairs(addon.defaultGroups) do
Zerotorescue@65 2024 -- Go through all default groups
Zerotorescue@65 2025
Zerotorescue@65 2026 for groupName, values in pairs(addon.db.profile.groups) do
Zerotorescue@65 2027 -- Go through all groups to find those with this premade group
Zerotorescue@65 2028
Zerotorescue@65 2029 if values.premadeGroups and values.premadeGroups[premadeGroupName] and values.premadeGroups[premadeGroupName] < groupInfo.version then
Zerotorescue@65 2030 -- Outdated group
Zerotorescue@65 2031
Zerotorescue@65 2032 if updateGroupName and updateKey then
Zerotorescue@65 2033 -- This function was called after pressing yes or no in a confirm box
Zerotorescue@65 2034
Zerotorescue@65 2035 if accept then
Zerotorescue@65 2036 -- Yes was clicked
Zerotorescue@65 2037
Zerotorescue@65 2038 for itemId, version in pairs(groupInfo.items) do
Zerotorescue@65 2039 -- Go through all items in this premade group
Zerotorescue@65 2040
Zerotorescue@76 2041 local itemData = addon.ItemData:New(itemId);
Zerotorescue@76 2042
Zerotorescue@65 2043 if version > values.premadeGroups[premadeGroupName] then
Zerotorescue@65 2044 -- This item was added in a more recent version than this group: Add item
Zerotorescue@65 2045
Zerotorescue@76 2046 if itemData:InGroup() then
Zerotorescue@76 2047 print(("Skipping %s as it is already in the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup() ));
Zerotorescue@76 2048 elseif itemData:AddToGroup(groupName) then
Zerotorescue@76 2049 addon.Print(("Added %s found in the premade group |cfffed000%s|r to the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), premadeGroupName, itemData:InGroup() ), addon.Colors.Green);
Zerotorescue@65 2050 end
Zerotorescue@65 2051 elseif ( version * -1 ) > values.premadeGroups[premadeGroupName] then
Zerotorescue@76 2052 if itemData:InGroup() == groupName then
Zerotorescue@76 2053 itemData:RemoveFromGroup(groupName);
Zerotorescue@76 2054
Zerotorescue@76 2055 addon.Print(("Removed %s from the group |cfffed000%s|r as it was removed from the premade group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup(), premadeGroupName ), addon.Colors.Red);
Zerotorescue@65 2056 else
Zerotorescue@76 2057 print(("Skipping the removal of %s as it isn't in the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup() ));
Zerotorescue@65 2058 end
Zerotorescue@65 2059 end
Zerotorescue@65 2060 end
Zerotorescue@65 2061
Zerotorescue@76 2062 if AceConfigRegistry then
Zerotorescue@76 2063 -- Now rebuild the list
Zerotorescue@76 2064 AceConfigRegistry:NotifyChange("InventoriumOptions");
Zerotorescue@76 2065 end
Zerotorescue@76 2066
Zerotorescue@65 2067 -- Remember the new version
Zerotorescue@65 2068 values.premadeGroups[premadeGroupName] = groupInfo.version;
Zerotorescue@65 2069 else
Zerotorescue@65 2070 -- No was clicked
Zerotorescue@65 2071
Zerotorescue@65 2072 -- Let user know what was not added
Zerotorescue@65 2073 for itemId, version in pairs(groupInfo.items) do
Zerotorescue@65 2074 -- Go through all items in this premade group
Zerotorescue@65 2075
Zerotorescue@76 2076 local itemData = addon.ItemData:New(itemId);
Zerotorescue@76 2077
Zerotorescue@65 2078 if version > values.premadeGroups[premadeGroupName] then
Zerotorescue@65 2079 -- This item was added in a more recent version than this group: don't add (since we clicked no), but announce it
Zerotorescue@65 2080
Zerotorescue@76 2081 print(("Skipping %s found in the premade group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup() ));
Zerotorescue@65 2082 end
Zerotorescue@65 2083 end
Zerotorescue@65 2084
Zerotorescue@65 2085 -- Remember the new version
Zerotorescue@65 2086 values.premadeGroups[premadeGroupName] = groupInfo.version;
Zerotorescue@65 2087 end
Zerotorescue@65 2088 else
Zerotorescue@65 2089 StaticPopupDialogs["InventoriumConfirmUpdatePremadeGroup"] = {
Zerotorescue@65 2090 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 2091 button1 = YES,
Zerotorescue@65 2092 button2 = NO,
Zerotorescue@65 2093 OnAccept = function()
Zerotorescue@65 2094 addon:PremadeGroupsCheck(groupName, premadeGroupName, true);
Zerotorescue@65 2095 end,
Zerotorescue@65 2096 OnCancel = function(_, _, reason)
Zerotorescue@65 2097 if reason == "clicked" then
Zerotorescue@65 2098 addon:PremadeGroupsCheck(groupName, premadeGroupName, false);
Zerotorescue@65 2099 end
Zerotorescue@65 2100 end,
Zerotorescue@65 2101 timeout = 0,
Zerotorescue@65 2102 whileDead = 1,
Zerotorescue@65 2103 hideOnEscape = 1,
Zerotorescue@65 2104 };
Zerotorescue@65 2105 StaticPopup_Show("InventoriumConfirmUpdatePremadeGroup", premadeGroupName, groupName);
Zerotorescue@65 2106
Zerotorescue@65 2107 return;
Zerotorescue@65 2108 end
Zerotorescue@65 2109 end
Zerotorescue@65 2110 end
Zerotorescue@65 2111 end
Zerotorescue@65 2112 end
Zerotorescue@65 2113 end