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@102
|
72 local w = mkbutton("CheckBox", 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@101
|
253 chatgroup:SetTitle("Notify on 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@101
|
259 editbox:SetDisabled((not opts.chatty_on_remote_changes) and
|
farmbuyer@101
|
260 (not opts.chatty_on_local_changes))
|
farmbuyer@96
|
261 end)
|
farmbuyer@96
|
262 toggle:SetFullWidth(true)
|
farmbuyer@96
|
263 chatgroup:AddChild(toggle)
|
farmbuyer@101
|
264 toggle = mktoggle('chatty_on_local_changes', "Be chatty on your own changes", 1,
|
farmbuyer@101
|
265 [[Print something to chat when you change recorded loot (as a reminder).]],
|
farmbuyer@101
|
266 function (_w,_,value)
|
farmbuyer@101
|
267 opts.chatty_on_local_changes = value
|
farmbuyer@101
|
268 editbox:SetDisabled((not opts.chatty_on_remote_changes) and
|
farmbuyer@101
|
269 (not opts.chatty_on_local_changes))
|
farmbuyer@101
|
270 end)
|
farmbuyer@101
|
271 toggle:SetFullWidth(true)
|
farmbuyer@101
|
272 chatgroup:AddChild(toggle)
|
farmbuyer@101
|
273
|
farmbuyer@96
|
274 w = AceGUI:Create("Label")
|
farmbuyer@96
|
275 w:SetFullWidth(true)
|
farmbuyer@103
|
276 w:SetText("This controls the output of the two |cff00ffff'Be chatty on <X> changes'|r options. 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
|
277 chatgroup:AddChild(w)
|
farmbuyer@101
|
278 editbox = mkbutton("EditBox", nil, opts.chatty_on_changes_frame,
|
farmbuyer@96
|
279 [[1 = default chat frame, 2 = combat log, etc]])
|
farmbuyer@96
|
280 editbox:SetFullWidth(true)
|
farmbuyer@96
|
281 editbox:SetLabel("Output Chatframe")
|
farmbuyer@96
|
282 editbox:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
283 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@101
|
284 local prev = opts.chatty_on_changes_frame
|
farmbuyer@96
|
285 value = value:trim()
|
farmbuyer@96
|
286 value = tonumber(value) or value
|
farmbuyer@101
|
287 if addon:_set_chatty_change_chatframe (value) then
|
farmbuyer@101
|
288 opts.chatty_on_changes_frame = value
|
farmbuyer@96
|
289 _w:SetText(tostring(value))
|
farmbuyer@96
|
290 _w.editbox:ClearFocus()
|
farmbuyer@96
|
291 else
|
farmbuyer@96
|
292 _w:SetText(tostring(prev))
|
farmbuyer@96
|
293 end
|
farmbuyer@96
|
294 end)
|
farmbuyer@101
|
295 editbox:SetDisabled((not opts.chatty_on_remote_changes) and
|
farmbuyer@101
|
296 (not opts.chatty_on_local_changes))
|
farmbuyer@96
|
297 chatgroup:AddChild(editbox)
|
farmbuyer@96
|
298 w = mkbutton("Chat Frame Numbers",
|
farmbuyer@96
|
299 [[Print each chat window number in its own frame, for easy reference in the editing field.]])
|
farmbuyer@96
|
300 w:SetFullWidth(true)
|
farmbuyer@96
|
301 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
302 for i = 1, NUM_CHAT_WINDOWS do
|
farmbuyer@96
|
303 local cf = _G['ChatFrame'..i]
|
farmbuyer@96
|
304 if not cf then break end
|
farmbuyer@96
|
305 addon:CFPrint (cf, "This is frame number |cffff0000%d|r.", i)
|
farmbuyer@96
|
306 end
|
farmbuyer@96
|
307 end)
|
farmbuyer@96
|
308 chatgroup:AddChild(w)
|
farmbuyer@96
|
309 container:AddChild(chatgroup)
|
farmbuyer@96
|
310 end
|
farmbuyer@96
|
311
|
farmbuyer@96
|
312 -- boss mod selection
|
farmbuyer@97
|
313 container:AddChild(spacer(2))
|
farmbuyer@96
|
314 do
|
farmbuyer@96
|
315 local list = {}
|
farmbuyer@96
|
316 local current
|
farmbuyer@96
|
317 for k,v in ipairs(addon.bossmods) do
|
farmbuyer@96
|
318 list[k] = v.n
|
farmbuyer@96
|
319 if v.n == opts.bossmod then
|
farmbuyer@96
|
320 current = k
|
farmbuyer@96
|
321 end
|
farmbuyer@96
|
322 end
|
farmbuyer@96
|
323 w = mkbutton("Dropdown", nil, "", [[Which 'boss mod' to use.]])
|
farmbuyer@96
|
324 w:SetRelativeWidth(0.3)
|
farmbuyer@96
|
325 w:SetLabel("Boss Mod:")
|
farmbuyer@96
|
326 w:SetList(list)
|
farmbuyer@96
|
327 w:SetValue(current)
|
farmbuyer@96
|
328 w:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@96
|
329 opts.bossmod = list[choice]
|
farmbuyer@96
|
330 end)
|
farmbuyer@96
|
331 container:AddChild(w)
|
farmbuyer@96
|
332 end
|
farmbuyer@96
|
333
|
farmbuyer@96
|
334 container:ResumeLayout()
|
farmbuyer@96
|
335 container:DoLayout()
|
farmbuyer@96
|
336 AceGUI:ClearFocus()
|
farmbuyer@96
|
337 end
|
farmbuyer@96
|
338
|
farmbuyer@96
|
339
|
farmbuyer@96
|
340 ---------------
|
farmbuyer@96
|
341 do
|
farmbuyer@97
|
342 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
|
343
|
farmbuyer@97
|
344 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
|
345 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
|
346
|
farmbuyer@96
|
347 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
|
348 local cache_warn, cache_warned = false, false
|
farmbuyer@96
|
349 local function do_warning (cnt)
|
farmbuyer@96
|
350 if cache_warn and not cache_warned then
|
farmbuyer@96
|
351 cache_warned = true
|
farmbuyer@96
|
352 addon:Print(warntext)
|
farmbuyer@96
|
353 local t = AceGUI:Create("Label")
|
farmbuyer@96
|
354 t:SetFullWidth(true)
|
farmbuyer@96
|
355 t:SetText(warntext)
|
farmbuyer@96
|
356 cnt:AddChild(t)
|
farmbuyer@96
|
357 end
|
farmbuyer@96
|
358 end
|
farmbuyer@96
|
359
|
farmbuyer@96
|
360 controls.basic_filter = function (container)
|
farmbuyer@96
|
361 container:AddChildren(mktitle[[Item-Specific Special Handling]])
|
farmbuyer@96
|
362
|
farmbuyer@97
|
363 local w = AceGUI:Create("Label")
|
farmbuyer@97
|
364 w:SetFullWidth(true)
|
farmbuyer@97
|
365 w:SetText(description)
|
farmbuyer@97
|
366 container:AddChild(w)
|
farmbuyer@97
|
367 container:AddChild(spacer(20))
|
farmbuyer@97
|
368
|
farmbuyer@96
|
369 cache_warn, cache_warned = false, false
|
farmbuyer@96
|
370 local filterlist, vaultlist = {}, {}
|
farmbuyer@96
|
371 for id in pairs(opts.itemfilter) do
|
farmbuyer@96
|
372 local iname, _, iquality = GetItemInfo(id)
|
farmbuyer@96
|
373 if iname then
|
farmbuyer@96
|
374 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
375 else
|
farmbuyer@96
|
376 filterlist[id] = id
|
farmbuyer@96
|
377 cache_warn = true
|
farmbuyer@96
|
378 end
|
farmbuyer@96
|
379 end
|
farmbuyer@96
|
380 for id in pairs(opts.itemvault) do
|
farmbuyer@96
|
381 local iname, _, iquality = GetItemInfo(id)
|
farmbuyer@96
|
382 if iname then
|
farmbuyer@96
|
383 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
384 else
|
farmbuyer@96
|
385 vaultlist[id] = id
|
farmbuyer@96
|
386 cache_warn = true
|
farmbuyer@96
|
387 end
|
farmbuyer@96
|
388 end
|
farmbuyer@97
|
389 -- This is so that the "add all defaults" button will never, ever,
|
farmbuyer@97
|
390 -- trip over cache misses.
|
farmbuyer@97
|
391 for id in pairs(addon.default_itemfilter) do GetItemInfo(id) end
|
farmbuyer@97
|
392 for id in pairs(addon.default_itemvault) do GetItemInfo(id) end
|
farmbuyer@96
|
393
|
farmbuyer@97
|
394 w = AceGUI:Create("EditBoxDropDown")
|
farmbuyer@96
|
395 w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
396 w:SetText("Item filter")
|
farmbuyer@96
|
397 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
|
farmbuyer@96
|
398 w:SetList(filterlist)
|
farmbuyer@96
|
399 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
|
farmbuyer@96
|
400 local iname, ilink, iquality = GetItemInfo(text:trim())
|
farmbuyer@96
|
401 if not iname then
|
farmbuyer@96
|
402 return addon:Print("Error: %s is not a valid item name/link!", text)
|
farmbuyer@96
|
403 end
|
farmbuyer@96
|
404 local id = tonumber(ilink:match("item:(%d+)"))
|
farmbuyer@96
|
405 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
406 opts.itemfilter[id] = true
|
farmbuyer@96
|
407 addon:Print("Now filtering out", ilink)
|
farmbuyer@96
|
408 end)
|
farmbuyer@96
|
409 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
|
farmbuyer@96
|
410 --local ilink = select(2,GetItemInfo(key_id))
|
farmbuyer@96
|
411 opts.itemfilter[tonumber(key_id)] = nil
|
farmbuyer@96
|
412 --addon:Print("No longer filtering out", ilink)
|
farmbuyer@96
|
413 addon:Print("No longer filtering out", val_name)
|
farmbuyer@96
|
414 end)
|
farmbuyer@96
|
415 --w:SetCallback("OnDropdownShown",do_warning)
|
farmbuyer@96
|
416 w:SetCallback("OnDropdownShown", function()
|
farmbuyer@96
|
417 do_warning(container)
|
farmbuyer@96
|
418 end)
|
farmbuyer@96
|
419 container:AddChild(w)
|
farmbuyer@96
|
420
|
farmbuyer@96
|
421 w = AceGUI:Create("Spacer")
|
farmbuyer@96
|
422 w:SetRelativeWidth(0.1)
|
farmbuyer@96
|
423 w:SetHeight(2)
|
farmbuyer@96
|
424 container:AddChild(w)
|
farmbuyer@96
|
425
|
farmbuyer@96
|
426 w = AceGUI:Create("EditBoxDropDown")
|
farmbuyer@96
|
427 w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
428 w:SetText("Vault items")
|
farmbuyer@96
|
429 w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.")
|
farmbuyer@96
|
430 w:SetList(vaultlist)
|
farmbuyer@96
|
431 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
|
farmbuyer@96
|
432 local iname, ilink, iquality = GetItemInfo(text:trim())
|
farmbuyer@96
|
433 if not iname then
|
farmbuyer@96
|
434 return addon:Print("Error: %s is not a valid item name/link!", text)
|
farmbuyer@96
|
435 end
|
farmbuyer@96
|
436 local id = tonumber(ilink:match("item:(%d+)"))
|
farmbuyer@96
|
437 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
438 opts.itemvault[id] = true
|
farmbuyer@96
|
439 addon:Print("Now auto-vaulting", ilink)
|
farmbuyer@96
|
440 end)
|
farmbuyer@96
|
441 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
|
farmbuyer@96
|
442 --local ilink = select(2,GetItemInfo(key_id))
|
farmbuyer@96
|
443 opts.itemfilter[tonumber(key_id)] = nil
|
farmbuyer@96
|
444 --addon:Print("No longer filtering out", ilink)
|
farmbuyer@96
|
445 addon:Print("No longer auto-vaulting", val_name)
|
farmbuyer@96
|
446 end)
|
farmbuyer@96
|
447 w:SetCallback("OnDropdownShown",do_warning)
|
farmbuyer@96
|
448 container:AddChild(w)
|
farmbuyer@97
|
449
|
farmbuyer@97
|
450 local function MAYBE_ADD (destname, dest, id)
|
farmbuyer@97
|
451 local name, link = GetItemInfo(id)
|
farmbuyer@97
|
452 if not name then
|
farmbuyer@97
|
453 addon:Print("> No data on ID %d, this may be a bug.",id)
|
farmbuyer@97
|
454 return
|
farmbuyer@97
|
455 end
|
farmbuyer@97
|
456 if dest[id] then
|
farmbuyer@97
|
457 addon:Print("> Skipping %s as it's already in '%s' list.",
|
farmbuyer@97
|
458 link, destname)
|
farmbuyer@97
|
459 else
|
farmbuyer@97
|
460 dest[id] = true
|
farmbuyer@97
|
461 addon:Print("> Added %s to '%s' list.", link, destname)
|
farmbuyer@97
|
462 end
|
farmbuyer@97
|
463 end
|
farmbuyer@97
|
464
|
farmbuyer@97
|
465 container:AddChild(spacer(40))
|
farmbuyer@97
|
466 w = AceGUI:Create("Label")
|
farmbuyer@97
|
467 w:SetFullWidth(true)
|
farmbuyer@97
|
468 w:SetText(defaultstext)
|
farmbuyer@97
|
469 container:AddChild(w)
|
farmbuyer@97
|
470 w = AceGUI:Create("Button")
|
farmbuyer@97
|
471 w:SetRelativeWidth(0.4)
|
farmbuyer@97
|
472 w:SetText[[Add Default Entries]]
|
farmbuyer@97
|
473 w:SetCallback("OnClick", function()
|
farmbuyer@97
|
474 for id in pairs(addon.default_itemfilter) do
|
farmbuyer@97
|
475 MAYBE_ADD ("filter", opts.itemfilter, id)
|
farmbuyer@97
|
476 end
|
farmbuyer@97
|
477 for id in pairs(addon.default_itemvault) do
|
farmbuyer@97
|
478 MAYBE_ADD ("vault", opts.itemvault, id)
|
farmbuyer@97
|
479 end
|
farmbuyer@97
|
480 addon:redisplay()
|
farmbuyer@97
|
481 end)
|
farmbuyer@97
|
482 container:AddChild(w)
|
farmbuyer@97
|
483 end
|
farmbuyer@97
|
484 end
|
farmbuyer@97
|
485
|
farmbuyer@97
|
486
|
farmbuyer@97
|
487 ---------------
|
farmbuyer@97
|
488 do
|
farmbuyer@97
|
489 local profiles
|
farmbuyer@97
|
490 controls.basic_profiles = function (container)
|
farmbuyer@97
|
491 if not profiles then
|
farmbuyer@97
|
492 profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(addon.db)
|
farmbuyer@97
|
493 LibStub("AceConfig-3.0"):RegisterOptionsTable("OuroLootProfiles", profiles)
|
farmbuyer@97
|
494 end
|
farmbuyer@97
|
495 LibStub("AceConfigDialog-3.0"):Open ("OuroLootProfiles", container)
|
farmbuyer@96
|
496 end
|
farmbuyer@96
|
497 end
|
farmbuyer@96
|
498
|
farmbuyer@96
|
499
|
farmbuyer@96
|
500 ---------------
|
farmbuyer@96
|
501 local adv_real = function (container)
|
farmbuyer@96
|
502 container:AddChildren(mktitle[[Debugging Options (not saved across sessions)]])
|
farmbuyer@96
|
503
|
farmbuyer@96
|
504 container:PauseLayout()
|
farmbuyer@96
|
505 local w
|
farmbuyer@96
|
506
|
farmbuyer@96
|
507 do
|
farmbuyer@96
|
508 local grp = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
509 grp:SetLayout("List")
|
farmbuyer@96
|
510 grp:SetRelativeWidth(0.60)
|
farmbuyer@96
|
511 grp:SetTitle("Output of debugging messages")
|
farmbuyer@96
|
512
|
farmbuyer@102
|
513 w = AceGUI:Create("CheckBox")
|
farmbuyer@96
|
514 w:SetFullWidth(true)
|
farmbuyer@96
|
515 w:SetType("checkbox")
|
farmbuyer@96
|
516 w:SetLabel("master toggle")
|
farmbuyer@96
|
517 w:SetValue(addon.DEBUG_PRINT)
|
farmbuyer@96
|
518 w:SetCallback("OnValueChanged", function(_w,event,value)
|
farmbuyer@96
|
519 addon.DEBUG_PRINT = value
|
farmbuyer@96
|
520 addon:redisplay()
|
farmbuyer@96
|
521 end)
|
farmbuyer@96
|
522 grp:AddChild(w)
|
farmbuyer@96
|
523 for d,v in pairs(addon.debug) do
|
farmbuyer@102
|
524 w = AceGUI:Create("CheckBox")
|
farmbuyer@96
|
525 w:SetFullWidth(true)
|
farmbuyer@96
|
526 w:SetType("checkbox")
|
farmbuyer@96
|
527 w:SetLabel(d)
|
farmbuyer@96
|
528 if d == "notraid" then
|
farmbuyer@96
|
529 w:SetDescription[[Tick this before enabling to make the addon work outside of raid groups]]
|
farmbuyer@96
|
530 else
|
farmbuyer@96
|
531 if d == "alsolog" then
|
farmbuyer@96
|
532 w:SetDescription[[Also log all debug messages to disk. See print_log.lua in the addon folder for later viewing.]]
|
farmbuyer@96
|
533 end
|
farmbuyer@96
|
534 w:SetDisabled(not addon.DEBUG_PRINT)
|
farmbuyer@96
|
535 end
|
farmbuyer@96
|
536 w:SetValue(v)
|
farmbuyer@100
|
537 w:SetCallback("OnValueChanged", function(_w,event,value)
|
farmbuyer@100
|
538 addon.debug[d] = value
|
farmbuyer@100
|
539 if d == "comm" then
|
farmbuyer@100
|
540 addon.is_guilded = _G.IsInGuild()
|
farmbuyer@100
|
541 end
|
farmbuyer@100
|
542 end)
|
farmbuyer@96
|
543 grp:AddChild(w)
|
farmbuyer@96
|
544 end
|
farmbuyer@96
|
545 container:AddChild(grp)
|
farmbuyer@96
|
546 end
|
farmbuyer@96
|
547
|
farmbuyer@96
|
548 do
|
farmbuyer@96
|
549 local simple = AceGUI:Create("SimpleGroup")
|
farmbuyer@96
|
550 simple:SetLayout("List")
|
farmbuyer@96
|
551 simple:SetRelativeWidth(0.35)
|
farmbuyer@102
|
552 w = AceGUI:Create("CheckBox")
|
farmbuyer@96
|
553 --w:SetRelativeWidth(0.35)
|
farmbuyer@96
|
554 w:SetFullWidth(true)
|
farmbuyer@96
|
555 w:SetType("checkbox")
|
farmbuyer@96
|
556 w:SetLabel("GOP history mode")
|
farmbuyer@96
|
557 w:SetValue(addon.history_suppress)
|
farmbuyer@96
|
558 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end)
|
farmbuyer@96
|
559 simple:AddChild(w)
|
farmbuyer@96
|
560 w = mkbutton("Dropdown", nil, "",
|
farmbuyer@96
|
561 [[if active, tooltip shown when hovering over Item column only]])
|
farmbuyer@96
|
562 --w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
563 w:SetFullWidth(true)
|
farmbuyer@96
|
564 w:SetLabel("loot debugging tooltip")
|
farmbuyer@96
|
565 w:SetList{
|
farmbuyer@96
|
566 [1] = "Off",
|
farmbuyer@96
|
567 [2] = "/dump into tooltip",
|
farmbuyer@96
|
568 [3] = "small fixed fields",
|
farmbuyer@96
|
569 }
|
farmbuyer@96
|
570 w:SetValue(gui._do_debugging_tooltip or 1)
|
farmbuyer@96
|
571 w:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@96
|
572 gui._do_debugging_tooltip = choice > 1 and choice or nil
|
farmbuyer@96
|
573 end)
|
farmbuyer@96
|
574 simple:AddChild(w)
|
farmbuyer@96
|
575 container:AddChild(simple)
|
farmbuyer@96
|
576 end
|
farmbuyer@96
|
577
|
farmbuyer@97
|
578 container:AddChild(spacer(10))
|
farmbuyer@96
|
579
|
farmbuyer@96
|
580 w = mkbutton("EditBox", 'comm_ident', addon.ident,
|
farmbuyer@96
|
581 [[Set tracking to 'Disabled' in the top-right dropdown, then change this field (click Okay or press Enter).]])
|
farmbuyer@96
|
582 w:SetRelativeWidth(0.25)
|
farmbuyer@96
|
583 w:SetLabel("Addon channel ID")
|
farmbuyer@96
|
584 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
585 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
586 -- if they set it to blank spaces, they're boned. oh well.
|
farmbuyer@96
|
587 -- Re-enabling will take care of propogating this new value.
|
farmbuyer@96
|
588 addon.ident = (value == "") and "OuroLoot2" or value
|
farmbuyer@96
|
589 _w:SetText(addon.ident)
|
farmbuyer@96
|
590 addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.")
|
farmbuyer@96
|
591 end)
|
farmbuyer@96
|
592 w:SetDisabled(addon.enabled or addon.rebroadcast)
|
farmbuyer@96
|
593 container:AddChild(w)
|
farmbuyer@96
|
594
|
farmbuyer@96
|
595 w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache TTL]])
|
farmbuyer@96
|
596 w:SetRelativeWidth(0.1)
|
farmbuyer@96
|
597 w:SetLabel("ttl")
|
farmbuyer@96
|
598 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
599 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
600 value = tonumber(value) or addon.recent_messages.ttl
|
farmbuyer@96
|
601 addon.recent_messages.ttl = value
|
farmbuyer@96
|
602 _w:SetText(tostring(value))
|
farmbuyer@96
|
603 end)
|
farmbuyer@96
|
604 container:AddChild(w)
|
farmbuyer@96
|
605
|
farmbuyer@96
|
606 w = mkbutton("load nsaab1548", [[Cursed Darkhound]])
|
farmbuyer@96
|
607 w:SetRelativeWidth(0.25)
|
farmbuyer@96
|
608 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
609 for i, v in ipairs(DBM.AddOns) do
|
farmbuyer@96
|
610 if v.modId == "DBM-NotScaryAtAll" then
|
farmbuyer@96
|
611 DBM:LoadMod(v)
|
farmbuyer@96
|
612 break
|
farmbuyer@96
|
613 end
|
farmbuyer@96
|
614 end
|
farmbuyer@96
|
615 local mod = DBM:GetModByName("NotScaryAtAll")
|
farmbuyer@96
|
616 if mod then
|
farmbuyer@96
|
617 mod:EnableMod()
|
farmbuyer@96
|
618 addon:Print("Now tracking ID",mod.creatureId)
|
farmbuyer@96
|
619 else
|
farmbuyer@96
|
620 addon:Print("Can do nothing; DBM testing mod wasn't loaded.")
|
farmbuyer@96
|
621 end
|
farmbuyer@96
|
622 end)
|
farmbuyer@102
|
623 w:SetDisabled(addon.bossmod_registered ~= 'DBM') -- set by :Activate
|
farmbuyer@96
|
624 container:AddChild(w)
|
farmbuyer@96
|
625
|
farmbuyer@96
|
626 w = mkbutton("GC", [[full GC cycle]])
|
farmbuyer@96
|
627 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
628 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
629 local before = collectgarbage('count')
|
farmbuyer@96
|
630 collectgarbage('collect')
|
farmbuyer@96
|
631 local after = collectgarbage('count')
|
farmbuyer@96
|
632 addon:Print("Collected %d KB, %d KB still in use by Lua universe.", before-after, after)
|
farmbuyer@96
|
633 end)
|
farmbuyer@96
|
634 container:AddChild(w)
|
farmbuyer@96
|
635
|
farmbuyer@97
|
636 container:AddChild(spacer(3))
|
farmbuyer@96
|
637 do
|
farmbuyer@96
|
638 local simple = AceGUI:Create("SimpleGroup")
|
farmbuyer@96
|
639 simple:SetLayout("Flow")
|
farmbuyer@96
|
640 --simple:SetRelativeWidth(0.95)
|
farmbuyer@96
|
641 simple:SetFullWidth(true)
|
farmbuyer@96
|
642 w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]])
|
farmbuyer@96
|
643 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
644 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
645 PlaySoundFile ([[Sound\Music\WorldEvents\HordeFirepole.mp3]], "Master")
|
farmbuyer@96
|
646 end)
|
farmbuyer@96
|
647 simple:AddChild(w)
|
farmbuyer@96
|
648 w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]])
|
farmbuyer@96
|
649 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
650 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
651 PlaySoundFile ([[Sound\Music\WorldEvents\AllianceFirepole.mp3]], "Master")
|
farmbuyer@96
|
652 end)
|
farmbuyer@96
|
653 simple:AddChild(w)
|
farmbuyer@96
|
654 w = mkbutton("SFRR", [[test]])
|
farmbuyer@96
|
655 w:SetRelativeWidth(0.15)
|
farmbuyer@96
|
656 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
657 PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "Master")
|
farmbuyer@96
|
658 end)
|
farmbuyer@96
|
659 simple:AddChild(w)
|
farmbuyer@96
|
660
|
farmbuyer@96
|
661 container:AddChild(simple)
|
farmbuyer@96
|
662 end
|
farmbuyer@96
|
663
|
farmbuyer@96
|
664 w = AceGUI:Create("Spacer") w:SetRelativeWidth(0.65) w:SetHeight(15) container:AddChild(w)
|
farmbuyer@96
|
665 w = mkbutton("Clear All & Reload",
|
farmbuyer@96
|
666 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
|
farmbuyer@96
|
667 w:SetRelativeWidth(0.3)
|
farmbuyer@96
|
668 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
669 addon:_clear_SVs() -- reloads
|
farmbuyer@96
|
670 end)
|
farmbuyer@96
|
671 container:AddChild(w)
|
farmbuyer@96
|
672
|
farmbuyer@96
|
673 container:ResumeLayout()
|
farmbuyer@96
|
674 container:DoLayout()
|
farmbuyer@96
|
675 AceGUI:ClearFocus()
|
farmbuyer@96
|
676 --container:SetScroll(1000) -- scrollframe widget's max value
|
farmbuyer@96
|
677 end
|
farmbuyer@96
|
678
|
farmbuyer@96
|
679 -- Initial advanced panel function (unless debug mode is on during load, which
|
farmbuyer@96
|
680 -- means it was almost certainly hardcoded that way, which means it's probably
|
farmbuyer@96
|
681 -- me testing).
|
farmbuyer@97
|
682 if addon.DEBUG_PRINT then
|
farmbuyer@96
|
683 controls.adv = adv_real
|
farmbuyer@96
|
684 else
|
farmbuyer@96
|
685 controls.adv = function (container)
|
farmbuyer@96
|
686 local speedbump = AceGUI:Create("InteractiveLabel")
|
farmbuyer@96
|
687 speedbump:SetFullWidth(true)
|
farmbuyer@96
|
688 speedbump:SetFontObject(GameFontHighlightLarge)
|
farmbuyer@96
|
689 speedbump:SetImage[[Interface\DialogFrame\DialogAlertIcon]]
|
farmbuyer@96
|
690 speedbump:SetImageSize(50,50)
|
farmbuyer@96
|
691 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
|
692 speedbump:SetCallback("OnClick", function (_sb)
|
farmbuyer@96
|
693 controls.adv = { adv_real }
|
farmbuyer@96
|
694 return addon:redisplay()
|
farmbuyer@96
|
695 end)
|
farmbuyer@96
|
696 container:AddChild(speedbump)
|
farmbuyer@96
|
697 end
|
farmbuyer@96
|
698 end
|
farmbuyer@96
|
699
|
farmbuyer@96
|
700
|
farmbuyer@96
|
701 ---------------
|
farmbuyer@96
|
702 -- Tab 6: Options
|
farmbuyer@96
|
703 do
|
farmbuyer@96
|
704 local funkified = {}
|
farmbuyer@96
|
705 for key,f in pairs(controls) do
|
farmbuyer@99
|
706 -- this is how TreeGroup makes unique keys out of nested entries
|
farmbuyer@96
|
707 local funkykey = key:gsub('_','\001')
|
farmbuyer@96
|
708 funkified[funkykey] = { f }
|
farmbuyer@96
|
709 end
|
farmbuyer@96
|
710 controls = funkified
|
farmbuyer@96
|
711 end
|
farmbuyer@96
|
712
|
farmbuyer@96
|
713 -- widget container status tables (will have things magically appear
|
farmbuyer@96
|
714 -- inside them that we wish to preserve)
|
farmbuyer@96
|
715 local status_for_scroll = {}
|
farmbuyer@96
|
716 local status_for_select = { treewidth = 160 }
|
farmbuyer@96
|
717
|
farmbuyer@97
|
718 local function preload()
|
farmbuyer@97
|
719 for id in pairs(opts.itemfilter) do GetItemInfo(id) end
|
farmbuyer@97
|
720 for id in pairs(opts.itemvault) do GetItemInfo(id) end
|
farmbuyer@97
|
721 preload = nil
|
farmbuyer@97
|
722 end
|
farmbuyer@97
|
723
|
farmbuyer@99
|
724 local aceconfig_list = {}
|
farmbuyer@99
|
725
|
farmbuyer@99
|
726 -- Selecting an entry on the left tree column.
|
farmbuyer@96
|
727 local opt_OnGroupSelected_func = function (treeg,event,category)
|
farmbuyer@98
|
728 opts = addon.db.profile
|
farmbuyer@96
|
729 local catfuncs = controls[category]
|
farmbuyer@96
|
730 if not catfuncs then
|
farmbuyer@96
|
731 addon:horrible_horrible_error(("Category '%s' has no handler function!"):format(category:gsub('\001','_')))
|
farmbuyer@96
|
732 end
|
farmbuyer@96
|
733 treeg:ReleaseChildren()
|
farmbuyer@99
|
734 if aceconfig_list[category] then
|
farmbuyer@99
|
735 -- aceconfigdialog makes too many assumptions about scrolling
|
farmbuyer@99
|
736 for _,func in ipairs(catfuncs) do
|
farmbuyer@99
|
737 if func(treeg,category) then break end
|
farmbuyer@96
|
738 end
|
farmbuyer@96
|
739 else
|
farmbuyer@99
|
740 local sf = AceGUI:Create("ScrollFrame")
|
farmbuyer@99
|
741 sf:SetStatusTable(status_for_scroll)
|
farmbuyer@99
|
742 sf:SetLayout("Flow")
|
farmbuyer@99
|
743 -- This forces the scrolling area to be bigger than the visible area; else
|
farmbuyer@99
|
744 -- some of the text gets cut off without ever triggering the scrollbar.
|
farmbuyer@99
|
745 sf.content:SetHeight(700)
|
farmbuyer@99
|
746 for _,func in ipairs(catfuncs) do
|
farmbuyer@99
|
747 if func(sf,category) then break end
|
farmbuyer@99
|
748 end
|
farmbuyer@99
|
749 treeg:AddChild(sf)
|
farmbuyer@99
|
750 if treeg:GetUserData("options restore scroll") then
|
farmbuyer@99
|
751 if status_for_scroll.scrollvalue then
|
farmbuyer@99
|
752 sf:SetScroll(status_for_scroll.scrollvalue)
|
farmbuyer@99
|
753 end
|
farmbuyer@99
|
754 treeg:SetUserData("options restore scroll", false)
|
farmbuyer@99
|
755 else
|
farmbuyer@99
|
756 sf:SetScroll(0)
|
farmbuyer@99
|
757 end
|
farmbuyer@96
|
758 end
|
farmbuyer@96
|
759 end
|
farmbuyer@96
|
760
|
farmbuyer@96
|
761 -- Clicking the Options tab as a whole (tabs_OnGroupSelected["opt"]).
|
farmbuyer@96
|
762 local tabs_OGS = function (container, specials)
|
farmbuyer@96
|
763 container:SetLayout("Fill")
|
farmbuyer@96
|
764 local left = AceGUI:Create("TreeGroup")
|
farmbuyer@96
|
765 left:SetStatusTable(status_for_select)
|
farmbuyer@96
|
766 left:SetLayout("Fill")
|
farmbuyer@96
|
767 left:SetFullWidth(true)
|
farmbuyer@96
|
768 left:SetFullHeight(true)
|
farmbuyer@96
|
769 left:EnableButtonTooltips(false)
|
farmbuyer@96
|
770 left:SetTree(options_tree)
|
farmbuyer@96
|
771 left:SetCallback("OnGroupSelected", opt_OnGroupSelected_func)
|
farmbuyer@96
|
772 container:AddChild(left)
|
farmbuyer@96
|
773 if status_for_select.selected then
|
farmbuyer@96
|
774 left:SetUserData("options restore scroll", true)
|
farmbuyer@96
|
775 left:SelectByValue(status_for_select.selected)
|
farmbuyer@96
|
776 else
|
farmbuyer@96
|
777 left:SelectByValue("basic")
|
farmbuyer@96
|
778 end
|
farmbuyer@96
|
779
|
farmbuyer@96
|
780 local w = mkbutton("ReloadUI",
|
farmbuyer@96
|
781 [[Does what you think it does. Loot information is written out and restored.]])
|
farmbuyer@96
|
782 w:SetFullWidth(true)
|
farmbuyer@96
|
783 w:SetCallback("OnClick", ReloadUI)
|
farmbuyer@96
|
784 specials:AddChild(w)
|
farmbuyer@96
|
785
|
farmbuyer@96
|
786 w = mkbutton("Ping!",
|
farmbuyer@96
|
787 [[Queries other raid users for their addon version and current status. Results displayed on Pongs panel after five seconds.]])
|
farmbuyer@96
|
788 w:SetFullWidth(true)
|
farmbuyer@96
|
789 w:SetCallback("OnClick", function(_w)
|
farmbuyer@96
|
790 _w:SetText("5... 4... 3...")
|
farmbuyer@96
|
791 _w:SetDisabled(true)
|
farmbuyer@96
|
792 addon:DoPing()
|
farmbuyer@96
|
793 addon:ScheduleTimer(function(b)
|
farmbuyer@96
|
794 if b:IsVisible() then
|
farmbuyer@96
|
795 return addon:redisplay()
|
farmbuyer@96
|
796 end
|
farmbuyer@96
|
797 end, 5, _w)
|
farmbuyer@96
|
798 end)
|
farmbuyer@96
|
799 specials:AddChild(w)
|
farmbuyer@97
|
800
|
farmbuyer@97
|
801 if preload then preload() end
|
farmbuyer@96
|
802 end
|
farmbuyer@96
|
803
|
farmbuyer@96
|
804 addon:register_tab_control_AT_END ("opt", [[Options]],
|
farmbuyer@103
|
805 [[Options for fine-tuning behavior]], tabs_OGS, [[
|
farmbuyer@103
|
806 The "be chatty" options can be noisy, but they make the
|
farmbuyer@103
|
807 |cffff8000[Ouro Loot]|r link much more useful. See
|
farmbuyer@103
|
808 <Help -- Handy Tips> for details!
|
farmbuyer@103
|
809 ]])
|
farmbuyer@96
|
810
|
farmbuyer@99
|
811
|
farmbuyer@99
|
812 ---------------
|
farmbuyer@99
|
813 -- Registering new options entries
|
farmbuyer@99
|
814 local insertion_index = #options_tree
|
farmbuyer@99
|
815 for i = #options_tree, 1, -1 do
|
farmbuyer@99
|
816 if options_tree[i] == 'NEW INSERTIONS HERE' then
|
farmbuyer@99
|
817 insertion_index = i
|
farmbuyer@99
|
818 break
|
farmbuyer@99
|
819 end
|
farmbuyer@99
|
820 end
|
farmbuyer@99
|
821 if insertion_index then
|
farmbuyer@99
|
822 table.remove (options_tree, insertion_index)
|
farmbuyer@99
|
823 else
|
farmbuyer@99
|
824 insertion_index = #options_tree + 1
|
farmbuyer@99
|
825 end
|
farmbuyer@99
|
826
|
farmbuyer@99
|
827
|
farmbuyer@99
|
828 --[[
|
farmbuyer@100
|
829 PLUGIN is the module table itself. (This does not actually have to be
|
farmbuyer@100
|
830 a plugin created with :[Constrained]NewModule, as long as it has a
|
farmbuyer@102
|
831 GetName method and
|
farmbuyer@102
|
832 - TEXT is passed
|
farmbuyer@102
|
833 - if OPTIONS is a table, then OPTIONS.args.name exists
|
farmbuyer@99
|
834 PARENT is nil to register in the tree list directly.
|
farmbuyer@99
|
835 TEXT is either the text to display in the tree list, or nil to use the
|
farmbuyer@99
|
836 moduleName field out of PLUGIN (not :GetName()).
|
farmbuyer@99
|
837 OPTIONS is either
|
farmbuyer@102
|
838 I) an aceconfig-style options table
|
farmbuyer@102
|
839 II) a function to call directly
|
farmbuyer@99
|
840
|
farmbuyer@99
|
841 (I) Will augment options.args.name with coloring/sizing, if it exists.
|
farmbuyer@99
|
842 (Set options.args.name.name before registering.) Will create it if not
|
farmbuyer@99
|
843 present.
|
farmbuyer@99
|
844
|
farmbuyer@99
|
845 (II) Title added unconditionally. Callback is
|
farmbuyer@99
|
846 options (scrollframe_container, plugin, unique_code)
|
farmbuyer@99
|
847 where UNIQUE_CODE is what's used by the TreeGroup widget in identifying
|
farmbuyer@99
|
848 the "button" clicked in the lefthand tree list.
|
farmbuyer@99
|
849
|
farmbuyer@99
|
850 Will append a reset button IFF an options database has been registered already.
|
farmbuyer@99
|
851 ]]
|
farmbuyer@99
|
852 function addon:register_options_entry (plugin, parent, text, options)
|
farmbuyer@99
|
853 -- if this changes at all, fix up plugin_reset_button accordingly
|
farmbuyer@99
|
854 local code = plugin:GetName()
|
farmbuyer@99
|
855 --if parent
|
farmbuyer@99
|
856
|
farmbuyer@99
|
857 text = text or plugin.moduleName
|
farmbuyer@99
|
858
|
farmbuyer@99
|
859 local handler
|
farmbuyer@102
|
860 local pdb = plugin.moduleName and
|
farmbuyer@102
|
861 self.db:GetNamespace (plugin.moduleName, --[[silent=]]true)
|
farmbuyer@102
|
862
|
farmbuyer@99
|
863 if type(options) == 'table' then
|
farmbuyer@99
|
864 -- AceConfig-style options table
|
farmbuyer@99
|
865 aceconfig_list[code] = true
|
farmbuyer@99
|
866 if not options.args.name then
|
farmbuyer@99
|
867 options.args.name = {
|
farmbuyer@99
|
868 name = plugin.moduleName,
|
farmbuyer@99
|
869 type = 'description',
|
farmbuyer@99
|
870 }
|
farmbuyer@99
|
871 end
|
farmbuyer@99
|
872 options.args.name.name = '|cff30adff' .. options.args.name.name .. '|r'
|
farmbuyer@99
|
873 options.args.name.fontSize = 'large'
|
farmbuyer@99
|
874 options.args.name.width = 'full'
|
farmbuyer@99
|
875 options.args.name.cmdHidden = true
|
farmbuyer@99
|
876 options.args.name.order = 1
|
farmbuyer@99
|
877 if pdb then
|
farmbuyer@99
|
878 options.args.INSERTED_SPACER = {
|
farmbuyer@99
|
879 name = '',
|
farmbuyer@99
|
880 type = 'description',
|
farmbuyer@99
|
881 cmdHidden = true,
|
farmbuyer@99
|
882 width = 'full',
|
farmbuyer@99
|
883 order = 9000,
|
farmbuyer@99
|
884 }
|
farmbuyer@99
|
885 options.args.RESET = {
|
farmbuyer@99
|
886 name = "Reset",
|
farmbuyer@99
|
887 desc = ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(plugin:GetName()),
|
farmbuyer@99
|
888 type = 'execute',
|
farmbuyer@99
|
889 func = function()
|
farmbuyer@99
|
890 pdb:ResetProfile()
|
farmbuyer@99
|
891 if IsShiftKeyDown() then ReloadUI() end
|
farmbuyer@99
|
892 end,
|
farmbuyer@99
|
893 order = 9001,
|
farmbuyer@99
|
894 }
|
farmbuyer@99
|
895 end
|
farmbuyer@99
|
896 LibStub("AceConfig-3.0"):RegisterOptionsTable(plugin:GetName(), options)
|
farmbuyer@99
|
897 handler = function (sf)
|
farmbuyer@99
|
898 LibStub("AceConfigDialog-3.0"):Open (plugin:GetName(), sf)
|
farmbuyer@99
|
899 end
|
farmbuyer@99
|
900
|
farmbuyer@99
|
901 elseif type(options) == 'function' then
|
farmbuyer@99
|
902 -- AceGUI callback
|
farmbuyer@99
|
903 if pdb then
|
farmbuyer@99
|
904 handler = function (sf)
|
farmbuyer@99
|
905 sf:AddChildren(mktitle(text))
|
farmbuyer@99
|
906 local ret = options (sf, plugin, code)
|
farmbuyer@99
|
907 local w = mkbutton("Reset",
|
farmbuyer@99
|
908 ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(text))
|
farmbuyer@99
|
909 w:SetRelativeWidth(0.3)
|
farmbuyer@99
|
910 w:SetCallback("OnClick", function(_w)
|
farmbuyer@99
|
911 pdb:ResetProfile()
|
farmbuyer@99
|
912 if IsShiftKeyDown() then ReloadUI() end
|
farmbuyer@99
|
913 end)
|
farmbuyer@99
|
914 sf:AddChildren(spacer(10),w)
|
farmbuyer@99
|
915 return ret
|
farmbuyer@99
|
916 end
|
farmbuyer@99
|
917 else
|
farmbuyer@99
|
918 handler = function (sf)
|
farmbuyer@99
|
919 sf:AddChildren(mktitle(text))
|
farmbuyer@99
|
920 return options (sf, plugin, code)
|
farmbuyer@99
|
921 end
|
farmbuyer@99
|
922 end
|
farmbuyer@99
|
923
|
farmbuyer@99
|
924 else
|
farmbuyer@99
|
925 error(("Error: 'options' parameter for plugin '%s' is neither table nor function"):format(plugin:GetName()))
|
farmbuyer@99
|
926 end
|
farmbuyer@99
|
927
|
farmbuyer@99
|
928 if not controls[code] then
|
farmbuyer@99
|
929 controls[code] = {}
|
farmbuyer@99
|
930 end
|
farmbuyer@99
|
931 table.insert (controls[code], handler)
|
farmbuyer@99
|
932
|
farmbuyer@99
|
933 table.insert (options_tree, insertion_index, {
|
farmbuyer@99
|
934 value = code,
|
farmbuyer@99
|
935 text = text, -- maybe call markup on this?
|
farmbuyer@99
|
936 })
|
farmbuyer@99
|
937 insertion_index = insertion_index + 1
|
farmbuyer@99
|
938 -- The treegroup will rescan options_tree (via RefreshTree) several times
|
farmbuyer@99
|
939 -- before the player actually sees anything; no more work needs doing.
|
farmbuyer@99
|
940 return -- something that can be used as 'parent'
|
farmbuyer@99
|
941 end
|
farmbuyer@99
|
942
|
farmbuyer@99
|
943
|
farmbuyer@96
|
944 -- vim:noet
|