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