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