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