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