farmbuyer@96
|
1 local addon = select(2,...)
|
farmbuyer@96
|
2 if addon.NOLOAD then return end
|
farmbuyer@96
|
3
|
farmbuyer@96
|
4 -- Don't bother recording any of this loot:
|
farmbuyer@96
|
5 addon.default_itemfilter = {
|
farmbuyer@97
|
6 [52190] = true, -- Inferno Ruby
|
farmbuyer@97
|
7 [52191] = true, -- Ocean Sapphire
|
farmbuyer@97
|
8 [52192] = true, -- Dream Emerald
|
farmbuyer@97
|
9 [52193] = true, -- Ember Topaz
|
farmbuyer@97
|
10 [52194] = true, -- Demonseye
|
farmbuyer@97
|
11 [52195] = true, -- Amberjewel
|
farmbuyer@97
|
12 [52722] = true, -- Maelstrom Crystal
|
farmbuyer@97
|
13 [71716] = true, -- Soothsayer's Runes
|
farmbuyer@96
|
14 -- could probably remove most of this now
|
farmbuyer@97
|
15 -- [29434] = true, -- Badge of Justice
|
farmbuyer@97
|
16 -- [40752] = true, -- Emblem of Heroism
|
farmbuyer@97
|
17 -- [40753] = true, -- Emblem of Valor
|
farmbuyer@97
|
18 -- [45624] = true, -- Emblem of Conquest
|
farmbuyer@97
|
19 -- [43228] = true, -- Stone Keeper's Shard
|
farmbuyer@97
|
20 -- [47241] = true, -- Emblem of Triumph
|
farmbuyer@97
|
21 -- [49426] = true, -- Emblem of Frost
|
farmbuyer@96
|
22 }
|
farmbuyer@96
|
23
|
farmbuyer@96
|
24 -- Mark these as straight to guild vault:
|
farmbuyer@96
|
25 addon.default_itemvault = {
|
farmbuyer@99
|
26 [52078] = true, -- Chaos Orb (Cata heroics)
|
farmbuyer@99
|
27 [69237] = true, -- Living Ember (Cata Firelands)
|
farmbuyer@99
|
28 [71998] = true, -- Essence of Destruction (Cata Dragon Soul)
|
farmbuyer@96
|
29 }
|
farmbuyer@96
|
30
|
farmbuyer@96
|
31 local options_tree = {
|
farmbuyer@96
|
32 {
|
farmbuyer@96
|
33 value = "pong",
|
farmbuyer@96
|
34 text = "Pongs",
|
farmbuyer@96
|
35 },
|
farmbuyer@96
|
36 {
|
farmbuyer@96
|
37 value = "basic",
|
farmbuyer@99
|
38 text = "Main Options",
|
farmbuyer@96
|
39 children = {
|
farmbuyer@96
|
40 {
|
farmbuyer@96
|
41 value = "filter",
|
farmbuyer@96
|
42 text = "Item Filters",
|
farmbuyer@96
|
43 },
|
farmbuyer@97
|
44 {
|
farmbuyer@97
|
45 value = "profiles",
|
farmbuyer@97
|
46 text = "Profiles",
|
farmbuyer@97
|
47 },
|
farmbuyer@96
|
48 },
|
farmbuyer@96
|
49 },
|
farmbuyer@99
|
50 'NEW INSERTIONS HERE', -- commenting this puts them all at the bottom
|
farmbuyer@96
|
51 {
|
farmbuyer@96
|
52 value = "adv",
|
farmbuyer@96
|
53 text = "Advanced/Debugging",
|
farmbuyer@96
|
54 },
|
farmbuyer@96
|
55 }
|
farmbuyer@96
|
56
|
farmbuyer@96
|
57
|
farmbuyer@96
|
58 --[[
|
farmbuyer@96
|
59 mkbutton ("WidgetType", 'display key', "Text On Widget", "mouseover status text")
|
farmbuyer@96
|
60 mkbutton ( [Button] 'display key', "Text On Widget", "mouseover status text")
|
farmbuyer@96
|
61 mkbutton ( [Button] [text] "Text On Widget", "mouseover status text")
|
farmbuyer@96
|
62 ]]
|
farmbuyer@96
|
63 local mkbutton = addon.gui_state_pointer.mkbutton
|
farmbuyer@96
|
64 local gui = addon.gui_state_pointer
|
farmbuyer@96
|
65 local AceGUI = LibStub("AceGUI-3.0")
|
farmbuyer@96
|
66 local flib = LibStub("LibFarmbuyer")
|
farmbuyer@96
|
67 local opts
|
farmbuyer@96
|
68
|
farmbuyer@99
|
69 local error, assert = addon.error, addon.assert
|
farmbuyer@99
|
70
|
farmbuyer@96
|
71 local function mktoggle (opt, label, width, desc, opt_func)
|
farmbuyer@96
|
72 local w = mkbutton("CheckBoxSmallLabel", nil, "", desc)
|
farmbuyer@96
|
73 w:SetRelativeWidth(width)
|
farmbuyer@96
|
74 w:SetType("checkbox")
|
farmbuyer@96
|
75 w:SetLabel(label)
|
farmbuyer@96
|
76 if opt then
|
farmbuyer@96
|
77 w:SetValue(opts[opt])
|
farmbuyer@96
|
78 w:SetCallback("OnValueChanged", opt_func or (function(_w,event,value)
|
farmbuyer@96
|
79 opts[opt] = value
|
farmbuyer@96
|
80 end))
|
farmbuyer@96
|
81 end
|
farmbuyer@96
|
82 return w
|
farmbuyer@96
|
83 end
|
farmbuyer@96
|
84
|
farmbuyer@97
|
85 local function spacer (height)
|
farmbuyer@97
|
86 local s = AceGUI:Create("Spacer")
|
farmbuyer@97
|
87 s:SetFullWidth(true)
|
farmbuyer@97
|
88 s:SetHeight(height)
|
farmbuyer@97
|
89 return s
|
farmbuyer@97
|
90 end
|
farmbuyer@97
|
91
|
farmbuyer@96
|
92 local function mktitle (txt)
|
farmbuyer@96
|
93 local t = AceGUI:Create("Label")
|
farmbuyer@96
|
94 t:SetFullWidth(true)
|
farmbuyer@96
|
95 t:SetColor (0.19, 0.68, 1) -- cff30adff
|
farmbuyer@96
|
96 t:SetFontObject(GameFontHighlightLarge)
|
farmbuyer@96
|
97 t:SetText(txt)
|
farmbuyer@97
|
98 return t, spacer(20)
|
farmbuyer@96
|
99 end
|
farmbuyer@96
|
100
|
farmbuyer@96
|
101 local function adv_careful_OnTextChanged (ebox,event,value)
|
farmbuyer@96
|
102 -- The EditBox widget's code will call an internal ShowButton routine
|
farmbuyer@96
|
103 -- after this callback returns. ShowButton will test for this flag:
|
farmbuyer@96
|
104 ebox:DisableButton (value == "")
|
farmbuyer@96
|
105 end
|
farmbuyer@96
|
106
|
farmbuyer@96
|
107
|
farmbuyer@96
|
108 ---------------
|
farmbuyer@96
|
109 -- All controls take a scrollframe container set to Flow layout.
|
farmbuyer@96
|
110 local controls = {}
|
farmbuyer@96
|
111 controls.pong = function (container)
|
farmbuyer@96
|
112 container:AddChildren(mktitle[[Echoes from latest ping:]])
|
farmbuyer@96
|
113 addon.sender_list.sort()
|
farmbuyer@96
|
114 if #addon.sender_list.namesI > 0 then
|
farmbuyer@96
|
115 local w = AceGUI:Create("Label")
|
farmbuyer@96
|
116 w:SetFullWidth(true)
|
farmbuyer@96
|
117 w:SetText(table.concat(addon.sender_list.namesI,'\n')) -- sigh
|
farmbuyer@96
|
118 container:AddChild(w)
|
farmbuyer@96
|
119 end
|
farmbuyer@96
|
120 end
|
farmbuyer@96
|
121
|
farmbuyer@96
|
122
|
farmbuyer@96
|
123 ---------------
|
farmbuyer@96
|
124 controls.basic = function (container)
|
farmbuyer@96
|
125 container:AddChildren(mktitle[[Account Options (saved across sessions)]])
|
farmbuyer@96
|
126
|
farmbuyer@96
|
127 container:PauseLayout()
|
farmbuyer@96
|
128 local w
|
farmbuyer@96
|
129 local stdw = 0.99 -- standard width
|
farmbuyer@96
|
130
|
farmbuyer@96
|
131 -- the nubtoggle!
|
farmbuyer@96
|
132 w = mktoggle('gui_noob', [[Show UI Tips]], stdw,
|
farmbuyer@96
|
133 [[Toggles display of the "helpful tips" box hanging off the right side. Useful if you've just installed/upgraded.]])
|
farmbuyer@96
|
134 container:AddChild(w)
|
farmbuyer@96
|
135
|
farmbuyer@96
|
136 -- reminder popup
|
farmbuyer@96
|
137 w = mktoggle('popup_on_join', "Show reminder popup on new raid", stdw,
|
farmbuyer@96
|
138 [[When joining a raid and not already tracking, display a dialog asking for instructions.]])
|
farmbuyer@96
|
139 container:AddChild(w)
|
farmbuyer@96
|
140
|
farmbuyer@96
|
141 -- toggle scroll-to-bottom on first tab
|
farmbuyer@96
|
142 w = mktoggle('scroll_to_bottom', "Scroll to bottom when opening display", stdw,
|
farmbuyer@96
|
143 [[Scroll to the bottom of the loot window (most recent entries) when displaying the GUI.]])
|
farmbuyer@96
|
144 container:AddChild(w)
|
farmbuyer@96
|
145
|
farmbuyer@96
|
146 -- chatty boss mode
|
farmbuyer@96
|
147 w = mktoggle('chatty_on_kill', "Be chatty on boss kill", stdw,
|
farmbuyer@96
|
148 [[Print something to chat output when the boss mod tells Ouro Loot about a successful boss kill.]])
|
farmbuyer@96
|
149 container:AddChild(w)
|
farmbuyer@96
|
150
|
farmbuyer@96
|
151 -- less noise in main panel
|
farmbuyer@96
|
152 w = mktoggle('no_tracking_wipes', "Do not track wipes", stdw,
|
farmbuyer@96
|
153 [[Do not add 'wipe' entries on the main loot grid, or generate any text for them.]])
|
farmbuyer@96
|
154 container:AddChild(w)
|
farmbuyer@96
|
155
|
farmbuyer@96
|
156 -- cutesy abbrevs
|
farmbuyer@96
|
157 w = mktoggle('snarky_boss', "Use snarky boss names", stdw,
|
farmbuyer@96
|
158 [[Irreverent replacement names for boss events. See abbreviations.lua for details.]])
|
farmbuyer@96
|
159 container:AddChild(w)
|
farmbuyer@96
|
160
|
farmbuyer@96
|
161 -- LOD plugins in all cases
|
farmbuyer@96
|
162 w = mktoggle('display_disabled_LODs', "Include disabled plugins", stdw,
|
farmbuyer@96
|
163 [[Show loadable plugins even if they've been disabled (and offer to enable them). Relog to take effect.]])
|
farmbuyer@96
|
164 container:AddChild(w)
|
farmbuyer@96
|
165
|
farmbuyer@96
|
166 -- showing the "(from Rebroadcasterdude)" in the notes column
|
farmbuyer@96
|
167 w = mktoggle('display_bcast_from', "Show rebroadcasting player", stdw,
|
farmbuyer@96
|
168 [[Include "from PlayerName" in the Notes column for loot that was broadcast to you. (Not included in forum output).]],
|
farmbuyer@96
|
169 function(_w,_e,value)
|
farmbuyer@96
|
170 opts.display_bcast_from = value
|
farmbuyer@96
|
171 addon.loot_clean = nil
|
farmbuyer@96
|
172 end)
|
farmbuyer@96
|
173 container:AddChild(w)
|
farmbuyer@96
|
174
|
farmbuyer@96
|
175 -- prefilling g_uniques with history
|
farmbuyer@96
|
176 w = mktoggle('precache_history_uniques', "Prescan for faster handling", stdw,
|
farmbuyer@96
|
177 [[See description under +Help -- Handy Tips -- Prescanning> for instructions.]])
|
farmbuyer@96
|
178 container:AddChild(w)
|
farmbuyer@96
|
179
|
farmbuyer@97
|
180 container:AddChild(spacer(10))
|
farmbuyer@96
|
181 -- possible keybindings
|
farmbuyer@96
|
182 do
|
farmbuyer@96
|
183 local pair = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
184 pair:SetLayout("List")
|
farmbuyer@96
|
185 pair:SetRelativeWidth(0.49)
|
farmbuyer@96
|
186 pair:SetTitle("Keybinding for '/ouroloot'")
|
farmbuyer@96
|
187 local editbox, checkbox
|
farmbuyer@96
|
188 editbox = mkbutton("EditBox", nil, opts.keybinding_text,
|
farmbuyer@96
|
189 [[Keybinding text format is fragile! (All caps, ALT then CTRL then SHIFT.) Relog to take effect.]])
|
farmbuyer@96
|
190 editbox:SetFullWidth(true)
|
farmbuyer@96
|
191 editbox:SetLabel("Keybinding text")
|
farmbuyer@96
|
192 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
193 opts.keybinding_text = value
|
farmbuyer@96
|
194 end)
|
farmbuyer@96
|
195 editbox:SetDisabled(not opts.keybinding)
|
farmbuyer@96
|
196 checkbox = mktoggle('keybinding', "Register keybinding", 1,
|
farmbuyer@96
|
197 [[Register a keybinding to toggle the loot display. Relog to take effect.]],
|
farmbuyer@96
|
198 function (_w,_,value)
|
farmbuyer@96
|
199 opts.keybinding = value
|
farmbuyer@96
|
200 editbox:SetDisabled(not opts.keybinding)
|
farmbuyer@96
|
201 end)
|
farmbuyer@96
|
202 checkbox:SetFullWidth(true)
|
farmbuyer@96
|
203 pair:AddChild(checkbox)
|
farmbuyer@96
|
204 pair:AddChild(editbox)
|
farmbuyer@96
|
205 container:AddChild(pair)
|
farmbuyer@96
|
206 end
|
farmbuyer@96
|
207
|
farmbuyer@96
|
208 -- replacement for slashloot
|
farmbuyer@96
|
209 do
|
farmbuyer@96
|
210 local pair = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
211 pair:SetLayout("List")
|
farmbuyer@96
|
212 pair:SetRelativeWidth(0.49)
|
farmbuyer@96
|
213 pair:SetTitle('Synonyms for "/ouroloot"')
|
farmbuyer@96
|
214 local editbox, checkbox
|
farmbuyer@96
|
215 editbox = mkbutton("EditBox", nil, opts.slash_synonyms,
|
farmbuyer@96
|
216 [[Separate multiple synonyms with a comma. Relog to take effect.]])
|
farmbuyer@96
|
217 editbox:SetFullWidth(true)
|
farmbuyer@96
|
218 editbox:SetLabel("Slash commands")
|
farmbuyer@96
|
219 editbox:SetCallback("OnEnterPressed", function(_e,event,value)
|
farmbuyer@96
|
220 -- Do the sanity checking here rather than at each login.
|
farmbuyer@96
|
221 -- This is not foolproof. That's okay.
|
farmbuyer@96
|
222 local t = { strsplit(',', tostring(value)) }
|
farmbuyer@96
|
223 for k,v in ipairs(t) do
|
farmbuyer@96
|
224 v = v:trim()
|
farmbuyer@96
|
225 if v:sub(1,1) ~= "/" then
|
farmbuyer@96
|
226 v = "/" .. v
|
farmbuyer@96
|
227 end
|
farmbuyer@96
|
228 t[k] = v
|
farmbuyer@96
|
229 end
|
farmbuyer@96
|
230 value = table.concat(t,',')
|
farmbuyer@96
|
231 _e:SetText(value)
|
farmbuyer@96
|
232 opts.slash_synonyms = value
|
farmbuyer@96
|
233 end)
|
farmbuyer@96
|
234 editbox:SetDisabled(not opts.register_slash_synonyms)
|
farmbuyer@96
|
235 checkbox = mktoggle('register_slash_synonyms', "Register slash commands", 1,
|
farmbuyer@96
|
236 [[Register these slash commands as synonyms for "/ouroloot". Relog to take effect.]],
|
farmbuyer@96
|
237 function (_w,_,value)
|
farmbuyer@96
|
238 opts.register_slash_synonyms = value
|
farmbuyer@96
|
239 editbox:SetDisabled(not opts.register_slash_synonyms)
|
farmbuyer@96
|
240 end)
|
farmbuyer@96
|
241 checkbox:SetFullWidth(true)
|
farmbuyer@96
|
242 pair:AddChild(checkbox)
|
farmbuyer@96
|
243 pair:AddChild(editbox)
|
farmbuyer@96
|
244 container:AddChild(pair)
|
farmbuyer@96
|
245 end
|
farmbuyer@96
|
246
|
farmbuyer@96
|
247 -- chatty disposition/assignment changes
|
farmbuyer@97
|
248 container:AddChild(spacer(10))
|
farmbuyer@96
|
249 do
|
farmbuyer@96
|
250 local chatgroup = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
251 chatgroup:SetLayout("List")
|
farmbuyer@96
|
252 chatgroup:SetRelativeWidth(0.75)
|
farmbuyer@96
|
253 chatgroup:SetTitle("Remote Changes Chat")
|
farmbuyer@96
|
254 local toggle, editbox
|
farmbuyer@96
|
255 toggle = mktoggle('chatty_on_remote_changes', "Be chatty on remote changes", 1,
|
farmbuyer@96
|
256 [[Print something to chat when other users change recorded loot.]],
|
farmbuyer@96
|
257 function (_w,_,value)
|
farmbuyer@96
|
258 opts.chatty_on_remote_changes = value
|
farmbuyer@96
|
259 editbox:SetDisabled(not opts.chatty_on_remote_changes)
|
farmbuyer@96
|
260 end)
|
farmbuyer@96
|
261 toggle:SetFullWidth(true)
|
farmbuyer@96
|
262 chatgroup:AddChild(toggle)
|
farmbuyer@96
|
263 w = AceGUI:Create("Label")
|
farmbuyer@96
|
264 w:SetFullWidth(true)
|
farmbuyer@96
|
265 w:SetText("This controls the output of the |cff00ffff'Be chatty on remote changes'|r option. If this field is a number, it designates which chat frame to use. Otherwise it is the Lua variable name of a frame with AddMessage capability.")
|
farmbuyer@96
|
266 chatgroup:AddChild(w)
|
farmbuyer@96
|
267 editbox = mkbutton("EditBox", nil, opts.chatty_on_remote_changes_frame,
|
farmbuyer@96
|
268 [[1 = default chat frame, 2 = combat log, etc]])
|
farmbuyer@96
|
269 editbox:SetFullWidth(true)
|
farmbuyer@96
|
270 editbox:SetLabel("Output Chatframe")
|
farmbuyer@96
|
271 editbox:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
272 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
273 local prev = opts.chatty_on_remote_changes_frame
|
farmbuyer@96
|
274 value = value:trim()
|
farmbuyer@96
|
275 value = tonumber(value) or value
|
farmbuyer@96
|
276 if addon:_set_remote_change_chatframe (value) then
|
farmbuyer@96
|
277 opts.chatty_on_remote_changes_frame = value
|
farmbuyer@96
|
278 _w:SetText(tostring(value))
|
farmbuyer@96
|
279 _w.editbox:ClearFocus()
|
farmbuyer@96
|
280 else
|
farmbuyer@96
|
281 _w:SetText(tostring(prev))
|
farmbuyer@96
|
282 end
|
farmbuyer@96
|
283 end)
|
farmbuyer@96
|
284 editbox:SetDisabled(not opts.chatty_on_remote_changes)
|
farmbuyer@96
|
285 chatgroup:AddChild(editbox)
|
farmbuyer@96
|
286 w = mkbutton("Chat Frame Numbers",
|
farmbuyer@96
|
287 [[Print each chat window number in its own frame, for easy reference in the editing field.]])
|
farmbuyer@96
|
288 w:SetFullWidth(true)
|
farmbuyer@96
|
289 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
290 for i = 1, NUM_CHAT_WINDOWS do
|
farmbuyer@96
|
291 local cf = _G['ChatFrame'..i]
|
farmbuyer@96
|
292 if not cf then break end
|
farmbuyer@96
|
293 addon:CFPrint (cf, "This is frame number |cffff0000%d|r.", i)
|
farmbuyer@96
|
294 end
|
farmbuyer@96
|
295 end)
|
farmbuyer@96
|
296 chatgroup:AddChild(w)
|
farmbuyer@96
|
297 container:AddChild(chatgroup)
|
farmbuyer@96
|
298 end
|
farmbuyer@96
|
299
|
farmbuyer@96
|
300 -- boss mod selection
|
farmbuyer@97
|
301 container:AddChild(spacer(2))
|
farmbuyer@96
|
302 do
|
farmbuyer@96
|
303 local list = {}
|
farmbuyer@96
|
304 local current
|
farmbuyer@96
|
305 for k,v in ipairs(addon.bossmods) do
|
farmbuyer@96
|
306 list[k] = v.n
|
farmbuyer@96
|
307 if v.n == opts.bossmod then
|
farmbuyer@96
|
308 current = k
|
farmbuyer@96
|
309 end
|
farmbuyer@96
|
310 end
|
farmbuyer@96
|
311 w = mkbutton("Dropdown", nil, "", [[Which 'boss mod' to use.]])
|
farmbuyer@96
|
312 w:SetRelativeWidth(0.3)
|
farmbuyer@96
|
313 w:SetLabel("Boss Mod:")
|
farmbuyer@96
|
314 w:SetList(list)
|
farmbuyer@96
|
315 w:SetValue(current)
|
farmbuyer@96
|
316 w:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@96
|
317 opts.bossmod = list[choice]
|
farmbuyer@96
|
318 end)
|
farmbuyer@96
|
319 container:AddChild(w)
|
farmbuyer@96
|
320 end
|
farmbuyer@96
|
321
|
farmbuyer@96
|
322 container:ResumeLayout()
|
farmbuyer@96
|
323 container:DoLayout()
|
farmbuyer@96
|
324 AceGUI:ClearFocus()
|
farmbuyer@96
|
325 end
|
farmbuyer@96
|
326
|
farmbuyer@96
|
327
|
farmbuyer@96
|
328 ---------------
|
farmbuyer@96
|
329 do
|
farmbuyer@97
|
330 local description = [[These control automatic handling of specific items when they are looted. "Item filter" is a list of items to ignore. "Vault items" is a list of items to mark as going to the guild vault (as if you had chosen "Mark as guild vault" from the Loot tab).
|
farmbuyer@97
|
331
|
farmbuyer@97
|
332 Proper use of these lists can avoid a lot of noise and tedious clicking during or after a raid. You will probably need to add/remove entries as you advance between expansions and tiers.]]
|
farmbuyer@97
|
333 local defaultstext = [[Clicking this button adds some reasonable defaults to your item lists. (This was done once automatically, the first time you loaded Ouro Loot, but you can delete them at any time.)]]
|
farmbuyer@97
|
334
|
farmbuyer@96
|
335 local warntext = [[At least one of the items in the filter list was not in your game client's cache. This is okay. Just wait a few seconds, display some other Ouro Loot tab or panel, and then display the Item Filters again.]]
|
farmbuyer@96
|
336 local cache_warn, cache_warned = false, false
|
farmbuyer@96
|
337 local function do_warning (cnt)
|
farmbuyer@96
|
338 if cache_warn and not cache_warned then
|
farmbuyer@96
|
339 cache_warned = true
|
farmbuyer@96
|
340 addon:Print(warntext)
|
farmbuyer@96
|
341 local t = AceGUI:Create("Label")
|
farmbuyer@96
|
342 t:SetFullWidth(true)
|
farmbuyer@96
|
343 t:SetText(warntext)
|
farmbuyer@96
|
344 cnt:AddChild(t)
|
farmbuyer@96
|
345 end
|
farmbuyer@96
|
346 end
|
farmbuyer@96
|
347
|
farmbuyer@96
|
348 controls.basic_filter = function (container)
|
farmbuyer@96
|
349 container:AddChildren(mktitle[[Item-Specific Special Handling]])
|
farmbuyer@96
|
350
|
farmbuyer@97
|
351 local w = AceGUI:Create("Label")
|
farmbuyer@97
|
352 w:SetFullWidth(true)
|
farmbuyer@97
|
353 w:SetText(description)
|
farmbuyer@97
|
354 container:AddChild(w)
|
farmbuyer@97
|
355 container:AddChild(spacer(20))
|
farmbuyer@97
|
356
|
farmbuyer@96
|
357 cache_warn, cache_warned = false, false
|
farmbuyer@96
|
358 local filterlist, vaultlist = {}, {}
|
farmbuyer@96
|
359 for id in pairs(opts.itemfilter) do
|
farmbuyer@96
|
360 local iname, _, iquality = GetItemInfo(id)
|
farmbuyer@96
|
361 if iname then
|
farmbuyer@96
|
362 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
363 else
|
farmbuyer@96
|
364 filterlist[id] = id
|
farmbuyer@96
|
365 cache_warn = true
|
farmbuyer@96
|
366 end
|
farmbuyer@96
|
367 end
|
farmbuyer@96
|
368 for id in pairs(opts.itemvault) do
|
farmbuyer@96
|
369 local iname, _, iquality = GetItemInfo(id)
|
farmbuyer@96
|
370 if iname then
|
farmbuyer@96
|
371 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
372 else
|
farmbuyer@96
|
373 vaultlist[id] = id
|
farmbuyer@96
|
374 cache_warn = true
|
farmbuyer@96
|
375 end
|
farmbuyer@96
|
376 end
|
farmbuyer@97
|
377 -- This is so that the "add all defaults" button will never, ever,
|
farmbuyer@97
|
378 -- trip over cache misses.
|
farmbuyer@97
|
379 for id in pairs(addon.default_itemfilter) do GetItemInfo(id) end
|
farmbuyer@97
|
380 for id in pairs(addon.default_itemvault) do GetItemInfo(id) end
|
farmbuyer@96
|
381
|
farmbuyer@97
|
382 w = AceGUI:Create("EditBoxDropDown")
|
farmbuyer@96
|
383 w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
384 w:SetText("Item filter")
|
farmbuyer@96
|
385 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
|
farmbuyer@96
|
386 w:SetList(filterlist)
|
farmbuyer@96
|
387 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
|
farmbuyer@96
|
388 local iname, ilink, iquality = GetItemInfo(text:trim())
|
farmbuyer@96
|
389 if not iname then
|
farmbuyer@96
|
390 return addon:Print("Error: %s is not a valid item name/link!", text)
|
farmbuyer@96
|
391 end
|
farmbuyer@96
|
392 local id = tonumber(ilink:match("item:(%d+)"))
|
farmbuyer@96
|
393 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
394 opts.itemfilter[id] = true
|
farmbuyer@96
|
395 addon:Print("Now filtering out", ilink)
|
farmbuyer@96
|
396 end)
|
farmbuyer@96
|
397 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
|
farmbuyer@96
|
398 --local ilink = select(2,GetItemInfo(key_id))
|
farmbuyer@96
|
399 opts.itemfilter[tonumber(key_id)] = nil
|
farmbuyer@96
|
400 --addon:Print("No longer filtering out", ilink)
|
farmbuyer@96
|
401 addon:Print("No longer filtering out", val_name)
|
farmbuyer@96
|
402 end)
|
farmbuyer@96
|
403 --w:SetCallback("OnDropdownShown",do_warning)
|
farmbuyer@96
|
404 w:SetCallback("OnDropdownShown", function()
|
farmbuyer@96
|
405 do_warning(container)
|
farmbuyer@96
|
406 end)
|
farmbuyer@96
|
407 container:AddChild(w)
|
farmbuyer@96
|
408
|
farmbuyer@96
|
409 w = AceGUI:Create("Spacer")
|
farmbuyer@96
|
410 w:SetRelativeWidth(0.1)
|
farmbuyer@96
|
411 w:SetHeight(2)
|
farmbuyer@96
|
412 container:AddChild(w)
|
farmbuyer@96
|
413
|
farmbuyer@96
|
414 w = AceGUI:Create("EditBoxDropDown")
|
farmbuyer@96
|
415 w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
416 w:SetText("Vault items")
|
farmbuyer@96
|
417 w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.")
|
farmbuyer@96
|
418 w:SetList(vaultlist)
|
farmbuyer@96
|
419 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
|
farmbuyer@96
|
420 local iname, ilink, iquality = GetItemInfo(text:trim())
|
farmbuyer@96
|
421 if not iname then
|
farmbuyer@96
|
422 return addon:Print("Error: %s is not a valid item name/link!", text)
|
farmbuyer@96
|
423 end
|
farmbuyer@96
|
424 local id = tonumber(ilink:match("item:(%d+)"))
|
farmbuyer@96
|
425 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
426 opts.itemvault[id] = true
|
farmbuyer@96
|
427 addon:Print("Now auto-vaulting", ilink)
|
farmbuyer@96
|
428 end)
|
farmbuyer@96
|
429 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
|
farmbuyer@96
|
430 --local ilink = select(2,GetItemInfo(key_id))
|
farmbuyer@96
|
431 opts.itemfilter[tonumber(key_id)] = nil
|
farmbuyer@96
|
432 --addon:Print("No longer filtering out", ilink)
|
farmbuyer@96
|
433 addon:Print("No longer auto-vaulting", val_name)
|
farmbuyer@96
|
434 end)
|
farmbuyer@96
|
435 w:SetCallback("OnDropdownShown",do_warning)
|
farmbuyer@96
|
436 container:AddChild(w)
|
farmbuyer@97
|
437
|
farmbuyer@97
|
438 local function MAYBE_ADD (destname, dest, id)
|
farmbuyer@97
|
439 local name, link = GetItemInfo(id)
|
farmbuyer@97
|
440 if not name then
|
farmbuyer@97
|
441 addon:Print("> No data on ID %d, this may be a bug.",id)
|
farmbuyer@97
|
442 return
|
farmbuyer@97
|
443 end
|
farmbuyer@97
|
444 if dest[id] then
|
farmbuyer@97
|
445 addon:Print("> Skipping %s as it's already in '%s' list.",
|
farmbuyer@97
|
446 link, destname)
|
farmbuyer@97
|
447 else
|
farmbuyer@97
|
448 dest[id] = true
|
farmbuyer@97
|
449 addon:Print("> Added %s to '%s' list.", link, destname)
|
farmbuyer@97
|
450 end
|
farmbuyer@97
|
451 end
|
farmbuyer@97
|
452
|
farmbuyer@97
|
453 container:AddChild(spacer(40))
|
farmbuyer@97
|
454 w = AceGUI:Create("Label")
|
farmbuyer@97
|
455 w:SetFullWidth(true)
|
farmbuyer@97
|
456 w:SetText(defaultstext)
|
farmbuyer@97
|
457 container:AddChild(w)
|
farmbuyer@97
|
458 w = AceGUI:Create("Button")
|
farmbuyer@97
|
459 w:SetRelativeWidth(0.4)
|
farmbuyer@97
|
460 w:SetText[[Add Default Entries]]
|
farmbuyer@97
|
461 w:SetCallback("OnClick", function()
|
farmbuyer@97
|
462 for id in pairs(addon.default_itemfilter) do
|
farmbuyer@97
|
463 MAYBE_ADD ("filter", opts.itemfilter, id)
|
farmbuyer@97
|
464 end
|
farmbuyer@97
|
465 for id in pairs(addon.default_itemvault) do
|
farmbuyer@97
|
466 MAYBE_ADD ("vault", opts.itemvault, id)
|
farmbuyer@97
|
467 end
|
farmbuyer@97
|
468 addon:redisplay()
|
farmbuyer@97
|
469 end)
|
farmbuyer@97
|
470 container:AddChild(w)
|
farmbuyer@97
|
471 end
|
farmbuyer@97
|
472 end
|
farmbuyer@97
|
473
|
farmbuyer@97
|
474
|
farmbuyer@97
|
475 ---------------
|
farmbuyer@97
|
476 do
|
farmbuyer@97
|
477 local profiles
|
farmbuyer@97
|
478 controls.basic_profiles = function (container)
|
farmbuyer@97
|
479 if not profiles then
|
farmbuyer@97
|
480 profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(addon.db)
|
farmbuyer@97
|
481 LibStub("AceConfig-3.0"):RegisterOptionsTable("OuroLootProfiles", profiles)
|
farmbuyer@97
|
482 end
|
farmbuyer@97
|
483 LibStub("AceConfigDialog-3.0"):Open ("OuroLootProfiles", container)
|
farmbuyer@96
|
484 end
|
farmbuyer@96
|
485 end
|
farmbuyer@96
|
486
|
farmbuyer@96
|
487
|
farmbuyer@96
|
488 ---------------
|
farmbuyer@96
|
489 local adv_real = function (container)
|
farmbuyer@96
|
490 container:AddChildren(mktitle[[Debugging Options (not saved across sessions)]])
|
farmbuyer@96
|
491
|
farmbuyer@96
|
492 container:PauseLayout()
|
farmbuyer@96
|
493 local w
|
farmbuyer@96
|
494
|
farmbuyer@96
|
495 do
|
farmbuyer@96
|
496 local grp = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
497 grp:SetLayout("List")
|
farmbuyer@96
|
498 grp:SetRelativeWidth(0.60)
|
farmbuyer@96
|
499 grp:SetTitle("Output of debugging messages")
|
farmbuyer@96
|
500
|
farmbuyer@96
|
501 w = AceGUI:Create("CheckBoxSmallLabel")
|
farmbuyer@96
|
502 w:SetFullWidth(true)
|
farmbuyer@96
|
503 w:SetType("checkbox")
|
farmbuyer@96
|
504 w:SetLabel("master toggle")
|
farmbuyer@96
|
505 w:SetValue(addon.DEBUG_PRINT)
|
farmbuyer@96
|
506 w:SetCallback("OnValueChanged", function(_w,event,value)
|
farmbuyer@96
|
507 addon.DEBUG_PRINT = value
|
farmbuyer@96
|
508 addon:redisplay()
|
farmbuyer@96
|
509 end)
|
farmbuyer@96
|
510 grp:AddChild(w)
|
farmbuyer@96
|
511 for d,v in pairs(addon.debug) do
|
farmbuyer@96
|
512 w = AceGUI:Create("CheckBoxSmallLabel")
|
farmbuyer@96
|
513 w:SetFullWidth(true)
|
farmbuyer@96
|
514 w:SetType("checkbox")
|
farmbuyer@96
|
515 w:SetLabel(d)
|
farmbuyer@96
|
516 if d == "notraid" then
|
farmbuyer@96
|
517 w:SetDescription[[Tick this before enabling to make the addon work outside of raid groups]]
|
farmbuyer@96
|
518 else
|
farmbuyer@96
|
519 if d == "alsolog" then
|
farmbuyer@96
|
520 w:SetDescription[[Also log all debug messages to disk. See print_log.lua in the addon folder for later viewing.]]
|
farmbuyer@96
|
521 end
|
farmbuyer@96
|
522 w:SetDisabled(not addon.DEBUG_PRINT)
|
farmbuyer@96
|
523 end
|
farmbuyer@96
|
524 w:SetValue(v)
|
farmbuyer@100
|
525 w:SetCallback("OnValueChanged", function(_w,event,value)
|
farmbuyer@100
|
526 addon.debug[d] = value
|
farmbuyer@100
|
527 if d == "comm" then
|
farmbuyer@100
|
528 addon.is_guilded = _G.IsInGuild()
|
farmbuyer@100
|
529 end
|
farmbuyer@100
|
530 end)
|
farmbuyer@96
|
531 grp:AddChild(w)
|
farmbuyer@96
|
532 end
|
farmbuyer@96
|
533 container:AddChild(grp)
|
farmbuyer@96
|
534 end
|
farmbuyer@96
|
535
|
farmbuyer@96
|
536 do
|
farmbuyer@96
|
537 local simple = AceGUI:Create("SimpleGroup")
|
farmbuyer@96
|
538 simple:SetLayout("List")
|
farmbuyer@96
|
539 simple:SetRelativeWidth(0.35)
|
farmbuyer@96
|
540 w = AceGUI:Create("CheckBoxSmallLabel")
|
farmbuyer@96
|
541 --w:SetRelativeWidth(0.35)
|
farmbuyer@96
|
542 w:SetFullWidth(true)
|
farmbuyer@96
|
543 w:SetType("checkbox")
|
farmbuyer@96
|
544 w:SetLabel("GOP history mode")
|
farmbuyer@96
|
545 w:SetValue(addon.history_suppress)
|
farmbuyer@96
|
546 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end)
|
farmbuyer@96
|
547 simple:AddChild(w)
|
farmbuyer@96
|
548 w = mkbutton("Dropdown", nil, "",
|
farmbuyer@96
|
549 [[if active, tooltip shown when hovering over Item column only]])
|
farmbuyer@96
|
550 --w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
551 w:SetFullWidth(true)
|
farmbuyer@96
|
552 w:SetLabel("loot debugging tooltip")
|
farmbuyer@96
|
553 w:SetList{
|
farmbuyer@96
|
554 [1] = "Off",
|
farmbuyer@96
|
555 [2] = "/dump into tooltip",
|
farmbuyer@96
|
556 [3] = "small fixed fields",
|
farmbuyer@96
|
557 }
|
farmbuyer@96
|
558 w:SetValue(gui._do_debugging_tooltip or 1)
|
farmbuyer@96
|
559 w:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@96
|
560 gui._do_debugging_tooltip = choice > 1 and choice or nil
|
farmbuyer@96
|
561 end)
|
farmbuyer@96
|
562 simple:AddChild(w)
|
farmbuyer@96
|
563 container:AddChild(simple)
|
farmbuyer@96
|
564 end
|
farmbuyer@96
|
565
|
farmbuyer@97
|
566 container:AddChild(spacer(10))
|
farmbuyer@96
|
567
|
farmbuyer@96
|
568 w = mkbutton("EditBox", 'comm_ident', addon.ident,
|
farmbuyer@96
|
569 [[Set tracking to 'Disabled' in the top-right dropdown, then change this field (click Okay or press Enter).]])
|
farmbuyer@96
|
570 w:SetRelativeWidth(0.25)
|
farmbuyer@96
|
571 w:SetLabel("Addon channel ID")
|
farmbuyer@96
|
572 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
573 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
574 -- if they set it to blank spaces, they're boned. oh well.
|
farmbuyer@96
|
575 -- Re-enabling will take care of propogating this new value.
|
farmbuyer@96
|
576 addon.ident = (value == "") and "OuroLoot2" or value
|
farmbuyer@96
|
577 _w:SetText(addon.ident)
|
farmbuyer@96
|
578 addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.")
|
farmbuyer@96
|
579 end)
|
farmbuyer@96
|
580 w:SetDisabled(addon.enabled or addon.rebroadcast)
|
farmbuyer@96
|
581 container:AddChild(w)
|
farmbuyer@96
|
582
|
farmbuyer@96
|
583 w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache TTL]])
|
farmbuyer@96
|
584 w:SetRelativeWidth(0.1)
|
farmbuyer@96
|
585 w:SetLabel("ttl")
|
farmbuyer@96
|
586 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
587 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
588 value = tonumber(value) or addon.recent_messages.ttl
|
farmbuyer@96
|
589 addon.recent_messages.ttl = value
|
farmbuyer@96
|
590 _w:SetText(tostring(value))
|
farmbuyer@96
|
591 end)
|
farmbuyer@96
|
592 container:AddChild(w)
|
farmbuyer@96
|
593
|
farmbuyer@96
|
594 w = mkbutton("load nsaab1548", [[Cursed Darkhound]])
|
farmbuyer@96
|
595 w:SetRelativeWidth(0.25)
|
farmbuyer@96
|
596 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
597 for i, v in ipairs(DBM.AddOns) do
|
farmbuyer@96
|
598 if v.modId == "DBM-NotScaryAtAll" then
|
farmbuyer@96
|
599 DBM:LoadMod(v)
|
farmbuyer@96
|
600 break
|
farmbuyer@96
|
601 end
|
farmbuyer@96
|
602 end
|
farmbuyer@96
|
603 local mod = DBM:GetModByName("NotScaryAtAll")
|
farmbuyer@96
|
604 if mod then
|
farmbuyer@96
|
605 mod:EnableMod()
|
farmbuyer@96
|
606 addon:Print("Now tracking ID",mod.creatureId)
|
farmbuyer@96
|
607 else
|
farmbuyer@96
|
608 addon:Print("Can do nothing; DBM testing mod wasn't loaded.")
|
farmbuyer@96
|
609 end
|
farmbuyer@96
|
610 end)
|
farmbuyer@96
|
611 w:SetDisabled(addon.bossmod_registered ~= 'DBM')
|
farmbuyer@96
|
612 container:AddChild(w)
|
farmbuyer@96
|
613
|
farmbuyer@96
|
614 w = mkbutton("GC", [[full GC cycle]])
|
farmbuyer@96
|
615 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
616 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
617 local before = collectgarbage('count')
|
farmbuyer@96
|
618 collectgarbage('collect')
|
farmbuyer@96
|
619 local after = collectgarbage('count')
|
farmbuyer@96
|
620 addon:Print("Collected %d KB, %d KB still in use by Lua universe.", before-after, after)
|
farmbuyer@96
|
621 end)
|
farmbuyer@96
|
622 container:AddChild(w)
|
farmbuyer@96
|
623
|
farmbuyer@97
|
624 container:AddChild(spacer(3))
|
farmbuyer@96
|
625 do
|
farmbuyer@96
|
626 local simple = AceGUI:Create("SimpleGroup")
|
farmbuyer@96
|
627 simple:SetLayout("Flow")
|
farmbuyer@96
|
628 --simple:SetRelativeWidth(0.95)
|
farmbuyer@96
|
629 simple:SetFullWidth(true)
|
farmbuyer@96
|
630 w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]])
|
farmbuyer@96
|
631 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
632 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
633 PlaySoundFile ([[Sound\Music\WorldEvents\HordeFirepole.mp3]], "Master")
|
farmbuyer@96
|
634 end)
|
farmbuyer@96
|
635 simple:AddChild(w)
|
farmbuyer@96
|
636 w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]])
|
farmbuyer@96
|
637 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
638 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
639 PlaySoundFile ([[Sound\Music\WorldEvents\AllianceFirepole.mp3]], "Master")
|
farmbuyer@96
|
640 end)
|
farmbuyer@96
|
641 simple:AddChild(w)
|
farmbuyer@96
|
642 w = mkbutton("SFRR", [[test]])
|
farmbuyer@96
|
643 w:SetRelativeWidth(0.15)
|
farmbuyer@96
|
644 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
645 PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "Master")
|
farmbuyer@96
|
646 end)
|
farmbuyer@96
|
647 simple:AddChild(w)
|
farmbuyer@96
|
648
|
farmbuyer@96
|
649 container:AddChild(simple)
|
farmbuyer@96
|
650 end
|
farmbuyer@96
|
651
|
farmbuyer@96
|
652 w = AceGUI:Create("Spacer") w:SetRelativeWidth(0.65) w:SetHeight(15) container:AddChild(w)
|
farmbuyer@96
|
653 w = mkbutton("Clear All & Reload",
|
farmbuyer@96
|
654 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
|
farmbuyer@96
|
655 w:SetRelativeWidth(0.3)
|
farmbuyer@96
|
656 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
657 addon:_clear_SVs() -- reloads
|
farmbuyer@96
|
658 end)
|
farmbuyer@96
|
659 container:AddChild(w)
|
farmbuyer@96
|
660
|
farmbuyer@96
|
661 container:ResumeLayout()
|
farmbuyer@96
|
662 container:DoLayout()
|
farmbuyer@96
|
663 AceGUI:ClearFocus()
|
farmbuyer@96
|
664 --container:SetScroll(1000) -- scrollframe widget's max value
|
farmbuyer@96
|
665 end
|
farmbuyer@96
|
666
|
farmbuyer@96
|
667 -- Initial advanced panel function (unless debug mode is on during load, which
|
farmbuyer@96
|
668 -- means it was almost certainly hardcoded that way, which means it's probably
|
farmbuyer@96
|
669 -- me testing).
|
farmbuyer@97
|
670 if addon.DEBUG_PRINT then
|
farmbuyer@96
|
671 controls.adv = adv_real
|
farmbuyer@96
|
672 else
|
farmbuyer@96
|
673 controls.adv = function (container)
|
farmbuyer@96
|
674 local speedbump = AceGUI:Create("InteractiveLabel")
|
farmbuyer@96
|
675 speedbump:SetFullWidth(true)
|
farmbuyer@96
|
676 speedbump:SetFontObject(GameFontHighlightLarge)
|
farmbuyer@96
|
677 speedbump:SetImage[[Interface\DialogFrame\DialogAlertIcon]]
|
farmbuyer@96
|
678 speedbump:SetImageSize(50,50)
|
farmbuyer@96
|
679 speedbump:SetText[[The debugging/testing settings on the advanced panel can seriously bork up the addon if you make a mistake. If you're okay with the possibility of losing data, click this warning to load the panel.]]
|
farmbuyer@96
|
680 speedbump:SetCallback("OnClick", function (_sb)
|
farmbuyer@96
|
681 controls.adv = { adv_real }
|
farmbuyer@96
|
682 return addon:redisplay()
|
farmbuyer@96
|
683 end)
|
farmbuyer@96
|
684 container:AddChild(speedbump)
|
farmbuyer@96
|
685 end
|
farmbuyer@96
|
686 end
|
farmbuyer@96
|
687
|
farmbuyer@96
|
688
|
farmbuyer@96
|
689 ---------------
|
farmbuyer@96
|
690 -- Tab 6: Options
|
farmbuyer@96
|
691 do
|
farmbuyer@96
|
692 local funkified = {}
|
farmbuyer@96
|
693 for key,f in pairs(controls) do
|
farmbuyer@99
|
694 -- this is how TreeGroup makes unique keys out of nested entries
|
farmbuyer@96
|
695 local funkykey = key:gsub('_','\001')
|
farmbuyer@96
|
696 funkified[funkykey] = { f }
|
farmbuyer@96
|
697 end
|
farmbuyer@96
|
698 controls = funkified
|
farmbuyer@96
|
699 end
|
farmbuyer@96
|
700
|
farmbuyer@96
|
701 -- widget container status tables (will have things magically appear
|
farmbuyer@96
|
702 -- inside them that we wish to preserve)
|
farmbuyer@96
|
703 local status_for_scroll = {}
|
farmbuyer@96
|
704 local status_for_select = { treewidth = 160 }
|
farmbuyer@96
|
705
|
farmbuyer@97
|
706 local function preload()
|
farmbuyer@97
|
707 for id in pairs(opts.itemfilter) do GetItemInfo(id) end
|
farmbuyer@97
|
708 for id in pairs(opts.itemvault) do GetItemInfo(id) end
|
farmbuyer@97
|
709 preload = nil
|
farmbuyer@97
|
710 end
|
farmbuyer@97
|
711
|
farmbuyer@99
|
712 local aceconfig_list = {}
|
farmbuyer@99
|
713
|
farmbuyer@99
|
714 -- Selecting an entry on the left tree column.
|
farmbuyer@96
|
715 local opt_OnGroupSelected_func = function (treeg,event,category)
|
farmbuyer@98
|
716 opts = addon.db.profile
|
farmbuyer@96
|
717 local catfuncs = controls[category]
|
farmbuyer@96
|
718 if not catfuncs then
|
farmbuyer@96
|
719 addon:horrible_horrible_error(("Category '%s' has no handler function!"):format(category:gsub('\001','_')))
|
farmbuyer@96
|
720 end
|
farmbuyer@96
|
721 treeg:ReleaseChildren()
|
farmbuyer@99
|
722 if aceconfig_list[category] then
|
farmbuyer@99
|
723 -- aceconfigdialog makes too many assumptions about scrolling
|
farmbuyer@99
|
724 for _,func in ipairs(catfuncs) do
|
farmbuyer@99
|
725 if func(treeg,category) then break end
|
farmbuyer@96
|
726 end
|
farmbuyer@96
|
727 else
|
farmbuyer@99
|
728 local sf = AceGUI:Create("ScrollFrame")
|
farmbuyer@99
|
729 sf:SetStatusTable(status_for_scroll)
|
farmbuyer@99
|
730 sf:SetLayout("Flow")
|
farmbuyer@99
|
731 -- This forces the scrolling area to be bigger than the visible area; else
|
farmbuyer@99
|
732 -- some of the text gets cut off without ever triggering the scrollbar.
|
farmbuyer@99
|
733 sf.content:SetHeight(700)
|
farmbuyer@99
|
734 for _,func in ipairs(catfuncs) do
|
farmbuyer@99
|
735 if func(sf,category) then break end
|
farmbuyer@99
|
736 end
|
farmbuyer@99
|
737 treeg:AddChild(sf)
|
farmbuyer@99
|
738 if treeg:GetUserData("options restore scroll") then
|
farmbuyer@99
|
739 if status_for_scroll.scrollvalue then
|
farmbuyer@99
|
740 sf:SetScroll(status_for_scroll.scrollvalue)
|
farmbuyer@99
|
741 end
|
farmbuyer@99
|
742 treeg:SetUserData("options restore scroll", false)
|
farmbuyer@99
|
743 else
|
farmbuyer@99
|
744 sf:SetScroll(0)
|
farmbuyer@99
|
745 end
|
farmbuyer@96
|
746 end
|
farmbuyer@96
|
747 end
|
farmbuyer@96
|
748
|
farmbuyer@96
|
749 -- Clicking the Options tab as a whole (tabs_OnGroupSelected["opt"]).
|
farmbuyer@96
|
750 local tabs_OGS = function (container, specials)
|
farmbuyer@96
|
751 container:SetLayout("Fill")
|
farmbuyer@96
|
752 local left = AceGUI:Create("TreeGroup")
|
farmbuyer@96
|
753 left:SetStatusTable(status_for_select)
|
farmbuyer@96
|
754 left:SetLayout("Fill")
|
farmbuyer@96
|
755 left:SetFullWidth(true)
|
farmbuyer@96
|
756 left:SetFullHeight(true)
|
farmbuyer@96
|
757 left:EnableButtonTooltips(false)
|
farmbuyer@96
|
758 left:SetTree(options_tree)
|
farmbuyer@96
|
759 left:SetCallback("OnGroupSelected", opt_OnGroupSelected_func)
|
farmbuyer@96
|
760 container:AddChild(left)
|
farmbuyer@96
|
761 if status_for_select.selected then
|
farmbuyer@96
|
762 left:SetUserData("options restore scroll", true)
|
farmbuyer@96
|
763 left:SelectByValue(status_for_select.selected)
|
farmbuyer@96
|
764 else
|
farmbuyer@96
|
765 left:SelectByValue("basic")
|
farmbuyer@96
|
766 end
|
farmbuyer@96
|
767
|
farmbuyer@96
|
768 local w = mkbutton("ReloadUI",
|
farmbuyer@96
|
769 [[Does what you think it does. Loot information is written out and restored.]])
|
farmbuyer@96
|
770 w:SetFullWidth(true)
|
farmbuyer@96
|
771 w:SetCallback("OnClick", ReloadUI)
|
farmbuyer@96
|
772 specials:AddChild(w)
|
farmbuyer@96
|
773
|
farmbuyer@96
|
774 w = mkbutton("Ping!",
|
farmbuyer@96
|
775 [[Queries other raid users for their addon version and current status. Results displayed on Pongs panel after five seconds.]])
|
farmbuyer@96
|
776 w:SetFullWidth(true)
|
farmbuyer@96
|
777 w:SetCallback("OnClick", function(_w)
|
farmbuyer@96
|
778 _w:SetText("5... 4... 3...")
|
farmbuyer@96
|
779 _w:SetDisabled(true)
|
farmbuyer@96
|
780 addon:DoPing()
|
farmbuyer@96
|
781 addon:ScheduleTimer(function(b)
|
farmbuyer@96
|
782 if b:IsVisible() then
|
farmbuyer@96
|
783 return addon:redisplay()
|
farmbuyer@96
|
784 end
|
farmbuyer@96
|
785 end, 5, _w)
|
farmbuyer@96
|
786 end)
|
farmbuyer@96
|
787 specials:AddChild(w)
|
farmbuyer@97
|
788
|
farmbuyer@97
|
789 if preload then preload() end
|
farmbuyer@96
|
790 end
|
farmbuyer@96
|
791
|
farmbuyer@96
|
792 addon:register_tab_control_AT_END ("opt", [[Options]],
|
farmbuyer@96
|
793 [[Options for fine-tuning behavior]], tabs_OGS)
|
farmbuyer@96
|
794
|
farmbuyer@99
|
795
|
farmbuyer@99
|
796 ---------------
|
farmbuyer@99
|
797 -- Registering new options entries
|
farmbuyer@99
|
798 local insertion_index = #options_tree
|
farmbuyer@99
|
799 for i = #options_tree, 1, -1 do
|
farmbuyer@99
|
800 if options_tree[i] == 'NEW INSERTIONS HERE' then
|
farmbuyer@99
|
801 insertion_index = i
|
farmbuyer@99
|
802 break
|
farmbuyer@99
|
803 end
|
farmbuyer@99
|
804 end
|
farmbuyer@99
|
805 if insertion_index then
|
farmbuyer@99
|
806 table.remove (options_tree, insertion_index)
|
farmbuyer@99
|
807 else
|
farmbuyer@99
|
808 insertion_index = #options_tree + 1
|
farmbuyer@99
|
809 end
|
farmbuyer@99
|
810
|
farmbuyer@99
|
811
|
farmbuyer@99
|
812 --[[
|
farmbuyer@100
|
813 PLUGIN is the module table itself. (This does not actually have to be
|
farmbuyer@100
|
814 a plugin created with :[Constrained]NewModule, as long as it has a
|
farmbuyer@100
|
815 GetName method and other parameters here are used appropriately.)
|
farmbuyer@99
|
816 PARENT is nil to register in the tree list directly.
|
farmbuyer@99
|
817 TEXT is either the text to display in the tree list, or nil to use the
|
farmbuyer@99
|
818 moduleName field out of PLUGIN (not :GetName()).
|
farmbuyer@99
|
819 OPTIONS is either
|
farmbuyer@99
|
820 I) a function to call directly
|
farmbuyer@99
|
821 II) an aceconfig-style options table
|
farmbuyer@99
|
822
|
farmbuyer@99
|
823 (I) Will augment options.args.name with coloring/sizing, if it exists.
|
farmbuyer@99
|
824 (Set options.args.name.name before registering.) Will create it if not
|
farmbuyer@99
|
825 present.
|
farmbuyer@99
|
826
|
farmbuyer@99
|
827 (II) Title added unconditionally. Callback is
|
farmbuyer@99
|
828 options (scrollframe_container, plugin, unique_code)
|
farmbuyer@99
|
829 where UNIQUE_CODE is what's used by the TreeGroup widget in identifying
|
farmbuyer@99
|
830 the "button" clicked in the lefthand tree list.
|
farmbuyer@99
|
831
|
farmbuyer@99
|
832 Will append a reset button IFF an options database has been registered already.
|
farmbuyer@99
|
833 ]]
|
farmbuyer@99
|
834 function addon:register_options_entry (plugin, parent, text, options)
|
farmbuyer@99
|
835 -- if this changes at all, fix up plugin_reset_button accordingly
|
farmbuyer@99
|
836 local code = plugin:GetName()
|
farmbuyer@99
|
837 --if parent
|
farmbuyer@99
|
838
|
farmbuyer@99
|
839 text = text or plugin.moduleName
|
farmbuyer@99
|
840
|
farmbuyer@99
|
841 local handler
|
farmbuyer@99
|
842 local pdb = self.db:GetNamespace (plugin.moduleName, --[[silent=]]true)
|
farmbuyer@99
|
843 if type(options) == 'table' then
|
farmbuyer@99
|
844 -- AceConfig-style options table
|
farmbuyer@99
|
845 aceconfig_list[code] = true
|
farmbuyer@99
|
846 if not options.args.name then
|
farmbuyer@99
|
847 options.args.name = {
|
farmbuyer@99
|
848 name = plugin.moduleName,
|
farmbuyer@99
|
849 type = 'description',
|
farmbuyer@99
|
850 }
|
farmbuyer@99
|
851 end
|
farmbuyer@99
|
852 options.args.name.name = '|cff30adff' .. options.args.name.name .. '|r'
|
farmbuyer@99
|
853 options.args.name.fontSize = 'large'
|
farmbuyer@99
|
854 options.args.name.width = 'full'
|
farmbuyer@99
|
855 options.args.name.cmdHidden = true
|
farmbuyer@99
|
856 options.args.name.order = 1
|
farmbuyer@99
|
857 if pdb then
|
farmbuyer@99
|
858 options.args.INSERTED_SPACER = {
|
farmbuyer@99
|
859 name = '',
|
farmbuyer@99
|
860 type = 'description',
|
farmbuyer@99
|
861 cmdHidden = true,
|
farmbuyer@99
|
862 width = 'full',
|
farmbuyer@99
|
863 order = 9000,
|
farmbuyer@99
|
864 }
|
farmbuyer@99
|
865 options.args.RESET = {
|
farmbuyer@99
|
866 name = "Reset",
|
farmbuyer@99
|
867 desc = ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(plugin:GetName()),
|
farmbuyer@99
|
868 type = 'execute',
|
farmbuyer@99
|
869 func = function()
|
farmbuyer@99
|
870 pdb:ResetProfile()
|
farmbuyer@99
|
871 if IsShiftKeyDown() then ReloadUI() end
|
farmbuyer@99
|
872 end,
|
farmbuyer@99
|
873 order = 9001,
|
farmbuyer@99
|
874 }
|
farmbuyer@99
|
875 end
|
farmbuyer@99
|
876 LibStub("AceConfig-3.0"):RegisterOptionsTable(plugin:GetName(), options)
|
farmbuyer@99
|
877 handler = function (sf)
|
farmbuyer@99
|
878 LibStub("AceConfigDialog-3.0"):Open (plugin:GetName(), sf)
|
farmbuyer@99
|
879 end
|
farmbuyer@99
|
880
|
farmbuyer@99
|
881 elseif type(options) == 'function' then
|
farmbuyer@99
|
882 -- AceGUI callback
|
farmbuyer@99
|
883 if pdb then
|
farmbuyer@99
|
884 handler = function (sf)
|
farmbuyer@99
|
885 sf:AddChildren(mktitle(text))
|
farmbuyer@99
|
886 local ret = options (sf, plugin, code)
|
farmbuyer@99
|
887 local w = mkbutton("Reset",
|
farmbuyer@99
|
888 ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(text))
|
farmbuyer@99
|
889 w:SetRelativeWidth(0.3)
|
farmbuyer@99
|
890 w:SetCallback("OnClick", function(_w)
|
farmbuyer@99
|
891 pdb:ResetProfile()
|
farmbuyer@99
|
892 if IsShiftKeyDown() then ReloadUI() end
|
farmbuyer@99
|
893 end)
|
farmbuyer@99
|
894 sf:AddChildren(spacer(10),w)
|
farmbuyer@99
|
895 return ret
|
farmbuyer@99
|
896 end
|
farmbuyer@99
|
897 else
|
farmbuyer@99
|
898 handler = function (sf)
|
farmbuyer@99
|
899 sf:AddChildren(mktitle(text))
|
farmbuyer@99
|
900 return options (sf, plugin, code)
|
farmbuyer@99
|
901 end
|
farmbuyer@99
|
902 end
|
farmbuyer@99
|
903
|
farmbuyer@99
|
904 else
|
farmbuyer@99
|
905 error(("Error: 'options' parameter for plugin '%s' is neither table nor function"):format(plugin:GetName()))
|
farmbuyer@99
|
906 end
|
farmbuyer@99
|
907
|
farmbuyer@99
|
908 if not controls[code] then
|
farmbuyer@99
|
909 controls[code] = {}
|
farmbuyer@99
|
910 end
|
farmbuyer@99
|
911 table.insert (controls[code], handler)
|
farmbuyer@99
|
912
|
farmbuyer@99
|
913 table.insert (options_tree, insertion_index, {
|
farmbuyer@99
|
914 value = code,
|
farmbuyer@99
|
915 text = text, -- maybe call markup on this?
|
farmbuyer@99
|
916 })
|
farmbuyer@99
|
917 insertion_index = insertion_index + 1
|
farmbuyer@99
|
918 -- The treegroup will rescan options_tree (via RefreshTree) several times
|
farmbuyer@99
|
919 -- before the player actually sees anything; no more work needs doing.
|
farmbuyer@99
|
920 return -- something that can be used as 'parent'
|
farmbuyer@99
|
921 end
|
farmbuyer@99
|
922
|
farmbuyer@99
|
923
|
farmbuyer@96
|
924 -- vim:noet
|