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