Nenue@45
|
1 ---
|
Nenue@45
|
2 -- @file-author@
|
Nenue@45
|
3 -- @project-revision@ @project-hash@
|
Nenue@45
|
4 -- @file-revision@ @file-hash@
|
Nenue@45
|
5 -- Created: 12/30/2015 1:35 AM
|
Nenue@45
|
6
|
Nenue@45
|
7 if not LibStub then
|
Nenue@45
|
8 print('Something has happened...')
|
Nenue@45
|
9 end
|
Nenue@45
|
10 local D = LibStub("AceAddon-3.0"):GetAddon("Devian")
|
Nenue@45
|
11 DevCon = D:NewModule("Config")
|
Nenue@45
|
12 local Cf, tinsert, ipairs, tostring = DevCon, table.insert, ipairs, tostring
|
Nenue@45
|
13 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName()
|
Nenue@45
|
14 local db
|
Nenue@45
|
15
|
Nenue@45
|
16
|
Nenue@45
|
17 local SetOpt = function(info, value)
|
Nenue@45
|
18 db[info[#info]] = value
|
Nenue@45
|
19 end
|
Nenue@45
|
20 local GetOpt = function(info)
|
Nenue@45
|
21 return db[info[#info]]
|
Nenue@45
|
22 end
|
Nenue@45
|
23 local GetProfileList = function(info)
|
Nenue@45
|
24 local select = {}
|
Nenue@45
|
25 for i, profile in ipairs(db.profiles) do
|
Nenue@45
|
26 if i == db.workspace then
|
Nenue@45
|
27 profile[1] = '|cFFFFFF00'..profile[1]..'|r'
|
Nenue@45
|
28 elseif i == db.last_workspace then
|
Nenue@45
|
29 profile[1] = '|cFF00FF00'..profile[1]..'|r'
|
Nenue@45
|
30 end
|
Nenue@45
|
31 tinsert(select,tostring(i)..':'..profile[1])
|
Nenue@45
|
32 end
|
Nenue@45
|
33 return select
|
Nenue@45
|
34 end
|
Nenue@45
|
35 local GetAddOnList = function(id)
|
Nenue@45
|
36 local t = Cf.opts.args.addon.args
|
Nenue@45
|
37 for k, v in pairs(t) do
|
Nenue@45
|
38 k:match("addon_")
|
Nenue@45
|
39 t[k] = nil
|
Nenue@45
|
40 end
|
Nenue@45
|
41
|
Nenue@45
|
42
|
Nenue@45
|
43 end
|
Nenue@45
|
44 local SetSelectedToProfile = function(info, value)
|
Nenue@45
|
45 GetAddOnList(value)
|
Nenue@45
|
46 end
|
Nenue@45
|
47 local SetLoadedToProfile = function(info, value) end
|
Nenue@45
|
48 local SetProfile = function(info, value) end
|
Nenue@45
|
49 local LoadSelectedProfile = function() print('Load #', Cf.selected_profile) end
|
Nenue@45
|
50 function Cf:OnInitialize()
|
Nenue@45
|
51 db = DevianDB
|
Nenue@45
|
52 self.selected_profile = db.primary_channel
|
Nenue@45
|
53 end
|
Nenue@45
|
54
|
Nenue@45
|
55 function Cf:OnEnable()
|
Nenue@45
|
56
|
Nenue@45
|
57 D:Print('Options UI loaded')
|
Nenue@45
|
58 self.opts = {
|
Nenue@45
|
59 type = 'group',
|
Nenue@45
|
60 name = 'Devian',
|
Nenue@45
|
61 desc = 'Devkit in a nutshell',
|
Nenue@45
|
62 handler = Cf,
|
Nenue@45
|
63 set = SetOpt,
|
Nenue@45
|
64 get = GetOpt,
|
Nenue@45
|
65 args = {
|
Nenue@45
|
66 enabled = {
|
Nenue@45
|
67 type = 'toggle',
|
Nenue@45
|
68 name = 'Enable Print Handler',
|
Nenue@45
|
69 desc = 'Allows Devian to handle print() calls.',
|
Nenue@45
|
70 order = 10,
|
Nenue@45
|
71 },
|
Nenue@45
|
72 addon = {
|
Nenue@45
|
73 type = 'group',
|
Nenue@45
|
74 name = 'AddOns',
|
Nenue@45
|
75 order = 20,
|
Nenue@45
|
76 args= {
|
Nenue@45
|
77 selected_profile = {
|
Nenue@45
|
78 type = 'select',
|
Nenue@45
|
79 name = 'Profile',
|
Nenue@45
|
80 values = GetProfileList,
|
Nenue@45
|
81 set = function(info, value, ...) self.selected_profile = value print('select', value, ...) end,
|
Nenue@45
|
82 get = function(info) return self.selected_profile or 1 end,
|
Nenue@45
|
83 order = 10
|
Nenue@45
|
84 },
|
Nenue@45
|
85 load_selected = {
|
Nenue@45
|
86 func = LoadSelectedProfile,
|
Nenue@45
|
87 type = 'execute',
|
Nenue@45
|
88 name = 'Load Selected',
|
Nenue@45
|
89 desc = 'Save currently loaded AddOns as a profile.',
|
Nenue@45
|
90 order = 13,
|
Nenue@45
|
91 },
|
Nenue@45
|
92 t_header = {
|
Nenue@45
|
93 type = 'header',
|
Nenue@45
|
94 name = 'Addons',
|
Nenue@45
|
95 width = 'full',
|
Nenue@45
|
96 order = 15,
|
Nenue@45
|
97 },
|
Nenue@45
|
98 save_loaded = {
|
Nenue@45
|
99 func = SetLoadedToProfile,
|
Nenue@45
|
100 type = 'execute',
|
Nenue@45
|
101 name = 'Save Loaded',
|
Nenue@45
|
102 desc = 'Save currently loaded AddOns as a profile.',
|
Nenue@45
|
103 order = 400,
|
Nenue@45
|
104 },
|
Nenue@45
|
105 save_selected = {
|
Nenue@45
|
106 func = SetSelectedToProfile,
|
Nenue@45
|
107 type = 'execute',
|
Nenue@45
|
108 name = 'Save',
|
Nenue@45
|
109 desc = 'Save the selected AddOns as a profile.',
|
Nenue@45
|
110 order = 450,
|
Nenue@45
|
111 }
|
Nenue@45
|
112 }
|
Nenue@45
|
113 },
|
Nenue@45
|
114 channels = {
|
Nenue@45
|
115 type = 'group',
|
Nenue@45
|
116 name = 'Console',
|
Nenue@45
|
117 order = 30,
|
Nenue@45
|
118 args = {
|
Nenue@45
|
119 primary_channel = {
|
Nenue@45
|
120 type = 'select',
|
Nenue@45
|
121 name = 'Primary Channel',
|
Nenue@45
|
122 desc = 'Set the default output channel for untagged messages.',
|
Nenue@45
|
123 values = {},
|
Nenue@45
|
124 }
|
Nenue@45
|
125 }
|
Nenue@45
|
126 },
|
Nenue@45
|
127 tags = {
|
Nenue@45
|
128 type = 'group',
|
Nenue@45
|
129 name = 'Tags',
|
Nenue@45
|
130 order = 40,
|
Nenue@45
|
131 args = {
|
Nenue@45
|
132 enable_tag = {
|
Nenue@45
|
133 type = 'toggle',
|
Nenue@45
|
134 name ='Message prefix handling',
|
Nenue@45
|
135 desc = 'Enables direction of print() results to different channels based on the first whole word in the output.',
|
Nenue@45
|
136 }
|
Nenue@45
|
137 }
|
Nenue@45
|
138 },
|
Nenue@45
|
139 }
|
Nenue@45
|
140 }
|
Nenue@45
|
141
|
Nenue@45
|
142
|
Nenue@45
|
143 for i = 1, GetNumAddOns() do
|
Nenue@45
|
144 local name = GetAddOnInfo(i)
|
Nenue@45
|
145 local enableState, globalState = GetAddOnEnableState(playername, i), GetAddOnEnableState(nil, i)
|
Nenue@45
|
146 self.opts.args.addon.args['addon_'..i..'_desc'] = {
|
Nenue@45
|
147 type = 'description',
|
Nenue@45
|
148 name = name,
|
Nenue@45
|
149 width = 'single',
|
Nenue@45
|
150 order= (500+i*3)
|
Nenue@45
|
151 }
|
Nenue@45
|
152 self.opts.args.addon.args['addon_'..i..'_global'] = {
|
Nenue@45
|
153 type = 'toggle',
|
Nenue@45
|
154 name = '',
|
Nenue@45
|
155 get = function() return (GetAddOnEnableState(nil, i) == 2) and true or false end,
|
Nenue@45
|
156 set = function(info, value) EnableAddOn(i, value) end,
|
Nenue@45
|
157 width= 'half',
|
Nenue@45
|
158 order= (500+i*3+1)
|
Nenue@45
|
159 }
|
Nenue@45
|
160
|
Nenue@45
|
161 self.opts.args.addon.args['addon_'..i..'_char'] = {
|
Nenue@45
|
162 type = 'toggle',
|
Nenue@45
|
163 name = '',
|
Nenue@45
|
164 get = function() return (GetAddOnEnableState(GetUnitName('player'), i) == 1) and true or false end,
|
Nenue@45
|
165 set = function(info, value) EnableAddOn(PLAYER_REALM, value) end,
|
Nenue@45
|
166 width= 'half',
|
Nenue@45
|
167 order= (500+i*3+2)
|
Nenue@45
|
168 }
|
Nenue@45
|
169 end
|
Nenue@45
|
170
|
Nenue@45
|
171 LibStub("AceConfig-3.0"):RegisterOptionsTable("Devian", self.opts)
|
Nenue@45
|
172 self.diag = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Devian", "Devian")
|
Nenue@45
|
173 end
|
Nenue@45
|
174
|
Nenue@45
|
175 function Cf:ChatCommand(input)
|
Nenue@45
|
176 InterfaceOptionsFrame_OpenToCategory(self.diag)
|
Nenue@45
|
177 InterfaceOptionsFrame_OpenToCategory(self.diag)
|
Nenue@45
|
178 end |