Nenue@45: --- Nenue@45: -- @file-author@ Nenue@45: -- @project-revision@ @project-hash@ Nenue@45: -- @file-revision@ @file-hash@ Nenue@45: -- Created: 12/30/2015 1:35 AM Nenue@45: Nenue@45: if not LibStub then Nenue@45: print('Something has happened...') Nenue@45: end Nenue@45: local D = LibStub("AceAddon-3.0"):GetAddon("Devian") Nenue@45: DevCon = D:NewModule("Config") Nenue@45: local Cf, tinsert, ipairs, tostring = DevCon, table.insert, ipairs, tostring Nenue@45: local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName() Nenue@45: local db Nenue@45: Nenue@45: Nenue@45: local SetOpt = function(info, value) Nenue@45: db[info[#info]] = value Nenue@45: end Nenue@45: local GetOpt = function(info) Nenue@45: return db[info[#info]] Nenue@45: end Nenue@45: local GetProfileList = function(info) Nenue@45: local select = {} Nenue@45: for i, profile in ipairs(db.profiles) do Nenue@45: if i == db.workspace then Nenue@45: profile[1] = '|cFFFFFF00'..profile[1]..'|r' Nenue@45: elseif i == db.last_workspace then Nenue@45: profile[1] = '|cFF00FF00'..profile[1]..'|r' Nenue@45: end Nenue@45: tinsert(select,tostring(i)..':'..profile[1]) Nenue@45: end Nenue@45: return select Nenue@45: end Nenue@45: local GetAddOnList = function(id) Nenue@45: local t = Cf.opts.args.addon.args Nenue@45: for k, v in pairs(t) do Nenue@45: k:match("addon_") Nenue@45: t[k] = nil Nenue@45: end Nenue@45: Nenue@45: Nenue@45: end Nenue@45: local SetSelectedToProfile = function(info, value) Nenue@45: GetAddOnList(value) Nenue@45: end Nenue@45: local SetLoadedToProfile = function(info, value) end Nenue@45: local SetProfile = function(info, value) end Nenue@45: local LoadSelectedProfile = function() print('Load #', Cf.selected_profile) end Nenue@45: function Cf:OnInitialize() Nenue@45: db = DevianDB Nenue@45: self.selected_profile = db.primary_channel Nenue@45: end Nenue@45: Nenue@45: function Cf:OnEnable() Nenue@45: Nenue@45: D:Print('Options UI loaded') Nenue@45: self.opts = { Nenue@45: type = 'group', Nenue@45: name = 'Devian', Nenue@45: desc = 'Devkit in a nutshell', Nenue@45: handler = Cf, Nenue@45: set = SetOpt, Nenue@45: get = GetOpt, Nenue@45: args = { Nenue@45: enabled = { Nenue@45: type = 'toggle', Nenue@45: name = 'Enable Print Handler', Nenue@45: desc = 'Allows Devian to handle print() calls.', Nenue@45: order = 10, Nenue@45: }, Nenue@45: addon = { Nenue@45: type = 'group', Nenue@45: name = 'AddOns', Nenue@45: order = 20, Nenue@45: args= { Nenue@45: selected_profile = { Nenue@45: type = 'select', Nenue@45: name = 'Profile', Nenue@45: values = GetProfileList, Nenue@45: set = function(info, value, ...) self.selected_profile = value print('select', value, ...) end, Nenue@45: get = function(info) return self.selected_profile or 1 end, Nenue@45: order = 10 Nenue@45: }, Nenue@45: load_selected = { Nenue@45: func = LoadSelectedProfile, Nenue@45: type = 'execute', Nenue@45: name = 'Load Selected', Nenue@45: desc = 'Save currently loaded AddOns as a profile.', Nenue@45: order = 13, Nenue@45: }, Nenue@45: t_header = { Nenue@45: type = 'header', Nenue@45: name = 'Addons', Nenue@45: width = 'full', Nenue@45: order = 15, Nenue@45: }, Nenue@45: save_loaded = { Nenue@45: func = SetLoadedToProfile, Nenue@45: type = 'execute', Nenue@45: name = 'Save Loaded', Nenue@45: desc = 'Save currently loaded AddOns as a profile.', Nenue@45: order = 400, Nenue@45: }, Nenue@45: save_selected = { Nenue@45: func = SetSelectedToProfile, Nenue@45: type = 'execute', Nenue@45: name = 'Save', Nenue@45: desc = 'Save the selected AddOns as a profile.', Nenue@45: order = 450, Nenue@45: } Nenue@45: } Nenue@45: }, Nenue@45: channels = { Nenue@45: type = 'group', Nenue@45: name = 'Console', Nenue@45: order = 30, Nenue@45: args = { Nenue@45: primary_channel = { Nenue@45: type = 'select', Nenue@45: name = 'Primary Channel', Nenue@45: desc = 'Set the default output channel for untagged messages.', Nenue@45: values = {}, Nenue@45: } Nenue@45: } Nenue@45: }, Nenue@45: tags = { Nenue@45: type = 'group', Nenue@45: name = 'Tags', Nenue@45: order = 40, Nenue@45: args = { Nenue@45: enable_tag = { Nenue@45: type = 'toggle', Nenue@45: name ='Message prefix handling', Nenue@45: desc = 'Enables direction of print() results to different channels based on the first whole word in the output.', Nenue@45: } Nenue@45: } Nenue@45: }, Nenue@45: } Nenue@45: } Nenue@45: Nenue@45: Nenue@45: for i = 1, GetNumAddOns() do Nenue@45: local name = GetAddOnInfo(i) Nenue@45: local enableState, globalState = GetAddOnEnableState(playername, i), GetAddOnEnableState(nil, i) Nenue@45: self.opts.args.addon.args['addon_'..i..'_desc'] = { Nenue@45: type = 'description', Nenue@45: name = name, Nenue@45: width = 'single', Nenue@45: order= (500+i*3) Nenue@45: } Nenue@45: self.opts.args.addon.args['addon_'..i..'_global'] = { Nenue@45: type = 'toggle', Nenue@45: name = '', Nenue@45: get = function() return (GetAddOnEnableState(nil, i) == 2) and true or false end, Nenue@45: set = function(info, value) EnableAddOn(i, value) end, Nenue@45: width= 'half', Nenue@45: order= (500+i*3+1) Nenue@45: } Nenue@45: Nenue@45: self.opts.args.addon.args['addon_'..i..'_char'] = { Nenue@45: type = 'toggle', Nenue@45: name = '', Nenue@45: get = function() return (GetAddOnEnableState(GetUnitName('player'), i) == 1) and true or false end, Nenue@45: set = function(info, value) EnableAddOn(PLAYER_REALM, value) end, Nenue@45: width= 'half', Nenue@45: order= (500+i*3+2) Nenue@45: } Nenue@45: end Nenue@45: Nenue@45: LibStub("AceConfig-3.0"):RegisterOptionsTable("Devian", self.opts) Nenue@45: self.diag = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Devian", "Devian") Nenue@45: end Nenue@45: Nenue@45: function Cf:ChatCommand(input) Nenue@45: InterfaceOptionsFrame_OpenToCategory(self.diag) Nenue@45: InterfaceOptionsFrame_OpenToCategory(self.diag) Nenue@45: end