Mercurial > wow > devian
comparison Devian.lua @ 86:6e27274da4d9
- /dvn rc resets the current workspace channels and tags
- command argument parse code revised
author | Nenue |
---|---|
date | Tue, 26 Jul 2016 01:45:30 -0400 |
parents | c85459c5bb16 |
children | e80723841888 |
comparison
equal
deleted
inserted
replaced
85:ee27780b9863 | 86:6e27274da4d9 |
---|---|
132 | 132 |
133 D.InWorkspace = function () | 133 D.InWorkspace = function () |
134 return db.profiles[db.current_profile].workspace | 134 return db.profiles[db.current_profile].workspace |
135 end | 135 end |
136 | 136 |
137 local profileTemplate = { | |
138 name = function(id, name) return name end, | |
139 workspace = function(id, name) return (id ~= 1) end, | |
140 current_channel = 1, | |
141 default_channel = 1, | |
142 num_channels = 1, | |
143 max_channel = 1, -- the highest created channel id | |
144 enabled = true, -- allow enabled consoles to appear | |
145 channels = { | |
146 { | |
147 index = 1, | |
148 signature = 'Main', | |
149 x = 100, y = 800, | |
150 height = 500, width = 600, | |
151 enabled = true | |
152 } | |
153 }, | |
154 loadouts = {}, | |
155 global = {}, | |
156 tags = {}, | |
157 char = { | |
158 [playerRealm] = {} | |
159 }, | |
160 unlisted = {} | |
161 } | |
162 | |
163 --- Applies complex template tables | |
164 -- If he value is a function, then it will invoke f(...) and use whatever gets returned | |
165 function D.DeepCopy(src, dest, ...) | |
166 | |
167 for k,v in pairs(src) do | |
168 if not dest[k] then | |
169 oldprint('Rebuilding conf value', k) | |
170 if type(v) == 'table' then | |
171 dest[k] = {} | |
172 D.DeepCopy(v, dest[k], ...) | |
173 | |
174 else | |
175 if type(v) == 'function' then | |
176 v = v(...) | |
177 end | |
178 dest[k] = v | |
179 end | |
180 end | |
181 end | |
182 end | |
183 | |
137 D.Profile = function (id, name) | 184 D.Profile = function (id, name) |
138 | 185 |
139 if name and not id and db.profilesName[name] then | 186 if name and not id and db.profilesName[name] then |
140 id = db.profilesName[name] | 187 id = db.profilesName[name] |
141 print('ID located by name, |cFF00FF00'..name..'|r is |cFFFFFF00'.. id..'|r') | 188 print('ID located by name, |cFF00FF00'..name..'|r is |cFFFFFF00'.. id..'|r') |
156 newName = prefix .. i | 203 newName = prefix .. i |
157 end | 204 end |
158 name = newName | 205 name = newName |
159 print('Generated profile name: |cFF00FF00'..newName..'|r') | 206 print('Generated profile name: |cFF00FF00'..newName..'|r') |
160 end | 207 end |
208 | |
209 | |
210 | |
161 print('Creating profile') | 211 print('Creating profile') |
162 db.profilesName[name] = id | 212 db.profilesName[name] = id |
163 db.profiles[id] = { | 213 db.profiles[id] = {} |
164 name = name, | 214 end |
165 workspace = (id ~= 1), | 215 |
166 current_channel = 1, | 216 |
167 default_channel = 1, | |
168 num_channels = 1, | |
169 max_channel = 1, -- the highest created channel id | |
170 enabled = true, -- allow enabled consoles to appear | |
171 channels = { | |
172 { | |
173 index = 1, | |
174 signature = 'Main', | |
175 x = 100, y = 800, | |
176 height = 500, width = 600, | |
177 enabled = true | |
178 } | |
179 }, | |
180 loadouts = {}, | |
181 global = {}, | |
182 tags = {}, | |
183 char = { | |
184 [playerRealm] = {} | |
185 }, | |
186 unlisted = {} | |
187 } | |
188 end | |
189 | 217 |
190 D.currentProfile = db.profiles[id] | 218 D.currentProfile = db.profiles[id] |
191 currentProfile = D.currentProfile | 219 currentProfile = D.currentProfile |
220 | |
221 D.DeepCopy(profileTemplate, currentProfile, id, name) | |
222 | |
223 | |
192 currentProfile.char[playerRealm] = currentProfile.char[playerRealm] or {} | 224 currentProfile.char[playerRealm] = currentProfile.char[playerRealm] or {} |
193 if currentProfile.workspace then | 225 if currentProfile.workspace then |
194 DEVIAN_WORKSPACE = true | 226 DEVIAN_WORKSPACE = true |
195 setprinthandler(D.Message) | 227 setprinthandler(D.Message) |
196 else | 228 else |
214 | 246 |
215 return id, name | 247 return id, name |
216 end | 248 end |
217 | 249 |
218 local targetGlobal, targetChar | 250 local targetGlobal, targetChar |
219 D.Command = function (self, cmd, ...) | 251 D.Command = function (cmd) |
220 local list_id, scan_func, reload | 252 local list_id, scan_func, reload |
253 | |
221 local args = {} | 254 local args = {} |
222 local arg, n = D:GetArgs(cmd, 1) | 255 if cmd then |
223 while arg do | 256 local i, j = 0, 0 |
224 insert(args, arg) | 257 repeat |
225 arg, n = D:GetArgs(cmd,1,n) | 258 i, j = cmd:find("%S+", j+1) |
259 if i and j then | |
260 tinsert(args, cmd:sub(i, j)) | |
261 end | |
262 | |
263 until not(i or j) | |
226 end | 264 end |
227 local mode, tag, dest = unpack(args) | 265 local mode, tag, dest = unpack(args) |
228 | 266 |
267 | |
229 -- no args, toggle ui | 268 -- no args, toggle ui |
230 if mode == 'stack' then | 269 if mode == 'rc' then |
270 return D.ResetChannels(self, tag) | |
271 elseif mode == 'stack' then | |
231 return D:StackFrames() | 272 return D:StackFrames() |
232 elseif mode == 'grid' then | 273 elseif mode == 'grid' then |
233 return D:DistributeFrames() | 274 return D:DistributeFrames() |
234 elseif mode == 'tag' then -- tagging | 275 elseif mode == 'tag' then -- tagging |
235 return D.Tag(self, tag, dest) | 276 return D.Tag(self, tag, dest) |
376 else | 417 else |
377 D:Print(L['Command tag help']) | 418 D:Print(L['Command tag help']) |
378 end | 419 end |
379 end | 420 end |
380 | 421 |
422 D.ResetChannels = function(self, profile) | |
423 currentProfile.current_channel = 1 | |
424 currentProfile.primary_channel = 1 | |
425 currentProfile.channels = {} | |
426 D.DeepCopy(profileTemplate.channels, currentProfile.channels) | |
427 currentProfile.tags = {} | |
428 D.LoadMessage('Profile reset.') | |
429 ReloadUI() | |
430 end | |
431 | |
381 D.New = function(self, tag) | 432 D.New = function(self, tag) |
382 if tag and not self.sigID[tag] then | 433 if tag and not self.sigID[tag] then |
383 local id = D.max_channel + 1 | 434 local id = D.max_channel + 1 |
384 D.SetChannel(tag, id) | 435 D.SetChannel(tag, id) |
385 end | 436 end |
447 end | 498 end |
448 | 499 |
449 -- color me timbers | 500 -- color me timbers |
450 local pcolor | 501 local pcolor |
451 if (not db.tagcolor[prefix]) and byName then | 502 if (not db.tagcolor[prefix]) and byName then |
452 if prefix:match('^%d+%.%d+$') then | 503 -- numbers, use white |
504 if prefix:match('^%d+%.%d+') then | |
453 pcolor = 'FFFFFF' | 505 pcolor = 'FFFFFF' |
454 else | 506 else |
455 local c = { | 507 local c = { |
456 rand(64,255), rand(64,255), rand(64,255) | 508 rand(64,255), rand(64,255), rand(64,255) |
457 } | 509 } |
562 ['cleandvn'] = "SetDefaultsAll", | 614 ['cleandvn'] = "SetDefaultsAll", |
563 ['resetdvn'] = "SetDefaults", | 615 ['resetdvn'] = "SetDefaults", |
564 ['dvg'] = "ConfigCommand" | 616 ['dvg'] = "ConfigCommand" |
565 } | 617 } |
566 for cmd, func in pairs(cmdlist) do | 618 for cmd, func in pairs(cmdlist) do |
567 self:RegisterChatCommand(cmd, func, true) | 619 _G['SLASH_' .. cmd:upper() .. '1'] = "/"..cmd |
620 SlashCmdList[cmd:upper()] = D[func] | |
568 end | 621 end |
569 end | 622 end |
570 | 623 |
571 function D:OnInitialize() | 624 function D:OnInitialize() |
572 L = D.L | 625 L = D.L |
591 --- initialize the current profile | 644 --- initialize the current profile |
592 local id, name = D.Profile(db.current_profile or 1) | 645 local id, name = D.Profile(db.current_profile or 1) |
593 D:Print('Using profile |cFFFFFF00'.. id ..'|r: |cFF00FF00'..currentProfile.name..'|r') | 646 D:Print('Using profile |cFFFFFF00'.. id ..'|r: |cFF00FF00'..currentProfile.name..'|r') |
594 if currentProfile.workspace then | 647 if currentProfile.workspace then |
595 D:Print('Workspace: '.. (#currentProfile.channels) .. ' channels, ' .. #currentProfile.tags .. ' tags.') | 648 D:Print('Workspace: '.. (#currentProfile.channels) .. ' channels, ' .. #currentProfile.tags .. ' tags.') |
596 D:Print('Default channel: |cFFFFFF00'..currentProfile.default_channel..'|r: |cFF00FFFF'.. D.channels[currentProfile.default_channel].signature..'|r') | 649 if D.channels[currentProfile.default_channel] then |
597 end | 650 D:Print('Default channel: |cFFFFFF00'..currentProfile.default_channel..'|r: |cFF00FFFF'.. D.channels[currentProfile.default_channel].signature..'|r') |
651 end | |
652 end | |
653 | |
598 | 654 |
599 for i, cinfo in pairs(D.channels) do | 655 for i, cinfo in pairs(D.channels) do |
600 i = tonumber(i) | 656 i = tonumber(i) |
601 if not D.primary_channel then | 657 if not D.primary_channel then |
602 D.primary_channel = i | 658 D.primary_channel = i |
603 end | 659 end |
604 D:SetChannel(cinfo, i) | 660 D:SetChannel(cinfo, i) |
605 D.num_channels = D.num_channels + 1 | 661 D.num_channels = D.num_channels + 1 |
606 end | 662 end |
663 D.primary_channel = D.primary_channel or 1 | |
607 | 664 |
608 D.max_channel = max(D.max_channel, currentProfile.max_channel) | 665 D.max_channel = max(D.max_channel, currentProfile.max_channel) |
609 if currentProfile.max_channel < D.max_channel then | 666 if currentProfile.max_channel < D.max_channel then |
610 for i = currentProfile.max_channel, D.max_channel do | 667 for i = currentProfile.max_channel, D.max_channel do |
611 D.console[i]:Hide() | 668 D.console[i]:Hide() |