annotate options.lua @ 97:ba5ff82dcf19

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