comparison Init.lua @ 24:66b927b46776

Refine the XML data logic, and sort out some EnableMouse inconsistencies.
author Nenue
date Mon, 11 Apr 2016 09:07:40 -0400
parents d5ee940de273
children e84d645c8ab8
comparison
equal deleted inserted replaced
23:e837384ac363 24:66b927b46776
123 123
124 124
125 --- localize for speed 125 --- localize for speed
126 local layers, refs, displays = B.configLayers, B.configLayersRef, B.displays 126 local layers, refs, displays = B.configLayers, B.configLayersRef, B.displays
127 127
128 local ModulesCall = function(func) 128 local ModulesCall = function(func, flag)
129 129
130 local n = 0 130 local n = 0
131 for i = 1, #moduleStack do 131 for i = 1, #moduleStack do
132 print('calling level '..i) 132 print('calling level '..i)
133 local stackset = moduleStack[i] 133 local stackset = moduleStack[i]
134 134
135 for name, module in pairs(stackset) do 135 for name, module in pairs(stackset) do
136 n = n + 1 136 n = n + 1
137 print(n..' '..name..'.'..func..'()')
138 137
139 138
140 if module[func] then 139 if module[func] then
141 module[func](module) 140 -- nil = pass
141 if not flag or module.Conf[flag] then
142 if (flag) then
143 print(' check', flag, '=', module.Conf[flag])
144 end
145
146 print(' ',n..' '..name..'.'..func..'()')
147 module[func](module, module.Conf)
148 end
149
142 end 150 end
143 end 151 end
144 end 152 end
145 end 153 end
146 154
159 local defaults = B.ConfDefaults 167 local defaults = B.ConfDefaults
160 print('|cFFFFFF00Veneer|r') 168 print('|cFFFFFF00Veneer|r')
161 if not VeneerData then 169 if not VeneerData then
162 VeneerData = {} 170 VeneerData = {}
163 for k,v in pairs(defaults) do 171 for k,v in pairs(defaults) do
172
173
164 VeneerData[k] = v 174 VeneerData[k] = v
165 end 175 end
166 print('Veneer defaults being used.') 176 print('Veneer defaults being used.')
167 end 177 end
168 178
236 246
237 247
238 for level, batch in ipairs(moduleStack) do 248 for level, batch in ipairs(moduleStack) do
239 print('config level', level) 249 print('config level', level)
240 for name, module in pairs(batch) do 250 for name, module in pairs(batch) do
251 if not VeneerData[name] then
252 VeneerData[name] = {}
253 end
254
241 if module.defaults then 255 if module.defaults then
242 print('setting defaults for module', name) 256 print('setting defaults for module', name)
243 --[===[@non-debug@ 257 --[===[@non-debug@
244 if not VeneerData[name] then 258 if not VeneerData[name] then
245 --@end-non-debug@]===] 259 --@end-non-debug@]===]
251 VeneerData[name][k] = v 265 VeneerData[name][k] = v
252 end 266 end
253 module.Conf = VeneerData[name] 267 module.Conf = VeneerData[name]
254 end 268 end
255 269
270 if VeneerData[name].enabled == nil then
271 VeneerData[name].enabled = true
272 end
273
256 end 274 end
257 end 275 end
258 276
259 277
260 if #checkForConfig >= 1 then 278 if #checkForConfig >= 1 then
270 288
271 --- Fires an update to all modules 289 --- Fires an update to all modules
272 local lastUpdate 290 local lastUpdate
273 function B.UpdateAll(...) 291 function B.UpdateAll(...)
274 lastUpdate = GetTime() 292 lastUpdate = GetTime()
275 ModulesCall('OnUpdate', lastUpdate) 293 ModulesCall('OnUpdate')
276 end 294 end
277 295
278 B:RegisterEvent('PLAYER_ENTERING_WORLD') 296 B:RegisterEvent('PLAYER_ENTERING_WORLD')
279 B:SetScript('OnEvent', function(self, event) 297 B:SetScript('OnEvent', function(self, event)
280 if event == 'PLAYER_ENTERING_WORLD' then 298 if event == 'PLAYER_ENTERING_WORLD' then
283 ModulesCall('OnInitialize') 301 ModulesCall('OnInitialize')
284 initOnced = true 302 initOnced = true
285 C_Timer.After(1, function() 303 C_Timer.After(1, function()
286 if GetSpecialization() then 304 if GetSpecialization() then
287 print(GetSpecialization(), 'enabling') 305 print(GetSpecialization(), 'enabling')
288 ModulesCall('OnEnable') 306
307 ModulesCall('OnEnable', 'enabled')
289 B:SetScript('OnUpdate', nil) 308 B:SetScript('OnUpdate', nil)
290 end 309 end
291
292 end) 310 end)
293 end 311 end
294
295 end 312 end
296 313
297 B.UpdateAll() 314 B.UpdateAll()
315
316 if event == 'PLAYER_ENTERING_WORLD' then
317 B.UpdateConfigLayers()
318 end
319
298 end) 320 end)
299 321
300 --- Modulizer method 322 --- Modulizer method
301 -- 323 --
302 function B:RegisterModule (name, module, ...) 324 function B:RegisterModule (name, module, ...)
331 353
332 354
333 B.SetConfigLayers = function(frame) 355 B.SetConfigLayers = function(frame)
334 local print = B.fprint() 356 local print = B.fprint()
335 if not frame.config then 357 if not frame.config then
336 print(frame:GetName(), 'has no config layers') 358 --print(frame:GetName(), 'has no config layers')
337 return 359 return
338 end 360 end
339 print('Registering config layers from', frame:GetName()) 361 --print('Registering config layers from', frame:GetName())
340 362
341 for i, subframe in ipairs(frame.config) do 363 for i, subframe in ipairs(frame.config) do
342 -- make sure there are no duplicates 364 -- make sure there are no duplicates
343 if not refs[subframe] then 365 if not refs[subframe] then
344 local key = #layers+1 366 local key = #layers+1
345 layers[key] = subframe 367 layers[key] = subframe
346 refs[subframe] = key 368 refs[subframe] = key
347 end 369 end
348 print(' ', i, subframe:GetName()) 370 --print(' ', i, subframe:GetName())
349 end 371 end
350 end 372 end
351 373
352 B.RemoveConfigLayers = function(frame) 374 B.RemoveConfigLayers = function(frame)
353 375
378 for i, anchorButton in ipairs(display.anchor.anchorButton) do 400 for i, anchorButton in ipairs(display.anchor.anchorButton) do
379 anchorButton:Hide() 401 anchorButton:Hide()
380 end 402 end
381 403
382 end 404 end
383 405 print(B.Conf.ConfigMode)
406 display.anchor:EnableMouse(B.Conf.ConfigMode)
384 end 407 end
385 for id, region in pairs(layers) do 408 for id, region in pairs(layers) do
386 print(id, region:GetName(), func) 409 print(id, region:GetName(), func)
387 region[func](region) 410 region[func](region)
388 end 411 end
389 412
390 print('['..func..'] updated', #layers, 'regions,', numAnchors, 'frames') 413 print('['..func..'] updated', #layers, 'regions,', numAnchors, 'frames')
391 end 414 end
392 415
416 local XMLFrame_SetEnabled = function(self, value)
417 local name = self:GetName()
418
419
420 if not B.Conf[name] then
421 B.Conf[name] = {
422 enabled = true
423 }
424 end
425
426 print()
427 local enabled
428 if value == nil then
429 if B.Conf[name].enabled == nil then
430 print('toggle based on visibility')
431 enabled = (not self:IsVisible()) and true or false
432 else
433 print('toggle a config value =', B.Conf[name].enabled)
434 enabled = B.Conf[name].enabled
435 end
436
437 enabled = (enabled ~= true) and true or false
438 else
439 print('use argument value', value)
440 enabled = value
441 end
442
443 print('arg =', value, 'conf =', B.Conf[name].enabled, 'result=', enabled)
444
445 B.Conf[name].enabled = enabled
446
447 local stateFunc = enabled and 'Show' or 'Hide'
448 local eventFunc = enabled and 'OnToggle' or 'OnToggle'
449 for i, region in pairs(self.toggled) do
450 region[stateFunc](region)
451 end
452 if self.OnToggle then
453 self:OnToggle(B.Conf[name].enabled)
454 end
455 if B.Conf[name].enabled then
456 if self.OnEnable then
457 self:OnEnable()
458 end
459 else
460 if self.OnDisable then
461 self:OnDisable()
462 end
463 end
464
465
466 end
393 --- Generic handlers for keeping track of XML-defined frames 467 --- Generic handlers for keeping track of XML-defined frames
394 B.OnLoad = function(self) 468 B.OnLoad = function(self)
395 tinsert(checkForConfig, self) 469 tinsert(checkForConfig, self)
396 self.Minimize = function(self, forceDown) 470 self.SetEnabled = XMLFrame_SetEnabled
397 if not self:IsVisible() then
398 return
399 end
400 local state = (forceDown and 1 or (B.Conf.FrameState[self:GetName()] == 1 and 2 or 1))
401 local stateFunc = (state == 1) and 'Hide' or 'Show'
402 for i, region in pairs(self.minimizeFrames) do
403 region[stateFunc](region)
404 end
405 B.Conf.FrameState[self:GetName()] = state
406 end
407 end 471 end
408 472
409 B.InitXMLFrame = function(self) 473 B.InitXMLFrame = function(self)
410 print('|cFF00FF00hello from '..self:GetName()) 474 local name = self:GetName()
475 print('|cFF00FF00hello from '.. name)
411 476
412 if self.drag then 477 if self.drag then
413 self:RegisterForDrag('LeftButton') 478 self:RegisterForDrag('LeftButton')
414 else 479 else
415 self:EnableMouse(false) 480 self:EnableMouse(false)
416 end 481 end
417 482
418 if not B.Conf.FramePosition then 483 if not B.Conf[name] then
419 B.Conf.FramePosition = {} 484 B.Conf[name] = {
420 end 485 enabled = true,
421 if not B.Conf.FrameState then 486 }
422 B.Conf.FrameState = {} 487 end
423 end 488 local c = B.Conf[name]
424 489
425 if B.Conf.FramePosition[self:GetName()] then 490 if c.position then
426 print('restoring frame position', unpack(B.Conf.FramePosition[self:GetName()])) 491 print('restoring frame position', unpack(c.position))
427 self:ClearAllPoints() 492 self:ClearAllPoints()
428 local anchorTo, relativePoint, x, y = unpack(B.Conf.FramePosition[self:GetName()]) 493 local anchorTo, relativePoint, x, y = unpack(c.position)
429 self:SetPoint(anchorTo, UIParent, relativePoint, x, y) 494 self:SetPoint(anchorTo, UIParent, relativePoint, x, y)
430 end 495 else
431 local state = B.Conf.FrameState[self:GetName()] and B.Conf.FrameState[self:GetName()] or 2 496 local a, _, b, c, d = self:GetPoint(1)
432 if state == 0 then 497 print('seeding default position', a, b, c, d)
433 self:Hide() 498 c.position = {a, b, c, d}
434 elseif state == 1 then 499 end
435 self.Minimize(self, true) 500 local state = c.enabled
436 elseif state == 2 then 501 self:SetEnabled(state)
437 self:Show()
438 end
439 B.Conf.FrameState[self:GetName()] = state
440 end 502 end
441 503
442 B.OnDragStart = function(self) 504 B.OnDragStart = function(self)
443 self.xA = self:GetLeft() 505 self.xA = self:GetLeft()
444 self.yA = self:GetBottom() 506 self.yA = self:GetBottom()
447 print(self:GetName(), 'start moving ('..self.x..', '..self.y..')') 509 print(self:GetName(), 'start moving ('..self.x..', '..self.y..')')
448 self:StartMoving() 510 self:StartMoving()
449 end 511 end
450 512
451 B.OnDragStop = function(self) 513 B.OnDragStop = function(self)
452 print(self:GetName(), 'stop moving ('..self:GetLeft()..', '..self:GetBottom()..')') 514 local name = self:GetName()
515 print(name, 'stop moving ('..self:GetLeft()..', '..self:GetBottom()..')')
453 local xB = self:GetLeft() - self.xA 516 local xB = self:GetLeft() - self.xA
454 local yB = self:GetBottom() - self.yA 517 local yB = self:GetBottom() - self.yA
455 print('storing anchor point', self.anchorTo, self.relativePoint, self.x + xB, self.y + yB) 518 print('storing anchor point', self.anchorTo, self.relativePoint, self.x + xB, self.y + yB)
456 519
457 self:StopMovingOrSizing() 520 self:StopMovingOrSizing()
458 B.Conf.FramePosition[self:GetName()] = {self.anchorTo, self.relativePoint, self.x + xB, self.y + yB} 521 B.Conf[name].position = {self.anchorTo, self.relativePoint, self.x + xB, self.y + yB}
459 B.InitXMLFrame(self) 522 B.InitXMLFrame(self)
460 523 end
461 end