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