annotate options.lua @ 127:c6d8e096296e

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