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