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