annotate options.lua @ 115:289c7667adab

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