annotate Modules/Config.lua @ 155:5081056cade1

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