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