annotate options.lua @ 121:4dd67f8116f4

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