annotate options.lua @ 139:04deb53ec4fe

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