annotate options.lua @ 119:a88d485123b8 beta-mhg-2

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