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@96
|
6 -- could probably remove most of this now
|
farmbuyer@96
|
7 -- [29434] = true, -- Badge of Justice
|
farmbuyer@96
|
8 -- [40752] = true, -- Emblem of Heroism
|
farmbuyer@96
|
9 -- [40753] = true, -- Emblem of Valor
|
farmbuyer@96
|
10 -- [45624] = true, -- Emblem of Conquest
|
farmbuyer@96
|
11 -- [43228] = true, -- Stone Keeper's Shard
|
farmbuyer@96
|
12 -- [47241] = true, -- Emblem of Triumph
|
farmbuyer@96
|
13 -- [49426] = true, -- Emblem of Frost
|
farmbuyer@96
|
14 }
|
farmbuyer@96
|
15
|
farmbuyer@96
|
16 -- Mark these as straight to guild vault:
|
farmbuyer@96
|
17 addon.default_itemvault = {
|
farmbuyer@96
|
18 [52078] = true, -- Chaos Orb
|
farmbuyer@96
|
19 [69237] = true, -- Living Ember
|
farmbuyer@96
|
20 [71998] = true, -- Essence of Destruction
|
farmbuyer@96
|
21 }
|
farmbuyer@96
|
22
|
farmbuyer@96
|
23 local options_tree = {
|
farmbuyer@96
|
24 {
|
farmbuyer@96
|
25 value = "pong",
|
farmbuyer@96
|
26 text = "Pongs",
|
farmbuyer@96
|
27 },
|
farmbuyer@96
|
28 {
|
farmbuyer@96
|
29 value = "basic",
|
farmbuyer@96
|
30 text = "Options",
|
farmbuyer@96
|
31 children = {
|
farmbuyer@96
|
32 {
|
farmbuyer@96
|
33 value = "filter",
|
farmbuyer@96
|
34 text = "Item Filters",
|
farmbuyer@96
|
35 },
|
farmbuyer@96
|
36 },
|
farmbuyer@96
|
37 },
|
farmbuyer@96
|
38 {
|
farmbuyer@96
|
39 value = "adv",
|
farmbuyer@96
|
40 text = "Advanced/Debugging",
|
farmbuyer@96
|
41 },
|
farmbuyer@96
|
42 }
|
farmbuyer@96
|
43
|
farmbuyer@96
|
44
|
farmbuyer@96
|
45 --[[
|
farmbuyer@96
|
46 mkbutton ("WidgetType", 'display key', "Text On Widget", "mouseover status text")
|
farmbuyer@96
|
47 mkbutton ( [Button] 'display key', "Text On Widget", "mouseover status text")
|
farmbuyer@96
|
48 mkbutton ( [Button] [text] "Text On Widget", "mouseover status text")
|
farmbuyer@96
|
49 ]]
|
farmbuyer@96
|
50 local mkbutton = addon.gui_state_pointer.mkbutton
|
farmbuyer@96
|
51 local gui = addon.gui_state_pointer
|
farmbuyer@96
|
52 local AceGUI = LibStub("AceGUI-3.0")
|
farmbuyer@96
|
53 local flib = LibStub("LibFarmbuyer")
|
farmbuyer@96
|
54 -- Local ref to OuroLootSV_opts, which may be reassigned after load.
|
farmbuyer@96
|
55 -- So instead this is updated when the tab is displayed.
|
farmbuyer@96
|
56 local opts
|
farmbuyer@96
|
57
|
farmbuyer@96
|
58 local function mktoggle (opt, label, width, desc, opt_func)
|
farmbuyer@96
|
59 local w = mkbutton("CheckBoxSmallLabel", nil, "", desc)
|
farmbuyer@96
|
60 w:SetRelativeWidth(width)
|
farmbuyer@96
|
61 w:SetType("checkbox")
|
farmbuyer@96
|
62 w:SetLabel(label)
|
farmbuyer@96
|
63 if opt then
|
farmbuyer@96
|
64 w:SetValue(opts[opt])
|
farmbuyer@96
|
65 w:SetCallback("OnValueChanged", opt_func or (function(_w,event,value)
|
farmbuyer@96
|
66 opts[opt] = value
|
farmbuyer@96
|
67 end))
|
farmbuyer@96
|
68 end
|
farmbuyer@96
|
69 return w
|
farmbuyer@96
|
70 end
|
farmbuyer@96
|
71
|
farmbuyer@96
|
72 local function mktitle (txt)
|
farmbuyer@96
|
73 local t = AceGUI:Create("Label")
|
farmbuyer@96
|
74 t:SetFullWidth(true)
|
farmbuyer@96
|
75 t:SetColor (0.19, 0.68, 1) -- cff30adff
|
farmbuyer@96
|
76 t:SetFontObject(GameFontHighlightLarge)
|
farmbuyer@96
|
77 t:SetText(txt)
|
farmbuyer@96
|
78 local s = AceGUI:Create("Spacer")
|
farmbuyer@96
|
79 s:SetFullWidth(true)
|
farmbuyer@96
|
80 s:SetHeight(20)
|
farmbuyer@96
|
81 return t, s
|
farmbuyer@96
|
82 end
|
farmbuyer@96
|
83
|
farmbuyer@96
|
84 local function adv_careful_OnTextChanged (ebox,event,value)
|
farmbuyer@96
|
85 -- The EditBox widget's code will call an internal ShowButton routine
|
farmbuyer@96
|
86 -- after this callback returns. ShowButton will test for this flag:
|
farmbuyer@96
|
87 ebox:DisableButton (value == "")
|
farmbuyer@96
|
88 end
|
farmbuyer@96
|
89
|
farmbuyer@96
|
90
|
farmbuyer@96
|
91 ---------------
|
farmbuyer@96
|
92 -- All controls take a scrollframe container set to Flow layout.
|
farmbuyer@96
|
93 local controls = {}
|
farmbuyer@96
|
94 controls.pong = function (container)
|
farmbuyer@96
|
95 container:AddChildren(mktitle[[Echoes from latest ping:]])
|
farmbuyer@96
|
96 addon.sender_list.sort()
|
farmbuyer@96
|
97 if #addon.sender_list.namesI > 0 then
|
farmbuyer@96
|
98 local w = AceGUI:Create("Label")
|
farmbuyer@96
|
99 w:SetFullWidth(true)
|
farmbuyer@96
|
100 w:SetText(table.concat(addon.sender_list.namesI,'\n')) -- sigh
|
farmbuyer@96
|
101 container:AddChild(w)
|
farmbuyer@96
|
102 end
|
farmbuyer@96
|
103 end
|
farmbuyer@96
|
104
|
farmbuyer@96
|
105
|
farmbuyer@96
|
106 ---------------
|
farmbuyer@96
|
107 controls.basic = function (container)
|
farmbuyer@96
|
108 container:AddChildren(mktitle[[Account Options (saved across sessions)]])
|
farmbuyer@96
|
109
|
farmbuyer@96
|
110 container:PauseLayout()
|
farmbuyer@96
|
111 local w
|
farmbuyer@96
|
112 local stdw = 0.99 -- standard width
|
farmbuyer@96
|
113
|
farmbuyer@96
|
114 -- the nubtoggle!
|
farmbuyer@96
|
115 w = mktoggle('gui_noob', [[Show UI Tips]], stdw,
|
farmbuyer@96
|
116 [[Toggles display of the "helpful tips" box hanging off the right side. Useful if you've just installed/upgraded.]])
|
farmbuyer@96
|
117 container:AddChild(w)
|
farmbuyer@96
|
118
|
farmbuyer@96
|
119 -- reminder popup
|
farmbuyer@96
|
120 w = mktoggle('popup_on_join', "Show reminder popup on new raid", stdw,
|
farmbuyer@96
|
121 [[When joining a raid and not already tracking, display a dialog asking for instructions.]])
|
farmbuyer@96
|
122 container:AddChild(w)
|
farmbuyer@96
|
123
|
farmbuyer@96
|
124 -- toggle scroll-to-bottom on first tab
|
farmbuyer@96
|
125 w = mktoggle('scroll_to_bottom', "Scroll to bottom when opening display", stdw,
|
farmbuyer@96
|
126 [[Scroll to the bottom of the loot window (most recent entries) when displaying the GUI.]])
|
farmbuyer@96
|
127 container:AddChild(w)
|
farmbuyer@96
|
128
|
farmbuyer@96
|
129 -- chatty boss mode
|
farmbuyer@96
|
130 w = mktoggle('chatty_on_kill', "Be chatty on boss kill", stdw,
|
farmbuyer@96
|
131 [[Print something to chat output when the boss mod tells Ouro Loot about a successful boss kill.]])
|
farmbuyer@96
|
132 container:AddChild(w)
|
farmbuyer@96
|
133
|
farmbuyer@96
|
134 -- less noise in main panel
|
farmbuyer@96
|
135 w = mktoggle('no_tracking_wipes', "Do not track wipes", stdw,
|
farmbuyer@96
|
136 [[Do not add 'wipe' entries on the main loot grid, or generate any text for them.]])
|
farmbuyer@96
|
137 container:AddChild(w)
|
farmbuyer@96
|
138
|
farmbuyer@96
|
139 -- cutesy abbrevs
|
farmbuyer@96
|
140 w = mktoggle('snarky_boss', "Use snarky boss names", stdw,
|
farmbuyer@96
|
141 [[Irreverent replacement names for boss events. See abbreviations.lua for details.]])
|
farmbuyer@96
|
142 container:AddChild(w)
|
farmbuyer@96
|
143
|
farmbuyer@96
|
144 -- LOD plugins in all cases
|
farmbuyer@96
|
145 w = mktoggle('display_disabled_LODs', "Include disabled plugins", stdw,
|
farmbuyer@96
|
146 [[Show loadable plugins even if they've been disabled (and offer to enable them). Relog to take effect.]])
|
farmbuyer@96
|
147 container:AddChild(w)
|
farmbuyer@96
|
148
|
farmbuyer@96
|
149 -- showing the "(from Rebroadcasterdude)" in the notes column
|
farmbuyer@96
|
150 w = mktoggle('display_bcast_from', "Show rebroadcasting player", stdw,
|
farmbuyer@96
|
151 [[Include "from PlayerName" in the Notes column for loot that was broadcast to you. (Not included in forum output).]],
|
farmbuyer@96
|
152 function(_w,_e,value)
|
farmbuyer@96
|
153 opts.display_bcast_from = value
|
farmbuyer@96
|
154 addon.loot_clean = nil
|
farmbuyer@96
|
155 end)
|
farmbuyer@96
|
156 container:AddChild(w)
|
farmbuyer@96
|
157
|
farmbuyer@96
|
158 -- prefilling g_uniques with history
|
farmbuyer@96
|
159 w = mktoggle('precache_history_uniques', "Prescan for faster handling", stdw,
|
farmbuyer@96
|
160 [[See description under +Help -- Handy Tips -- Prescanning> for instructions.]])
|
farmbuyer@96
|
161 container:AddChild(w)
|
farmbuyer@96
|
162
|
farmbuyer@96
|
163 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w)
|
farmbuyer@96
|
164 -- possible keybindings
|
farmbuyer@96
|
165 do
|
farmbuyer@96
|
166 local pair = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
167 pair:SetLayout("List")
|
farmbuyer@96
|
168 pair:SetRelativeWidth(0.49)
|
farmbuyer@96
|
169 pair:SetTitle("Keybinding for '/ouroloot'")
|
farmbuyer@96
|
170 local editbox, checkbox
|
farmbuyer@96
|
171 editbox = mkbutton("EditBox", nil, opts.keybinding_text,
|
farmbuyer@96
|
172 [[Keybinding text format is fragile! (All caps, ALT then CTRL then SHIFT.) Relog to take effect.]])
|
farmbuyer@96
|
173 editbox:SetFullWidth(true)
|
farmbuyer@96
|
174 editbox:SetLabel("Keybinding text")
|
farmbuyer@96
|
175 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
176 opts.keybinding_text = value
|
farmbuyer@96
|
177 end)
|
farmbuyer@96
|
178 editbox:SetDisabled(not opts.keybinding)
|
farmbuyer@96
|
179 checkbox = mktoggle('keybinding', "Register keybinding", 1,
|
farmbuyer@96
|
180 [[Register a keybinding to toggle the loot display. Relog to take effect.]],
|
farmbuyer@96
|
181 function (_w,_,value)
|
farmbuyer@96
|
182 opts.keybinding = value
|
farmbuyer@96
|
183 editbox:SetDisabled(not opts.keybinding)
|
farmbuyer@96
|
184 end)
|
farmbuyer@96
|
185 checkbox:SetFullWidth(true)
|
farmbuyer@96
|
186 pair:AddChild(checkbox)
|
farmbuyer@96
|
187 pair:AddChild(editbox)
|
farmbuyer@96
|
188 container:AddChild(pair)
|
farmbuyer@96
|
189 end
|
farmbuyer@96
|
190
|
farmbuyer@96
|
191 -- replacement for slashloot
|
farmbuyer@96
|
192 do
|
farmbuyer@96
|
193 local pair = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
194 pair:SetLayout("List")
|
farmbuyer@96
|
195 pair:SetRelativeWidth(0.49)
|
farmbuyer@96
|
196 pair:SetTitle('Synonyms for "/ouroloot"')
|
farmbuyer@96
|
197 local editbox, checkbox
|
farmbuyer@96
|
198 editbox = mkbutton("EditBox", nil, opts.slash_synonyms,
|
farmbuyer@96
|
199 [[Separate multiple synonyms with a comma. Relog to take effect.]])
|
farmbuyer@96
|
200 editbox:SetFullWidth(true)
|
farmbuyer@96
|
201 editbox:SetLabel("Slash commands")
|
farmbuyer@96
|
202 editbox:SetCallback("OnEnterPressed", function(_e,event,value)
|
farmbuyer@96
|
203 -- Do the sanity checking here rather than at each login.
|
farmbuyer@96
|
204 -- This is not foolproof. That's okay.
|
farmbuyer@96
|
205 local t = { strsplit(',', tostring(value)) }
|
farmbuyer@96
|
206 for k,v in ipairs(t) do
|
farmbuyer@96
|
207 v = v:trim()
|
farmbuyer@96
|
208 if v:sub(1,1) ~= "/" then
|
farmbuyer@96
|
209 v = "/" .. v
|
farmbuyer@96
|
210 end
|
farmbuyer@96
|
211 t[k] = v
|
farmbuyer@96
|
212 end
|
farmbuyer@96
|
213 value = table.concat(t,',')
|
farmbuyer@96
|
214 _e:SetText(value)
|
farmbuyer@96
|
215 opts.slash_synonyms = value
|
farmbuyer@96
|
216 end)
|
farmbuyer@96
|
217 editbox:SetDisabled(not opts.register_slash_synonyms)
|
farmbuyer@96
|
218 checkbox = mktoggle('register_slash_synonyms', "Register slash commands", 1,
|
farmbuyer@96
|
219 [[Register these slash commands as synonyms for "/ouroloot". Relog to take effect.]],
|
farmbuyer@96
|
220 function (_w,_,value)
|
farmbuyer@96
|
221 opts.register_slash_synonyms = value
|
farmbuyer@96
|
222 editbox:SetDisabled(not opts.register_slash_synonyms)
|
farmbuyer@96
|
223 end)
|
farmbuyer@96
|
224 checkbox:SetFullWidth(true)
|
farmbuyer@96
|
225 pair:AddChild(checkbox)
|
farmbuyer@96
|
226 pair:AddChild(editbox)
|
farmbuyer@96
|
227 container:AddChild(pair)
|
farmbuyer@96
|
228 end
|
farmbuyer@96
|
229
|
farmbuyer@96
|
230 -- chatty disposition/assignment changes
|
farmbuyer@96
|
231 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w)
|
farmbuyer@96
|
232 do
|
farmbuyer@96
|
233 local chatgroup = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
234 chatgroup:SetLayout("List")
|
farmbuyer@96
|
235 chatgroup:SetRelativeWidth(0.75)
|
farmbuyer@96
|
236 chatgroup:SetTitle("Remote Changes Chat")
|
farmbuyer@96
|
237 local toggle, editbox
|
farmbuyer@96
|
238 toggle = mktoggle('chatty_on_remote_changes', "Be chatty on remote changes", 1,
|
farmbuyer@96
|
239 [[Print something to chat when other users change recorded loot.]],
|
farmbuyer@96
|
240 function (_w,_,value)
|
farmbuyer@96
|
241 opts.chatty_on_remote_changes = value
|
farmbuyer@96
|
242 editbox:SetDisabled(not opts.chatty_on_remote_changes)
|
farmbuyer@96
|
243 end)
|
farmbuyer@96
|
244 toggle:SetFullWidth(true)
|
farmbuyer@96
|
245 chatgroup:AddChild(toggle)
|
farmbuyer@96
|
246 w = AceGUI:Create("Label")
|
farmbuyer@96
|
247 w:SetFullWidth(true)
|
farmbuyer@96
|
248 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
|
249 chatgroup:AddChild(w)
|
farmbuyer@96
|
250 editbox = mkbutton("EditBox", nil, opts.chatty_on_remote_changes_frame,
|
farmbuyer@96
|
251 [[1 = default chat frame, 2 = combat log, etc]])
|
farmbuyer@96
|
252 editbox:SetFullWidth(true)
|
farmbuyer@96
|
253 editbox:SetLabel("Output Chatframe")
|
farmbuyer@96
|
254 editbox:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
255 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
256 local prev = opts.chatty_on_remote_changes_frame
|
farmbuyer@96
|
257 value = value:trim()
|
farmbuyer@96
|
258 value = tonumber(value) or value
|
farmbuyer@96
|
259 if addon:_set_remote_change_chatframe (value) then
|
farmbuyer@96
|
260 opts.chatty_on_remote_changes_frame = value
|
farmbuyer@96
|
261 _w:SetText(tostring(value))
|
farmbuyer@96
|
262 _w.editbox:ClearFocus()
|
farmbuyer@96
|
263 else
|
farmbuyer@96
|
264 _w:SetText(tostring(prev))
|
farmbuyer@96
|
265 end
|
farmbuyer@96
|
266 end)
|
farmbuyer@96
|
267 editbox:SetDisabled(not opts.chatty_on_remote_changes)
|
farmbuyer@96
|
268 chatgroup:AddChild(editbox)
|
farmbuyer@96
|
269 w = mkbutton("Chat Frame Numbers",
|
farmbuyer@96
|
270 [[Print each chat window number in its own frame, for easy reference in the editing field.]])
|
farmbuyer@96
|
271 w:SetFullWidth(true)
|
farmbuyer@96
|
272 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
273 for i = 1, NUM_CHAT_WINDOWS do
|
farmbuyer@96
|
274 local cf = _G['ChatFrame'..i]
|
farmbuyer@96
|
275 if not cf then break end
|
farmbuyer@96
|
276 addon:CFPrint (cf, "This is frame number |cffff0000%d|r.", i)
|
farmbuyer@96
|
277 end
|
farmbuyer@96
|
278 end)
|
farmbuyer@96
|
279 chatgroup:AddChild(w)
|
farmbuyer@96
|
280 container:AddChild(chatgroup)
|
farmbuyer@96
|
281 end
|
farmbuyer@96
|
282
|
farmbuyer@96
|
283 -- boss mod selection
|
farmbuyer@96
|
284 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(2) container:AddChild(w)
|
farmbuyer@96
|
285 do
|
farmbuyer@96
|
286 local list = {}
|
farmbuyer@96
|
287 local current
|
farmbuyer@96
|
288 for k,v in ipairs(addon.bossmods) do
|
farmbuyer@96
|
289 list[k] = v.n
|
farmbuyer@96
|
290 if v.n == opts.bossmod then
|
farmbuyer@96
|
291 current = k
|
farmbuyer@96
|
292 end
|
farmbuyer@96
|
293 end
|
farmbuyer@96
|
294 w = mkbutton("Dropdown", nil, "", [[Which 'boss mod' to use.]])
|
farmbuyer@96
|
295 w:SetRelativeWidth(0.3)
|
farmbuyer@96
|
296 w:SetLabel("Boss Mod:")
|
farmbuyer@96
|
297 w:SetList(list)
|
farmbuyer@96
|
298 w:SetValue(current)
|
farmbuyer@96
|
299 w:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@96
|
300 opts.bossmod = list[choice]
|
farmbuyer@96
|
301 end)
|
farmbuyer@96
|
302 container:AddChild(w)
|
farmbuyer@96
|
303 end
|
farmbuyer@96
|
304
|
farmbuyer@96
|
305 container:ResumeLayout()
|
farmbuyer@96
|
306 container:DoLayout()
|
farmbuyer@96
|
307 AceGUI:ClearFocus()
|
farmbuyer@96
|
308 end
|
farmbuyer@96
|
309
|
farmbuyer@96
|
310
|
farmbuyer@96
|
311 ---------------
|
farmbuyer@96
|
312 do
|
farmbuyer@96
|
313 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
|
314 local cache_warn, cache_warned = false, false
|
farmbuyer@96
|
315 local function do_warning (cnt)
|
farmbuyer@96
|
316 if cache_warn and not cache_warned then
|
farmbuyer@96
|
317 cache_warned = true
|
farmbuyer@96
|
318 addon:Print(warntext)
|
farmbuyer@96
|
319 local t = AceGUI:Create("Label")
|
farmbuyer@96
|
320 t:SetFullWidth(true)
|
farmbuyer@96
|
321 t:SetText(warntext)
|
farmbuyer@96
|
322 cnt:AddChild(t)
|
farmbuyer@96
|
323 end
|
farmbuyer@96
|
324 end
|
farmbuyer@96
|
325
|
farmbuyer@96
|
326 controls.basic_filter = function (container)
|
farmbuyer@96
|
327 container:AddChildren(mktitle[[Item-Specific Special Handling]])
|
farmbuyer@96
|
328
|
farmbuyer@96
|
329 cache_warn, cache_warned = false, false
|
farmbuyer@96
|
330 local filterlist, vaultlist = {}, {}
|
farmbuyer@96
|
331 for id in pairs(opts.itemfilter) do
|
farmbuyer@96
|
332 local iname, _, iquality = GetItemInfo(id)
|
farmbuyer@96
|
333 if iname then
|
farmbuyer@96
|
334 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
335 else
|
farmbuyer@96
|
336 filterlist[id] = id
|
farmbuyer@96
|
337 cache_warn = true
|
farmbuyer@96
|
338 end
|
farmbuyer@96
|
339 end
|
farmbuyer@96
|
340 for id in pairs(opts.itemvault) do
|
farmbuyer@96
|
341 local iname, _, iquality = GetItemInfo(id)
|
farmbuyer@96
|
342 if iname then
|
farmbuyer@96
|
343 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
344 else
|
farmbuyer@96
|
345 vaultlist[id] = id
|
farmbuyer@96
|
346 cache_warn = true
|
farmbuyer@96
|
347 end
|
farmbuyer@96
|
348 end
|
farmbuyer@96
|
349
|
farmbuyer@96
|
350 local w = AceGUI:Create("EditBoxDropDown")
|
farmbuyer@96
|
351 w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
352 w:SetText("Item filter")
|
farmbuyer@96
|
353 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
|
farmbuyer@96
|
354 w:SetList(filterlist)
|
farmbuyer@96
|
355 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
|
farmbuyer@96
|
356 local iname, ilink, iquality = GetItemInfo(text:trim())
|
farmbuyer@96
|
357 if not iname then
|
farmbuyer@96
|
358 return addon:Print("Error: %s is not a valid item name/link!", text)
|
farmbuyer@96
|
359 end
|
farmbuyer@96
|
360 local id = tonumber(ilink:match("item:(%d+)"))
|
farmbuyer@96
|
361 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
362 opts.itemfilter[id] = true
|
farmbuyer@96
|
363 addon:Print("Now filtering out", ilink)
|
farmbuyer@96
|
364 end)
|
farmbuyer@96
|
365 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
|
farmbuyer@96
|
366 --local ilink = select(2,GetItemInfo(key_id))
|
farmbuyer@96
|
367 opts.itemfilter[tonumber(key_id)] = nil
|
farmbuyer@96
|
368 --addon:Print("No longer filtering out", ilink)
|
farmbuyer@96
|
369 addon:Print("No longer filtering out", val_name)
|
farmbuyer@96
|
370 end)
|
farmbuyer@96
|
371 --w:SetCallback("OnDropdownShown",do_warning)
|
farmbuyer@96
|
372 w:SetCallback("OnDropdownShown", function()
|
farmbuyer@96
|
373 do_warning(container)
|
farmbuyer@96
|
374 end)
|
farmbuyer@96
|
375 container:AddChild(w)
|
farmbuyer@96
|
376
|
farmbuyer@96
|
377 w = AceGUI:Create("Spacer")
|
farmbuyer@96
|
378 w:SetRelativeWidth(0.1)
|
farmbuyer@96
|
379 w:SetHeight(2)
|
farmbuyer@96
|
380 container:AddChild(w)
|
farmbuyer@96
|
381
|
farmbuyer@96
|
382 w = AceGUI:Create("EditBoxDropDown")
|
farmbuyer@96
|
383 w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
384 w:SetText("Vault items")
|
farmbuyer@96
|
385 w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.")
|
farmbuyer@96
|
386 w:SetList(vaultlist)
|
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 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@96
|
394 opts.itemvault[id] = true
|
farmbuyer@96
|
395 addon:Print("Now auto-vaulting", 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 auto-vaulting", val_name)
|
farmbuyer@96
|
402 end)
|
farmbuyer@96
|
403 w:SetCallback("OnDropdownShown",do_warning)
|
farmbuyer@96
|
404 container:AddChild(w)
|
farmbuyer@96
|
405 end
|
farmbuyer@96
|
406 end
|
farmbuyer@96
|
407
|
farmbuyer@96
|
408
|
farmbuyer@96
|
409 ---------------
|
farmbuyer@96
|
410 local adv_real = function (container)
|
farmbuyer@96
|
411 container:AddChildren(mktitle[[Debugging Options (not saved across sessions)]])
|
farmbuyer@96
|
412
|
farmbuyer@96
|
413 container:PauseLayout()
|
farmbuyer@96
|
414 local w
|
farmbuyer@96
|
415
|
farmbuyer@96
|
416 do
|
farmbuyer@96
|
417 local grp = AceGUI:Create("InlineGroup")
|
farmbuyer@96
|
418 grp:SetLayout("List")
|
farmbuyer@96
|
419 grp:SetRelativeWidth(0.60)
|
farmbuyer@96
|
420 grp:SetTitle("Output of debugging messages")
|
farmbuyer@96
|
421
|
farmbuyer@96
|
422 w = AceGUI:Create("CheckBoxSmallLabel")
|
farmbuyer@96
|
423 w:SetFullWidth(true)
|
farmbuyer@96
|
424 w:SetType("checkbox")
|
farmbuyer@96
|
425 w:SetLabel("master toggle")
|
farmbuyer@96
|
426 w:SetValue(addon.DEBUG_PRINT)
|
farmbuyer@96
|
427 w:SetCallback("OnValueChanged", function(_w,event,value)
|
farmbuyer@96
|
428 addon.DEBUG_PRINT = value
|
farmbuyer@96
|
429 addon:redisplay()
|
farmbuyer@96
|
430 end)
|
farmbuyer@96
|
431 grp:AddChild(w)
|
farmbuyer@96
|
432 for d,v in pairs(addon.debug) do
|
farmbuyer@96
|
433 w = AceGUI:Create("CheckBoxSmallLabel")
|
farmbuyer@96
|
434 w:SetFullWidth(true)
|
farmbuyer@96
|
435 w:SetType("checkbox")
|
farmbuyer@96
|
436 w:SetLabel(d)
|
farmbuyer@96
|
437 if d == "notraid" then
|
farmbuyer@96
|
438 w:SetDescription[[Tick this before enabling to make the addon work outside of raid groups]]
|
farmbuyer@96
|
439 else
|
farmbuyer@96
|
440 if d == "alsolog" then
|
farmbuyer@96
|
441 w:SetDescription[[Also log all debug messages to disk. See print_log.lua in the addon folder for later viewing.]]
|
farmbuyer@96
|
442 end
|
farmbuyer@96
|
443 w:SetDisabled(not addon.DEBUG_PRINT)
|
farmbuyer@96
|
444 end
|
farmbuyer@96
|
445 w:SetValue(v)
|
farmbuyer@96
|
446 w:SetCallback("OnValueChanged", function(_w,event,value) addon.debug[d] = value end)
|
farmbuyer@96
|
447 grp:AddChild(w)
|
farmbuyer@96
|
448 end
|
farmbuyer@96
|
449 container:AddChild(grp)
|
farmbuyer@96
|
450 end
|
farmbuyer@96
|
451
|
farmbuyer@96
|
452 do
|
farmbuyer@96
|
453 local simple = AceGUI:Create("SimpleGroup")
|
farmbuyer@96
|
454 simple:SetLayout("List")
|
farmbuyer@96
|
455 simple:SetRelativeWidth(0.35)
|
farmbuyer@96
|
456 w = AceGUI:Create("CheckBoxSmallLabel")
|
farmbuyer@96
|
457 --w:SetRelativeWidth(0.35)
|
farmbuyer@96
|
458 w:SetFullWidth(true)
|
farmbuyer@96
|
459 w:SetType("checkbox")
|
farmbuyer@96
|
460 w:SetLabel("GOP history mode")
|
farmbuyer@96
|
461 w:SetValue(addon.history_suppress)
|
farmbuyer@96
|
462 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end)
|
farmbuyer@96
|
463 simple:AddChild(w)
|
farmbuyer@96
|
464 w = mkbutton("Dropdown", nil, "",
|
farmbuyer@96
|
465 [[if active, tooltip shown when hovering over Item column only]])
|
farmbuyer@96
|
466 --w:SetRelativeWidth(0.4)
|
farmbuyer@96
|
467 w:SetFullWidth(true)
|
farmbuyer@96
|
468 w:SetLabel("loot debugging tooltip")
|
farmbuyer@96
|
469 w:SetList{
|
farmbuyer@96
|
470 [1] = "Off",
|
farmbuyer@96
|
471 [2] = "/dump into tooltip",
|
farmbuyer@96
|
472 [3] = "small fixed fields",
|
farmbuyer@96
|
473 }
|
farmbuyer@96
|
474 w:SetValue(gui._do_debugging_tooltip or 1)
|
farmbuyer@96
|
475 w:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@96
|
476 gui._do_debugging_tooltip = choice > 1 and choice or nil
|
farmbuyer@96
|
477 end)
|
farmbuyer@96
|
478 simple:AddChild(w)
|
farmbuyer@96
|
479 container:AddChild(simple)
|
farmbuyer@96
|
480 end
|
farmbuyer@96
|
481
|
farmbuyer@96
|
482 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w)
|
farmbuyer@96
|
483
|
farmbuyer@96
|
484 w = mkbutton("EditBox", 'comm_ident', addon.ident,
|
farmbuyer@96
|
485 [[Set tracking to 'Disabled' in the top-right dropdown, then change this field (click Okay or press Enter).]])
|
farmbuyer@96
|
486 w:SetRelativeWidth(0.25)
|
farmbuyer@96
|
487 w:SetLabel("Addon channel ID")
|
farmbuyer@96
|
488 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
489 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
490 -- if they set it to blank spaces, they're boned. oh well.
|
farmbuyer@96
|
491 -- Re-enabling will take care of propogating this new value.
|
farmbuyer@96
|
492 addon.ident = (value == "") and "OuroLoot2" or value
|
farmbuyer@96
|
493 _w:SetText(addon.ident)
|
farmbuyer@96
|
494 addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.")
|
farmbuyer@96
|
495 end)
|
farmbuyer@96
|
496 w:SetDisabled(addon.enabled or addon.rebroadcast)
|
farmbuyer@96
|
497 container:AddChild(w)
|
farmbuyer@96
|
498
|
farmbuyer@96
|
499 w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache TTL]])
|
farmbuyer@96
|
500 w:SetRelativeWidth(0.1)
|
farmbuyer@96
|
501 w:SetLabel("ttl")
|
farmbuyer@96
|
502 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@96
|
503 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@96
|
504 value = tonumber(value) or addon.recent_messages.ttl
|
farmbuyer@96
|
505 addon.recent_messages.ttl = value
|
farmbuyer@96
|
506 _w:SetText(tostring(value))
|
farmbuyer@96
|
507 end)
|
farmbuyer@96
|
508 container:AddChild(w)
|
farmbuyer@96
|
509
|
farmbuyer@96
|
510 w = mkbutton("load nsaab1548", [[Cursed Darkhound]])
|
farmbuyer@96
|
511 w:SetRelativeWidth(0.25)
|
farmbuyer@96
|
512 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
513 for i, v in ipairs(DBM.AddOns) do
|
farmbuyer@96
|
514 if v.modId == "DBM-NotScaryAtAll" then
|
farmbuyer@96
|
515 DBM:LoadMod(v)
|
farmbuyer@96
|
516 break
|
farmbuyer@96
|
517 end
|
farmbuyer@96
|
518 end
|
farmbuyer@96
|
519 local mod = DBM:GetModByName("NotScaryAtAll")
|
farmbuyer@96
|
520 if mod then
|
farmbuyer@96
|
521 mod:EnableMod()
|
farmbuyer@96
|
522 addon:Print("Now tracking ID",mod.creatureId)
|
farmbuyer@96
|
523 else
|
farmbuyer@96
|
524 addon:Print("Can do nothing; DBM testing mod wasn't loaded.")
|
farmbuyer@96
|
525 end
|
farmbuyer@96
|
526 end)
|
farmbuyer@96
|
527 w:SetDisabled(addon.bossmod_registered ~= 'DBM')
|
farmbuyer@96
|
528 container:AddChild(w)
|
farmbuyer@96
|
529
|
farmbuyer@96
|
530 w = mkbutton("GC", [[full GC cycle]])
|
farmbuyer@96
|
531 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
532 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
533 local before = collectgarbage('count')
|
farmbuyer@96
|
534 collectgarbage('collect')
|
farmbuyer@96
|
535 local after = collectgarbage('count')
|
farmbuyer@96
|
536 addon:Print("Collected %d KB, %d KB still in use by Lua universe.", before-after, after)
|
farmbuyer@96
|
537 end)
|
farmbuyer@96
|
538 container:AddChild(w)
|
farmbuyer@96
|
539
|
farmbuyer@96
|
540 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(3) container:AddChild(w)
|
farmbuyer@96
|
541 do
|
farmbuyer@96
|
542 local simple = AceGUI:Create("SimpleGroup")
|
farmbuyer@96
|
543 simple:SetLayout("Flow")
|
farmbuyer@96
|
544 --simple:SetRelativeWidth(0.95)
|
farmbuyer@96
|
545 simple:SetFullWidth(true)
|
farmbuyer@96
|
546 w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]])
|
farmbuyer@96
|
547 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
548 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
549 PlaySoundFile ([[Sound\Music\WorldEvents\HordeFirepole.mp3]], "Master")
|
farmbuyer@96
|
550 end)
|
farmbuyer@96
|
551 simple:AddChild(w)
|
farmbuyer@96
|
552 w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]])
|
farmbuyer@96
|
553 w:SetRelativeWidth(0.2)
|
farmbuyer@96
|
554 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
555 PlaySoundFile ([[Sound\Music\WorldEvents\AllianceFirepole.mp3]], "Master")
|
farmbuyer@96
|
556 end)
|
farmbuyer@96
|
557 simple:AddChild(w)
|
farmbuyer@96
|
558 w = mkbutton("SFRR", [[test]])
|
farmbuyer@96
|
559 w:SetRelativeWidth(0.15)
|
farmbuyer@96
|
560 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
561 PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "Master")
|
farmbuyer@96
|
562 end)
|
farmbuyer@96
|
563 simple:AddChild(w)
|
farmbuyer@96
|
564
|
farmbuyer@96
|
565 container:AddChild(simple)
|
farmbuyer@96
|
566 end
|
farmbuyer@96
|
567
|
farmbuyer@96
|
568 w = AceGUI:Create("Spacer") w:SetRelativeWidth(0.65) w:SetHeight(15) container:AddChild(w)
|
farmbuyer@96
|
569 w = mkbutton("Clear All & Reload",
|
farmbuyer@96
|
570 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
|
farmbuyer@96
|
571 w:SetRelativeWidth(0.3)
|
farmbuyer@96
|
572 w:SetCallback("OnClick", function()
|
farmbuyer@96
|
573 addon:_clear_SVs() -- reloads
|
farmbuyer@96
|
574 end)
|
farmbuyer@96
|
575 container:AddChild(w)
|
farmbuyer@96
|
576
|
farmbuyer@96
|
577 container:ResumeLayout()
|
farmbuyer@96
|
578 container:DoLayout()
|
farmbuyer@96
|
579 AceGUI:ClearFocus()
|
farmbuyer@96
|
580 --container:SetScroll(1000) -- scrollframe widget's max value
|
farmbuyer@96
|
581 end
|
farmbuyer@96
|
582
|
farmbuyer@96
|
583 -- Initial advanced panel function (unless debug mode is on during load, which
|
farmbuyer@96
|
584 -- means it was almost certainly hardcoded that way, which means it's probably
|
farmbuyer@96
|
585 -- me testing).
|
farmbuyer@96
|
586 if false and addon.DEBUG_PRINT then
|
farmbuyer@96
|
587 controls.adv = adv_real
|
farmbuyer@96
|
588 else
|
farmbuyer@96
|
589 controls.adv = function (container)
|
farmbuyer@96
|
590 local speedbump = AceGUI:Create("InteractiveLabel")
|
farmbuyer@96
|
591 speedbump:SetFullWidth(true)
|
farmbuyer@96
|
592 speedbump:SetFontObject(GameFontHighlightLarge)
|
farmbuyer@96
|
593 speedbump:SetImage[[Interface\DialogFrame\DialogAlertIcon]]
|
farmbuyer@96
|
594 speedbump:SetImageSize(50,50)
|
farmbuyer@96
|
595 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
|
596 speedbump:SetCallback("OnClick", function (_sb)
|
farmbuyer@96
|
597 controls.adv = { adv_real }
|
farmbuyer@96
|
598 return addon:redisplay()
|
farmbuyer@96
|
599 end)
|
farmbuyer@96
|
600 container:AddChild(speedbump)
|
farmbuyer@96
|
601 end
|
farmbuyer@96
|
602 end
|
farmbuyer@96
|
603
|
farmbuyer@96
|
604
|
farmbuyer@96
|
605 ---------------
|
farmbuyer@96
|
606 -- Tab 6: Options
|
farmbuyer@96
|
607 do
|
farmbuyer@96
|
608 local funkified = {}
|
farmbuyer@96
|
609 for key,f in pairs(controls) do
|
farmbuyer@96
|
610 -- this is how TreeGroup makes unique keys
|
farmbuyer@96
|
611 local funkykey = key:gsub('_','\001')
|
farmbuyer@96
|
612 funkified[funkykey] = { f }
|
farmbuyer@96
|
613 end
|
farmbuyer@96
|
614 controls = funkified
|
farmbuyer@96
|
615 end
|
farmbuyer@96
|
616
|
farmbuyer@96
|
617 -- widget container status tables (will have things magically appear
|
farmbuyer@96
|
618 -- inside them that we wish to preserve)
|
farmbuyer@96
|
619 local status_for_scroll = {}
|
farmbuyer@96
|
620 local status_for_select = { treewidth = 160 }
|
farmbuyer@96
|
621
|
farmbuyer@96
|
622 -- Clicking an entry on the left tree column.
|
farmbuyer@96
|
623 local opt_OnGroupSelected_func = function (treeg,event,category)
|
farmbuyer@96
|
624 local catfuncs = controls[category]
|
farmbuyer@96
|
625 if not catfuncs then
|
farmbuyer@96
|
626 addon:horrible_horrible_error(("Category '%s' has no handler function!"):format(category:gsub('\001','_')))
|
farmbuyer@96
|
627 end
|
farmbuyer@96
|
628 treeg:ReleaseChildren()
|
farmbuyer@96
|
629 local sf = AceGUI:Create("ScrollFrame")
|
farmbuyer@96
|
630 sf:SetStatusTable(status_for_scroll)
|
farmbuyer@96
|
631 sf:SetLayout("Flow")
|
farmbuyer@96
|
632 -- This forces the scrolling area to be bigger than the visible area; else
|
farmbuyer@96
|
633 -- some of the text gets cut off without ever triggering the scrollbar.
|
farmbuyer@96
|
634 sf.content:SetHeight(700)
|
farmbuyer@96
|
635 for _,func in ipairs(catfuncs) do
|
farmbuyer@96
|
636 if func(sf) then break end
|
farmbuyer@96
|
637 end
|
farmbuyer@96
|
638 treeg:AddChild(sf)
|
farmbuyer@96
|
639 if treeg:GetUserData("options restore scroll") then
|
farmbuyer@96
|
640 if status_for_scroll.scrollvalue then
|
farmbuyer@96
|
641 sf:SetScroll(status_for_scroll.scrollvalue)
|
farmbuyer@96
|
642 end
|
farmbuyer@96
|
643 treeg:SetUserData("options restore scroll", false)
|
farmbuyer@96
|
644 else
|
farmbuyer@96
|
645 sf:SetScroll(0)
|
farmbuyer@96
|
646 end
|
farmbuyer@96
|
647 end
|
farmbuyer@96
|
648
|
farmbuyer@96
|
649 -- Clicking the Options tab as a whole (tabs_OnGroupSelected["opt"]).
|
farmbuyer@96
|
650 local tabs_OGS = function (container, specials)
|
farmbuyer@96
|
651 opts = OuroLootSV_opts
|
farmbuyer@96
|
652
|
farmbuyer@96
|
653 container:SetLayout("Fill")
|
farmbuyer@96
|
654 local left = AceGUI:Create("TreeGroup")
|
farmbuyer@96
|
655 left:SetStatusTable(status_for_select)
|
farmbuyer@96
|
656 left:SetLayout("Fill")
|
farmbuyer@96
|
657 left:SetFullWidth(true)
|
farmbuyer@96
|
658 left:SetFullHeight(true)
|
farmbuyer@96
|
659 left:EnableButtonTooltips(false)
|
farmbuyer@96
|
660 left:SetTree(options_tree)
|
farmbuyer@96
|
661 left:SetCallback("OnGroupSelected", opt_OnGroupSelected_func)
|
farmbuyer@96
|
662 container:AddChild(left)
|
farmbuyer@96
|
663 if status_for_select.selected then
|
farmbuyer@96
|
664 left:SetUserData("options restore scroll", true)
|
farmbuyer@96
|
665 left:SelectByValue(status_for_select.selected)
|
farmbuyer@96
|
666 else
|
farmbuyer@96
|
667 left:SelectByValue("basic")
|
farmbuyer@96
|
668 end
|
farmbuyer@96
|
669
|
farmbuyer@96
|
670 local w = mkbutton("ReloadUI",
|
farmbuyer@96
|
671 [[Does what you think it does. Loot information is written out and restored.]])
|
farmbuyer@96
|
672 w:SetFullWidth(true)
|
farmbuyer@96
|
673 w:SetCallback("OnClick", ReloadUI)
|
farmbuyer@96
|
674 specials:AddChild(w)
|
farmbuyer@96
|
675
|
farmbuyer@96
|
676 w = mkbutton("Ping!",
|
farmbuyer@96
|
677 [[Queries other raid users for their addon version and current status. Results displayed on Pongs panel after five seconds.]])
|
farmbuyer@96
|
678 w:SetFullWidth(true)
|
farmbuyer@96
|
679 w:SetCallback("OnClick", function(_w)
|
farmbuyer@96
|
680 _w:SetText("5... 4... 3...")
|
farmbuyer@96
|
681 _w:SetDisabled(true)
|
farmbuyer@96
|
682 addon:DoPing()
|
farmbuyer@96
|
683 addon:ScheduleTimer(function(b)
|
farmbuyer@96
|
684 if b:IsVisible() then
|
farmbuyer@96
|
685 return addon:redisplay()
|
farmbuyer@96
|
686 end
|
farmbuyer@96
|
687 end, 5, _w)
|
farmbuyer@96
|
688 end)
|
farmbuyer@96
|
689 specials:AddChild(w)
|
farmbuyer@96
|
690 end
|
farmbuyer@96
|
691
|
farmbuyer@96
|
692 addon:register_tab_control_AT_END ("opt", [[Options]],
|
farmbuyer@96
|
693 [[Options for fine-tuning behavior]], tabs_OGS)
|
farmbuyer@96
|
694
|
farmbuyer@96
|
695 -- vim:noet
|