Mercurial > wow > buffalo2
comparison Veneer.lua @ 109:26938ae258b7
- Re-use the basic addon table for core mixin
- add /rl command
| author | Nick@Zahhak |
|---|---|
| date | Mon, 06 Mar 2017 02:30:22 -0500 |
| parents | a41f6b74709a |
| children | 7c77fde36287 |
comparison
equal
deleted
inserted
replaced
| 108:a41f6b74709a | 109:26938ae258b7 |
|---|---|
| 2 -- 1. vn OnLoad | 2 -- 1. vn OnLoad |
| 3 -- 2. OnEvent where IsLoggedIn() == true | 3 -- 2. OnEvent where IsLoggedIn() == true |
| 4 -- 3. Setup() where (not self.initialized) | 4 -- 3. Setup() where (not self.initialized) |
| 5 -- 4. Update() | 5 -- 4. Update() |
| 6 -- 5. Reanchor() | 6 -- 5. Reanchor() |
| 7 | 7 local ADDON, Veneer = ... |
| 8 SLASH_VENEER1 = "/veneer" | |
| 9 SLASH_VENEER2 = "/vn" | |
| 10 local VENEER_VERSION = 703 | 8 local VENEER_VERSION = 703 |
| 11 local LE_FREE_FRAMES_GROUP = 1 | 9 local LE_FREE_FRAMES_GROUP = 1 |
| 12 local type, strrep, ipairs, tinsert, tostring, select = type, string.rep, ipairs, tinsert, tostring, select | 10 local type, strrep, ipairs, tinsert, tostring, select = type, string.rep, ipairs, tinsert, tostring, select |
| 13 local pairs, tremove = pairs, tremove | 11 local pairs, tremove = pairs, tremove |
| 14 | 12 local print = DEVIAN_WORKSPACE and function(...) _G.print('Veneer', ...) end or nop |
| 13 local wipe = table.wipe | |
| 14 | |
| 15 SLASH_VENEER1 = "/veneer" | |
| 16 SLASH_VENEER2 = "/vn" | |
| 15 SlashCmdList.VENEER = function(cmd) | 17 SlashCmdList.VENEER = function(cmd) |
| 16 | |
| 17 if Veneer.ConfigMode then | 18 if Veneer.ConfigMode then |
| 18 Veneer.ConfigMode = false | 19 Veneer.ConfigMode = false |
| 19 else | 20 else |
| 20 Veneer.ConfigMode = true | 21 Veneer.ConfigMode = true |
| 21 end | 22 end |
| 22 Veneer:UpdateConfigLayers() | 23 Veneer:UpdateConfigLayers() |
| 23 end | 24 end |
| 24 | 25 |
| 25 VeneerCore = { | 26 Veneer.Frames = {} |
| 26 Frames = {}, | 27 Veneer.ConfigLayers = {} |
| 27 ConfigLayers = {}, | 28 Veneer.FrameClusters = { |
| 28 FrameClusters = { | 29 [LE_FREE_FRAMES_GROUP] = {} |
| 29 [LE_FREE_FRAMES_GROUP] = {}, | 30 } |
| 30 }, | 31 Veneer.parserDepth = 0 |
| 31 parserDepth = 0, | 32 Veneer.pendingCalls = {} |
| 32 pendingCalls = {}, | 33 Veneer.AddOnCheck = {} |
| 33 AddOnCheck = {} | |
| 34 } | |
| 35 | |
| 36 local print = DEVIAN_WORKSPACE and function(...) _G.print('Veneer', ...) end or nop | |
| 37 local wipe = table.wipe | |
| 38 | 34 |
| 39 local defaults = { | 35 local defaults = { |
| 40 enableAll = true, | 36 enableAll = true, |
| 41 ConfigMode = true | 37 ConfigMode = true |
| 42 } | 38 } |
| 82 BOTTOMRIGHT = {-1, 1}, | 78 BOTTOMRIGHT = {-1, 1}, |
| 83 RIGHT = {-1, 0}, | 79 RIGHT = {-1, 0}, |
| 84 CENTER = {0, 0}, | 80 CENTER = {0, 0}, |
| 85 } | 81 } |
| 86 | 82 |
| 87 function VeneerCore:print(...) | 83 function Veneer:print(...) |
| 88 local txt = '|cFFFFFF00Veneer|r:' | 84 local txt = '|cFFFFFF00Veneer|r:' |
| 89 for i = 1, select('#', ...) do | 85 for i = 1, select('#', ...) do |
| 90 txt = txt .. ' '.. tostring(select(i, ...)) | 86 txt = txt .. ' '.. tostring(select(i, ...)) |
| 91 end | 87 end |
| 92 | 88 |
| 93 DEFAULT_CHAT_FRAME:AddMessage(txt) | 89 DEFAULT_CHAT_FRAME:AddMessage(txt) |
| 94 end | 90 end |
| 95 | 91 |
| 96 function VeneerCore:OnLoad() | 92 function Veneer:OnLoad() |
| 97 print('|cFFFFFF00Veneer!|r') | 93 print('|cFFFFFF00Veneer!|r') |
| 98 self:RegisterEvent('ADDON_LOADED') | 94 self:RegisterEvent('ADDON_LOADED') |
| 99 self:RegisterEvent('PLAYER_LOGIN') | 95 self:RegisterEvent('PLAYER_LOGIN') |
| 100 | 96 |
| 101 self.DEVIAN_PNAME = 'Veneer' | 97 self.DEVIAN_PNAME = 'Veneer' |
| 104 | 100 |
| 105 end | 101 end |
| 106 | 102 |
| 107 local select, IsAddOnLoaded, IsLoggedIn = select, IsAddOnLoaded, IsLoggedIn | 103 local select, IsAddOnLoaded, IsLoggedIn = select, IsAddOnLoaded, IsLoggedIn |
| 108 | 104 |
| 109 function VeneerCore:OnEvent(event, ...) | 105 function Veneer:OnEvent(event, ...) |
| 110 print('|cFFFF0088OnEvent()|r',event, ...) | 106 print('|cFFFF0088OnEvent()|r',event, ...) |
| 111 if (event == 'PLAYER_LOGIN') or (event == 'ADDON_LOADED') then | 107 if (event == 'PLAYER_LOGIN') or (event == 'ADDON_LOADED') then |
| 112 print(IsLoggedIn(), self.initialized) | 108 print(IsLoggedIn(), self.initialized) |
| 113 if IsLoggedIn() and not self.intialized then | 109 if IsLoggedIn() and not self.intialized then |
| 114 self:Setup() | 110 self:Setup() |
| 136 end | 132 end |
| 137 end | 133 end |
| 138 end | 134 end |
| 139 end | 135 end |
| 140 | 136 |
| 141 function VeneerCore:OnDragStart() | 137 function Veneer:OnDragStart() |
| 142 self:StartMoving() | 138 self:StartMoving() |
| 143 end | 139 end |
| 144 | 140 |
| 145 function VeneerCore:OnDragStop() | 141 function Veneer:OnDragStop() |
| 146 self:StopMovingOrSizing() | 142 self:StopMovingOrSizing() |
| 147 end | 143 end |
| 148 | 144 |
| 149 local VeneerModule_Setup = function(frame) | 145 local VeneerModule_Setup = function(frame) |
| 150 if not frame.initialized then | 146 if not frame.initialized then |
| 152 print(' '..frame:GetName()..'.doSetup =', doSetup) | 148 print(' '..frame:GetName()..'.doSetup =', doSetup) |
| 153 if doSetup then | 149 if doSetup then |
| 154 frame:Setup() | 150 frame:Setup() |
| 155 frame.initialized = true | 151 frame.initialized = true |
| 156 else | 152 else |
| 157 Veneer:RegisterEvent('ADDON_LOADED') | 153 frame:RegisterEvent('ADDON_LOADED') |
| 158 end | 154 end |
| 159 | 155 |
| 160 end | 156 end |
| 161 end | 157 end |
| 162 | 158 |
| 163 function VeneerCore:Setup () | 159 function Veneer:Setup () |
| 164 print('|cFFFF0088Setup()|r') | 160 print('|cFFFF0088Setup()|r') |
| 165 local resetConfig = (not VeneerData) | 161 local resetConfig = (not VeneerData) |
| 166 if (not VeneerData) then | 162 if (not VeneerData) then |
| 167 VeneerData = defaults | 163 VeneerData = defaults |
| 168 VeneerData.version = VENEER_VERSION | 164 VeneerData.version = VENEER_VERSION |
| 174 self:UpdateConfigLayers() | 170 self:UpdateConfigLayers() |
| 175 self:Reanchor() | 171 self:Reanchor() |
| 176 self:Update() | 172 self:Update() |
| 177 end | 173 end |
| 178 | 174 |
| 179 function VeneerCore:UpdateConfigLayers() | 175 function Veneer:UpdateConfigLayers() |
| 180 if VeneerData then | 176 if VeneerData then |
| 181 | 177 |
| 182 VeneerData.ConfigMode = self.ConfigMode | 178 VeneerData.ConfigMode = self.ConfigMode |
| 183 end | 179 end |
| 184 | 180 |
| 206 end | 202 end |
| 207 end) | 203 end) |
| 208 end | 204 end |
| 209 | 205 |
| 210 | 206 |
| 211 function VeneerCore:GetClusterFromArgs (...) | 207 function Veneer:GetClusterFromArgs (...) |
| 212 local primaryAnchor | 208 local primaryAnchor |
| 213 local insertPosition | 209 local insertPosition |
| 214 local insertPriority | 210 local insertPriority |
| 215 | 211 |
| 216 | 212 |
| 262 end | 258 end |
| 263 return primaryAnchor, clusterTable, insertPosition | 259 return primaryAnchor, clusterTable, insertPosition |
| 264 end | 260 end |
| 265 | 261 |
| 266 -- args: frame object, list of anchor groups, true for forced top, number for priority layer | 262 -- args: frame object, list of anchor groups, true for forced top, number for priority layer |
| 267 function VeneerCore:AddHandler(handler, ...) | 263 function Veneer:AddHandler(handler, ...) |
| 268 print('|cFFFFFF00*** Adding handler:', handler.moduleName or handler:GetName()) | 264 print('|cFFFFFF00*** Adding handler:', handler.moduleName or handler:GetName()) |
| 269 | 265 |
| 270 | 266 |
| 271 for k,v in pairs(VeneerHandlerMixin) do | 267 for k,v in pairs(VeneerHandlerMixin) do |
| 272 if not handler[k] then | 268 if not handler[k] then |
| 317 end | 313 end |
| 318 end | 314 end |
| 319 end | 315 end |
| 320 end | 316 end |
| 321 | 317 |
| 322 function VeneerCore:Reanchor() | 318 function Veneer:Reanchor() |
| 323 self:ExecuteOnClusters(nil, 'Reanchor') | 319 self:ExecuteOnClusters(nil, 'Reanchor') |
| 324 self:DynamicReanchor(self) | 320 self:DynamicReanchor(self) |
| 325 end | 321 end |
| 326 | 322 |
| 327 function VeneerCore:Update() | 323 function Veneer:Update() |
| 328 self:ExecuteOnClusters(nil, function(frame) | 324 self:ExecuteOnClusters(nil, function(frame) |
| 329 if frame.initialized and frame.Update then | 325 if frame.initialized and frame.Update then |
| 330 frame:Update() | 326 frame:Update() |
| 331 end | 327 end |
| 332 end) | 328 end) |
| 333 self:Reanchor() | 329 self:Reanchor() |
| 334 end | 330 end |
| 335 | 331 |
| 336 -- updates anchor relations to and from the target handler | 332 -- updates anchor relations to and from the target handler |
| 337 function VeneerCore:GetAnchor(...) | 333 function Veneer:GetAnchor(...) |
| 338 | 334 |
| 339 end | 335 end |
| 340 | 336 |
| 341 -- Evaluates frames visibility and chains them accordingly | 337 -- Evaluates frames visibility and chains them accordingly |
| 342 | 338 |
| 343 function VeneerCore:DynamicReanchor(parent) | 339 function Veneer:DynamicReanchor(parent) |
| 344 parent = parent or self | 340 parent = parent or self |
| 345 print('|cFF88FF00DynamicReanchor()') | 341 print('|cFF88FF00DynamicReanchor()') |
| 346 for anchorPoint, cluster in pairs(parent.FrameClusters) do | 342 for anchorPoint, cluster in pairs(parent.FrameClusters) do |
| 347 if anchorPoint ~= LE_FREE_FRAMES_GROUP then | 343 if anchorPoint ~= LE_FREE_FRAMES_GROUP then |
| 348 local lastFrame | 344 local lastFrame |
| 373 | 369 |
| 374 end | 370 end |
| 375 end | 371 end |
| 376 | 372 |
| 377 -- Evaluates the current visibility state and re-anchors adjacent blocks accordingly | 373 -- Evaluates the current visibility state and re-anchors adjacent blocks accordingly |
| 378 function VeneerCore:InternalReanchor(handler, printFunc) | 374 function Veneer:InternalReanchor(handler, printFunc) |
| 379 print('|cFF00FFFFVeneer:InternalReanchor('..handler:GetName()..')') | 375 print('|cFF00FFFFVeneer:InternalReanchor('..handler:GetName()..')') |
| 380 if handler.anchorFrame then | 376 if handler.anchorFrame then |
| 381 handler:SetPoint(handler.anchorPoint, handler.anchorFrame, handler.anchorFrom, handler.anchorX, handler.anchorY) | 377 handler:SetPoint(handler.anchorPoint, handler.anchorFrame, handler.anchorFrom, handler.anchorX, handler.anchorY) |
| 382 return | 378 return |
| 383 end | 379 end |
| 422 if printFunc then | 418 if printFunc then |
| 423 printFunc('|cFF88FF00'..handler:GetName()..':SetPoint(', handler.anchorPoint, anchorParent, anchorTo) | 419 printFunc('|cFF88FF00'..handler:GetName()..':SetPoint(', handler.anchorPoint, anchorParent, anchorTo) |
| 424 end | 420 end |
| 425 end | 421 end |
| 426 | 422 |
| 427 function VeneerCore:SlideBlock(frame, ...) | 423 function Veneer:SlideBlock(frame, ...) |
| 428 local aX, aY = frame:GetLeft(), frame:GetTop() | 424 local aX, aY = frame:GetLeft(), frame:GetTop() |
| 429 | 425 |
| 430 frame:SetPoint('TOPLEFT', frame, 'BOTTOMLEFT', aX, aY) | 426 frame:SetPoint('TOPLEFT', frame, 'BOTTOMLEFT', aX, aY) |
| 431 frame.animation = frame.animation or {} | 427 frame.animation = frame.animation or {} |
| 432 frame.animation.startX = aX | 428 frame.animation.startX = aX |
| 439 end) | 435 end) |
| 440 | 436 |
| 441 end | 437 end |
| 442 | 438 |
| 443 | 439 |
| 444 function VeneerCore:ExecuteOnClusters(layer, method) | 440 function Veneer:ExecuteOnClusters(layer, method) |
| 445 self.parserDepth = self.parserDepth + 1 | 441 self.parserDepth = self.parserDepth + 1 |
| 446 if not layer then | 442 if not layer then |
| 447 if self.parserDepth > 1 then | 443 if self.parserDepth > 1 then |
| 448 tinsert(self.pendingCalls, method) | 444 tinsert(self.pendingCalls, method) |
| 449 print('delaying walk for', method) | 445 print('delaying walk for', method) |
| 479 end | 475 end |
| 480 | 476 |
| 481 | 477 |
| 482 | 478 |
| 483 -- Takes frame handle and assigns a block to it | 479 -- Takes frame handle and assigns a block to it |
| 484 function VeneerCore:Acquire (frame, template) | 480 function Veneer:Acquire (frame, template) |
| 485 if not frame then | 481 if not frame then |
| 486 print('|cFFFF4400Unable to acquire frame...|r') | 482 print('|cFFFF4400Unable to acquire frame...|r') |
| 487 return | 483 return |
| 488 end | 484 end |
| 489 local veneer = self.Frames[frame] | 485 local veneer = self.Frames[frame] |
| 503 veneer.currentTop = frame:GetTop() | 499 veneer.currentTop = frame:GetTop() |
| 504 self.Frames[frame] = veneer | 500 self.Frames[frame] = veneer |
| 505 end | 501 end |
| 506 return veneer | 502 return veneer |
| 507 end | 503 end |
| 504 | |
| 505 VeneerCore = Veneer |
