annotate options.lua @ 155:bfb53b311552

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