annotate options.lua @ 135:feca7e0e1f89

Remove MoP transition code, be smarter about detecting groups.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Fri, 31 Aug 2012 23:15:40 -0400
parents 47b149f9a5d7
children 8345df517488
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@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@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@96 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@96 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@96 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@96 694
farmbuyer@96 695 container:AddChild(simple)
farmbuyer@96 696 end
farmbuyer@96 697
farmbuyer@96 698 w = AceGUI:Create("Spacer") w:SetRelativeWidth(0.65) w:SetHeight(15) container:AddChild(w)
farmbuyer@96 699 w = mkbutton("Clear All & Reload",
farmbuyer@96 700 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
farmbuyer@96 701 w:SetRelativeWidth(0.3)
farmbuyer@96 702 w:SetCallback("OnClick", function()
farmbuyer@96 703 addon:_clear_SVs() -- reloads
farmbuyer@96 704 end)
farmbuyer@96 705 container:AddChild(w)
farmbuyer@96 706
farmbuyer@96 707 container:ResumeLayout()
farmbuyer@96 708 container:DoLayout()
farmbuyer@96 709 AceGUI:ClearFocus()
farmbuyer@96 710 --container:SetScroll(1000) -- scrollframe widget's max value
farmbuyer@96 711 end
farmbuyer@96 712
farmbuyer@96 713 -- Initial advanced panel function (unless debug mode is on during load, which
farmbuyer@96 714 -- means it was almost certainly hardcoded that way, which means it's probably
farmbuyer@96 715 -- me testing).
farmbuyer@97 716 if addon.DEBUG_PRINT then
farmbuyer@96 717 controls.adv = adv_real
farmbuyer@96 718 else
farmbuyer@96 719 controls.adv = function (container)
farmbuyer@96 720 local speedbump = AceGUI:Create("InteractiveLabel")
farmbuyer@96 721 speedbump:SetFullWidth(true)
farmbuyer@96 722 speedbump:SetFontObject(GameFontHighlightLarge)
farmbuyer@96 723 speedbump:SetImage[[Interface\DialogFrame\DialogAlertIcon]]
farmbuyer@96 724 speedbump:SetImageSize(50,50)
farmbuyer@96 725 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 726 speedbump:SetCallback("OnClick", function (_sb)
farmbuyer@96 727 controls.adv = { adv_real }
farmbuyer@96 728 return addon:redisplay()
farmbuyer@96 729 end)
farmbuyer@96 730 container:AddChild(speedbump)
farmbuyer@96 731 end
farmbuyer@96 732 end
farmbuyer@96 733
farmbuyer@96 734
farmbuyer@96 735 ---------------
farmbuyer@96 736 -- Tab 6: Options
farmbuyer@96 737 do
farmbuyer@96 738 local funkified = {}
farmbuyer@96 739 for key,f in pairs(controls) do
farmbuyer@99 740 -- this is how TreeGroup makes unique keys out of nested entries
farmbuyer@96 741 local funkykey = key:gsub('_','\001')
farmbuyer@96 742 funkified[funkykey] = { f }
farmbuyer@96 743 end
farmbuyer@96 744 controls = funkified
farmbuyer@96 745 end
farmbuyer@96 746
farmbuyer@96 747 -- widget container status tables (will have things magically appear
farmbuyer@96 748 -- inside them that we wish to preserve)
farmbuyer@125 749 local options_treegroup -- careful, this is deliberately not preserved
farmbuyer@96 750 local status_for_scroll = {}
farmbuyer@96 751 local status_for_select = { treewidth = 160 }
farmbuyer@96 752
farmbuyer@97 753 local function preload()
farmbuyer@97 754 for id in pairs(opts.itemfilter) do GetItemInfo(id) end
farmbuyer@97 755 for id in pairs(opts.itemvault) do GetItemInfo(id) end
farmbuyer@97 756 preload = nil
farmbuyer@97 757 end
farmbuyer@97 758
farmbuyer@99 759 local aceconfig_list = {}
farmbuyer@99 760
farmbuyer@99 761 -- Selecting an entry on the left tree column.
farmbuyer@96 762 local opt_OnGroupSelected_func = function (treeg,event,category)
farmbuyer@98 763 opts = addon.db.profile
farmbuyer@96 764 local catfuncs = controls[category]
farmbuyer@96 765 if not catfuncs then
farmbuyer@96 766 addon:horrible_horrible_error(("Category '%s' has no handler function!"):format(category:gsub('\001','_')))
farmbuyer@96 767 end
farmbuyer@96 768 treeg:ReleaseChildren()
farmbuyer@99 769 if aceconfig_list[category] then
farmbuyer@99 770 -- aceconfigdialog makes too many assumptions about scrolling
farmbuyer@99 771 for _,func in ipairs(catfuncs) do
farmbuyer@99 772 if func(treeg,category) then break end
farmbuyer@96 773 end
farmbuyer@96 774 else
farmbuyer@99 775 local sf = AceGUI:Create("ScrollFrame")
farmbuyer@99 776 sf:SetStatusTable(status_for_scroll)
farmbuyer@99 777 sf:SetLayout("Flow")
farmbuyer@99 778 -- This forces the scrolling area to be bigger than the visible area; else
farmbuyer@99 779 -- some of the text gets cut off without ever triggering the scrollbar.
farmbuyer@99 780 sf.content:SetHeight(700)
farmbuyer@99 781 for _,func in ipairs(catfuncs) do
farmbuyer@99 782 if func(sf,category) then break end
farmbuyer@99 783 end
farmbuyer@99 784 treeg:AddChild(sf)
farmbuyer@99 785 if treeg:GetUserData("options restore scroll") then
farmbuyer@99 786 if status_for_scroll.scrollvalue then
farmbuyer@99 787 sf:SetScroll(status_for_scroll.scrollvalue)
farmbuyer@99 788 end
farmbuyer@99 789 treeg:SetUserData("options restore scroll", false)
farmbuyer@99 790 else
farmbuyer@99 791 sf:SetScroll(0)
farmbuyer@99 792 end
farmbuyer@96 793 end
farmbuyer@96 794 end
farmbuyer@96 795
farmbuyer@96 796 -- Clicking the Options tab as a whole (tabs_OnGroupSelected["opt"]).
farmbuyer@96 797 local tabs_OGS = function (container, specials)
farmbuyer@96 798 container:SetLayout("Fill")
farmbuyer@96 799 local left = AceGUI:Create("TreeGroup")
farmbuyer@125 800 options_treegroup = left
farmbuyer@96 801 left:SetStatusTable(status_for_select)
farmbuyer@96 802 left:SetLayout("Fill")
farmbuyer@96 803 left:SetFullWidth(true)
farmbuyer@96 804 left:SetFullHeight(true)
farmbuyer@96 805 left:EnableButtonTooltips(false)
farmbuyer@96 806 left:SetTree(options_tree)
farmbuyer@96 807 left:SetCallback("OnGroupSelected", opt_OnGroupSelected_func)
farmbuyer@96 808 container:AddChild(left)
farmbuyer@96 809 if status_for_select.selected then
farmbuyer@96 810 left:SetUserData("options restore scroll", true)
farmbuyer@96 811 left:SelectByValue(status_for_select.selected)
farmbuyer@96 812 else
farmbuyer@96 813 left:SelectByValue("basic")
farmbuyer@96 814 end
farmbuyer@96 815
farmbuyer@96 816 local w = mkbutton("ReloadUI",
farmbuyer@96 817 [[Does what you think it does. Loot information is written out and restored.]])
farmbuyer@96 818 w:SetFullWidth(true)
farmbuyer@96 819 w:SetCallback("OnClick", ReloadUI)
farmbuyer@96 820 specials:AddChild(w)
farmbuyer@96 821
farmbuyer@96 822 w = mkbutton("Ping!",
farmbuyer@96 823 [[Queries other raid users for their addon version and current status. Results displayed on Pongs panel after five seconds.]])
farmbuyer@96 824 w:SetFullWidth(true)
farmbuyer@96 825 w:SetCallback("OnClick", function(_w)
farmbuyer@96 826 _w:SetText("5... 4... 3...")
farmbuyer@96 827 _w:SetDisabled(true)
farmbuyer@96 828 addon:DoPing()
farmbuyer@96 829 addon:ScheduleTimer(function(b)
farmbuyer@96 830 if b:IsVisible() then
farmbuyer@96 831 return addon:redisplay()
farmbuyer@96 832 end
farmbuyer@96 833 end, 5, _w)
farmbuyer@96 834 end)
farmbuyer@96 835 specials:AddChild(w)
farmbuyer@97 836
farmbuyer@123 837 if #OuroLootSV_log > 0 then
farmbuyer@123 838 w = AceGUI:Create("Label")
farmbuyer@123 839 w:SetFullWidth(true)
farmbuyer@123 840 w:SetText(("Currently %d lines in disk log."):format(#OuroLootSV_log))
farmbuyer@123 841 specials:AddChild(w)
farmbuyer@123 842 end
farmbuyer@123 843
farmbuyer@97 844 if preload then preload() end
farmbuyer@96 845 end
farmbuyer@96 846
farmbuyer@125 847 local tabs_cli = function (unique)
farmbuyer@125 848 if not controls[unique] then return end
farmbuyer@125 849 options_treegroup:SetSelected(unique)
farmbuyer@125 850 options_treegroup:SetUserData("options restore scroll", false)
farmbuyer@125 851 end
farmbuyer@125 852
farmbuyer@96 853 addon:register_tab_control_AT_END ("opt", [[Options]],
farmbuyer@103 854 [[Options for fine-tuning behavior]], tabs_OGS, [[
farmbuyer@103 855 The "be chatty" options can be noisy, but they make the
farmbuyer@103 856 |cffff8000[Ouro Loot]|r link much more useful. See
farmbuyer@103 857 <Help -- Handy Tips> for details!
farmbuyer@125 858 ]], tabs_cli)
farmbuyer@96 859
farmbuyer@99 860
farmbuyer@99 861 ---------------
farmbuyer@99 862 -- Registering new options entries
farmbuyer@99 863 local insertion_index = #options_tree
farmbuyer@99 864 for i = #options_tree, 1, -1 do
farmbuyer@99 865 if options_tree[i] == 'NEW INSERTIONS HERE' then
farmbuyer@99 866 insertion_index = i
farmbuyer@99 867 break
farmbuyer@99 868 end
farmbuyer@99 869 end
farmbuyer@99 870 if insertion_index then
farmbuyer@99 871 table.remove (options_tree, insertion_index)
farmbuyer@99 872 else
farmbuyer@99 873 insertion_index = #options_tree + 1
farmbuyer@99 874 end
farmbuyer@99 875
farmbuyer@99 876
farmbuyer@99 877 --[[
farmbuyer@100 878 PLUGIN is the module table itself. (This does not actually have to be
farmbuyer@100 879 a plugin created with :[Constrained]NewModule, as long as it has a
farmbuyer@125 880 'name' field and
farmbuyer@102 881 - TEXT is passed
farmbuyer@102 882 - if OPTIONS is a table, then OPTIONS.args.name exists
farmbuyer@125 883 UNIQUE and PARENT control placement in the tree list. UNIQUE is a unique
farmbuyer@125 884 string, or nil to use the module's unique name (this can only be used once
farmbuyer@125 885 obviously, or it's not "unique"). PARENT is nil to display at the main
farmbuyer@125 886 level of options, or a previously-registered return value to display as a
farmbuyer@125 887 child of that option.
farmbuyer@125 888 TEXT is either the text to display in the tree list, or nil to use
farmbuyer@125 889 PLUGIN:GetName().
farmbuyer@99 890 OPTIONS is either
farmbuyer@125 891 I) an aceconfig-style options table (uses PLUGIN:GetName())
farmbuyer@102 892 II) a function to call directly
farmbuyer@99 893
farmbuyer@99 894 (I) Will augment options.args.name with coloring/sizing, if it exists.
farmbuyer@99 895 (Set options.args.name.name before registering.) Will create it if not
farmbuyer@99 896 present.
farmbuyer@99 897
farmbuyer@99 898 (II) Title added unconditionally. Callback is
farmbuyer@99 899 options (scrollframe_container, plugin, unique_code)
farmbuyer@99 900 where UNIQUE_CODE is what's used by the TreeGroup widget in identifying
farmbuyer@99 901 the "button" clicked in the lefthand tree list.
farmbuyer@99 902
farmbuyer@99 903 Will append a reset button IFF an options database has been registered already.
farmbuyer@125 904
farmbuyer@125 905 XXX - the PARENT functionality hasn't been implmented yet cuz I'm lazy
farmbuyer@99 906 ]]
farmbuyer@125 907 function addon:register_options_entry (plugin, unique, parent, text, options)
farmbuyer@125 908 unique = (unique and tostring(unique))
farmbuyer@125 909 or assert(plugin.name, "plugin has no 'name' field")
farmbuyer@125 910
farmbuyer@99 911 --if parent
farmbuyer@99 912
farmbuyer@125 913 text = text or plugin:GetName()
farmbuyer@99 914
farmbuyer@99 915 local handler
farmbuyer@102 916 local pdb = plugin.moduleName and
farmbuyer@102 917 self.db:GetNamespace (plugin.moduleName, --[[silent=]]true)
farmbuyer@102 918
farmbuyer@99 919 if type(options) == 'table' then
farmbuyer@99 920 -- AceConfig-style options table
farmbuyer@125 921 aceconfig_list[unique] = true
farmbuyer@99 922 if not options.args.name then
farmbuyer@99 923 options.args.name = {
farmbuyer@125 924 name = plugin:GetName(),
farmbuyer@99 925 type = 'description',
farmbuyer@99 926 }
farmbuyer@99 927 end
farmbuyer@99 928 options.args.name.name = '|cff30adff' .. options.args.name.name .. '|r'
farmbuyer@99 929 options.args.name.fontSize = 'large'
farmbuyer@99 930 options.args.name.width = 'full'
farmbuyer@99 931 options.args.name.cmdHidden = true
farmbuyer@99 932 options.args.name.order = 1
farmbuyer@99 933 if pdb then
farmbuyer@99 934 options.args.INSERTED_SPACER = {
farmbuyer@99 935 name = '',
farmbuyer@99 936 type = 'description',
farmbuyer@99 937 cmdHidden = true,
farmbuyer@99 938 width = 'full',
farmbuyer@99 939 order = 9000,
farmbuyer@99 940 }
farmbuyer@99 941 options.args.RESET = {
farmbuyer@99 942 name = "Reset",
farmbuyer@99 943 desc = ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(plugin:GetName()),
farmbuyer@99 944 type = 'execute',
farmbuyer@99 945 func = function()
farmbuyer@99 946 pdb:ResetProfile()
farmbuyer@99 947 if IsShiftKeyDown() then ReloadUI() end
farmbuyer@99 948 end,
farmbuyer@99 949 order = 9001,
farmbuyer@99 950 }
farmbuyer@99 951 end
farmbuyer@99 952 LibStub("AceConfig-3.0"):RegisterOptionsTable(plugin:GetName(), options)
farmbuyer@99 953 handler = function (sf)
farmbuyer@99 954 LibStub("AceConfigDialog-3.0"):Open (plugin:GetName(), sf)
farmbuyer@99 955 end
farmbuyer@99 956
farmbuyer@99 957 elseif type(options) == 'function' then
farmbuyer@99 958 -- AceGUI callback
farmbuyer@99 959 if pdb then
farmbuyer@99 960 handler = function (sf)
farmbuyer@99 961 sf:AddChildren(mktitle(text))
farmbuyer@125 962 local ret = options (sf, plugin, unique)
farmbuyer@99 963 local w = mkbutton("Reset",
farmbuyer@99 964 ([[Reset settings for <%s> plugin back to defaults. Shift-click to also trigger a UI reload.]]):format(text))
farmbuyer@99 965 w:SetRelativeWidth(0.3)
farmbuyer@99 966 w:SetCallback("OnClick", function(_w)
farmbuyer@99 967 pdb:ResetProfile()
farmbuyer@99 968 if IsShiftKeyDown() then ReloadUI() end
farmbuyer@99 969 end)
farmbuyer@99 970 sf:AddChildren(spacer(10),w)
farmbuyer@99 971 return ret
farmbuyer@99 972 end
farmbuyer@99 973 else
farmbuyer@99 974 handler = function (sf)
farmbuyer@99 975 sf:AddChildren(mktitle(text))
farmbuyer@125 976 return options (sf, plugin, unique)
farmbuyer@99 977 end
farmbuyer@99 978 end
farmbuyer@99 979
farmbuyer@99 980 else
farmbuyer@99 981 error(("Error: 'options' parameter for plugin '%s' is neither table nor function"):format(plugin:GetName()))
farmbuyer@99 982 end
farmbuyer@99 983
farmbuyer@125 984 if not controls[unique] then
farmbuyer@125 985 controls[unique] = {}
farmbuyer@99 986 end
farmbuyer@125 987 table.insert (controls[unique], handler)
farmbuyer@99 988
farmbuyer@99 989 table.insert (options_tree, insertion_index, {
farmbuyer@125 990 value = unique,
farmbuyer@125 991 text = '++ '..text, -- maybe call markup on this?
farmbuyer@99 992 })
farmbuyer@99 993 insertion_index = insertion_index + 1
farmbuyer@99 994 -- The treegroup will rescan options_tree (via RefreshTree) several times
farmbuyer@99 995 -- before the player actually sees anything; no more work needs doing.
farmbuyer@125 996 return unique -- something that can be used as 'parent'?
farmbuyer@99 997 end
farmbuyer@99 998
farmbuyer@99 999
farmbuyer@109 1000 addon.FILES_LOADED = addon.FILES_LOADED + 1
farmbuyer@96 1001 -- vim:noet