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