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