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