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