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