annotate options.lua @ 104:04198c8d0717

Don't set a default keybinding, but rather change the associated option to not be clunky and gross.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Sun, 05 Aug 2012 16:53:07 +0000
parents dc8a23a47b03
children 646c9b41aaed
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@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@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@97 370 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 371
farmbuyer@97 372 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 373 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 374
farmbuyer@96 375 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 376 local cache_warn, cache_warned = false, false
farmbuyer@96 377 local function do_warning (cnt)
farmbuyer@96 378 if cache_warn and not cache_warned then
farmbuyer@96 379 cache_warned = true
farmbuyer@96 380 addon:Print(warntext)
farmbuyer@96 381 local t = AceGUI:Create("Label")
farmbuyer@96 382 t:SetFullWidth(true)
farmbuyer@96 383 t:SetText(warntext)
farmbuyer@96 384 cnt:AddChild(t)
farmbuyer@96 385 end
farmbuyer@96 386 end
farmbuyer@96 387
farmbuyer@96 388 controls.basic_filter = function (container)
farmbuyer@96 389 container:AddChildren(mktitle[[Item-Specific Special Handling]])
farmbuyer@96 390
farmbuyer@97 391 local w = AceGUI:Create("Label")
farmbuyer@97 392 w:SetFullWidth(true)
farmbuyer@97 393 w:SetText(description)
farmbuyer@97 394 container:AddChild(w)
farmbuyer@97 395 container:AddChild(spacer(20))
farmbuyer@97 396
farmbuyer@96 397 cache_warn, cache_warned = false, false
farmbuyer@96 398 local filterlist, vaultlist = {}, {}
farmbuyer@96 399 for id in pairs(opts.itemfilter) do
farmbuyer@96 400 local iname, _, iquality = GetItemInfo(id)
farmbuyer@96 401 if iname then
farmbuyer@96 402 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 403 else
farmbuyer@96 404 filterlist[id] = id
farmbuyer@96 405 cache_warn = true
farmbuyer@96 406 end
farmbuyer@96 407 end
farmbuyer@96 408 for id in pairs(opts.itemvault) do
farmbuyer@96 409 local iname, _, iquality = GetItemInfo(id)
farmbuyer@96 410 if iname then
farmbuyer@96 411 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 412 else
farmbuyer@96 413 vaultlist[id] = id
farmbuyer@96 414 cache_warn = true
farmbuyer@96 415 end
farmbuyer@96 416 end
farmbuyer@97 417 -- This is so that the "add all defaults" button will never, ever,
farmbuyer@97 418 -- trip over cache misses.
farmbuyer@97 419 for id in pairs(addon.default_itemfilter) do GetItemInfo(id) end
farmbuyer@97 420 for id in pairs(addon.default_itemvault) do GetItemInfo(id) end
farmbuyer@96 421
farmbuyer@97 422 w = AceGUI:Create("EditBoxDropDown")
farmbuyer@96 423 w:SetRelativeWidth(0.4)
farmbuyer@96 424 w:SetText("Item filter")
farmbuyer@96 425 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
farmbuyer@96 426 w:SetList(filterlist)
farmbuyer@96 427 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
farmbuyer@96 428 local iname, ilink, iquality = GetItemInfo(text:trim())
farmbuyer@96 429 if not iname then
farmbuyer@96 430 return addon:Print("Error: %s is not a valid item name/link!", text)
farmbuyer@96 431 end
farmbuyer@96 432 local id = tonumber(ilink:match("item:(%d+)"))
farmbuyer@96 433 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 434 opts.itemfilter[id] = true
farmbuyer@96 435 addon:Print("Now filtering out", ilink)
farmbuyer@96 436 end)
farmbuyer@96 437 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
farmbuyer@96 438 --local ilink = select(2,GetItemInfo(key_id))
farmbuyer@96 439 opts.itemfilter[tonumber(key_id)] = nil
farmbuyer@96 440 --addon:Print("No longer filtering out", ilink)
farmbuyer@96 441 addon:Print("No longer filtering out", val_name)
farmbuyer@96 442 end)
farmbuyer@96 443 --w:SetCallback("OnDropdownShown",do_warning)
farmbuyer@96 444 w:SetCallback("OnDropdownShown", function()
farmbuyer@96 445 do_warning(container)
farmbuyer@96 446 end)
farmbuyer@96 447 container:AddChild(w)
farmbuyer@96 448
farmbuyer@96 449 w = AceGUI:Create("Spacer")
farmbuyer@96 450 w:SetRelativeWidth(0.1)
farmbuyer@96 451 w:SetHeight(2)
farmbuyer@96 452 container:AddChild(w)
farmbuyer@96 453
farmbuyer@96 454 w = AceGUI:Create("EditBoxDropDown")
farmbuyer@96 455 w:SetRelativeWidth(0.4)
farmbuyer@96 456 w:SetText("Vault items")
farmbuyer@96 457 w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.")
farmbuyer@96 458 w:SetList(vaultlist)
farmbuyer@96 459 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
farmbuyer@96 460 local iname, ilink, iquality = GetItemInfo(text:trim())
farmbuyer@96 461 if not iname then
farmbuyer@96 462 return addon:Print("Error: %s is not a valid item name/link!", text)
farmbuyer@96 463 end
farmbuyer@96 464 local id = tonumber(ilink:match("item:(%d+)"))
farmbuyer@96 465 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 466 opts.itemvault[id] = true
farmbuyer@96 467 addon:Print("Now auto-vaulting", ilink)
farmbuyer@96 468 end)
farmbuyer@96 469 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
farmbuyer@96 470 --local ilink = select(2,GetItemInfo(key_id))
farmbuyer@96 471 opts.itemfilter[tonumber(key_id)] = nil
farmbuyer@96 472 --addon:Print("No longer filtering out", ilink)
farmbuyer@96 473 addon:Print("No longer auto-vaulting", val_name)
farmbuyer@96 474 end)
farmbuyer@96 475 w:SetCallback("OnDropdownShown",do_warning)
farmbuyer@96 476 container:AddChild(w)
farmbuyer@97 477
farmbuyer@97 478 local function MAYBE_ADD (destname, dest, id)
farmbuyer@97 479 local name, link = GetItemInfo(id)
farmbuyer@97 480 if not name then
farmbuyer@97 481 addon:Print("> No data on ID %d, this may be a bug.",id)
farmbuyer@97 482 return
farmbuyer@97 483 end
farmbuyer@97 484 if dest[id] then
farmbuyer@97 485 addon:Print("> Skipping %s as it's already in '%s' list.",
farmbuyer@97 486 link, destname)
farmbuyer@97 487 else
farmbuyer@97 488 dest[id] = true
farmbuyer@97 489 addon:Print("> Added %s to '%s' list.", link, destname)
farmbuyer@97 490 end
farmbuyer@97 491 end
farmbuyer@97 492
farmbuyer@97 493 container:AddChild(spacer(40))
farmbuyer@97 494 w = AceGUI:Create("Label")
farmbuyer@97 495 w:SetFullWidth(true)
farmbuyer@97 496 w:SetText(defaultstext)
farmbuyer@97 497 container:AddChild(w)
farmbuyer@97 498 w = AceGUI:Create("Button")
farmbuyer@97 499 w:SetRelativeWidth(0.4)
farmbuyer@97 500 w:SetText[[Add Default Entries]]
farmbuyer@97 501 w:SetCallback("OnClick", function()
farmbuyer@97 502 for id in pairs(addon.default_itemfilter) do
farmbuyer@97 503 MAYBE_ADD ("filter", opts.itemfilter, id)
farmbuyer@97 504 end
farmbuyer@97 505 for id in pairs(addon.default_itemvault) do
farmbuyer@97 506 MAYBE_ADD ("vault", opts.itemvault, id)
farmbuyer@97 507 end
farmbuyer@97 508 addon:redisplay()
farmbuyer@97 509 end)
farmbuyer@97 510 container:AddChild(w)
farmbuyer@97 511 end
farmbuyer@97 512 end
farmbuyer@97 513
farmbuyer@97 514
farmbuyer@97 515 ---------------
farmbuyer@97 516 do
farmbuyer@97 517 local profiles
farmbuyer@97 518 controls.basic_profiles = function (container)
farmbuyer@97 519 if not profiles then
farmbuyer@97 520 profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(addon.db)
farmbuyer@97 521 LibStub("AceConfig-3.0"):RegisterOptionsTable("OuroLootProfiles", profiles)
farmbuyer@97 522 end
farmbuyer@97 523 LibStub("AceConfigDialog-3.0"):Open ("OuroLootProfiles", container)
farmbuyer@96 524 end
farmbuyer@96 525 end
farmbuyer@96 526
farmbuyer@96 527
farmbuyer@96 528 ---------------
farmbuyer@96 529 local adv_real = function (container)
farmbuyer@96 530 container:AddChildren(mktitle[[Debugging Options (not saved across sessions)]])
farmbuyer@96 531
farmbuyer@96 532 container:PauseLayout()
farmbuyer@96 533 local w
farmbuyer@96 534
farmbuyer@96 535 do
farmbuyer@96 536 local grp = AceGUI:Create("InlineGroup")
farmbuyer@96 537 grp:SetLayout("List")
farmbuyer@96 538 grp:SetRelativeWidth(0.60)
farmbuyer@96 539 grp:SetTitle("Output of debugging messages")
farmbuyer@96 540
farmbuyer@102 541 w = AceGUI:Create("CheckBox")
farmbuyer@96 542 w:SetFullWidth(true)
farmbuyer@96 543 w:SetType("checkbox")
farmbuyer@96 544 w:SetLabel("master toggle")
farmbuyer@96 545 w:SetValue(addon.DEBUG_PRINT)
farmbuyer@96 546 w:SetCallback("OnValueChanged", function(_w,event,value)
farmbuyer@96 547 addon.DEBUG_PRINT = value
farmbuyer@96 548 addon:redisplay()
farmbuyer@96 549 end)
farmbuyer@96 550 grp:AddChild(w)
farmbuyer@96 551 for d,v in pairs(addon.debug) do
farmbuyer@102 552 w = AceGUI:Create("CheckBox")
farmbuyer@96 553 w:SetFullWidth(true)
farmbuyer@96 554 w:SetType("checkbox")
farmbuyer@96 555 w:SetLabel(d)
farmbuyer@96 556 if d == "notraid" then
farmbuyer@96 557 w:SetDescription[[Tick this before enabling to make the addon work outside of raid groups]]
farmbuyer@96 558 else
farmbuyer@96 559 if d == "alsolog" then
farmbuyer@96 560 w:SetDescription[[Also log all debug messages to disk. See print_log.lua in the addon folder for later viewing.]]
farmbuyer@96 561 end
farmbuyer@96 562 w:SetDisabled(not addon.DEBUG_PRINT)
farmbuyer@96 563 end
farmbuyer@96 564 w:SetValue(v)
farmbuyer@100 565 w:SetCallback("OnValueChanged", function(_w,event,value)
farmbuyer@100 566 addon.debug[d] = value
farmbuyer@100 567 if d == "comm" then
farmbuyer@100 568 addon.is_guilded = _G.IsInGuild()
farmbuyer@100 569 end
farmbuyer@100 570 end)
farmbuyer@96 571 grp:AddChild(w)
farmbuyer@96 572 end
farmbuyer@96 573 container:AddChild(grp)
farmbuyer@96 574 end
farmbuyer@96 575
farmbuyer@96 576 do
farmbuyer@96 577 local simple = AceGUI:Create("SimpleGroup")
farmbuyer@96 578 simple:SetLayout("List")
farmbuyer@96 579 simple:SetRelativeWidth(0.35)
farmbuyer@102 580 w = AceGUI:Create("CheckBox")
farmbuyer@96 581 --w:SetRelativeWidth(0.35)
farmbuyer@96 582 w:SetFullWidth(true)
farmbuyer@96 583 w:SetType("checkbox")
farmbuyer@96 584 w:SetLabel("GOP history mode")
farmbuyer@96 585 w:SetValue(addon.history_suppress)
farmbuyer@96 586 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end)
farmbuyer@96 587 simple:AddChild(w)
farmbuyer@96 588 w = mkbutton("Dropdown", nil, "",
farmbuyer@96 589 [[if active, tooltip shown when hovering over Item column only]])
farmbuyer@96 590 --w:SetRelativeWidth(0.4)
farmbuyer@96 591 w:SetFullWidth(true)
farmbuyer@96 592 w:SetLabel("loot debugging tooltip")
farmbuyer@96 593 w:SetList{
farmbuyer@96 594 [1] = "Off",
farmbuyer@96 595 [2] = "/dump into tooltip",
farmbuyer@96 596 [3] = "small fixed fields",
farmbuyer@96 597 }
farmbuyer@96 598 w:SetValue(gui._do_debugging_tooltip or 1)
farmbuyer@96 599 w:SetCallback("OnValueChanged", function(_w,event,choice)
farmbuyer@96 600 gui._do_debugging_tooltip = choice > 1 and choice or nil
farmbuyer@96 601 end)
farmbuyer@96 602 simple:AddChild(w)
farmbuyer@96 603 container:AddChild(simple)
farmbuyer@96 604 end
farmbuyer@96 605
farmbuyer@97 606 container:AddChild(spacer(10))
farmbuyer@96 607
farmbuyer@96 608 w = mkbutton("EditBox", 'comm_ident', addon.ident,
farmbuyer@96 609 [[Set tracking to 'Disabled' in the top-right dropdown, then change this field (click Okay or press Enter).]])
farmbuyer@96 610 w:SetRelativeWidth(0.25)
farmbuyer@96 611 w:SetLabel("Addon channel ID")
farmbuyer@96 612 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
farmbuyer@96 613 w:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 614 -- if they set it to blank spaces, they're boned. oh well.
farmbuyer@96 615 -- Re-enabling will take care of propogating this new value.
farmbuyer@96 616 addon.ident = (value == "") and "OuroLoot2" or value
farmbuyer@96 617 _w:SetText(addon.ident)
farmbuyer@96 618 addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.")
farmbuyer@96 619 end)
farmbuyer@96 620 w:SetDisabled(addon.enabled or addon.rebroadcast)
farmbuyer@96 621 container:AddChild(w)
farmbuyer@96 622
farmbuyer@96 623 w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache TTL]])
farmbuyer@96 624 w:SetRelativeWidth(0.1)
farmbuyer@96 625 w:SetLabel("ttl")
farmbuyer@96 626 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
farmbuyer@96 627 w:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 628 value = tonumber(value) or addon.recent_messages.ttl
farmbuyer@96 629 addon.recent_messages.ttl = value
farmbuyer@96 630 _w:SetText(tostring(value))
farmbuyer@96 631 end)
farmbuyer@96 632 container:AddChild(w)
farmbuyer@96 633
farmbuyer@96 634 w = mkbutton("load nsaab1548", [[Cursed Darkhound]])
farmbuyer@96 635 w:SetRelativeWidth(0.25)
farmbuyer@96 636 w:SetCallback("OnClick", function()
farmbuyer@96 637 for i, v in ipairs(DBM.AddOns) do
farmbuyer@96 638 if v.modId == "DBM-NotScaryAtAll" then
farmbuyer@96 639 DBM:LoadMod(v)
farmbuyer@96 640 break
farmbuyer@96 641 end
farmbuyer@96 642 end
farmbuyer@96 643 local mod = DBM:GetModByName("NotScaryAtAll")
farmbuyer@96 644 if mod then
farmbuyer@96 645 mod:EnableMod()
farmbuyer@96 646 addon:Print("Now tracking ID",mod.creatureId)
farmbuyer@96 647 else
farmbuyer@96 648 addon:Print("Can do nothing; DBM testing mod wasn't loaded.")
farmbuyer@96 649 end
farmbuyer@96 650 end)
farmbuyer@102 651 w:SetDisabled(addon.bossmod_registered ~= 'DBM') -- set by :Activate
farmbuyer@96 652 container:AddChild(w)
farmbuyer@96 653
farmbuyer@96 654 w = mkbutton("GC", [[full GC cycle]])
farmbuyer@96 655 w:SetRelativeWidth(0.2)
farmbuyer@96 656 w:SetCallback("OnClick", function()
farmbuyer@96 657 local before = collectgarbage('count')
farmbuyer@96 658 collectgarbage('collect')
farmbuyer@96 659 local after = collectgarbage('count')
farmbuyer@96 660 addon:Print("Collected %d KB, %d KB still in use by Lua universe.", before-after, after)
farmbuyer@96 661 end)
farmbuyer@96 662 container:AddChild(w)
farmbuyer@96 663
farmbuyer@97 664 container:AddChild(spacer(3))
farmbuyer@96 665 do
farmbuyer@96 666 local simple = AceGUI:Create("SimpleGroup")
farmbuyer@96 667 simple:SetLayout("Flow")
farmbuyer@96 668 --simple:SetRelativeWidth(0.95)
farmbuyer@96 669 simple:SetFullWidth(true)
farmbuyer@96 670 w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]])
farmbuyer@96 671 w:SetRelativeWidth(0.2)
farmbuyer@96 672 w:SetCallback("OnClick", function()
farmbuyer@96 673 PlaySoundFile ([[Sound\Music\WorldEvents\HordeFirepole.mp3]], "Master")
farmbuyer@96 674 end)
farmbuyer@96 675 simple:AddChild(w)
farmbuyer@96 676 w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]])
farmbuyer@96 677 w:SetRelativeWidth(0.2)
farmbuyer@96 678 w:SetCallback("OnClick", function()
farmbuyer@96 679 PlaySoundFile ([[Sound\Music\WorldEvents\AllianceFirepole.mp3]], "Master")
farmbuyer@96 680 end)
farmbuyer@96 681 simple:AddChild(w)
farmbuyer@96 682 w = mkbutton("SFRR", [[test]])
farmbuyer@96 683 w:SetRelativeWidth(0.15)
farmbuyer@96 684 w:SetCallback("OnClick", function()
farmbuyer@96 685 PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "Master")
farmbuyer@96 686 end)
farmbuyer@96 687 simple:AddChild(w)
farmbuyer@96 688
farmbuyer@96 689 container:AddChild(simple)
farmbuyer@96 690 end
farmbuyer@96 691
farmbuyer@96 692 w = AceGUI:Create("Spacer") w:SetRelativeWidth(0.65) w:SetHeight(15) container:AddChild(w)
farmbuyer@96 693 w = mkbutton("Clear All & Reload",
farmbuyer@96 694 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
farmbuyer@96 695 w:SetRelativeWidth(0.3)
farmbuyer@96 696 w:SetCallback("OnClick", function()
farmbuyer@96 697 addon:_clear_SVs() -- reloads
farmbuyer@96 698 end)
farmbuyer@96 699 container:AddChild(w)
farmbuyer@96 700
farmbuyer@96 701 container:ResumeLayout()
farmbuyer@96 702 container:DoLayout()
farmbuyer@96 703 AceGUI:ClearFocus()
farmbuyer@96 704 --container:SetScroll(1000) -- scrollframe widget's max value
farmbuyer@96 705 end
farmbuyer@96 706
farmbuyer@96 707 -- Initial advanced panel function (unless debug mode is on during load, which
farmbuyer@96 708 -- means it was almost certainly hardcoded that way, which means it's probably
farmbuyer@96 709 -- me testing).
farmbuyer@97 710 if addon.DEBUG_PRINT then
farmbuyer@96 711 controls.adv = adv_real
farmbuyer@96 712 else
farmbuyer@96 713 controls.adv = function (container)
farmbuyer@96 714 local speedbump = AceGUI:Create("InteractiveLabel")
farmbuyer@96 715 speedbump:SetFullWidth(true)
farmbuyer@96 716 speedbump:SetFontObject(GameFontHighlightLarge)
farmbuyer@96 717 speedbump:SetImage[[Interface\DialogFrame\DialogAlertIcon]]
farmbuyer@96 718 speedbump:SetImageSize(50,50)
farmbuyer@96 719 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 720 speedbump:SetCallback("OnClick", function (_sb)
farmbuyer@96 721 controls.adv = { adv_real }
farmbuyer@96 722 return addon:redisplay()
farmbuyer@96 723 end)
farmbuyer@96 724 container:AddChild(speedbump)
farmbuyer@96 725 end
farmbuyer@96 726 end
farmbuyer@96 727
farmbuyer@96 728
farmbuyer@96 729 ---------------
farmbuyer@96 730 -- Tab 6: Options
farmbuyer@96 731 do
farmbuyer@96 732 local funkified = {}
farmbuyer@96 733 for key,f in pairs(controls) do
farmbuyer@99 734 -- this is how TreeGroup makes unique keys out of nested entries
farmbuyer@96 735 local funkykey = key:gsub('_','\001')
farmbuyer@96 736 funkified[funkykey] = { f }
farmbuyer@96 737 end
farmbuyer@96 738 controls = funkified
farmbuyer@96 739 end
farmbuyer@96 740
farmbuyer@96 741 -- widget container status tables (will have things magically appear
farmbuyer@96 742 -- inside them that we wish to preserve)
farmbuyer@96 743 local status_for_scroll = {}
farmbuyer@96 744 local status_for_select = { treewidth = 160 }
farmbuyer@96 745
farmbuyer@97 746 local function preload()
farmbuyer@97 747 for id in pairs(opts.itemfilter) do GetItemInfo(id) end
farmbuyer@97 748 for id in pairs(opts.itemvault) do GetItemInfo(id) end
farmbuyer@97 749 preload = nil
farmbuyer@97 750 end
farmbuyer@97 751
farmbuyer@99 752 local aceconfig_list = {}
farmbuyer@99 753
farmbuyer@99 754 -- Selecting an entry on the left tree column.
farmbuyer@96 755 local opt_OnGroupSelected_func = function (treeg,event,category)
farmbuyer@98 756 opts = addon.db.profile
farmbuyer@96 757 local catfuncs = controls[category]
farmbuyer@96 758 if not catfuncs then
farmbuyer@96 759 addon:horrible_horrible_error(("Category '%s' has no handler function!"):format(category:gsub('\001','_')))
farmbuyer@96 760 end
farmbuyer@96 761 treeg:ReleaseChildren()
farmbuyer@99 762 if aceconfig_list[category] then
farmbuyer@99 763 -- aceconfigdialog makes too many assumptions about scrolling
farmbuyer@99 764 for _,func in ipairs(catfuncs) do
farmbuyer@99 765 if func(treeg,category) then break end
farmbuyer@96 766 end
farmbuyer@96 767 else
farmbuyer@99 768 local sf = AceGUI:Create("ScrollFrame")
farmbuyer@99 769 sf:SetStatusTable(status_for_scroll)
farmbuyer@99 770 sf:SetLayout("Flow")
farmbuyer@99 771 -- This forces the scrolling area to be bigger than the visible area; else
farmbuyer@99 772 -- some of the text gets cut off without ever triggering the scrollbar.
farmbuyer@99 773 sf.content:SetHeight(700)
farmbuyer@99 774 for _,func in ipairs(catfuncs) do
farmbuyer@99 775 if func(sf,category) then break end
farmbuyer@99 776 end
farmbuyer@99 777 treeg:AddChild(sf)
farmbuyer@99 778 if treeg:GetUserData("options restore scroll") then
farmbuyer@99 779 if status_for_scroll.scrollvalue then
farmbuyer@99 780 sf:SetScroll(status_for_scroll.scrollvalue)
farmbuyer@99 781 end
farmbuyer@99 782 treeg:SetUserData("options restore scroll", false)
farmbuyer@99 783 else
farmbuyer@99 784 sf:SetScroll(0)
farmbuyer@99 785 end
farmbuyer@96 786 end
farmbuyer@96 787 end
farmbuyer@96 788
farmbuyer@96 789 -- Clicking the Options tab as a whole (tabs_OnGroupSelected["opt"]).
farmbuyer@96 790 local tabs_OGS = function (container, specials)
farmbuyer@96 791 container:SetLayout("Fill")
farmbuyer@96 792 local left = AceGUI:Create("TreeGroup")
farmbuyer@96 793 left:SetStatusTable(status_for_select)
farmbuyer@96 794 left:SetLayout("Fill")
farmbuyer@96 795 left:SetFullWidth(true)
farmbuyer@96 796 left:SetFullHeight(true)
farmbuyer@96 797 left:EnableButtonTooltips(false)
farmbuyer@96 798 left:SetTree(options_tree)
farmbuyer@96 799 left:SetCallback("OnGroupSelected", opt_OnGroupSelected_func)
farmbuyer@96 800 container:AddChild(left)
farmbuyer@96 801 if status_for_select.selected then
farmbuyer@96 802 left:SetUserData("options restore scroll", true)
farmbuyer@96 803 left:SelectByValue(status_for_select.selected)
farmbuyer@96 804 else
farmbuyer@96 805 left:SelectByValue("basic")
farmbuyer@96 806 end
farmbuyer@96 807
farmbuyer@96 808 local w = mkbutton("ReloadUI",
farmbuyer@96 809 [[Does what you think it does. Loot information is written out and restored.]])
farmbuyer@96 810 w:SetFullWidth(true)
farmbuyer@96 811 w:SetCallback("OnClick", ReloadUI)
farmbuyer@96 812 specials:AddChild(w)
farmbuyer@96 813
farmbuyer@96 814 w = mkbutton("Ping!",
farmbuyer@96 815 [[Queries other raid users for their addon version and current status. Results displayed on Pongs panel after five seconds.]])
farmbuyer@96 816 w:SetFullWidth(true)
farmbuyer@96 817 w:SetCallback("OnClick", function(_w)
farmbuyer@96 818 _w:SetText("5... 4... 3...")
farmbuyer@96 819 _w:SetDisabled(true)
farmbuyer@96 820 addon:DoPing()
farmbuyer@96 821 addon:ScheduleTimer(function(b)
farmbuyer@96 822 if b:IsVisible() then
farmbuyer@96 823 return addon:redisplay()
farmbuyer@96 824 end
farmbuyer@96 825 end, 5, _w)
farmbuyer@96 826 end)
farmbuyer@96 827 specials:AddChild(w)
farmbuyer@97 828
farmbuyer@97 829 if preload then preload() end
farmbuyer@96 830 end
farmbuyer@96 831
farmbuyer@96 832 addon:register_tab_control_AT_END ("opt", [[Options]],
farmbuyer@103 833 [[Options for fine-tuning behavior]], tabs_OGS, [[
farmbuyer@103 834 The "be chatty" options can be noisy, but they make the
farmbuyer@103 835 |cffff8000[Ouro Loot]|r link much more useful. See
farmbuyer@103 836 <Help -- Handy Tips> for details!
farmbuyer@103 837 ]])
farmbuyer@96 838
farmbuyer@99 839
farmbuyer@99 840 ---------------
farmbuyer@99 841 -- Registering new options entries
farmbuyer@99 842 local insertion_index = #options_tree
farmbuyer@99 843 for i = #options_tree, 1, -1 do
farmbuyer@99 844 if options_tree[i] == 'NEW INSERTIONS HERE' then
farmbuyer@99 845 insertion_index = i
farmbuyer@99 846 break
farmbuyer@99 847 end
farmbuyer@99 848 end
farmbuyer@99 849 if insertion_index then
farmbuyer@99 850 table.remove (options_tree, insertion_index)
farmbuyer@99 851 else
farmbuyer@99 852 insertion_index = #options_tree + 1
farmbuyer@99 853 end
farmbuyer@99 854
farmbuyer@99 855
farmbuyer@99 856 --[[
farmbuyer@100 857 PLUGIN is the module table itself. (This does not actually have to be
farmbuyer@100 858 a plugin created with :[Constrained]NewModule, as long as it has a
farmbuyer@102 859 GetName method and
farmbuyer@102 860 - TEXT is passed
farmbuyer@102 861 - if OPTIONS is a table, then OPTIONS.args.name exists
farmbuyer@99 862 PARENT is nil to register in the tree list directly.
farmbuyer@99 863 TEXT is either the text to display in the tree list, or nil to use the
farmbuyer@99 864 moduleName field out of PLUGIN (not :GetName()).
farmbuyer@99 865 OPTIONS is either
farmbuyer@102 866 I) an aceconfig-style options table
farmbuyer@102 867 II) a function to call directly
farmbuyer@99 868
farmbuyer@99 869 (I) Will augment options.args.name with coloring/sizing, if it exists.
farmbuyer@99 870 (Set options.args.name.name before registering.) Will create it if not
farmbuyer@99 871 present.
farmbuyer@99 872
farmbuyer@99 873 (II) Title added unconditionally. Callback is
farmbuyer@99 874 options (scrollframe_container, plugin, unique_code)
farmbuyer@99 875 where UNIQUE_CODE is what's used by the TreeGroup widget in identifying
farmbuyer@99 876 the "button" clicked in the lefthand tree list.
farmbuyer@99 877
farmbuyer@99 878 Will append a reset button IFF an options database has been registered already.
farmbuyer@99 879 ]]
farmbuyer@99 880 function addon:register_options_entry (plugin, parent, text, options)
farmbuyer@99 881 -- if this changes at all, fix up plugin_reset_button accordingly
farmbuyer@99 882 local code = plugin:GetName()
farmbuyer@99 883 --if parent
farmbuyer@99 884
farmbuyer@99 885 text = text or plugin.moduleName
farmbuyer@99 886
farmbuyer@99 887 local handler
farmbuyer@102 888 local pdb = plugin.moduleName and
farmbuyer@102 889 self.db:GetNamespace (plugin.moduleName, --[[silent=]]true)
farmbuyer@102 890
farmbuyer@99 891 if type(options) == 'table' then
farmbuyer@99 892 -- AceConfig-style options table
farmbuyer@99 893 aceconfig_list[code] = true
farmbuyer@99 894 if not options.args.name then
farmbuyer@99 895 options.args.name = {
farmbuyer@99 896 name = plugin.moduleName,
farmbuyer@99 897 type = 'description',
farmbuyer@99 898 }
farmbuyer@99 899 end
farmbuyer@99 900 options.args.name.name = '|cff30adff' .. options.args.name.name .. '|r'
farmbuyer@99 901 options.args.name.fontSize = 'large'
farmbuyer@99 902 options.args.name.width = 'full'
farmbuyer@99 903 options.args.name.cmdHidden = true
farmbuyer@99 904 options.args.name.order = 1
farmbuyer@99 905 if pdb then
farmbuyer@99 906 options.args.INSERTED_SPACER = {
farmbuyer@99 907 name = '',
farmbuyer@99 908 type = 'description',
farmbuyer@99 909 cmdHidden = true,
farmbuyer@99 910 width = 'full',
farmbuyer@99 911 order = 9000,
farmbuyer@99 912 }
farmbuyer@99 913 options.args.RESET = {
farmbuyer@99 914 name = "Reset",
farmbuyer@99 915 desc = ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(plugin:GetName()),
farmbuyer@99 916 type = 'execute',
farmbuyer@99 917 func = function()
farmbuyer@99 918 pdb:ResetProfile()
farmbuyer@99 919 if IsShiftKeyDown() then ReloadUI() end
farmbuyer@99 920 end,
farmbuyer@99 921 order = 9001,
farmbuyer@99 922 }
farmbuyer@99 923 end
farmbuyer@99 924 LibStub("AceConfig-3.0"):RegisterOptionsTable(plugin:GetName(), options)
farmbuyer@99 925 handler = function (sf)
farmbuyer@99 926 LibStub("AceConfigDialog-3.0"):Open (plugin:GetName(), sf)
farmbuyer@99 927 end
farmbuyer@99 928
farmbuyer@99 929 elseif type(options) == 'function' then
farmbuyer@99 930 -- AceGUI callback
farmbuyer@99 931 if pdb then
farmbuyer@99 932 handler = function (sf)
farmbuyer@99 933 sf:AddChildren(mktitle(text))
farmbuyer@99 934 local ret = options (sf, plugin, code)
farmbuyer@99 935 local w = mkbutton("Reset",
farmbuyer@99 936 ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(text))
farmbuyer@99 937 w:SetRelativeWidth(0.3)
farmbuyer@99 938 w:SetCallback("OnClick", function(_w)
farmbuyer@99 939 pdb:ResetProfile()
farmbuyer@99 940 if IsShiftKeyDown() then ReloadUI() end
farmbuyer@99 941 end)
farmbuyer@99 942 sf:AddChildren(spacer(10),w)
farmbuyer@99 943 return ret
farmbuyer@99 944 end
farmbuyer@99 945 else
farmbuyer@99 946 handler = function (sf)
farmbuyer@99 947 sf:AddChildren(mktitle(text))
farmbuyer@99 948 return options (sf, plugin, code)
farmbuyer@99 949 end
farmbuyer@99 950 end
farmbuyer@99 951
farmbuyer@99 952 else
farmbuyer@99 953 error(("Error: 'options' parameter for plugin '%s' is neither table nor function"):format(plugin:GetName()))
farmbuyer@99 954 end
farmbuyer@99 955
farmbuyer@99 956 if not controls[code] then
farmbuyer@99 957 controls[code] = {}
farmbuyer@99 958 end
farmbuyer@99 959 table.insert (controls[code], handler)
farmbuyer@99 960
farmbuyer@99 961 table.insert (options_tree, insertion_index, {
farmbuyer@99 962 value = code,
farmbuyer@99 963 text = text, -- maybe call markup on this?
farmbuyer@99 964 })
farmbuyer@99 965 insertion_index = insertion_index + 1
farmbuyer@99 966 -- The treegroup will rescan options_tree (via RefreshTree) several times
farmbuyer@99 967 -- before the player actually sees anything; no more work needs doing.
farmbuyer@99 968 return -- something that can be used as 'parent'
farmbuyer@99 969 end
farmbuyer@99 970
farmbuyer@99 971
farmbuyer@96 972 -- vim:noet