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