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