annotate options.lua @ 105:646c9b41aaed

Verbage tweaks.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Sun, 05 Aug 2012 16:59:24 +0000
parents 04198c8d0717
children 35b55c6f5551
rev   line source
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@102 72 local w = mkbutton("CheckBox", 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@105 163 [[Show loadable plugins even if they've been disabled (and offer to enable them if clicked). 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@104 186 pair:SetTitle('Keybinding for "/ouroloot toggle"')
farmbuyer@104 187 local checkbox, button
farmbuyer@104 188 --[=[
farmbuyer@96 189 editbox = mkbutton("EditBox", nil, opts.keybinding_text,
farmbuyer@96 190 [[Keybinding text format is fragile! (All caps, ALT then CTRL then SHIFT.) Relog to take effect.]])
farmbuyer@96 191 editbox:SetFullWidth(true)
farmbuyer@96 192 editbox:SetLabel("Keybinding text")
farmbuyer@96 193 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 194 opts.keybinding_text = value
farmbuyer@96 195 end)
farmbuyer@96 196 editbox:SetDisabled(not opts.keybinding)
farmbuyer@104 197 ]=]
farmbuyer@96 198 checkbox = mktoggle('keybinding', "Register keybinding", 1,
farmbuyer@104 199 [[Whether to register a keybinding to toggle the loot display. Relog to take effect.]],
farmbuyer@96 200 function (_w,_,value)
farmbuyer@96 201 opts.keybinding = value
farmbuyer@104 202 --editbox:SetDisabled(not opts.keybinding)
farmbuyer@104 203 button:SetDisabled(not opts.keybinding)
farmbuyer@96 204 end)
farmbuyer@96 205 checkbox:SetFullWidth(true)
farmbuyer@104 206 button = mkbutton("Keybinding", nil, "",
farmbuyer@104 207 -- This wording is not quite accurate, but auto-l10n is nice.
farmbuyer@104 208 _G.BIND_KEY_TO_COMMAND:format([['/ouroloot toggle']]))
farmbuyer@104 209 button:SetFullWidth(true)
farmbuyer@104 210 --button:SetLabel("this is label text")
farmbuyer@104 211 button:SetKey(opts.keybinding_text)
farmbuyer@104 212 button.msgframe:SetToplevel(true) -- XXX ace3 ticket #305
farmbuyer@104 213 button:SetCallback("OnKeyChanged", function(_b,event,value)
farmbuyer@104 214 local possible_prev = opts.keybinding_text
farmbuyer@104 215 opts.keybinding_text = value
farmbuyer@104 216 -- If they were already binding something at login, try updating.
farmbuyer@104 217 if not _G.OuroLootBindingOpen then return end
farmbuyer@104 218 if possible_prev and #possible_prev > 0 then
farmbuyer@104 219 addon:Print("Trying to unbind previous %s key.", possible_prev)
farmbuyer@104 220 SetBinding (possible_prev, nil)
farmbuyer@104 221 end
farmbuyer@104 222 if value and #value > 0 then
farmbuyer@104 223 addon:Print("Trying to bind new %s key.", value)
farmbuyer@104 224 if SetBindingClick (value, "OuroLootBindingOpen") then
farmbuyer@104 225 local c = GetCurrentBindingSet()
farmbuyer@104 226 if c == ACCOUNT_BINDINGS or c == CHARACTER_BINDINGS then
farmbuyer@104 227 SaveBindings(c)
farmbuyer@104 228 end
farmbuyer@104 229 end
farmbuyer@104 230 end
farmbuyer@104 231 end)
farmbuyer@104 232 pair:AddChildren (checkbox, button)--, editbox)
farmbuyer@96 233 container:AddChild(pair)
farmbuyer@96 234 end
farmbuyer@96 235
farmbuyer@96 236 -- replacement for slashloot
farmbuyer@96 237 do
farmbuyer@96 238 local pair = AceGUI:Create("InlineGroup")
farmbuyer@96 239 pair:SetLayout("List")
farmbuyer@96 240 pair:SetRelativeWidth(0.49)
farmbuyer@96 241 pair:SetTitle('Synonyms for "/ouroloot"')
farmbuyer@96 242 local editbox, checkbox
farmbuyer@96 243 editbox = mkbutton("EditBox", nil, opts.slash_synonyms,
farmbuyer@96 244 [[Separate multiple synonyms with a comma. Relog to take effect.]])
farmbuyer@96 245 editbox:SetFullWidth(true)
farmbuyer@96 246 editbox:SetLabel("Slash commands")
farmbuyer@96 247 editbox:SetCallback("OnEnterPressed", function(_e,event,value)
farmbuyer@96 248 -- Do the sanity checking here rather than at each login.
farmbuyer@96 249 -- This is not foolproof. That's okay.
farmbuyer@96 250 local t = { strsplit(',', tostring(value)) }
farmbuyer@96 251 for k,v in ipairs(t) do
farmbuyer@96 252 v = v:trim()
farmbuyer@96 253 if v:sub(1,1) ~= "/" then
farmbuyer@96 254 v = "/" .. v
farmbuyer@96 255 end
farmbuyer@96 256 t[k] = v
farmbuyer@96 257 end
farmbuyer@96 258 value = table.concat(t,',')
farmbuyer@96 259 _e:SetText(value)
farmbuyer@96 260 opts.slash_synonyms = value
farmbuyer@96 261 end)
farmbuyer@96 262 editbox:SetDisabled(not opts.register_slash_synonyms)
farmbuyer@96 263 checkbox = mktoggle('register_slash_synonyms', "Register slash commands", 1,
farmbuyer@96 264 [[Register these slash commands as synonyms for "/ouroloot". Relog to take effect.]],
farmbuyer@96 265 function (_w,_,value)
farmbuyer@96 266 opts.register_slash_synonyms = value
farmbuyer@96 267 editbox:SetDisabled(not opts.register_slash_synonyms)
farmbuyer@96 268 end)
farmbuyer@96 269 checkbox:SetFullWidth(true)
farmbuyer@96 270 pair:AddChild(checkbox)
farmbuyer@96 271 pair:AddChild(editbox)
farmbuyer@96 272 container:AddChild(pair)
farmbuyer@96 273 end
farmbuyer@96 274
farmbuyer@96 275 -- chatty disposition/assignment changes
farmbuyer@97 276 container:AddChild(spacer(10))
farmbuyer@96 277 do
farmbuyer@96 278 local chatgroup = AceGUI:Create("InlineGroup")
farmbuyer@96 279 chatgroup:SetLayout("List")
farmbuyer@96 280 chatgroup:SetRelativeWidth(0.75)
farmbuyer@101 281 chatgroup:SetTitle("Notify on Changes Chat")
farmbuyer@96 282 local toggle, editbox
farmbuyer@96 283 toggle = mktoggle('chatty_on_remote_changes', "Be chatty on remote changes", 1,
farmbuyer@96 284 [[Print something to chat when other users change recorded loot.]],
farmbuyer@96 285 function (_w,_,value)
farmbuyer@96 286 opts.chatty_on_remote_changes = value
farmbuyer@101 287 editbox:SetDisabled((not opts.chatty_on_remote_changes) and
farmbuyer@101 288 (not opts.chatty_on_local_changes))
farmbuyer@96 289 end)
farmbuyer@96 290 toggle:SetFullWidth(true)
farmbuyer@96 291 chatgroup:AddChild(toggle)
farmbuyer@101 292 toggle = mktoggle('chatty_on_local_changes', "Be chatty on your own changes", 1,
farmbuyer@101 293 [[Print something to chat when you change recorded loot (as a reminder).]],
farmbuyer@101 294 function (_w,_,value)
farmbuyer@101 295 opts.chatty_on_local_changes = value
farmbuyer@101 296 editbox:SetDisabled((not opts.chatty_on_remote_changes) and
farmbuyer@101 297 (not opts.chatty_on_local_changes))
farmbuyer@101 298 end)
farmbuyer@101 299 toggle:SetFullWidth(true)
farmbuyer@101 300 chatgroup:AddChild(toggle)
farmbuyer@101 301
farmbuyer@96 302 w = AceGUI:Create("Label")
farmbuyer@96 303 w:SetFullWidth(true)
farmbuyer@103 304 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 305 chatgroup:AddChild(w)
farmbuyer@101 306 editbox = mkbutton("EditBox", nil, opts.chatty_on_changes_frame,
farmbuyer@96 307 [[1 = default chat frame, 2 = combat log, etc]])
farmbuyer@96 308 editbox:SetFullWidth(true)
farmbuyer@96 309 editbox:SetLabel("Output Chatframe")
farmbuyer@96 310 editbox:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
farmbuyer@96 311 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@101 312 local prev = opts.chatty_on_changes_frame
farmbuyer@96 313 value = value:trim()
farmbuyer@96 314 value = tonumber(value) or value
farmbuyer@101 315 if addon:_set_chatty_change_chatframe (value) then
farmbuyer@101 316 opts.chatty_on_changes_frame = value
farmbuyer@96 317 _w:SetText(tostring(value))
farmbuyer@96 318 _w.editbox:ClearFocus()
farmbuyer@96 319 else
farmbuyer@96 320 _w:SetText(tostring(prev))
farmbuyer@96 321 end
farmbuyer@96 322 end)
farmbuyer@101 323 editbox:SetDisabled((not opts.chatty_on_remote_changes) and
farmbuyer@101 324 (not opts.chatty_on_local_changes))
farmbuyer@96 325 chatgroup:AddChild(editbox)
farmbuyer@96 326 w = mkbutton("Chat Frame Numbers",
farmbuyer@96 327 [[Print each chat window number in its own frame, for easy reference in the editing field.]])
farmbuyer@96 328 w:SetFullWidth(true)
farmbuyer@96 329 w:SetCallback("OnClick", function()
farmbuyer@96 330 for i = 1, NUM_CHAT_WINDOWS do
farmbuyer@96 331 local cf = _G['ChatFrame'..i]
farmbuyer@96 332 if not cf then break end
farmbuyer@96 333 addon:CFPrint (cf, "This is frame number |cffff0000%d|r.", i)
farmbuyer@96 334 end
farmbuyer@96 335 end)
farmbuyer@96 336 chatgroup:AddChild(w)
farmbuyer@96 337 container:AddChild(chatgroup)
farmbuyer@96 338 end
farmbuyer@96 339
farmbuyer@96 340 -- boss mod selection
farmbuyer@97 341 container:AddChild(spacer(2))
farmbuyer@96 342 do
farmbuyer@96 343 local list = {}
farmbuyer@96 344 local current
farmbuyer@96 345 for k,v in ipairs(addon.bossmods) do
farmbuyer@96 346 list[k] = v.n
farmbuyer@96 347 if v.n == opts.bossmod then
farmbuyer@96 348 current = k
farmbuyer@96 349 end
farmbuyer@96 350 end
farmbuyer@96 351 w = mkbutton("Dropdown", nil, "", [[Which 'boss mod' to use.]])
farmbuyer@96 352 w:SetRelativeWidth(0.3)
farmbuyer@96 353 w:SetLabel("Boss Mod:")
farmbuyer@96 354 w:SetList(list)
farmbuyer@96 355 w:SetValue(current)
farmbuyer@96 356 w:SetCallback("OnValueChanged", function(_w,event,choice)
farmbuyer@96 357 opts.bossmod = list[choice]
farmbuyer@96 358 end)
farmbuyer@96 359 container:AddChild(w)
farmbuyer@96 360 end
farmbuyer@96 361
farmbuyer@96 362 container:ResumeLayout()
farmbuyer@96 363 container:DoLayout()
farmbuyer@96 364 AceGUI:ClearFocus()
farmbuyer@96 365 end
farmbuyer@96 366
farmbuyer@96 367
farmbuyer@96 368 ---------------
farmbuyer@96 369 do
farmbuyer@105 370 local description = [[These control automatic handling of specific items when they are looted.
farmbuyer@105 371
farmbuyer@105 372 "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 373
farmbuyer@97 374 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 375 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 376
farmbuyer@96 377 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 378 local cache_warn, cache_warned = false, false
farmbuyer@96 379 local function do_warning (cnt)
farmbuyer@96 380 if cache_warn and not cache_warned then
farmbuyer@96 381 cache_warned = true
farmbuyer@96 382 addon:Print(warntext)
farmbuyer@96 383 local t = AceGUI:Create("Label")
farmbuyer@96 384 t:SetFullWidth(true)
farmbuyer@96 385 t:SetText(warntext)
farmbuyer@96 386 cnt:AddChild(t)
farmbuyer@96 387 end
farmbuyer@96 388 end
farmbuyer@96 389
farmbuyer@96 390 controls.basic_filter = function (container)
farmbuyer@96 391 container:AddChildren(mktitle[[Item-Specific Special Handling]])
farmbuyer@96 392
farmbuyer@97 393 local w = AceGUI:Create("Label")
farmbuyer@97 394 w:SetFullWidth(true)
farmbuyer@97 395 w:SetText(description)
farmbuyer@97 396 container:AddChild(w)
farmbuyer@97 397 container:AddChild(spacer(20))
farmbuyer@97 398
farmbuyer@96 399 cache_warn, cache_warned = false, false
farmbuyer@96 400 local filterlist, vaultlist = {}, {}
farmbuyer@96 401 for id in pairs(opts.itemfilter) do
farmbuyer@96 402 local iname, _, iquality = GetItemInfo(id)
farmbuyer@96 403 if iname then
farmbuyer@96 404 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 405 else
farmbuyer@96 406 filterlist[id] = id
farmbuyer@96 407 cache_warn = true
farmbuyer@96 408 end
farmbuyer@96 409 end
farmbuyer@96 410 for id in pairs(opts.itemvault) do
farmbuyer@96 411 local iname, _, iquality = GetItemInfo(id)
farmbuyer@96 412 if iname then
farmbuyer@96 413 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 414 else
farmbuyer@96 415 vaultlist[id] = id
farmbuyer@96 416 cache_warn = true
farmbuyer@96 417 end
farmbuyer@96 418 end
farmbuyer@97 419 -- This is so that the "add all defaults" button will never, ever,
farmbuyer@97 420 -- trip over cache misses.
farmbuyer@97 421 for id in pairs(addon.default_itemfilter) do GetItemInfo(id) end
farmbuyer@97 422 for id in pairs(addon.default_itemvault) do GetItemInfo(id) end
farmbuyer@96 423
farmbuyer@97 424 w = AceGUI:Create("EditBoxDropDown")
farmbuyer@96 425 w:SetRelativeWidth(0.4)
farmbuyer@96 426 w:SetText("Item filter")
farmbuyer@96 427 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
farmbuyer@96 428 w:SetList(filterlist)
farmbuyer@96 429 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
farmbuyer@96 430 local iname, ilink, iquality = GetItemInfo(text:trim())
farmbuyer@96 431 if not iname then
farmbuyer@96 432 return addon:Print("Error: %s is not a valid item name/link!", text)
farmbuyer@96 433 end
farmbuyer@96 434 local id = tonumber(ilink:match("item:(%d+)"))
farmbuyer@96 435 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 436 opts.itemfilter[id] = true
farmbuyer@96 437 addon:Print("Now filtering out", ilink)
farmbuyer@96 438 end)
farmbuyer@96 439 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
farmbuyer@96 440 --local ilink = select(2,GetItemInfo(key_id))
farmbuyer@96 441 opts.itemfilter[tonumber(key_id)] = nil
farmbuyer@96 442 --addon:Print("No longer filtering out", ilink)
farmbuyer@96 443 addon:Print("No longer filtering out", val_name)
farmbuyer@96 444 end)
farmbuyer@96 445 --w:SetCallback("OnDropdownShown",do_warning)
farmbuyer@96 446 w:SetCallback("OnDropdownShown", function()
farmbuyer@96 447 do_warning(container)
farmbuyer@96 448 end)
farmbuyer@96 449 container:AddChild(w)
farmbuyer@96 450
farmbuyer@96 451 w = AceGUI:Create("Spacer")
farmbuyer@96 452 w:SetRelativeWidth(0.1)
farmbuyer@96 453 w:SetHeight(2)
farmbuyer@96 454 container:AddChild(w)
farmbuyer@96 455
farmbuyer@96 456 w = AceGUI:Create("EditBoxDropDown")
farmbuyer@96 457 w:SetRelativeWidth(0.4)
farmbuyer@96 458 w:SetText("Vault items")
farmbuyer@96 459 w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.")
farmbuyer@96 460 w:SetList(vaultlist)
farmbuyer@96 461 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
farmbuyer@96 462 local iname, ilink, iquality = GetItemInfo(text:trim())
farmbuyer@96 463 if not iname then
farmbuyer@96 464 return addon:Print("Error: %s is not a valid item name/link!", text)
farmbuyer@96 465 end
farmbuyer@96 466 local id = tonumber(ilink:match("item:(%d+)"))
farmbuyer@96 467 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 468 opts.itemvault[id] = true
farmbuyer@96 469 addon:Print("Now auto-vaulting", ilink)
farmbuyer@96 470 end)
farmbuyer@96 471 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
farmbuyer@96 472 --local ilink = select(2,GetItemInfo(key_id))
farmbuyer@96 473 opts.itemfilter[tonumber(key_id)] = nil
farmbuyer@96 474 --addon:Print("No longer filtering out", ilink)
farmbuyer@96 475 addon:Print("No longer auto-vaulting", val_name)
farmbuyer@96 476 end)
farmbuyer@96 477 w:SetCallback("OnDropdownShown",do_warning)
farmbuyer@96 478 container:AddChild(w)
farmbuyer@97 479
farmbuyer@97 480 local function MAYBE_ADD (destname, dest, id)
farmbuyer@97 481 local name, link = GetItemInfo(id)
farmbuyer@97 482 if not name then
farmbuyer@97 483 addon:Print("> No data on ID %d, this may be a bug.",id)
farmbuyer@97 484 return
farmbuyer@97 485 end
farmbuyer@97 486 if dest[id] then
farmbuyer@97 487 addon:Print("> Skipping %s as it's already in '%s' list.",
farmbuyer@97 488 link, destname)
farmbuyer@97 489 else
farmbuyer@97 490 dest[id] = true
farmbuyer@97 491 addon:Print("> Added %s to '%s' list.", link, destname)
farmbuyer@97 492 end
farmbuyer@97 493 end
farmbuyer@97 494
farmbuyer@97 495 container:AddChild(spacer(40))
farmbuyer@97 496 w = AceGUI:Create("Label")
farmbuyer@97 497 w:SetFullWidth(true)
farmbuyer@97 498 w:SetText(defaultstext)
farmbuyer@97 499 container:AddChild(w)
farmbuyer@97 500 w = AceGUI:Create("Button")
farmbuyer@97 501 w:SetRelativeWidth(0.4)
farmbuyer@97 502 w:SetText[[Add Default Entries]]
farmbuyer@97 503 w:SetCallback("OnClick", function()
farmbuyer@97 504 for id in pairs(addon.default_itemfilter) do
farmbuyer@97 505 MAYBE_ADD ("filter", opts.itemfilter, id)
farmbuyer@97 506 end
farmbuyer@97 507 for id in pairs(addon.default_itemvault) do
farmbuyer@97 508 MAYBE_ADD ("vault", opts.itemvault, id)
farmbuyer@97 509 end
farmbuyer@97 510 addon:redisplay()
farmbuyer@97 511 end)
farmbuyer@97 512 container:AddChild(w)
farmbuyer@97 513 end
farmbuyer@97 514 end
farmbuyer@97 515
farmbuyer@97 516
farmbuyer@97 517 ---------------
farmbuyer@97 518 do
farmbuyer@97 519 local profiles
farmbuyer@97 520 controls.basic_profiles = function (container)
farmbuyer@97 521 if not profiles then
farmbuyer@97 522 profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(addon.db)
farmbuyer@97 523 LibStub("AceConfig-3.0"):RegisterOptionsTable("OuroLootProfiles", profiles)
farmbuyer@97 524 end
farmbuyer@97 525 LibStub("AceConfigDialog-3.0"):Open ("OuroLootProfiles", container)
farmbuyer@96 526 end
farmbuyer@96 527 end
farmbuyer@96 528
farmbuyer@96 529
farmbuyer@96 530 ---------------
farmbuyer@96 531 local adv_real = function (container)
farmbuyer@96 532 container:AddChildren(mktitle[[Debugging Options (not saved across sessions)]])
farmbuyer@96 533
farmbuyer@96 534 container:PauseLayout()
farmbuyer@96 535 local w
farmbuyer@96 536
farmbuyer@96 537 do
farmbuyer@96 538 local grp = AceGUI:Create("InlineGroup")
farmbuyer@96 539 grp:SetLayout("List")
farmbuyer@96 540 grp:SetRelativeWidth(0.60)
farmbuyer@96 541 grp:SetTitle("Output of debugging messages")
farmbuyer@96 542
farmbuyer@102 543 w = AceGUI:Create("CheckBox")
farmbuyer@96 544 w:SetFullWidth(true)
farmbuyer@96 545 w:SetType("checkbox")
farmbuyer@96 546 w:SetLabel("master toggle")
farmbuyer@96 547 w:SetValue(addon.DEBUG_PRINT)
farmbuyer@96 548 w:SetCallback("OnValueChanged", function(_w,event,value)
farmbuyer@96 549 addon.DEBUG_PRINT = value
farmbuyer@96 550 addon:redisplay()
farmbuyer@96 551 end)
farmbuyer@96 552 grp:AddChild(w)
farmbuyer@96 553 for d,v in pairs(addon.debug) do
farmbuyer@102 554 w = AceGUI:Create("CheckBox")
farmbuyer@96 555 w:SetFullWidth(true)
farmbuyer@96 556 w:SetType("checkbox")
farmbuyer@96 557 w:SetLabel(d)
farmbuyer@96 558 if d == "notraid" then
farmbuyer@96 559 w:SetDescription[[Tick this before enabling to make the addon work outside of raid groups]]
farmbuyer@96 560 else
farmbuyer@96 561 if d == "alsolog" then
farmbuyer@96 562 w:SetDescription[[Also log all debug messages to disk. See print_log.lua in the addon folder for later viewing.]]
farmbuyer@96 563 end
farmbuyer@96 564 w:SetDisabled(not addon.DEBUG_PRINT)
farmbuyer@96 565 end
farmbuyer@96 566 w:SetValue(v)
farmbuyer@100 567 w:SetCallback("OnValueChanged", function(_w,event,value)
farmbuyer@100 568 addon.debug[d] = value
farmbuyer@100 569 if d == "comm" then
farmbuyer@100 570 addon.is_guilded = _G.IsInGuild()
farmbuyer@100 571 end
farmbuyer@100 572 end)
farmbuyer@96 573 grp:AddChild(w)
farmbuyer@96 574 end
farmbuyer@96 575 container:AddChild(grp)
farmbuyer@96 576 end
farmbuyer@96 577
farmbuyer@96 578 do
farmbuyer@96 579 local simple = AceGUI:Create("SimpleGroup")
farmbuyer@96 580 simple:SetLayout("List")
farmbuyer@96 581 simple:SetRelativeWidth(0.35)
farmbuyer@102 582 w = AceGUI:Create("CheckBox")
farmbuyer@96 583 --w:SetRelativeWidth(0.35)
farmbuyer@96 584 w:SetFullWidth(true)
farmbuyer@96 585 w:SetType("checkbox")
farmbuyer@96 586 w:SetLabel("GOP history mode")
farmbuyer@96 587 w:SetValue(addon.history_suppress)
farmbuyer@96 588 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end)
farmbuyer@96 589 simple:AddChild(w)
farmbuyer@96 590 w = mkbutton("Dropdown", nil, "",
farmbuyer@96 591 [[if active, tooltip shown when hovering over Item column only]])
farmbuyer@96 592 --w:SetRelativeWidth(0.4)
farmbuyer@96 593 w:SetFullWidth(true)
farmbuyer@96 594 w:SetLabel("loot debugging tooltip")
farmbuyer@96 595 w:SetList{
farmbuyer@96 596 [1] = "Off",
farmbuyer@96 597 [2] = "/dump into tooltip",
farmbuyer@96 598 [3] = "small fixed fields",
farmbuyer@96 599 }
farmbuyer@96 600 w:SetValue(gui._do_debugging_tooltip or 1)
farmbuyer@96 601 w:SetCallback("OnValueChanged", function(_w,event,choice)
farmbuyer@96 602 gui._do_debugging_tooltip = choice > 1 and choice or nil
farmbuyer@96 603 end)
farmbuyer@96 604 simple:AddChild(w)
farmbuyer@96 605 container:AddChild(simple)
farmbuyer@96 606 end
farmbuyer@96 607
farmbuyer@97 608 container:AddChild(spacer(10))
farmbuyer@96 609
farmbuyer@96 610 w = mkbutton("EditBox", 'comm_ident', addon.ident,
farmbuyer@96 611 [[Set tracking to 'Disabled' in the top-right dropdown, then change this field (click Okay or press Enter).]])
farmbuyer@96 612 w:SetRelativeWidth(0.25)
farmbuyer@96 613 w:SetLabel("Addon channel ID")
farmbuyer@96 614 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
farmbuyer@96 615 w:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 616 -- if they set it to blank spaces, they're boned. oh well.
farmbuyer@96 617 -- Re-enabling will take care of propogating this new value.
farmbuyer@96 618 addon.ident = (value == "") and "OuroLoot2" or value
farmbuyer@96 619 _w:SetText(addon.ident)
farmbuyer@96 620 addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.")
farmbuyer@96 621 end)
farmbuyer@96 622 w:SetDisabled(addon.enabled or addon.rebroadcast)
farmbuyer@96 623 container:AddChild(w)
farmbuyer@96 624
farmbuyer@96 625 w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache TTL]])
farmbuyer@96 626 w:SetRelativeWidth(0.1)
farmbuyer@96 627 w:SetLabel("ttl")
farmbuyer@96 628 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
farmbuyer@96 629 w:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 630 value = tonumber(value) or addon.recent_messages.ttl
farmbuyer@96 631 addon.recent_messages.ttl = value
farmbuyer@96 632 _w:SetText(tostring(value))
farmbuyer@96 633 end)
farmbuyer@96 634 container:AddChild(w)
farmbuyer@96 635
farmbuyer@96 636 w = mkbutton("load nsaab1548", [[Cursed Darkhound]])
farmbuyer@96 637 w:SetRelativeWidth(0.25)
farmbuyer@96 638 w:SetCallback("OnClick", function()
farmbuyer@96 639 for i, v in ipairs(DBM.AddOns) do
farmbuyer@96 640 if v.modId == "DBM-NotScaryAtAll" then
farmbuyer@96 641 DBM:LoadMod(v)
farmbuyer@96 642 break
farmbuyer@96 643 end
farmbuyer@96 644 end
farmbuyer@96 645 local mod = DBM:GetModByName("NotScaryAtAll")
farmbuyer@96 646 if mod then
farmbuyer@96 647 mod:EnableMod()
farmbuyer@96 648 addon:Print("Now tracking ID",mod.creatureId)
farmbuyer@96 649 else
farmbuyer@96 650 addon:Print("Can do nothing; DBM testing mod wasn't loaded.")
farmbuyer@96 651 end
farmbuyer@96 652 end)
farmbuyer@102 653 w:SetDisabled(addon.bossmod_registered ~= 'DBM') -- set by :Activate
farmbuyer@96 654 container:AddChild(w)
farmbuyer@96 655
farmbuyer@96 656 w = mkbutton("GC", [[full GC cycle]])
farmbuyer@96 657 w:SetRelativeWidth(0.2)
farmbuyer@96 658 w:SetCallback("OnClick", function()
farmbuyer@96 659 local before = collectgarbage('count')
farmbuyer@96 660 collectgarbage('collect')
farmbuyer@96 661 local after = collectgarbage('count')
farmbuyer@96 662 addon:Print("Collected %d KB, %d KB still in use by Lua universe.", before-after, after)
farmbuyer@96 663 end)
farmbuyer@96 664 container:AddChild(w)
farmbuyer@96 665
farmbuyer@97 666 container:AddChild(spacer(3))
farmbuyer@96 667 do
farmbuyer@96 668 local simple = AceGUI:Create("SimpleGroup")
farmbuyer@96 669 simple:SetLayout("Flow")
farmbuyer@96 670 --simple:SetRelativeWidth(0.95)
farmbuyer@96 671 simple:SetFullWidth(true)
farmbuyer@96 672 w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]])
farmbuyer@96 673 w:SetRelativeWidth(0.2)
farmbuyer@96 674 w:SetCallback("OnClick", function()
farmbuyer@96 675 PlaySoundFile ([[Sound\Music\WorldEvents\HordeFirepole.mp3]], "Master")
farmbuyer@96 676 end)
farmbuyer@96 677 simple:AddChild(w)
farmbuyer@96 678 w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]])
farmbuyer@96 679 w:SetRelativeWidth(0.2)
farmbuyer@96 680 w:SetCallback("OnClick", function()
farmbuyer@96 681 PlaySoundFile ([[Sound\Music\WorldEvents\AllianceFirepole.mp3]], "Master")
farmbuyer@96 682 end)
farmbuyer@96 683 simple:AddChild(w)
farmbuyer@96 684 w = mkbutton("SFRR", [[test]])
farmbuyer@96 685 w:SetRelativeWidth(0.15)
farmbuyer@96 686 w:SetCallback("OnClick", function()
farmbuyer@96 687 PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "Master")
farmbuyer@96 688 end)
farmbuyer@96 689 simple:AddChild(w)
farmbuyer@96 690
farmbuyer@96 691 container:AddChild(simple)
farmbuyer@96 692 end
farmbuyer@96 693
farmbuyer@96 694 w = AceGUI:Create("Spacer") w:SetRelativeWidth(0.65) w:SetHeight(15) container:AddChild(w)
farmbuyer@96 695 w = mkbutton("Clear All & Reload",
farmbuyer@96 696 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
farmbuyer@96 697 w:SetRelativeWidth(0.3)
farmbuyer@96 698 w:SetCallback("OnClick", function()
farmbuyer@96 699 addon:_clear_SVs() -- reloads
farmbuyer@96 700 end)
farmbuyer@96 701 container:AddChild(w)
farmbuyer@96 702
farmbuyer@96 703 container:ResumeLayout()
farmbuyer@96 704 container:DoLayout()
farmbuyer@96 705 AceGUI:ClearFocus()
farmbuyer@96 706 --container:SetScroll(1000) -- scrollframe widget's max value
farmbuyer@96 707 end
farmbuyer@96 708
farmbuyer@96 709 -- Initial advanced panel function (unless debug mode is on during load, which
farmbuyer@96 710 -- means it was almost certainly hardcoded that way, which means it's probably
farmbuyer@96 711 -- me testing).
farmbuyer@97 712 if addon.DEBUG_PRINT then
farmbuyer@96 713 controls.adv = adv_real
farmbuyer@96 714 else
farmbuyer@96 715 controls.adv = function (container)
farmbuyer@96 716 local speedbump = AceGUI:Create("InteractiveLabel")
farmbuyer@96 717 speedbump:SetFullWidth(true)
farmbuyer@96 718 speedbump:SetFontObject(GameFontHighlightLarge)
farmbuyer@96 719 speedbump:SetImage[[Interface\DialogFrame\DialogAlertIcon]]
farmbuyer@96 720 speedbump:SetImageSize(50,50)
farmbuyer@96 721 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 722 speedbump:SetCallback("OnClick", function (_sb)
farmbuyer@96 723 controls.adv = { adv_real }
farmbuyer@96 724 return addon:redisplay()
farmbuyer@96 725 end)
farmbuyer@96 726 container:AddChild(speedbump)
farmbuyer@96 727 end
farmbuyer@96 728 end
farmbuyer@96 729
farmbuyer@96 730
farmbuyer@96 731 ---------------
farmbuyer@96 732 -- Tab 6: Options
farmbuyer@96 733 do
farmbuyer@96 734 local funkified = {}
farmbuyer@96 735 for key,f in pairs(controls) do
farmbuyer@99 736 -- this is how TreeGroup makes unique keys out of nested entries
farmbuyer@96 737 local funkykey = key:gsub('_','\001')
farmbuyer@96 738 funkified[funkykey] = { f }
farmbuyer@96 739 end
farmbuyer@96 740 controls = funkified
farmbuyer@96 741 end
farmbuyer@96 742
farmbuyer@96 743 -- widget container status tables (will have things magically appear
farmbuyer@96 744 -- inside them that we wish to preserve)
farmbuyer@96 745 local status_for_scroll = {}
farmbuyer@96 746 local status_for_select = { treewidth = 160 }
farmbuyer@96 747
farmbuyer@97 748 local function preload()
farmbuyer@97 749 for id in pairs(opts.itemfilter) do GetItemInfo(id) end
farmbuyer@97 750 for id in pairs(opts.itemvault) do GetItemInfo(id) end
farmbuyer@97 751 preload = nil
farmbuyer@97 752 end
farmbuyer@97 753
farmbuyer@99 754 local aceconfig_list = {}
farmbuyer@99 755
farmbuyer@99 756 -- Selecting an entry on the left tree column.
farmbuyer@96 757 local opt_OnGroupSelected_func = function (treeg,event,category)
farmbuyer@98 758 opts = addon.db.profile
farmbuyer@96 759 local catfuncs = controls[category]
farmbuyer@96 760 if not catfuncs then
farmbuyer@96 761 addon:horrible_horrible_error(("Category '%s' has no handler function!"):format(category:gsub('\001','_')))
farmbuyer@96 762 end
farmbuyer@96 763 treeg:ReleaseChildren()
farmbuyer@99 764 if aceconfig_list[category] then
farmbuyer@99 765 -- aceconfigdialog makes too many assumptions about scrolling
farmbuyer@99 766 for _,func in ipairs(catfuncs) do
farmbuyer@99 767 if func(treeg,category) then break end
farmbuyer@96 768 end
farmbuyer@96 769 else
farmbuyer@99 770 local sf = AceGUI:Create("ScrollFrame")
farmbuyer@99 771 sf:SetStatusTable(status_for_scroll)
farmbuyer@99 772 sf:SetLayout("Flow")
farmbuyer@99 773 -- This forces the scrolling area to be bigger than the visible area; else
farmbuyer@99 774 -- some of the text gets cut off without ever triggering the scrollbar.
farmbuyer@99 775 sf.content:SetHeight(700)
farmbuyer@99 776 for _,func in ipairs(catfuncs) do
farmbuyer@99 777 if func(sf,category) then break end
farmbuyer@99 778 end
farmbuyer@99 779 treeg:AddChild(sf)
farmbuyer@99 780 if treeg:GetUserData("options restore scroll") then
farmbuyer@99 781 if status_for_scroll.scrollvalue then
farmbuyer@99 782 sf:SetScroll(status_for_scroll.scrollvalue)
farmbuyer@99 783 end
farmbuyer@99 784 treeg:SetUserData("options restore scroll", false)
farmbuyer@99 785 else
farmbuyer@99 786 sf:SetScroll(0)
farmbuyer@99 787 end
farmbuyer@96 788 end
farmbuyer@96 789 end
farmbuyer@96 790
farmbuyer@96 791 -- Clicking the Options tab as a whole (tabs_OnGroupSelected["opt"]).
farmbuyer@96 792 local tabs_OGS = function (container, specials)
farmbuyer@96 793 container:SetLayout("Fill")
farmbuyer@96 794 local left = AceGUI:Create("TreeGroup")
farmbuyer@96 795 left:SetStatusTable(status_for_select)
farmbuyer@96 796 left:SetLayout("Fill")
farmbuyer@96 797 left:SetFullWidth(true)
farmbuyer@96 798 left:SetFullHeight(true)
farmbuyer@96 799 left:EnableButtonTooltips(false)
farmbuyer@96 800 left:SetTree(options_tree)
farmbuyer@96 801 left:SetCallback("OnGroupSelected", opt_OnGroupSelected_func)
farmbuyer@96 802 container:AddChild(left)
farmbuyer@96 803 if status_for_select.selected then
farmbuyer@96 804 left:SetUserData("options restore scroll", true)
farmbuyer@96 805 left:SelectByValue(status_for_select.selected)
farmbuyer@96 806 else
farmbuyer@96 807 left:SelectByValue("basic")
farmbuyer@96 808 end
farmbuyer@96 809
farmbuyer@96 810 local w = mkbutton("ReloadUI",
farmbuyer@96 811 [[Does what you think it does. Loot information is written out and restored.]])
farmbuyer@96 812 w:SetFullWidth(true)
farmbuyer@96 813 w:SetCallback("OnClick", ReloadUI)
farmbuyer@96 814 specials:AddChild(w)
farmbuyer@96 815
farmbuyer@96 816 w = mkbutton("Ping!",
farmbuyer@96 817 [[Queries other raid users for their addon version and current status. Results displayed on Pongs panel after five seconds.]])
farmbuyer@96 818 w:SetFullWidth(true)
farmbuyer@96 819 w:SetCallback("OnClick", function(_w)
farmbuyer@96 820 _w:SetText("5... 4... 3...")
farmbuyer@96 821 _w:SetDisabled(true)
farmbuyer@96 822 addon:DoPing()
farmbuyer@96 823 addon:ScheduleTimer(function(b)
farmbuyer@96 824 if b:IsVisible() then
farmbuyer@96 825 return addon:redisplay()
farmbuyer@96 826 end
farmbuyer@96 827 end, 5, _w)
farmbuyer@96 828 end)
farmbuyer@96 829 specials:AddChild(w)
farmbuyer@97 830
farmbuyer@97 831 if preload then preload() end
farmbuyer@96 832 end
farmbuyer@96 833
farmbuyer@96 834 addon:register_tab_control_AT_END ("opt", [[Options]],
farmbuyer@103 835 [[Options for fine-tuning behavior]], tabs_OGS, [[
farmbuyer@103 836 The "be chatty" options can be noisy, but they make the
farmbuyer@103 837 |cffff8000[Ouro Loot]|r link much more useful. See
farmbuyer@103 838 <Help -- Handy Tips> for details!
farmbuyer@103 839 ]])
farmbuyer@96 840
farmbuyer@99 841
farmbuyer@99 842 ---------------
farmbuyer@99 843 -- Registering new options entries
farmbuyer@99 844 local insertion_index = #options_tree
farmbuyer@99 845 for i = #options_tree, 1, -1 do
farmbuyer@99 846 if options_tree[i] == 'NEW INSERTIONS HERE' then
farmbuyer@99 847 insertion_index = i
farmbuyer@99 848 break
farmbuyer@99 849 end
farmbuyer@99 850 end
farmbuyer@99 851 if insertion_index then
farmbuyer@99 852 table.remove (options_tree, insertion_index)
farmbuyer@99 853 else
farmbuyer@99 854 insertion_index = #options_tree + 1
farmbuyer@99 855 end
farmbuyer@99 856
farmbuyer@99 857
farmbuyer@99 858 --[[
farmbuyer@100 859 PLUGIN is the module table itself. (This does not actually have to be
farmbuyer@100 860 a plugin created with :[Constrained]NewModule, as long as it has a
farmbuyer@102 861 GetName method and
farmbuyer@102 862 - TEXT is passed
farmbuyer@102 863 - if OPTIONS is a table, then OPTIONS.args.name exists
farmbuyer@99 864 PARENT is nil to register in the tree list directly.
farmbuyer@99 865 TEXT is either the text to display in the tree list, or nil to use the
farmbuyer@99 866 moduleName field out of PLUGIN (not :GetName()).
farmbuyer@99 867 OPTIONS is either
farmbuyer@102 868 I) an aceconfig-style options table
farmbuyer@102 869 II) a function to call directly
farmbuyer@99 870
farmbuyer@99 871 (I) Will augment options.args.name with coloring/sizing, if it exists.
farmbuyer@99 872 (Set options.args.name.name before registering.) Will create it if not
farmbuyer@99 873 present.
farmbuyer@99 874
farmbuyer@99 875 (II) Title added unconditionally. Callback is
farmbuyer@99 876 options (scrollframe_container, plugin, unique_code)
farmbuyer@99 877 where UNIQUE_CODE is what's used by the TreeGroup widget in identifying
farmbuyer@99 878 the "button" clicked in the lefthand tree list.
farmbuyer@99 879
farmbuyer@99 880 Will append a reset button IFF an options database has been registered already.
farmbuyer@99 881 ]]
farmbuyer@99 882 function addon:register_options_entry (plugin, parent, text, options)
farmbuyer@99 883 -- if this changes at all, fix up plugin_reset_button accordingly
farmbuyer@99 884 local code = plugin:GetName()
farmbuyer@99 885 --if parent
farmbuyer@99 886
farmbuyer@99 887 text = text or plugin.moduleName
farmbuyer@99 888
farmbuyer@99 889 local handler
farmbuyer@102 890 local pdb = plugin.moduleName and
farmbuyer@102 891 self.db:GetNamespace (plugin.moduleName, --[[silent=]]true)
farmbuyer@102 892
farmbuyer@99 893 if type(options) == 'table' then
farmbuyer@99 894 -- AceConfig-style options table
farmbuyer@99 895 aceconfig_list[code] = true
farmbuyer@99 896 if not options.args.name then
farmbuyer@99 897 options.args.name = {
farmbuyer@99 898 name = plugin.moduleName,
farmbuyer@99 899 type = 'description',
farmbuyer@99 900 }
farmbuyer@99 901 end
farmbuyer@99 902 options.args.name.name = '|cff30adff' .. options.args.name.name .. '|r'
farmbuyer@99 903 options.args.name.fontSize = 'large'
farmbuyer@99 904 options.args.name.width = 'full'
farmbuyer@99 905 options.args.name.cmdHidden = true
farmbuyer@99 906 options.args.name.order = 1
farmbuyer@99 907 if pdb then
farmbuyer@99 908 options.args.INSERTED_SPACER = {
farmbuyer@99 909 name = '',
farmbuyer@99 910 type = 'description',
farmbuyer@99 911 cmdHidden = true,
farmbuyer@99 912 width = 'full',
farmbuyer@99 913 order = 9000,
farmbuyer@99 914 }
farmbuyer@99 915 options.args.RESET = {
farmbuyer@99 916 name = "Reset",
farmbuyer@99 917 desc = ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(plugin:GetName()),
farmbuyer@99 918 type = 'execute',
farmbuyer@99 919 func = function()
farmbuyer@99 920 pdb:ResetProfile()
farmbuyer@99 921 if IsShiftKeyDown() then ReloadUI() end
farmbuyer@99 922 end,
farmbuyer@99 923 order = 9001,
farmbuyer@99 924 }
farmbuyer@99 925 end
farmbuyer@99 926 LibStub("AceConfig-3.0"):RegisterOptionsTable(plugin:GetName(), options)
farmbuyer@99 927 handler = function (sf)
farmbuyer@99 928 LibStub("AceConfigDialog-3.0"):Open (plugin:GetName(), sf)
farmbuyer@99 929 end
farmbuyer@99 930
farmbuyer@99 931 elseif type(options) == 'function' then
farmbuyer@99 932 -- AceGUI callback
farmbuyer@99 933 if pdb then
farmbuyer@99 934 handler = function (sf)
farmbuyer@99 935 sf:AddChildren(mktitle(text))
farmbuyer@99 936 local ret = options (sf, plugin, code)
farmbuyer@99 937 local w = mkbutton("Reset",
farmbuyer@99 938 ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(text))
farmbuyer@99 939 w:SetRelativeWidth(0.3)
farmbuyer@99 940 w:SetCallback("OnClick", function(_w)
farmbuyer@99 941 pdb:ResetProfile()
farmbuyer@99 942 if IsShiftKeyDown() then ReloadUI() end
farmbuyer@99 943 end)
farmbuyer@99 944 sf:AddChildren(spacer(10),w)
farmbuyer@99 945 return ret
farmbuyer@99 946 end
farmbuyer@99 947 else
farmbuyer@99 948 handler = function (sf)
farmbuyer@99 949 sf:AddChildren(mktitle(text))
farmbuyer@99 950 return options (sf, plugin, code)
farmbuyer@99 951 end
farmbuyer@99 952 end
farmbuyer@99 953
farmbuyer@99 954 else
farmbuyer@99 955 error(("Error: 'options' parameter for plugin '%s' is neither table nor function"):format(plugin:GetName()))
farmbuyer@99 956 end
farmbuyer@99 957
farmbuyer@99 958 if not controls[code] then
farmbuyer@99 959 controls[code] = {}
farmbuyer@99 960 end
farmbuyer@99 961 table.insert (controls[code], handler)
farmbuyer@99 962
farmbuyer@99 963 table.insert (options_tree, insertion_index, {
farmbuyer@99 964 value = code,
farmbuyer@99 965 text = text, -- maybe call markup on this?
farmbuyer@99 966 })
farmbuyer@99 967 insertion_index = insertion_index + 1
farmbuyer@99 968 -- The treegroup will rescan options_tree (via RefreshTree) several times
farmbuyer@99 969 -- before the player actually sees anything; no more work needs doing.
farmbuyer@99 970 return -- something that can be used as 'parent'
farmbuyer@99 971 end
farmbuyer@99 972
farmbuyer@99 973
farmbuyer@96 974 -- vim:noet