annotate options.lua @ 152:b79b1cb6d057

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