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