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