annotate options.lua @ 96:780b7e0eeeeb

Break the options panel out of gui.lua into new options.lua. Move default item lists from verbage.lua there also. Redo options panel as a tree instead of a massive scrolling thing, and prepare data structures to let plugins/etc add their own options code.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Thu, 26 Jul 2012 20:46:00 +0000
parents
children ba5ff82dcf19
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@96 6 -- could probably remove most of this now
farmbuyer@96 7 -- [29434] = true, -- Badge of Justice
farmbuyer@96 8 -- [40752] = true, -- Emblem of Heroism
farmbuyer@96 9 -- [40753] = true, -- Emblem of Valor
farmbuyer@96 10 -- [45624] = true, -- Emblem of Conquest
farmbuyer@96 11 -- [43228] = true, -- Stone Keeper's Shard
farmbuyer@96 12 -- [47241] = true, -- Emblem of Triumph
farmbuyer@96 13 -- [49426] = true, -- Emblem of Frost
farmbuyer@96 14 }
farmbuyer@96 15
farmbuyer@96 16 -- Mark these as straight to guild vault:
farmbuyer@96 17 addon.default_itemvault = {
farmbuyer@96 18 [52078] = true, -- Chaos Orb
farmbuyer@96 19 [69237] = true, -- Living Ember
farmbuyer@96 20 [71998] = true, -- Essence of Destruction
farmbuyer@96 21 }
farmbuyer@96 22
farmbuyer@96 23 local options_tree = {
farmbuyer@96 24 {
farmbuyer@96 25 value = "pong",
farmbuyer@96 26 text = "Pongs",
farmbuyer@96 27 },
farmbuyer@96 28 {
farmbuyer@96 29 value = "basic",
farmbuyer@96 30 text = "Options",
farmbuyer@96 31 children = {
farmbuyer@96 32 {
farmbuyer@96 33 value = "filter",
farmbuyer@96 34 text = "Item Filters",
farmbuyer@96 35 },
farmbuyer@96 36 },
farmbuyer@96 37 },
farmbuyer@96 38 {
farmbuyer@96 39 value = "adv",
farmbuyer@96 40 text = "Advanced/Debugging",
farmbuyer@96 41 },
farmbuyer@96 42 }
farmbuyer@96 43
farmbuyer@96 44
farmbuyer@96 45 --[[
farmbuyer@96 46 mkbutton ("WidgetType", 'display key', "Text On Widget", "mouseover status text")
farmbuyer@96 47 mkbutton ( [Button] 'display key', "Text On Widget", "mouseover status text")
farmbuyer@96 48 mkbutton ( [Button] [text] "Text On Widget", "mouseover status text")
farmbuyer@96 49 ]]
farmbuyer@96 50 local mkbutton = addon.gui_state_pointer.mkbutton
farmbuyer@96 51 local gui = addon.gui_state_pointer
farmbuyer@96 52 local AceGUI = LibStub("AceGUI-3.0")
farmbuyer@96 53 local flib = LibStub("LibFarmbuyer")
farmbuyer@96 54 -- Local ref to OuroLootSV_opts, which may be reassigned after load.
farmbuyer@96 55 -- So instead this is updated when the tab is displayed.
farmbuyer@96 56 local opts
farmbuyer@96 57
farmbuyer@96 58 local function mktoggle (opt, label, width, desc, opt_func)
farmbuyer@96 59 local w = mkbutton("CheckBoxSmallLabel", nil, "", desc)
farmbuyer@96 60 w:SetRelativeWidth(width)
farmbuyer@96 61 w:SetType("checkbox")
farmbuyer@96 62 w:SetLabel(label)
farmbuyer@96 63 if opt then
farmbuyer@96 64 w:SetValue(opts[opt])
farmbuyer@96 65 w:SetCallback("OnValueChanged", opt_func or (function(_w,event,value)
farmbuyer@96 66 opts[opt] = value
farmbuyer@96 67 end))
farmbuyer@96 68 end
farmbuyer@96 69 return w
farmbuyer@96 70 end
farmbuyer@96 71
farmbuyer@96 72 local function mktitle (txt)
farmbuyer@96 73 local t = AceGUI:Create("Label")
farmbuyer@96 74 t:SetFullWidth(true)
farmbuyer@96 75 t:SetColor (0.19, 0.68, 1) -- cff30adff
farmbuyer@96 76 t:SetFontObject(GameFontHighlightLarge)
farmbuyer@96 77 t:SetText(txt)
farmbuyer@96 78 local s = AceGUI:Create("Spacer")
farmbuyer@96 79 s:SetFullWidth(true)
farmbuyer@96 80 s:SetHeight(20)
farmbuyer@96 81 return t, s
farmbuyer@96 82 end
farmbuyer@96 83
farmbuyer@96 84 local function adv_careful_OnTextChanged (ebox,event,value)
farmbuyer@96 85 -- The EditBox widget's code will call an internal ShowButton routine
farmbuyer@96 86 -- after this callback returns. ShowButton will test for this flag:
farmbuyer@96 87 ebox:DisableButton (value == "")
farmbuyer@96 88 end
farmbuyer@96 89
farmbuyer@96 90
farmbuyer@96 91 ---------------
farmbuyer@96 92 -- All controls take a scrollframe container set to Flow layout.
farmbuyer@96 93 local controls = {}
farmbuyer@96 94 controls.pong = function (container)
farmbuyer@96 95 container:AddChildren(mktitle[[Echoes from latest ping:]])
farmbuyer@96 96 addon.sender_list.sort()
farmbuyer@96 97 if #addon.sender_list.namesI > 0 then
farmbuyer@96 98 local w = AceGUI:Create("Label")
farmbuyer@96 99 w:SetFullWidth(true)
farmbuyer@96 100 w:SetText(table.concat(addon.sender_list.namesI,'\n')) -- sigh
farmbuyer@96 101 container:AddChild(w)
farmbuyer@96 102 end
farmbuyer@96 103 end
farmbuyer@96 104
farmbuyer@96 105
farmbuyer@96 106 ---------------
farmbuyer@96 107 controls.basic = function (container)
farmbuyer@96 108 container:AddChildren(mktitle[[Account Options (saved across sessions)]])
farmbuyer@96 109
farmbuyer@96 110 container:PauseLayout()
farmbuyer@96 111 local w
farmbuyer@96 112 local stdw = 0.99 -- standard width
farmbuyer@96 113
farmbuyer@96 114 -- the nubtoggle!
farmbuyer@96 115 w = mktoggle('gui_noob', [[Show UI Tips]], stdw,
farmbuyer@96 116 [[Toggles display of the "helpful tips" box hanging off the right side. Useful if you've just installed/upgraded.]])
farmbuyer@96 117 container:AddChild(w)
farmbuyer@96 118
farmbuyer@96 119 -- reminder popup
farmbuyer@96 120 w = mktoggle('popup_on_join', "Show reminder popup on new raid", stdw,
farmbuyer@96 121 [[When joining a raid and not already tracking, display a dialog asking for instructions.]])
farmbuyer@96 122 container:AddChild(w)
farmbuyer@96 123
farmbuyer@96 124 -- toggle scroll-to-bottom on first tab
farmbuyer@96 125 w = mktoggle('scroll_to_bottom', "Scroll to bottom when opening display", stdw,
farmbuyer@96 126 [[Scroll to the bottom of the loot window (most recent entries) when displaying the GUI.]])
farmbuyer@96 127 container:AddChild(w)
farmbuyer@96 128
farmbuyer@96 129 -- chatty boss mode
farmbuyer@96 130 w = mktoggle('chatty_on_kill', "Be chatty on boss kill", stdw,
farmbuyer@96 131 [[Print something to chat output when the boss mod tells Ouro Loot about a successful boss kill.]])
farmbuyer@96 132 container:AddChild(w)
farmbuyer@96 133
farmbuyer@96 134 -- less noise in main panel
farmbuyer@96 135 w = mktoggle('no_tracking_wipes', "Do not track wipes", stdw,
farmbuyer@96 136 [[Do not add 'wipe' entries on the main loot grid, or generate any text for them.]])
farmbuyer@96 137 container:AddChild(w)
farmbuyer@96 138
farmbuyer@96 139 -- cutesy abbrevs
farmbuyer@96 140 w = mktoggle('snarky_boss', "Use snarky boss names", stdw,
farmbuyer@96 141 [[Irreverent replacement names for boss events. See abbreviations.lua for details.]])
farmbuyer@96 142 container:AddChild(w)
farmbuyer@96 143
farmbuyer@96 144 -- LOD plugins in all cases
farmbuyer@96 145 w = mktoggle('display_disabled_LODs', "Include disabled plugins", stdw,
farmbuyer@96 146 [[Show loadable plugins even if they've been disabled (and offer to enable them). Relog to take effect.]])
farmbuyer@96 147 container:AddChild(w)
farmbuyer@96 148
farmbuyer@96 149 -- showing the "(from Rebroadcasterdude)" in the notes column
farmbuyer@96 150 w = mktoggle('display_bcast_from', "Show rebroadcasting player", stdw,
farmbuyer@96 151 [[Include "from PlayerName" in the Notes column for loot that was broadcast to you. (Not included in forum output).]],
farmbuyer@96 152 function(_w,_e,value)
farmbuyer@96 153 opts.display_bcast_from = value
farmbuyer@96 154 addon.loot_clean = nil
farmbuyer@96 155 end)
farmbuyer@96 156 container:AddChild(w)
farmbuyer@96 157
farmbuyer@96 158 -- prefilling g_uniques with history
farmbuyer@96 159 w = mktoggle('precache_history_uniques', "Prescan for faster handling", stdw,
farmbuyer@96 160 [[See description under +Help -- Handy Tips -- Prescanning> for instructions.]])
farmbuyer@96 161 container:AddChild(w)
farmbuyer@96 162
farmbuyer@96 163 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w)
farmbuyer@96 164 -- possible keybindings
farmbuyer@96 165 do
farmbuyer@96 166 local pair = AceGUI:Create("InlineGroup")
farmbuyer@96 167 pair:SetLayout("List")
farmbuyer@96 168 pair:SetRelativeWidth(0.49)
farmbuyer@96 169 pair:SetTitle("Keybinding for '/ouroloot'")
farmbuyer@96 170 local editbox, checkbox
farmbuyer@96 171 editbox = mkbutton("EditBox", nil, opts.keybinding_text,
farmbuyer@96 172 [[Keybinding text format is fragile! (All caps, ALT then CTRL then SHIFT.) Relog to take effect.]])
farmbuyer@96 173 editbox:SetFullWidth(true)
farmbuyer@96 174 editbox:SetLabel("Keybinding text")
farmbuyer@96 175 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 176 opts.keybinding_text = value
farmbuyer@96 177 end)
farmbuyer@96 178 editbox:SetDisabled(not opts.keybinding)
farmbuyer@96 179 checkbox = mktoggle('keybinding', "Register keybinding", 1,
farmbuyer@96 180 [[Register a keybinding to toggle the loot display. Relog to take effect.]],
farmbuyer@96 181 function (_w,_,value)
farmbuyer@96 182 opts.keybinding = value
farmbuyer@96 183 editbox:SetDisabled(not opts.keybinding)
farmbuyer@96 184 end)
farmbuyer@96 185 checkbox:SetFullWidth(true)
farmbuyer@96 186 pair:AddChild(checkbox)
farmbuyer@96 187 pair:AddChild(editbox)
farmbuyer@96 188 container:AddChild(pair)
farmbuyer@96 189 end
farmbuyer@96 190
farmbuyer@96 191 -- replacement for slashloot
farmbuyer@96 192 do
farmbuyer@96 193 local pair = AceGUI:Create("InlineGroup")
farmbuyer@96 194 pair:SetLayout("List")
farmbuyer@96 195 pair:SetRelativeWidth(0.49)
farmbuyer@96 196 pair:SetTitle('Synonyms for "/ouroloot"')
farmbuyer@96 197 local editbox, checkbox
farmbuyer@96 198 editbox = mkbutton("EditBox", nil, opts.slash_synonyms,
farmbuyer@96 199 [[Separate multiple synonyms with a comma. Relog to take effect.]])
farmbuyer@96 200 editbox:SetFullWidth(true)
farmbuyer@96 201 editbox:SetLabel("Slash commands")
farmbuyer@96 202 editbox:SetCallback("OnEnterPressed", function(_e,event,value)
farmbuyer@96 203 -- Do the sanity checking here rather than at each login.
farmbuyer@96 204 -- This is not foolproof. That's okay.
farmbuyer@96 205 local t = { strsplit(',', tostring(value)) }
farmbuyer@96 206 for k,v in ipairs(t) do
farmbuyer@96 207 v = v:trim()
farmbuyer@96 208 if v:sub(1,1) ~= "/" then
farmbuyer@96 209 v = "/" .. v
farmbuyer@96 210 end
farmbuyer@96 211 t[k] = v
farmbuyer@96 212 end
farmbuyer@96 213 value = table.concat(t,',')
farmbuyer@96 214 _e:SetText(value)
farmbuyer@96 215 opts.slash_synonyms = value
farmbuyer@96 216 end)
farmbuyer@96 217 editbox:SetDisabled(not opts.register_slash_synonyms)
farmbuyer@96 218 checkbox = mktoggle('register_slash_synonyms', "Register slash commands", 1,
farmbuyer@96 219 [[Register these slash commands as synonyms for "/ouroloot". Relog to take effect.]],
farmbuyer@96 220 function (_w,_,value)
farmbuyer@96 221 opts.register_slash_synonyms = value
farmbuyer@96 222 editbox:SetDisabled(not opts.register_slash_synonyms)
farmbuyer@96 223 end)
farmbuyer@96 224 checkbox:SetFullWidth(true)
farmbuyer@96 225 pair:AddChild(checkbox)
farmbuyer@96 226 pair:AddChild(editbox)
farmbuyer@96 227 container:AddChild(pair)
farmbuyer@96 228 end
farmbuyer@96 229
farmbuyer@96 230 -- chatty disposition/assignment changes
farmbuyer@96 231 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w)
farmbuyer@96 232 do
farmbuyer@96 233 local chatgroup = AceGUI:Create("InlineGroup")
farmbuyer@96 234 chatgroup:SetLayout("List")
farmbuyer@96 235 chatgroup:SetRelativeWidth(0.75)
farmbuyer@96 236 chatgroup:SetTitle("Remote Changes Chat")
farmbuyer@96 237 local toggle, editbox
farmbuyer@96 238 toggle = mktoggle('chatty_on_remote_changes', "Be chatty on remote changes", 1,
farmbuyer@96 239 [[Print something to chat when other users change recorded loot.]],
farmbuyer@96 240 function (_w,_,value)
farmbuyer@96 241 opts.chatty_on_remote_changes = value
farmbuyer@96 242 editbox:SetDisabled(not opts.chatty_on_remote_changes)
farmbuyer@96 243 end)
farmbuyer@96 244 toggle:SetFullWidth(true)
farmbuyer@96 245 chatgroup:AddChild(toggle)
farmbuyer@96 246 w = AceGUI:Create("Label")
farmbuyer@96 247 w:SetFullWidth(true)
farmbuyer@96 248 w:SetText("This controls the output of the |cff00ffff'Be chatty on remote changes'|r option. 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 249 chatgroup:AddChild(w)
farmbuyer@96 250 editbox = mkbutton("EditBox", nil, opts.chatty_on_remote_changes_frame,
farmbuyer@96 251 [[1 = default chat frame, 2 = combat log, etc]])
farmbuyer@96 252 editbox:SetFullWidth(true)
farmbuyer@96 253 editbox:SetLabel("Output Chatframe")
farmbuyer@96 254 editbox:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
farmbuyer@96 255 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 256 local prev = opts.chatty_on_remote_changes_frame
farmbuyer@96 257 value = value:trim()
farmbuyer@96 258 value = tonumber(value) or value
farmbuyer@96 259 if addon:_set_remote_change_chatframe (value) then
farmbuyer@96 260 opts.chatty_on_remote_changes_frame = value
farmbuyer@96 261 _w:SetText(tostring(value))
farmbuyer@96 262 _w.editbox:ClearFocus()
farmbuyer@96 263 else
farmbuyer@96 264 _w:SetText(tostring(prev))
farmbuyer@96 265 end
farmbuyer@96 266 end)
farmbuyer@96 267 editbox:SetDisabled(not opts.chatty_on_remote_changes)
farmbuyer@96 268 chatgroup:AddChild(editbox)
farmbuyer@96 269 w = mkbutton("Chat Frame Numbers",
farmbuyer@96 270 [[Print each chat window number in its own frame, for easy reference in the editing field.]])
farmbuyer@96 271 w:SetFullWidth(true)
farmbuyer@96 272 w:SetCallback("OnClick", function()
farmbuyer@96 273 for i = 1, NUM_CHAT_WINDOWS do
farmbuyer@96 274 local cf = _G['ChatFrame'..i]
farmbuyer@96 275 if not cf then break end
farmbuyer@96 276 addon:CFPrint (cf, "This is frame number |cffff0000%d|r.", i)
farmbuyer@96 277 end
farmbuyer@96 278 end)
farmbuyer@96 279 chatgroup:AddChild(w)
farmbuyer@96 280 container:AddChild(chatgroup)
farmbuyer@96 281 end
farmbuyer@96 282
farmbuyer@96 283 -- boss mod selection
farmbuyer@96 284 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(2) container:AddChild(w)
farmbuyer@96 285 do
farmbuyer@96 286 local list = {}
farmbuyer@96 287 local current
farmbuyer@96 288 for k,v in ipairs(addon.bossmods) do
farmbuyer@96 289 list[k] = v.n
farmbuyer@96 290 if v.n == opts.bossmod then
farmbuyer@96 291 current = k
farmbuyer@96 292 end
farmbuyer@96 293 end
farmbuyer@96 294 w = mkbutton("Dropdown", nil, "", [[Which 'boss mod' to use.]])
farmbuyer@96 295 w:SetRelativeWidth(0.3)
farmbuyer@96 296 w:SetLabel("Boss Mod:")
farmbuyer@96 297 w:SetList(list)
farmbuyer@96 298 w:SetValue(current)
farmbuyer@96 299 w:SetCallback("OnValueChanged", function(_w,event,choice)
farmbuyer@96 300 opts.bossmod = list[choice]
farmbuyer@96 301 end)
farmbuyer@96 302 container:AddChild(w)
farmbuyer@96 303 end
farmbuyer@96 304
farmbuyer@96 305 container:ResumeLayout()
farmbuyer@96 306 container:DoLayout()
farmbuyer@96 307 AceGUI:ClearFocus()
farmbuyer@96 308 end
farmbuyer@96 309
farmbuyer@96 310
farmbuyer@96 311 ---------------
farmbuyer@96 312 do
farmbuyer@96 313 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 314 local cache_warn, cache_warned = false, false
farmbuyer@96 315 local function do_warning (cnt)
farmbuyer@96 316 if cache_warn and not cache_warned then
farmbuyer@96 317 cache_warned = true
farmbuyer@96 318 addon:Print(warntext)
farmbuyer@96 319 local t = AceGUI:Create("Label")
farmbuyer@96 320 t:SetFullWidth(true)
farmbuyer@96 321 t:SetText(warntext)
farmbuyer@96 322 cnt:AddChild(t)
farmbuyer@96 323 end
farmbuyer@96 324 end
farmbuyer@96 325
farmbuyer@96 326 controls.basic_filter = function (container)
farmbuyer@96 327 container:AddChildren(mktitle[[Item-Specific Special Handling]])
farmbuyer@96 328
farmbuyer@96 329 cache_warn, cache_warned = false, false
farmbuyer@96 330 local filterlist, vaultlist = {}, {}
farmbuyer@96 331 for id in pairs(opts.itemfilter) do
farmbuyer@96 332 local iname, _, iquality = GetItemInfo(id)
farmbuyer@96 333 if iname then
farmbuyer@96 334 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 335 else
farmbuyer@96 336 filterlist[id] = id
farmbuyer@96 337 cache_warn = true
farmbuyer@96 338 end
farmbuyer@96 339 end
farmbuyer@96 340 for id in pairs(opts.itemvault) do
farmbuyer@96 341 local iname, _, iquality = GetItemInfo(id)
farmbuyer@96 342 if iname then
farmbuyer@96 343 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 344 else
farmbuyer@96 345 vaultlist[id] = id
farmbuyer@96 346 cache_warn = true
farmbuyer@96 347 end
farmbuyer@96 348 end
farmbuyer@96 349
farmbuyer@96 350 local w = AceGUI:Create("EditBoxDropDown")
farmbuyer@96 351 w:SetRelativeWidth(0.4)
farmbuyer@96 352 w:SetText("Item filter")
farmbuyer@96 353 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
farmbuyer@96 354 w:SetList(filterlist)
farmbuyer@96 355 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
farmbuyer@96 356 local iname, ilink, iquality = GetItemInfo(text:trim())
farmbuyer@96 357 if not iname then
farmbuyer@96 358 return addon:Print("Error: %s is not a valid item name/link!", text)
farmbuyer@96 359 end
farmbuyer@96 360 local id = tonumber(ilink:match("item:(%d+)"))
farmbuyer@96 361 filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 362 opts.itemfilter[id] = true
farmbuyer@96 363 addon:Print("Now filtering out", ilink)
farmbuyer@96 364 end)
farmbuyer@96 365 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
farmbuyer@96 366 --local ilink = select(2,GetItemInfo(key_id))
farmbuyer@96 367 opts.itemfilter[tonumber(key_id)] = nil
farmbuyer@96 368 --addon:Print("No longer filtering out", ilink)
farmbuyer@96 369 addon:Print("No longer filtering out", val_name)
farmbuyer@96 370 end)
farmbuyer@96 371 --w:SetCallback("OnDropdownShown",do_warning)
farmbuyer@96 372 w:SetCallback("OnDropdownShown", function()
farmbuyer@96 373 do_warning(container)
farmbuyer@96 374 end)
farmbuyer@96 375 container:AddChild(w)
farmbuyer@96 376
farmbuyer@96 377 w = AceGUI:Create("Spacer")
farmbuyer@96 378 w:SetRelativeWidth(0.1)
farmbuyer@96 379 w:SetHeight(2)
farmbuyer@96 380 container:AddChild(w)
farmbuyer@96 381
farmbuyer@96 382 w = AceGUI:Create("EditBoxDropDown")
farmbuyer@96 383 w:SetRelativeWidth(0.4)
farmbuyer@96 384 w:SetText("Vault items")
farmbuyer@96 385 w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.")
farmbuyer@96 386 w:SetList(vaultlist)
farmbuyer@96 387 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
farmbuyer@96 388 local iname, ilink, iquality = GetItemInfo(text:trim())
farmbuyer@96 389 if not iname then
farmbuyer@96 390 return addon:Print("Error: %s is not a valid item name/link!", text)
farmbuyer@96 391 end
farmbuyer@96 392 local id = tonumber(ilink:match("item:(%d+)"))
farmbuyer@96 393 vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
farmbuyer@96 394 opts.itemvault[id] = true
farmbuyer@96 395 addon:Print("Now auto-vaulting", ilink)
farmbuyer@96 396 end)
farmbuyer@96 397 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
farmbuyer@96 398 --local ilink = select(2,GetItemInfo(key_id))
farmbuyer@96 399 opts.itemfilter[tonumber(key_id)] = nil
farmbuyer@96 400 --addon:Print("No longer filtering out", ilink)
farmbuyer@96 401 addon:Print("No longer auto-vaulting", val_name)
farmbuyer@96 402 end)
farmbuyer@96 403 w:SetCallback("OnDropdownShown",do_warning)
farmbuyer@96 404 container:AddChild(w)
farmbuyer@96 405 end
farmbuyer@96 406 end
farmbuyer@96 407
farmbuyer@96 408
farmbuyer@96 409 ---------------
farmbuyer@96 410 local adv_real = function (container)
farmbuyer@96 411 container:AddChildren(mktitle[[Debugging Options (not saved across sessions)]])
farmbuyer@96 412
farmbuyer@96 413 container:PauseLayout()
farmbuyer@96 414 local w
farmbuyer@96 415
farmbuyer@96 416 do
farmbuyer@96 417 local grp = AceGUI:Create("InlineGroup")
farmbuyer@96 418 grp:SetLayout("List")
farmbuyer@96 419 grp:SetRelativeWidth(0.60)
farmbuyer@96 420 grp:SetTitle("Output of debugging messages")
farmbuyer@96 421
farmbuyer@96 422 w = AceGUI:Create("CheckBoxSmallLabel")
farmbuyer@96 423 w:SetFullWidth(true)
farmbuyer@96 424 w:SetType("checkbox")
farmbuyer@96 425 w:SetLabel("master toggle")
farmbuyer@96 426 w:SetValue(addon.DEBUG_PRINT)
farmbuyer@96 427 w:SetCallback("OnValueChanged", function(_w,event,value)
farmbuyer@96 428 addon.DEBUG_PRINT = value
farmbuyer@96 429 addon:redisplay()
farmbuyer@96 430 end)
farmbuyer@96 431 grp:AddChild(w)
farmbuyer@96 432 for d,v in pairs(addon.debug) do
farmbuyer@96 433 w = AceGUI:Create("CheckBoxSmallLabel")
farmbuyer@96 434 w:SetFullWidth(true)
farmbuyer@96 435 w:SetType("checkbox")
farmbuyer@96 436 w:SetLabel(d)
farmbuyer@96 437 if d == "notraid" then
farmbuyer@96 438 w:SetDescription[[Tick this before enabling to make the addon work outside of raid groups]]
farmbuyer@96 439 else
farmbuyer@96 440 if d == "alsolog" then
farmbuyer@96 441 w:SetDescription[[Also log all debug messages to disk. See print_log.lua in the addon folder for later viewing.]]
farmbuyer@96 442 end
farmbuyer@96 443 w:SetDisabled(not addon.DEBUG_PRINT)
farmbuyer@96 444 end
farmbuyer@96 445 w:SetValue(v)
farmbuyer@96 446 w:SetCallback("OnValueChanged", function(_w,event,value) addon.debug[d] = value end)
farmbuyer@96 447 grp:AddChild(w)
farmbuyer@96 448 end
farmbuyer@96 449 container:AddChild(grp)
farmbuyer@96 450 end
farmbuyer@96 451
farmbuyer@96 452 do
farmbuyer@96 453 local simple = AceGUI:Create("SimpleGroup")
farmbuyer@96 454 simple:SetLayout("List")
farmbuyer@96 455 simple:SetRelativeWidth(0.35)
farmbuyer@96 456 w = AceGUI:Create("CheckBoxSmallLabel")
farmbuyer@96 457 --w:SetRelativeWidth(0.35)
farmbuyer@96 458 w:SetFullWidth(true)
farmbuyer@96 459 w:SetType("checkbox")
farmbuyer@96 460 w:SetLabel("GOP history mode")
farmbuyer@96 461 w:SetValue(addon.history_suppress)
farmbuyer@96 462 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end)
farmbuyer@96 463 simple:AddChild(w)
farmbuyer@96 464 w = mkbutton("Dropdown", nil, "",
farmbuyer@96 465 [[if active, tooltip shown when hovering over Item column only]])
farmbuyer@96 466 --w:SetRelativeWidth(0.4)
farmbuyer@96 467 w:SetFullWidth(true)
farmbuyer@96 468 w:SetLabel("loot debugging tooltip")
farmbuyer@96 469 w:SetList{
farmbuyer@96 470 [1] = "Off",
farmbuyer@96 471 [2] = "/dump into tooltip",
farmbuyer@96 472 [3] = "small fixed fields",
farmbuyer@96 473 }
farmbuyer@96 474 w:SetValue(gui._do_debugging_tooltip or 1)
farmbuyer@96 475 w:SetCallback("OnValueChanged", function(_w,event,choice)
farmbuyer@96 476 gui._do_debugging_tooltip = choice > 1 and choice or nil
farmbuyer@96 477 end)
farmbuyer@96 478 simple:AddChild(w)
farmbuyer@96 479 container:AddChild(simple)
farmbuyer@96 480 end
farmbuyer@96 481
farmbuyer@96 482 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w)
farmbuyer@96 483
farmbuyer@96 484 w = mkbutton("EditBox", 'comm_ident', addon.ident,
farmbuyer@96 485 [[Set tracking to 'Disabled' in the top-right dropdown, then change this field (click Okay or press Enter).]])
farmbuyer@96 486 w:SetRelativeWidth(0.25)
farmbuyer@96 487 w:SetLabel("Addon channel ID")
farmbuyer@96 488 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
farmbuyer@96 489 w:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 490 -- if they set it to blank spaces, they're boned. oh well.
farmbuyer@96 491 -- Re-enabling will take care of propogating this new value.
farmbuyer@96 492 addon.ident = (value == "") and "OuroLoot2" or value
farmbuyer@96 493 _w:SetText(addon.ident)
farmbuyer@96 494 addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.")
farmbuyer@96 495 end)
farmbuyer@96 496 w:SetDisabled(addon.enabled or addon.rebroadcast)
farmbuyer@96 497 container:AddChild(w)
farmbuyer@96 498
farmbuyer@96 499 w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache TTL]])
farmbuyer@96 500 w:SetRelativeWidth(0.1)
farmbuyer@96 501 w:SetLabel("ttl")
farmbuyer@96 502 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
farmbuyer@96 503 w:SetCallback("OnEnterPressed", function(_w,event,value)
farmbuyer@96 504 value = tonumber(value) or addon.recent_messages.ttl
farmbuyer@96 505 addon.recent_messages.ttl = value
farmbuyer@96 506 _w:SetText(tostring(value))
farmbuyer@96 507 end)
farmbuyer@96 508 container:AddChild(w)
farmbuyer@96 509
farmbuyer@96 510 w = mkbutton("load nsaab1548", [[Cursed Darkhound]])
farmbuyer@96 511 w:SetRelativeWidth(0.25)
farmbuyer@96 512 w:SetCallback("OnClick", function()
farmbuyer@96 513 for i, v in ipairs(DBM.AddOns) do
farmbuyer@96 514 if v.modId == "DBM-NotScaryAtAll" then
farmbuyer@96 515 DBM:LoadMod(v)
farmbuyer@96 516 break
farmbuyer@96 517 end
farmbuyer@96 518 end
farmbuyer@96 519 local mod = DBM:GetModByName("NotScaryAtAll")
farmbuyer@96 520 if mod then
farmbuyer@96 521 mod:EnableMod()
farmbuyer@96 522 addon:Print("Now tracking ID",mod.creatureId)
farmbuyer@96 523 else
farmbuyer@96 524 addon:Print("Can do nothing; DBM testing mod wasn't loaded.")
farmbuyer@96 525 end
farmbuyer@96 526 end)
farmbuyer@96 527 w:SetDisabled(addon.bossmod_registered ~= 'DBM')
farmbuyer@96 528 container:AddChild(w)
farmbuyer@96 529
farmbuyer@96 530 w = mkbutton("GC", [[full GC cycle]])
farmbuyer@96 531 w:SetRelativeWidth(0.2)
farmbuyer@96 532 w:SetCallback("OnClick", function()
farmbuyer@96 533 local before = collectgarbage('count')
farmbuyer@96 534 collectgarbage('collect')
farmbuyer@96 535 local after = collectgarbage('count')
farmbuyer@96 536 addon:Print("Collected %d KB, %d KB still in use by Lua universe.", before-after, after)
farmbuyer@96 537 end)
farmbuyer@96 538 container:AddChild(w)
farmbuyer@96 539
farmbuyer@96 540 w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(3) container:AddChild(w)
farmbuyer@96 541 do
farmbuyer@96 542 local simple = AceGUI:Create("SimpleGroup")
farmbuyer@96 543 simple:SetLayout("Flow")
farmbuyer@96 544 --simple:SetRelativeWidth(0.95)
farmbuyer@96 545 simple:SetFullWidth(true)
farmbuyer@96 546 w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]])
farmbuyer@96 547 w:SetRelativeWidth(0.2)
farmbuyer@96 548 w:SetCallback("OnClick", function()
farmbuyer@96 549 PlaySoundFile ([[Sound\Music\WorldEvents\HordeFirepole.mp3]], "Master")
farmbuyer@96 550 end)
farmbuyer@96 551 simple:AddChild(w)
farmbuyer@96 552 w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]])
farmbuyer@96 553 w:SetRelativeWidth(0.2)
farmbuyer@96 554 w:SetCallback("OnClick", function()
farmbuyer@96 555 PlaySoundFile ([[Sound\Music\WorldEvents\AllianceFirepole.mp3]], "Master")
farmbuyer@96 556 end)
farmbuyer@96 557 simple:AddChild(w)
farmbuyer@96 558 w = mkbutton("SFRR", [[test]])
farmbuyer@96 559 w:SetRelativeWidth(0.15)
farmbuyer@96 560 w:SetCallback("OnClick", function()
farmbuyer@96 561 PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "Master")
farmbuyer@96 562 end)
farmbuyer@96 563 simple:AddChild(w)
farmbuyer@96 564
farmbuyer@96 565 container:AddChild(simple)
farmbuyer@96 566 end
farmbuyer@96 567
farmbuyer@96 568 w = AceGUI:Create("Spacer") w:SetRelativeWidth(0.65) w:SetHeight(15) container:AddChild(w)
farmbuyer@96 569 w = mkbutton("Clear All & Reload",
farmbuyer@96 570 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
farmbuyer@96 571 w:SetRelativeWidth(0.3)
farmbuyer@96 572 w:SetCallback("OnClick", function()
farmbuyer@96 573 addon:_clear_SVs() -- reloads
farmbuyer@96 574 end)
farmbuyer@96 575 container:AddChild(w)
farmbuyer@96 576
farmbuyer@96 577 container:ResumeLayout()
farmbuyer@96 578 container:DoLayout()
farmbuyer@96 579 AceGUI:ClearFocus()
farmbuyer@96 580 --container:SetScroll(1000) -- scrollframe widget's max value
farmbuyer@96 581 end
farmbuyer@96 582
farmbuyer@96 583 -- Initial advanced panel function (unless debug mode is on during load, which
farmbuyer@96 584 -- means it was almost certainly hardcoded that way, which means it's probably
farmbuyer@96 585 -- me testing).
farmbuyer@96 586 if false and addon.DEBUG_PRINT then
farmbuyer@96 587 controls.adv = adv_real
farmbuyer@96 588 else
farmbuyer@96 589 controls.adv = function (container)
farmbuyer@96 590 local speedbump = AceGUI:Create("InteractiveLabel")
farmbuyer@96 591 speedbump:SetFullWidth(true)
farmbuyer@96 592 speedbump:SetFontObject(GameFontHighlightLarge)
farmbuyer@96 593 speedbump:SetImage[[Interface\DialogFrame\DialogAlertIcon]]
farmbuyer@96 594 speedbump:SetImageSize(50,50)
farmbuyer@96 595 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 596 speedbump:SetCallback("OnClick", function (_sb)
farmbuyer@96 597 controls.adv = { adv_real }
farmbuyer@96 598 return addon:redisplay()
farmbuyer@96 599 end)
farmbuyer@96 600 container:AddChild(speedbump)
farmbuyer@96 601 end
farmbuyer@96 602 end
farmbuyer@96 603
farmbuyer@96 604
farmbuyer@96 605 ---------------
farmbuyer@96 606 -- Tab 6: Options
farmbuyer@96 607 do
farmbuyer@96 608 local funkified = {}
farmbuyer@96 609 for key,f in pairs(controls) do
farmbuyer@96 610 -- this is how TreeGroup makes unique keys
farmbuyer@96 611 local funkykey = key:gsub('_','\001')
farmbuyer@96 612 funkified[funkykey] = { f }
farmbuyer@96 613 end
farmbuyer@96 614 controls = funkified
farmbuyer@96 615 end
farmbuyer@96 616
farmbuyer@96 617 -- widget container status tables (will have things magically appear
farmbuyer@96 618 -- inside them that we wish to preserve)
farmbuyer@96 619 local status_for_scroll = {}
farmbuyer@96 620 local status_for_select = { treewidth = 160 }
farmbuyer@96 621
farmbuyer@96 622 -- Clicking an entry on the left tree column.
farmbuyer@96 623 local opt_OnGroupSelected_func = function (treeg,event,category)
farmbuyer@96 624 local catfuncs = controls[category]
farmbuyer@96 625 if not catfuncs then
farmbuyer@96 626 addon:horrible_horrible_error(("Category '%s' has no handler function!"):format(category:gsub('\001','_')))
farmbuyer@96 627 end
farmbuyer@96 628 treeg:ReleaseChildren()
farmbuyer@96 629 local sf = AceGUI:Create("ScrollFrame")
farmbuyer@96 630 sf:SetStatusTable(status_for_scroll)
farmbuyer@96 631 sf:SetLayout("Flow")
farmbuyer@96 632 -- This forces the scrolling area to be bigger than the visible area; else
farmbuyer@96 633 -- some of the text gets cut off without ever triggering the scrollbar.
farmbuyer@96 634 sf.content:SetHeight(700)
farmbuyer@96 635 for _,func in ipairs(catfuncs) do
farmbuyer@96 636 if func(sf) then break end
farmbuyer@96 637 end
farmbuyer@96 638 treeg:AddChild(sf)
farmbuyer@96 639 if treeg:GetUserData("options restore scroll") then
farmbuyer@96 640 if status_for_scroll.scrollvalue then
farmbuyer@96 641 sf:SetScroll(status_for_scroll.scrollvalue)
farmbuyer@96 642 end
farmbuyer@96 643 treeg:SetUserData("options restore scroll", false)
farmbuyer@96 644 else
farmbuyer@96 645 sf:SetScroll(0)
farmbuyer@96 646 end
farmbuyer@96 647 end
farmbuyer@96 648
farmbuyer@96 649 -- Clicking the Options tab as a whole (tabs_OnGroupSelected["opt"]).
farmbuyer@96 650 local tabs_OGS = function (container, specials)
farmbuyer@96 651 opts = OuroLootSV_opts
farmbuyer@96 652
farmbuyer@96 653 container:SetLayout("Fill")
farmbuyer@96 654 local left = AceGUI:Create("TreeGroup")
farmbuyer@96 655 left:SetStatusTable(status_for_select)
farmbuyer@96 656 left:SetLayout("Fill")
farmbuyer@96 657 left:SetFullWidth(true)
farmbuyer@96 658 left:SetFullHeight(true)
farmbuyer@96 659 left:EnableButtonTooltips(false)
farmbuyer@96 660 left:SetTree(options_tree)
farmbuyer@96 661 left:SetCallback("OnGroupSelected", opt_OnGroupSelected_func)
farmbuyer@96 662 container:AddChild(left)
farmbuyer@96 663 if status_for_select.selected then
farmbuyer@96 664 left:SetUserData("options restore scroll", true)
farmbuyer@96 665 left:SelectByValue(status_for_select.selected)
farmbuyer@96 666 else
farmbuyer@96 667 left:SelectByValue("basic")
farmbuyer@96 668 end
farmbuyer@96 669
farmbuyer@96 670 local w = mkbutton("ReloadUI",
farmbuyer@96 671 [[Does what you think it does. Loot information is written out and restored.]])
farmbuyer@96 672 w:SetFullWidth(true)
farmbuyer@96 673 w:SetCallback("OnClick", ReloadUI)
farmbuyer@96 674 specials:AddChild(w)
farmbuyer@96 675
farmbuyer@96 676 w = mkbutton("Ping!",
farmbuyer@96 677 [[Queries other raid users for their addon version and current status. Results displayed on Pongs panel after five seconds.]])
farmbuyer@96 678 w:SetFullWidth(true)
farmbuyer@96 679 w:SetCallback("OnClick", function(_w)
farmbuyer@96 680 _w:SetText("5... 4... 3...")
farmbuyer@96 681 _w:SetDisabled(true)
farmbuyer@96 682 addon:DoPing()
farmbuyer@96 683 addon:ScheduleTimer(function(b)
farmbuyer@96 684 if b:IsVisible() then
farmbuyer@96 685 return addon:redisplay()
farmbuyer@96 686 end
farmbuyer@96 687 end, 5, _w)
farmbuyer@96 688 end)
farmbuyer@96 689 specials:AddChild(w)
farmbuyer@96 690 end
farmbuyer@96 691
farmbuyer@96 692 addon:register_tab_control_AT_END ("opt", [[Options]],
farmbuyer@96 693 [[Options for fine-tuning behavior]], tabs_OGS)
farmbuyer@96 694
farmbuyer@96 695 -- vim:noet