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