comparison UI.lua @ 66:516ceb31703d

New profile system that stores channel and tag settings for each saved AddOn list. A boatload of structural revisions, making better use of the built-in table, and hopefully making console command issues easier to pick up.
author Nenue
date Sat, 05 Mar 2016 13:35:51 -0500
parents 8729d39f6a3d
children 1687ae1c6162
comparison
equal deleted inserted replaced
65:4148c90986e7 66:516ceb31703d
4 -- @file-revision@ @file-hash@ 4 -- @file-revision@ @file-hash@
5 -- Created: 12/27/2015 3:01 AM 5 -- Created: 12/27/2015 3:01 AM
6 if not LibStub then 6 if not LibStub then
7 print('Something has happened...') 7 print('Something has happened...')
8 end 8 end
9 local D = LibStub("AceAddon-3.0"):GetAddon("Devian") 9 local _, D = ...
10 local DEVIAN_FRAME = 'DevianConsole' 10 local DEVIAN_FRAME = 'DevianConsole'
11 local insert, tonumber, pairs, concat = tinsert, tonumber, pairs, table.concat
12 local L = D.L
13 local print = D.print
14
15
16
17
18 local Console_OnMovementChanged = function(self, event)
19 local db = D.db
20 if self.enabled then
21 if event == 'PLAYER_STARTED_MOVING' then
22 self.moveFade:Stop()
23 local F1 = self.moveFade.alphaOut
24 F1:SetFromAlpha(db.movement_fade_from)
25 F1:SetToAlpha(db.movement_fade_to)
26 F1:SetDuration(db.movement_fade_time)
27 self.moveFade:Play()
28 self:EnableMouse(false)
29 else
30 self.moveFade:Stop()
31 local F1 = self.moveFade.alphaOut
32 F1:SetToAlpha(db.movement_fade_from)
33 F1:SetFromAlpha(db.movement_fade_to)
34 F1:SetDuration(db.movement_fade_time)
35 self.moveFade:Play()
36 self:EnableMouse(true)
37 end
38 end
39 end
40
11 41
12 42
13 local function Console_MinMax(self) 43 local function Console_MinMax(self)
14 if self.minimized then 44 if self.minimized then
15 self:Maximize() 45 self:Maximize()
175 f.MinMax = Console_MinMax 205 f.MinMax = Console_MinMax
176 f.ToFront = Console_ToFront 206 f.ToFront = Console_ToFront
177 f.Toggle = D.Console_Toggle 207 f.Toggle = D.Console_Toggle
178 f:SetScript('OnMouseDown', Console_MouseDown) 208 f:SetScript('OnMouseDown', Console_MouseDown)
179 f:SetScript('OnMouseUp', Console_MouseUp) 209 f:SetScript('OnMouseUp', Console_MouseUp)
210 f.profileID = db.current_profile
180 211
181 212
182 UIDropDownMenu_Initialize(f.menuFrame, function() 213 UIDropDownMenu_Initialize(f.menuFrame, function()
183 local info = { { 214 local info = { {
184 text= "Close", 215 text= "Close",
196 for _, v in ipairs(info) do 227 for _, v in ipairs(info) do
197 UIDropDownMenu_AddButton(v) 228 UIDropDownMenu_AddButton(v)
198 end 229 end
199 end, 'MENU') 230 end, 'MENU')
200 231
232 if db.movement_fade then
233 f:RegisterEvent('PLAYER_STARTED_MOVING')
234 f:RegisterEvent('PLAYER_STOPPED_MOVING')
235 f:SetScript('OnEvent', Console_OnMovementChanged)
236 end
237
201 D.dock.buttons[i] = CreateFrame('Button', 'Channel'..i..'Beacon', UIParent, 'DevianBeacon') 238 D.dock.buttons[i] = CreateFrame('Button', 'Channel'..i..'Beacon', UIParent, 'DevianBeacon')
202 D.dock.buttons[i].icon:SetVertexColor(math.random(),math.random(),math.random()) 239 D.dock.buttons[i].icon:SetVertexColor(math.random(),math.random(),math.random())
203 D.dock.buttons[i].console = f 240 D.dock.buttons[i].console = f
204 D.dock.buttons[i].index = i 241 D.dock.buttons[i].index = i
205 D.dock.buttons[i].caption.name:SetText(vars.signature) 242 D.dock.buttons[i].caption.name:SetText(vars.signature)
225 -- @param cinfo string signature of a new channel, or a table of config variables to be imposed on the channel 262 -- @param cinfo string signature of a new channel, or a table of config variables to be imposed on the channel
226 -- @param key string signature or index number of channel to operate on 263 -- @param key string signature or index number of channel to operate on
227 -- @usage channel = D:SetChannel('new', nil) -- creates a new channel 264 -- @usage channel = D:SetChannel('new', nil) -- creates a new channel
228 -- @usage channel = D:SetChannel({x = 200, y = 100}, 4) -- updates channel #4 265 -- @usage channel = D:SetChannel({x = 200, y = 100}, 4) -- updates channel #4
229 function D:SetChannel(cinfo, key) 266 function D:SetChannel(cinfo, key)
230 local db = self.db 267 local profile = D.currentProfile
231 local t_info = {} 268 local t_info = {}
232 local channel, isNew, id, sig, t_id 269 local channel, isNew, id, sig, t_id
233 --@debug@ 270 --@debug@
234 --print('setchan(0) cinfo, key', cinfo, key)--@end-debug@ 271 print('setchan(0) cinfo, key', cinfo, key)--@end-debug@
235 -- obtain source data 272 -- obtain source data
236 if tonumber(key) ~= nil and db.channels[key] then 273 if tonumber(key) ~= nil and D.channels[key] then
237 id = tonumber(key) 274 id = tonumber(key)
238 elseif D.sigID[tostring(key)] then 275 elseif D.sigID[tostring(key)] then
239 id = D.sigID[tostring(key)] 276 id = D.sigID[tostring(key)]
240 else 277 else
241 id = db.primary_channel 278 id = profile.default_channel
242 isNew = true 279 isNew = true
243 end 280 end
244 local dbvars = db.channels[id] 281 local dbvars = D.channels[id]
245 t_id = id -- overridden later if new 282 t_id = id -- overridden later if new
246 t_info.index = t_id -- 283 t_info.index = t_id --
247 --@debug@ 284 --@debug@
248 --print('setchan(1) cinfo, key, id=', cinfo, key, id)--@end-debug@ 285 print('setchan(1) cinfo, key, id=', cinfo, key, id)--@end-debug@
249 286
250 287
251 -- obtain config info 288 -- obtain config info
252 if type(cinfo) == 'string' then 289 if type(cinfo) == 'string' then
253 sig = cinfo 290 sig = cinfo
254 cinfo = {signature = sig} 291 cinfo = {signature = sig}
255 elseif type(cinfo) ~= 'table' then -- stop here if a table wans't passed 292 elseif type(cinfo) ~= 'table' then -- stop here if a table wans't passed
256 error('Expecting table of string as arg1') 293 error('Expecting table of string as arg1')
257 elseif cinfo.signature then -- new sig 294 elseif cinfo.signature then -- new sig
258 sig = cinfo.signature 295 sig = cinfo.signature
259 elseif isNew then -- new channel sig 296 elseif isNew then -- new channel sig
260 sig = 'Ch' 297 sig = 'Ch'
261 else -- old sig 298 else -- old sig
262 sig = db.channels[id].signature 299 sig = D.channels[id].signature
263 end 300 end
264 t_info.signature = sig 301 t_info.signature = sig
265 --@debug@ 302 --@debug@
266 --print('setchan(2) sig,id,isNew=', sig, id, isNew)--@end-debug@ 303 print('setchan(2) sig,id,isNew=', sig, id, isNew)--@end-debug@
267 304
268 for k,v in pairs(cinfo) do -- allow all cinfo to pass 305 for k,v in pairs(cinfo) do -- allow all cinfo to pass
269 t_info[k] = v 306 t_info[k] = v
270 end 307 end
271 308
289 t_info.signature = result 326 t_info.signature = result
290 end 327 end
291 t_id = self.max_channel + 1 328 t_id = self.max_channel + 1
292 t_info.index = t_id 329 t_info.index = t_id
293 --@debug@ 330 --@debug@
294 --print('setchan(3a) t_id, isNew, sig, t_info.signature=', t_id, isNew, sig, t_info.signature)--@end-debug@ 331 print('setchan(3a) t_id, isNew, sig, t_info.signature=', t_id, isNew, sig, t_info.signature)--@end-debug@
295 else 332 else
296 --@debug@ 333 --@debug@
297 --print('setchan(3b) t_id, isNew, sig, t_info.signature=', t_id, isNew, sig, t_info.signature)--@end-debug@ 334 print('setchan(3b) t_id, isNew, sig, t_info.signature=', t_id, isNew, sig, t_info.signature)--@end-debug@
298 end 335 end
299 336
300 local channel 337 local channel
301 if not self.console[t_id] then -- create a frame 338 if not self.console[t_id] then -- create a frame
302 if isNew then -- position the channel frame 339 if isNew then -- position the channel frame
303 self.max_channel = t_id 340 profile.max_channel = t_id
304 db.max_channel = t_id 341 t_info.x = t_info.x + 20
305 t_info.x = t_info.x + 20 342 t_info.y = t_info.y - 20
306 t_info.y = t_info.y - 20 343 profile.channels[t_id] = t_info
307 db.channels[t_id] = t_info 344 --@debug@
308 --@debug@ 345 print('setchan(4a)', 't_id, x, y=', t_id, t_info.x, t_info.y)--@end-debug@
309 --print('setchan(4a)', 't_id, x, y=', t_id, t_info.x, t_info.y)--@end-debug@ 346 end
310 end 347 channel = CreateConsole(t_id, t_info)
311 channel = CreateConsole(t_id, t_info) 348 self.console[t_id] = channel
312 self.console[t_id] = channel 349 self.sig[t_info.signature] = channel
313 self.sig[t_info.signature] = channel 350 self.sigID[t_info.signature] = t_id
314 self.sigID[t_info.signature] = t_id 351 self.IDsig[t_id] = t_info.signature
315 self.IDsig[t_id] = t_info.signature
316
317 end 352 end
318 channel = self.console[t_id] 353 channel = self.console[t_id]
319 if channel.minimized then 354 if channel.minimized then
320 channel:Minimize() 355 channel:Minimize()
321 else 356 else
322 channel:Maximize() 357 channel:Maximize()
323 end 358 end
324 359
325 if channel.enabled then -- hide or show last since Min/Max mess with visibility 360 if channel.enabled then -- hide or show last since Min/Max mess with visibility
326 --print('setchan(5a) enable') 361 print('setchan(5a) enable')
327 channel:Show() 362 channel:Show()
328 --channel:ToFront() 363 --channel:ToFront()
329 else 364 else
330 --print('setchan(5a) disable') 365 print('setchan(5a) disable')
331 channel:Hide() 366 channel:Hide()
332 end 367 end
333 --@debug@ 368 --@debug@
334 --print('setchan(end); c:IsVisible(), c.enabled, db.enabled=', channel:IsVisible(), channel.enabled, db.enabled)--@end-debug@ 369 print('setchan(end); c:IsVisible(), c.enabled, db.enabled=', channel:IsVisible(), channel.enabled, profile.enabled)--@end-debug@
335 return channel 370 return channel
336 end 371 end
372
373 --- Console frame toggler
374 -- @paramsig [...]
375 -- @param ... one or more space-seperated channel keys
376 function D:Console_Toggle(input, force)
377 local profile = D.currentProfile
378 --oldprint(input)
379 local setAll
380 local search = {}
381 local key
382 local n = 0
383 while self:GetArgs(input,1,n) and n < 255 do --should end itself when it gets nil, but
384 key, n = self:GetArgs(input,1,n)
385
386 if self.sig[key] then
387 --print(key, self.sigID[key])
388 insert(search, self.sigID[key])
389 elseif self.console[tonumber(key)] then
390 --print(key, tonumber(key))
391 insert(search, tonumber(key))
392 end
393
394 --oldprint(#search, key, n)
395 end
396 if #search < 1 then
397 search = self.sigID
398 setAll = true
399 end
400 if setAll then
401 --oldprint('setall', setAll)
402 profile.enabled = (not profile.enabled) and true or nil
403 if force == 0 then
404 profile.enabled = nil
405 end
406 end
407
408 for i, id in pairs(search) do
409 --oldprint(i, id)
410 local c = self.console[id]
411 if setAll then
412 c.enabled = profile.enabled and profile.enabled or nil
413 else
414
415 profile.enabled = true
416 c.enabled = (not c.enabled) and true or nil
417 if force == 0 then
418 c.enabled = nil
419 end
420 --oldprint(id, ' ', force, c.enabled, db.enabled)
421 end
422
423 if c.enabled or (setAll and profile.enabled) then
424 c:Show()
425 elseif not (c.enabled and profile.enabled) then
426 c:Hide()
427 end
428 c:Save()
429 end
430
431 if setAll then
432 if profile.enabled then
433 self:Print('toggled all consoles ON')
434 if D.console[profile.current_channel] then
435 D.console[profile.current_channel]:ToFront()
436 end
437 else
438 self:Print('toggled all consoles OFF')
439 end
440 else
441 local result = {}
442 for i, id in pairs(search) do
443 result[i] = tostring(id) .. ' = ' .. (self.console[id].enabled and 'ON' or 'OFF')
444 end
445 self:Print('toggled: '..concat(result, ', '))
446 end
447 end