farmbuyer@96: local addon = select(2,...) farmbuyer@96: if addon.NOLOAD then return end farmbuyer@96: farmbuyer@96: -- Don't bother recording any of this loot: farmbuyer@96: addon.default_itemfilter = { farmbuyer@96: -- could probably remove most of this now farmbuyer@96: -- [29434] = true, -- Badge of Justice farmbuyer@96: -- [40752] = true, -- Emblem of Heroism farmbuyer@96: -- [40753] = true, -- Emblem of Valor farmbuyer@96: -- [45624] = true, -- Emblem of Conquest farmbuyer@96: -- [43228] = true, -- Stone Keeper's Shard farmbuyer@96: -- [47241] = true, -- Emblem of Triumph farmbuyer@96: -- [49426] = true, -- Emblem of Frost farmbuyer@96: } farmbuyer@96: farmbuyer@96: -- Mark these as straight to guild vault: farmbuyer@96: addon.default_itemvault = { farmbuyer@96: [52078] = true, -- Chaos Orb farmbuyer@96: [69237] = true, -- Living Ember farmbuyer@96: [71998] = true, -- Essence of Destruction farmbuyer@96: } farmbuyer@96: farmbuyer@96: local options_tree = { farmbuyer@96: { farmbuyer@96: value = "pong", farmbuyer@96: text = "Pongs", farmbuyer@96: }, farmbuyer@96: { farmbuyer@96: value = "basic", farmbuyer@96: text = "Options", farmbuyer@96: children = { farmbuyer@96: { farmbuyer@96: value = "filter", farmbuyer@96: text = "Item Filters", farmbuyer@96: }, farmbuyer@96: }, farmbuyer@96: }, farmbuyer@96: { farmbuyer@96: value = "adv", farmbuyer@96: text = "Advanced/Debugging", farmbuyer@96: }, farmbuyer@96: } farmbuyer@96: farmbuyer@96: farmbuyer@96: --[[ farmbuyer@96: mkbutton ("WidgetType", 'display key', "Text On Widget", "mouseover status text") farmbuyer@96: mkbutton ( [Button] 'display key', "Text On Widget", "mouseover status text") farmbuyer@96: mkbutton ( [Button] [text] "Text On Widget", "mouseover status text") farmbuyer@96: ]] farmbuyer@96: local mkbutton = addon.gui_state_pointer.mkbutton farmbuyer@96: local gui = addon.gui_state_pointer farmbuyer@96: local AceGUI = LibStub("AceGUI-3.0") farmbuyer@96: local flib = LibStub("LibFarmbuyer") farmbuyer@96: -- Local ref to OuroLootSV_opts, which may be reassigned after load. farmbuyer@96: -- So instead this is updated when the tab is displayed. farmbuyer@96: local opts farmbuyer@96: farmbuyer@96: local function mktoggle (opt, label, width, desc, opt_func) farmbuyer@96: local w = mkbutton("CheckBoxSmallLabel", nil, "", desc) farmbuyer@96: w:SetRelativeWidth(width) farmbuyer@96: w:SetType("checkbox") farmbuyer@96: w:SetLabel(label) farmbuyer@96: if opt then farmbuyer@96: w:SetValue(opts[opt]) farmbuyer@96: w:SetCallback("OnValueChanged", opt_func or (function(_w,event,value) farmbuyer@96: opts[opt] = value farmbuyer@96: end)) farmbuyer@96: end farmbuyer@96: return w farmbuyer@96: end farmbuyer@96: farmbuyer@96: local function mktitle (txt) farmbuyer@96: local t = AceGUI:Create("Label") farmbuyer@96: t:SetFullWidth(true) farmbuyer@96: t:SetColor (0.19, 0.68, 1) -- cff30adff farmbuyer@96: t:SetFontObject(GameFontHighlightLarge) farmbuyer@96: t:SetText(txt) farmbuyer@96: local s = AceGUI:Create("Spacer") farmbuyer@96: s:SetFullWidth(true) farmbuyer@96: s:SetHeight(20) farmbuyer@96: return t, s farmbuyer@96: end farmbuyer@96: farmbuyer@96: local function adv_careful_OnTextChanged (ebox,event,value) farmbuyer@96: -- The EditBox widget's code will call an internal ShowButton routine farmbuyer@96: -- after this callback returns. ShowButton will test for this flag: farmbuyer@96: ebox:DisableButton (value == "") farmbuyer@96: end farmbuyer@96: farmbuyer@96: farmbuyer@96: --------------- farmbuyer@96: -- All controls take a scrollframe container set to Flow layout. farmbuyer@96: local controls = {} farmbuyer@96: controls.pong = function (container) farmbuyer@96: container:AddChildren(mktitle[[Echoes from latest ping:]]) farmbuyer@96: addon.sender_list.sort() farmbuyer@96: if #addon.sender_list.namesI > 0 then farmbuyer@96: local w = AceGUI:Create("Label") farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: w:SetText(table.concat(addon.sender_list.namesI,'\n')) -- sigh farmbuyer@96: container:AddChild(w) farmbuyer@96: end farmbuyer@96: end farmbuyer@96: farmbuyer@96: farmbuyer@96: --------------- farmbuyer@96: controls.basic = function (container) farmbuyer@96: container:AddChildren(mktitle[[Account Options (saved across sessions)]]) farmbuyer@96: farmbuyer@96: container:PauseLayout() farmbuyer@96: local w farmbuyer@96: local stdw = 0.99 -- standard width farmbuyer@96: farmbuyer@96: -- the nubtoggle! farmbuyer@96: w = mktoggle('gui_noob', [[Show UI Tips]], stdw, farmbuyer@96: [[Toggles display of the "helpful tips" box hanging off the right side. Useful if you've just installed/upgraded.]]) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: -- reminder popup farmbuyer@96: w = mktoggle('popup_on_join', "Show reminder popup on new raid", stdw, farmbuyer@96: [[When joining a raid and not already tracking, display a dialog asking for instructions.]]) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: -- toggle scroll-to-bottom on first tab farmbuyer@96: w = mktoggle('scroll_to_bottom', "Scroll to bottom when opening display", stdw, farmbuyer@96: [[Scroll to the bottom of the loot window (most recent entries) when displaying the GUI.]]) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: -- chatty boss mode farmbuyer@96: w = mktoggle('chatty_on_kill', "Be chatty on boss kill", stdw, farmbuyer@96: [[Print something to chat output when the boss mod tells Ouro Loot about a successful boss kill.]]) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: -- less noise in main panel farmbuyer@96: w = mktoggle('no_tracking_wipes', "Do not track wipes", stdw, farmbuyer@96: [[Do not add 'wipe' entries on the main loot grid, or generate any text for them.]]) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: -- cutesy abbrevs farmbuyer@96: w = mktoggle('snarky_boss', "Use snarky boss names", stdw, farmbuyer@96: [[Irreverent replacement names for boss events. See abbreviations.lua for details.]]) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: -- LOD plugins in all cases farmbuyer@96: w = mktoggle('display_disabled_LODs', "Include disabled plugins", stdw, farmbuyer@96: [[Show loadable plugins even if they've been disabled (and offer to enable them). Relog to take effect.]]) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: -- showing the "(from Rebroadcasterdude)" in the notes column farmbuyer@96: w = mktoggle('display_bcast_from', "Show rebroadcasting player", stdw, farmbuyer@96: [[Include "from PlayerName" in the Notes column for loot that was broadcast to you. (Not included in forum output).]], farmbuyer@96: function(_w,_e,value) farmbuyer@96: opts.display_bcast_from = value farmbuyer@96: addon.loot_clean = nil farmbuyer@96: end) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: -- prefilling g_uniques with history farmbuyer@96: w = mktoggle('precache_history_uniques', "Prescan for faster handling", stdw, farmbuyer@96: [[See description under +Help -- Handy Tips -- Prescanning> for instructions.]]) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w) farmbuyer@96: -- possible keybindings farmbuyer@96: do farmbuyer@96: local pair = AceGUI:Create("InlineGroup") farmbuyer@96: pair:SetLayout("List") farmbuyer@96: pair:SetRelativeWidth(0.49) farmbuyer@96: pair:SetTitle("Keybinding for '/ouroloot'") farmbuyer@96: local editbox, checkbox farmbuyer@96: editbox = mkbutton("EditBox", nil, opts.keybinding_text, farmbuyer@96: [[Keybinding text format is fragile! (All caps, ALT then CTRL then SHIFT.) Relog to take effect.]]) farmbuyer@96: editbox:SetFullWidth(true) farmbuyer@96: editbox:SetLabel("Keybinding text") farmbuyer@96: editbox:SetCallback("OnEnterPressed", function(_w,event,value) farmbuyer@96: opts.keybinding_text = value farmbuyer@96: end) farmbuyer@96: editbox:SetDisabled(not opts.keybinding) farmbuyer@96: checkbox = mktoggle('keybinding', "Register keybinding", 1, farmbuyer@96: [[Register a keybinding to toggle the loot display. Relog to take effect.]], farmbuyer@96: function (_w,_,value) farmbuyer@96: opts.keybinding = value farmbuyer@96: editbox:SetDisabled(not opts.keybinding) farmbuyer@96: end) farmbuyer@96: checkbox:SetFullWidth(true) farmbuyer@96: pair:AddChild(checkbox) farmbuyer@96: pair:AddChild(editbox) farmbuyer@96: container:AddChild(pair) farmbuyer@96: end farmbuyer@96: farmbuyer@96: -- replacement for slashloot farmbuyer@96: do farmbuyer@96: local pair = AceGUI:Create("InlineGroup") farmbuyer@96: pair:SetLayout("List") farmbuyer@96: pair:SetRelativeWidth(0.49) farmbuyer@96: pair:SetTitle('Synonyms for "/ouroloot"') farmbuyer@96: local editbox, checkbox farmbuyer@96: editbox = mkbutton("EditBox", nil, opts.slash_synonyms, farmbuyer@96: [[Separate multiple synonyms with a comma. Relog to take effect.]]) farmbuyer@96: editbox:SetFullWidth(true) farmbuyer@96: editbox:SetLabel("Slash commands") farmbuyer@96: editbox:SetCallback("OnEnterPressed", function(_e,event,value) farmbuyer@96: -- Do the sanity checking here rather than at each login. farmbuyer@96: -- This is not foolproof. That's okay. farmbuyer@96: local t = { strsplit(',', tostring(value)) } farmbuyer@96: for k,v in ipairs(t) do farmbuyer@96: v = v:trim() farmbuyer@96: if v:sub(1,1) ~= "/" then farmbuyer@96: v = "/" .. v farmbuyer@96: end farmbuyer@96: t[k] = v farmbuyer@96: end farmbuyer@96: value = table.concat(t,',') farmbuyer@96: _e:SetText(value) farmbuyer@96: opts.slash_synonyms = value farmbuyer@96: end) farmbuyer@96: editbox:SetDisabled(not opts.register_slash_synonyms) farmbuyer@96: checkbox = mktoggle('register_slash_synonyms', "Register slash commands", 1, farmbuyer@96: [[Register these slash commands as synonyms for "/ouroloot". Relog to take effect.]], farmbuyer@96: function (_w,_,value) farmbuyer@96: opts.register_slash_synonyms = value farmbuyer@96: editbox:SetDisabled(not opts.register_slash_synonyms) farmbuyer@96: end) farmbuyer@96: checkbox:SetFullWidth(true) farmbuyer@96: pair:AddChild(checkbox) farmbuyer@96: pair:AddChild(editbox) farmbuyer@96: container:AddChild(pair) farmbuyer@96: end farmbuyer@96: farmbuyer@96: -- chatty disposition/assignment changes farmbuyer@96: w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w) farmbuyer@96: do farmbuyer@96: local chatgroup = AceGUI:Create("InlineGroup") farmbuyer@96: chatgroup:SetLayout("List") farmbuyer@96: chatgroup:SetRelativeWidth(0.75) farmbuyer@96: chatgroup:SetTitle("Remote Changes Chat") farmbuyer@96: local toggle, editbox farmbuyer@96: toggle = mktoggle('chatty_on_remote_changes', "Be chatty on remote changes", 1, farmbuyer@96: [[Print something to chat when other users change recorded loot.]], farmbuyer@96: function (_w,_,value) farmbuyer@96: opts.chatty_on_remote_changes = value farmbuyer@96: editbox:SetDisabled(not opts.chatty_on_remote_changes) farmbuyer@96: end) farmbuyer@96: toggle:SetFullWidth(true) farmbuyer@96: chatgroup:AddChild(toggle) farmbuyer@96: w = AceGUI:Create("Label") farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: 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: chatgroup:AddChild(w) farmbuyer@96: editbox = mkbutton("EditBox", nil, opts.chatty_on_remote_changes_frame, farmbuyer@96: [[1 = default chat frame, 2 = combat log, etc]]) farmbuyer@96: editbox:SetFullWidth(true) farmbuyer@96: editbox:SetLabel("Output Chatframe") farmbuyer@96: editbox:SetCallback("OnTextChanged", adv_careful_OnTextChanged) farmbuyer@96: editbox:SetCallback("OnEnterPressed", function(_w,event,value) farmbuyer@96: local prev = opts.chatty_on_remote_changes_frame farmbuyer@96: value = value:trim() farmbuyer@96: value = tonumber(value) or value farmbuyer@96: if addon:_set_remote_change_chatframe (value) then farmbuyer@96: opts.chatty_on_remote_changes_frame = value farmbuyer@96: _w:SetText(tostring(value)) farmbuyer@96: _w.editbox:ClearFocus() farmbuyer@96: else farmbuyer@96: _w:SetText(tostring(prev)) farmbuyer@96: end farmbuyer@96: end) farmbuyer@96: editbox:SetDisabled(not opts.chatty_on_remote_changes) farmbuyer@96: chatgroup:AddChild(editbox) farmbuyer@96: w = mkbutton("Chat Frame Numbers", farmbuyer@96: [[Print each chat window number in its own frame, for easy reference in the editing field.]]) farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: w:SetCallback("OnClick", function() farmbuyer@96: for i = 1, NUM_CHAT_WINDOWS do farmbuyer@96: local cf = _G['ChatFrame'..i] farmbuyer@96: if not cf then break end farmbuyer@96: addon:CFPrint (cf, "This is frame number |cffff0000%d|r.", i) farmbuyer@96: end farmbuyer@96: end) farmbuyer@96: chatgroup:AddChild(w) farmbuyer@96: container:AddChild(chatgroup) farmbuyer@96: end farmbuyer@96: farmbuyer@96: -- boss mod selection farmbuyer@96: w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(2) container:AddChild(w) farmbuyer@96: do farmbuyer@96: local list = {} farmbuyer@96: local current farmbuyer@96: for k,v in ipairs(addon.bossmods) do farmbuyer@96: list[k] = v.n farmbuyer@96: if v.n == opts.bossmod then farmbuyer@96: current = k farmbuyer@96: end farmbuyer@96: end farmbuyer@96: w = mkbutton("Dropdown", nil, "", [[Which 'boss mod' to use.]]) farmbuyer@96: w:SetRelativeWidth(0.3) farmbuyer@96: w:SetLabel("Boss Mod:") farmbuyer@96: w:SetList(list) farmbuyer@96: w:SetValue(current) farmbuyer@96: w:SetCallback("OnValueChanged", function(_w,event,choice) farmbuyer@96: opts.bossmod = list[choice] farmbuyer@96: end) farmbuyer@96: container:AddChild(w) farmbuyer@96: end farmbuyer@96: farmbuyer@96: container:ResumeLayout() farmbuyer@96: container:DoLayout() farmbuyer@96: AceGUI:ClearFocus() farmbuyer@96: end farmbuyer@96: farmbuyer@96: farmbuyer@96: --------------- farmbuyer@96: do farmbuyer@96: 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: local cache_warn, cache_warned = false, false farmbuyer@96: local function do_warning (cnt) farmbuyer@96: if cache_warn and not cache_warned then farmbuyer@96: cache_warned = true farmbuyer@96: addon:Print(warntext) farmbuyer@96: local t = AceGUI:Create("Label") farmbuyer@96: t:SetFullWidth(true) farmbuyer@96: t:SetText(warntext) farmbuyer@96: cnt:AddChild(t) farmbuyer@96: end farmbuyer@96: end farmbuyer@96: farmbuyer@96: controls.basic_filter = function (container) farmbuyer@96: container:AddChildren(mktitle[[Item-Specific Special Handling]]) farmbuyer@96: farmbuyer@96: cache_warn, cache_warned = false, false farmbuyer@96: local filterlist, vaultlist = {}, {} farmbuyer@96: for id in pairs(opts.itemfilter) do farmbuyer@96: local iname, _, iquality = GetItemInfo(id) farmbuyer@96: if iname then farmbuyer@96: filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r" farmbuyer@96: else farmbuyer@96: filterlist[id] = id farmbuyer@96: cache_warn = true farmbuyer@96: end farmbuyer@96: end farmbuyer@96: for id in pairs(opts.itemvault) do farmbuyer@96: local iname, _, iquality = GetItemInfo(id) farmbuyer@96: if iname then farmbuyer@96: vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r" farmbuyer@96: else farmbuyer@96: vaultlist[id] = id farmbuyer@96: cache_warn = true farmbuyer@96: end farmbuyer@96: end farmbuyer@96: farmbuyer@96: local w = AceGUI:Create("EditBoxDropDown") farmbuyer@96: w:SetRelativeWidth(0.4) farmbuyer@96: w:SetText("Item filter") farmbuyer@96: w:SetEditBoxTooltip("Link items which should no longer be tracked.") farmbuyer@96: w:SetList(filterlist) farmbuyer@96: w:SetCallback("OnTextEnterPressed", function(_w, _, text) farmbuyer@96: local iname, ilink, iquality = GetItemInfo(text:trim()) farmbuyer@96: if not iname then farmbuyer@96: return addon:Print("Error: %s is not a valid item name/link!", text) farmbuyer@96: end farmbuyer@96: local id = tonumber(ilink:match("item:(%d+)")) farmbuyer@96: filterlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r" farmbuyer@96: opts.itemfilter[id] = true farmbuyer@96: addon:Print("Now filtering out", ilink) farmbuyer@96: end) farmbuyer@96: w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name) farmbuyer@96: --local ilink = select(2,GetItemInfo(key_id)) farmbuyer@96: opts.itemfilter[tonumber(key_id)] = nil farmbuyer@96: --addon:Print("No longer filtering out", ilink) farmbuyer@96: addon:Print("No longer filtering out", val_name) farmbuyer@96: end) farmbuyer@96: --w:SetCallback("OnDropdownShown",do_warning) farmbuyer@96: w:SetCallback("OnDropdownShown", function() farmbuyer@96: do_warning(container) farmbuyer@96: end) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: w = AceGUI:Create("Spacer") farmbuyer@96: w:SetRelativeWidth(0.1) farmbuyer@96: w:SetHeight(2) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: w = AceGUI:Create("EditBoxDropDown") farmbuyer@96: w:SetRelativeWidth(0.4) farmbuyer@96: w:SetText("Vault items") farmbuyer@96: w:SetEditBoxTooltip("Link items which should be automatically marked as guild vault.") farmbuyer@96: w:SetList(vaultlist) farmbuyer@96: w:SetCallback("OnTextEnterPressed", function(_w, _, text) farmbuyer@96: local iname, ilink, iquality = GetItemInfo(text:trim()) farmbuyer@96: if not iname then farmbuyer@96: return addon:Print("Error: %s is not a valid item name/link!", text) farmbuyer@96: end farmbuyer@96: local id = tonumber(ilink:match("item:(%d+)")) farmbuyer@96: vaultlist[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r" farmbuyer@96: opts.itemvault[id] = true farmbuyer@96: addon:Print("Now auto-vaulting", ilink) farmbuyer@96: end) farmbuyer@96: w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name) farmbuyer@96: --local ilink = select(2,GetItemInfo(key_id)) farmbuyer@96: opts.itemfilter[tonumber(key_id)] = nil farmbuyer@96: --addon:Print("No longer filtering out", ilink) farmbuyer@96: addon:Print("No longer auto-vaulting", val_name) farmbuyer@96: end) farmbuyer@96: w:SetCallback("OnDropdownShown",do_warning) farmbuyer@96: container:AddChild(w) farmbuyer@96: end farmbuyer@96: end farmbuyer@96: farmbuyer@96: farmbuyer@96: --------------- farmbuyer@96: local adv_real = function (container) farmbuyer@96: container:AddChildren(mktitle[[Debugging Options (not saved across sessions)]]) farmbuyer@96: farmbuyer@96: container:PauseLayout() farmbuyer@96: local w farmbuyer@96: farmbuyer@96: do farmbuyer@96: local grp = AceGUI:Create("InlineGroup") farmbuyer@96: grp:SetLayout("List") farmbuyer@96: grp:SetRelativeWidth(0.60) farmbuyer@96: grp:SetTitle("Output of debugging messages") farmbuyer@96: farmbuyer@96: w = AceGUI:Create("CheckBoxSmallLabel") farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: w:SetType("checkbox") farmbuyer@96: w:SetLabel("master toggle") farmbuyer@96: w:SetValue(addon.DEBUG_PRINT) farmbuyer@96: w:SetCallback("OnValueChanged", function(_w,event,value) farmbuyer@96: addon.DEBUG_PRINT = value farmbuyer@96: addon:redisplay() farmbuyer@96: end) farmbuyer@96: grp:AddChild(w) farmbuyer@96: for d,v in pairs(addon.debug) do farmbuyer@96: w = AceGUI:Create("CheckBoxSmallLabel") farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: w:SetType("checkbox") farmbuyer@96: w:SetLabel(d) farmbuyer@96: if d == "notraid" then farmbuyer@96: w:SetDescription[[Tick this before enabling to make the addon work outside of raid groups]] farmbuyer@96: else farmbuyer@96: if d == "alsolog" then farmbuyer@96: w:SetDescription[[Also log all debug messages to disk. See print_log.lua in the addon folder for later viewing.]] farmbuyer@96: end farmbuyer@96: w:SetDisabled(not addon.DEBUG_PRINT) farmbuyer@96: end farmbuyer@96: w:SetValue(v) farmbuyer@96: w:SetCallback("OnValueChanged", function(_w,event,value) addon.debug[d] = value end) farmbuyer@96: grp:AddChild(w) farmbuyer@96: end farmbuyer@96: container:AddChild(grp) farmbuyer@96: end farmbuyer@96: farmbuyer@96: do farmbuyer@96: local simple = AceGUI:Create("SimpleGroup") farmbuyer@96: simple:SetLayout("List") farmbuyer@96: simple:SetRelativeWidth(0.35) farmbuyer@96: w = AceGUI:Create("CheckBoxSmallLabel") farmbuyer@96: --w:SetRelativeWidth(0.35) farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: w:SetType("checkbox") farmbuyer@96: w:SetLabel("GOP history mode") farmbuyer@96: w:SetValue(addon.history_suppress) farmbuyer@96: w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end) farmbuyer@96: simple:AddChild(w) farmbuyer@96: w = mkbutton("Dropdown", nil, "", farmbuyer@96: [[if active, tooltip shown when hovering over Item column only]]) farmbuyer@96: --w:SetRelativeWidth(0.4) farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: w:SetLabel("loot debugging tooltip") farmbuyer@96: w:SetList{ farmbuyer@96: [1] = "Off", farmbuyer@96: [2] = "/dump into tooltip", farmbuyer@96: [3] = "small fixed fields", farmbuyer@96: } farmbuyer@96: w:SetValue(gui._do_debugging_tooltip or 1) farmbuyer@96: w:SetCallback("OnValueChanged", function(_w,event,choice) farmbuyer@96: gui._do_debugging_tooltip = choice > 1 and choice or nil farmbuyer@96: end) farmbuyer@96: simple:AddChild(w) farmbuyer@96: container:AddChild(simple) farmbuyer@96: end farmbuyer@96: farmbuyer@96: w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(10) container:AddChild(w) farmbuyer@96: farmbuyer@96: w = mkbutton("EditBox", 'comm_ident', addon.ident, farmbuyer@96: [[Set tracking to 'Disabled' in the top-right dropdown, then change this field (click Okay or press Enter).]]) farmbuyer@96: w:SetRelativeWidth(0.25) farmbuyer@96: w:SetLabel("Addon channel ID") farmbuyer@96: w:SetCallback("OnTextChanged", adv_careful_OnTextChanged) farmbuyer@96: w:SetCallback("OnEnterPressed", function(_w,event,value) farmbuyer@96: -- if they set it to blank spaces, they're boned. oh well. farmbuyer@96: -- Re-enabling will take care of propogating this new value. farmbuyer@96: addon.ident = (value == "") and "OuroLoot2" or value farmbuyer@96: _w:SetText(addon.ident) farmbuyer@96: addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.") farmbuyer@96: end) farmbuyer@96: w:SetDisabled(addon.enabled or addon.rebroadcast) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache TTL]]) farmbuyer@96: w:SetRelativeWidth(0.1) farmbuyer@96: w:SetLabel("ttl") farmbuyer@96: w:SetCallback("OnTextChanged", adv_careful_OnTextChanged) farmbuyer@96: w:SetCallback("OnEnterPressed", function(_w,event,value) farmbuyer@96: value = tonumber(value) or addon.recent_messages.ttl farmbuyer@96: addon.recent_messages.ttl = value farmbuyer@96: _w:SetText(tostring(value)) farmbuyer@96: end) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: w = mkbutton("load nsaab1548", [[Cursed Darkhound]]) farmbuyer@96: w:SetRelativeWidth(0.25) farmbuyer@96: w:SetCallback("OnClick", function() farmbuyer@96: for i, v in ipairs(DBM.AddOns) do farmbuyer@96: if v.modId == "DBM-NotScaryAtAll" then farmbuyer@96: DBM:LoadMod(v) farmbuyer@96: break farmbuyer@96: end farmbuyer@96: end farmbuyer@96: local mod = DBM:GetModByName("NotScaryAtAll") farmbuyer@96: if mod then farmbuyer@96: mod:EnableMod() farmbuyer@96: addon:Print("Now tracking ID",mod.creatureId) farmbuyer@96: else farmbuyer@96: addon:Print("Can do nothing; DBM testing mod wasn't loaded.") farmbuyer@96: end farmbuyer@96: end) farmbuyer@96: w:SetDisabled(addon.bossmod_registered ~= 'DBM') farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: w = mkbutton("GC", [[full GC cycle]]) farmbuyer@96: w:SetRelativeWidth(0.2) farmbuyer@96: w:SetCallback("OnClick", function() farmbuyer@96: local before = collectgarbage('count') farmbuyer@96: collectgarbage('collect') farmbuyer@96: local after = collectgarbage('count') farmbuyer@96: addon:Print("Collected %d KB, %d KB still in use by Lua universe.", before-after, after) farmbuyer@96: end) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: w = AceGUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(3) container:AddChild(w) farmbuyer@96: do farmbuyer@96: local simple = AceGUI:Create("SimpleGroup") farmbuyer@96: simple:SetLayout("Flow") farmbuyer@96: --simple:SetRelativeWidth(0.95) farmbuyer@96: simple:SetFullWidth(true) farmbuyer@96: w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]]) farmbuyer@96: w:SetRelativeWidth(0.2) farmbuyer@96: w:SetCallback("OnClick", function() farmbuyer@96: PlaySoundFile ([[Sound\Music\WorldEvents\HordeFirepole.mp3]], "Master") farmbuyer@96: end) farmbuyer@96: simple:AddChild(w) farmbuyer@96: w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]]) farmbuyer@96: w:SetRelativeWidth(0.2) farmbuyer@96: w:SetCallback("OnClick", function() farmbuyer@96: PlaySoundFile ([[Sound\Music\WorldEvents\AllianceFirepole.mp3]], "Master") farmbuyer@96: end) farmbuyer@96: simple:AddChild(w) farmbuyer@96: w = mkbutton("SFRR", [[test]]) farmbuyer@96: w:SetRelativeWidth(0.15) farmbuyer@96: w:SetCallback("OnClick", function() farmbuyer@96: PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "Master") farmbuyer@96: end) farmbuyer@96: simple:AddChild(w) farmbuyer@96: farmbuyer@96: container:AddChild(simple) farmbuyer@96: end farmbuyer@96: farmbuyer@96: w = AceGUI:Create("Spacer") w:SetRelativeWidth(0.65) w:SetHeight(15) container:AddChild(w) farmbuyer@96: w = mkbutton("Clear All & Reload", farmbuyer@96: [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]]) farmbuyer@96: w:SetRelativeWidth(0.3) farmbuyer@96: w:SetCallback("OnClick", function() farmbuyer@96: addon:_clear_SVs() -- reloads farmbuyer@96: end) farmbuyer@96: container:AddChild(w) farmbuyer@96: farmbuyer@96: container:ResumeLayout() farmbuyer@96: container:DoLayout() farmbuyer@96: AceGUI:ClearFocus() farmbuyer@96: --container:SetScroll(1000) -- scrollframe widget's max value farmbuyer@96: end farmbuyer@96: farmbuyer@96: -- Initial advanced panel function (unless debug mode is on during load, which farmbuyer@96: -- means it was almost certainly hardcoded that way, which means it's probably farmbuyer@96: -- me testing). farmbuyer@96: if false and addon.DEBUG_PRINT then farmbuyer@96: controls.adv = adv_real farmbuyer@96: else farmbuyer@96: controls.adv = function (container) farmbuyer@96: local speedbump = AceGUI:Create("InteractiveLabel") farmbuyer@96: speedbump:SetFullWidth(true) farmbuyer@96: speedbump:SetFontObject(GameFontHighlightLarge) farmbuyer@96: speedbump:SetImage[[Interface\DialogFrame\DialogAlertIcon]] farmbuyer@96: speedbump:SetImageSize(50,50) farmbuyer@96: 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: speedbump:SetCallback("OnClick", function (_sb) farmbuyer@96: controls.adv = { adv_real } farmbuyer@96: return addon:redisplay() farmbuyer@96: end) farmbuyer@96: container:AddChild(speedbump) farmbuyer@96: end farmbuyer@96: end farmbuyer@96: farmbuyer@96: farmbuyer@96: --------------- farmbuyer@96: -- Tab 6: Options farmbuyer@96: do farmbuyer@96: local funkified = {} farmbuyer@96: for key,f in pairs(controls) do farmbuyer@96: -- this is how TreeGroup makes unique keys farmbuyer@96: local funkykey = key:gsub('_','\001') farmbuyer@96: funkified[funkykey] = { f } farmbuyer@96: end farmbuyer@96: controls = funkified farmbuyer@96: end farmbuyer@96: farmbuyer@96: -- widget container status tables (will have things magically appear farmbuyer@96: -- inside them that we wish to preserve) farmbuyer@96: local status_for_scroll = {} farmbuyer@96: local status_for_select = { treewidth = 160 } farmbuyer@96: farmbuyer@96: -- Clicking an entry on the left tree column. farmbuyer@96: local opt_OnGroupSelected_func = function (treeg,event,category) farmbuyer@96: local catfuncs = controls[category] farmbuyer@96: if not catfuncs then farmbuyer@96: addon:horrible_horrible_error(("Category '%s' has no handler function!"):format(category:gsub('\001','_'))) farmbuyer@96: end farmbuyer@96: treeg:ReleaseChildren() farmbuyer@96: local sf = AceGUI:Create("ScrollFrame") farmbuyer@96: sf:SetStatusTable(status_for_scroll) farmbuyer@96: sf:SetLayout("Flow") farmbuyer@96: -- This forces the scrolling area to be bigger than the visible area; else farmbuyer@96: -- some of the text gets cut off without ever triggering the scrollbar. farmbuyer@96: sf.content:SetHeight(700) farmbuyer@96: for _,func in ipairs(catfuncs) do farmbuyer@96: if func(sf) then break end farmbuyer@96: end farmbuyer@96: treeg:AddChild(sf) farmbuyer@96: if treeg:GetUserData("options restore scroll") then farmbuyer@96: if status_for_scroll.scrollvalue then farmbuyer@96: sf:SetScroll(status_for_scroll.scrollvalue) farmbuyer@96: end farmbuyer@96: treeg:SetUserData("options restore scroll", false) farmbuyer@96: else farmbuyer@96: sf:SetScroll(0) farmbuyer@96: end farmbuyer@96: end farmbuyer@96: farmbuyer@96: -- Clicking the Options tab as a whole (tabs_OnGroupSelected["opt"]). farmbuyer@96: local tabs_OGS = function (container, specials) farmbuyer@96: opts = OuroLootSV_opts farmbuyer@96: farmbuyer@96: container:SetLayout("Fill") farmbuyer@96: local left = AceGUI:Create("TreeGroup") farmbuyer@96: left:SetStatusTable(status_for_select) farmbuyer@96: left:SetLayout("Fill") farmbuyer@96: left:SetFullWidth(true) farmbuyer@96: left:SetFullHeight(true) farmbuyer@96: left:EnableButtonTooltips(false) farmbuyer@96: left:SetTree(options_tree) farmbuyer@96: left:SetCallback("OnGroupSelected", opt_OnGroupSelected_func) farmbuyer@96: container:AddChild(left) farmbuyer@96: if status_for_select.selected then farmbuyer@96: left:SetUserData("options restore scroll", true) farmbuyer@96: left:SelectByValue(status_for_select.selected) farmbuyer@96: else farmbuyer@96: left:SelectByValue("basic") farmbuyer@96: end farmbuyer@96: farmbuyer@96: local w = mkbutton("ReloadUI", farmbuyer@96: [[Does what you think it does. Loot information is written out and restored.]]) farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: w:SetCallback("OnClick", ReloadUI) farmbuyer@96: specials:AddChild(w) farmbuyer@96: farmbuyer@96: w = mkbutton("Ping!", farmbuyer@96: [[Queries other raid users for their addon version and current status. Results displayed on Pongs panel after five seconds.]]) farmbuyer@96: w:SetFullWidth(true) farmbuyer@96: w:SetCallback("OnClick", function(_w) farmbuyer@96: _w:SetText("5... 4... 3...") farmbuyer@96: _w:SetDisabled(true) farmbuyer@96: addon:DoPing() farmbuyer@96: addon:ScheduleTimer(function(b) farmbuyer@96: if b:IsVisible() then farmbuyer@96: return addon:redisplay() farmbuyer@96: end farmbuyer@96: end, 5, _w) farmbuyer@96: end) farmbuyer@96: specials:AddChild(w) farmbuyer@96: end farmbuyer@96: farmbuyer@96: addon:register_tab_control_AT_END ("opt", [[Options]], farmbuyer@96: [[Options for fine-tuning behavior]], tabs_OGS) farmbuyer@96: farmbuyer@96: -- vim:noet