annotate options.lua @ 117:dbdab3780757

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