Mercurial > wow > buffalo2
comparison Veneer.lua @ 108:a41f6b74709a
- Handler number and boolean cluster arguments as positioning priority layer and "always top" respectively
- Use SetShown and IsShown instead of IsVisible in doing full re-anchor checks
author | Nick@Zahhak |
---|---|
date | Sat, 25 Feb 2017 11:42:07 -0500 |
parents | ff00679a7817 |
children | 26938ae258b7 |
comparison
equal
deleted
inserted
replaced
107:ff00679a7817 | 108:a41f6b74709a |
---|---|
209 | 209 |
210 | 210 |
211 function VeneerCore:GetClusterFromArgs (...) | 211 function VeneerCore:GetClusterFromArgs (...) |
212 local primaryAnchor | 212 local primaryAnchor |
213 local insertPosition | 213 local insertPosition |
214 | 214 local insertPriority |
215 | 215 |
216 | 216 |
217 local clusterTable = self.FrameClusters | 217 local clusterTable = self.FrameClusters |
218 for i = 1, select('#', ...) do | 218 for i = 1, select('#', ...) do |
219 local arg = select(i, ...) | 219 local arg = select(i, ...) |
224 end | 224 end |
225 clusterTable[arg] = clusterTable[arg] or {} | 225 clusterTable[arg] = clusterTable[arg] or {} |
226 clusterTable = clusterTable[arg] | 226 clusterTable = clusterTable[arg] |
227 print(strrep(' ', i)..'anchor cluster', i, arg) | 227 print(strrep(' ', i)..'anchor cluster', i, arg) |
228 elseif argType == 'boolean' then | 228 elseif argType == 'boolean' then |
229 insertPosition = 1 | 229 if arg == true then |
230 end | 230 print('force top position') |
231 end | 231 insertPosition = 1 |
232 insertPriority = nil | |
233 end | |
234 elseif argType == 'number' then | |
235 insertPriority = arg | |
236 end | |
237 end | |
238 | |
239 if insertPriority then | |
240 for i = 1, #clusterTable do | |
241 if clusterTable[i].anchorPriority and (clusterTable[i].anchorPriority > insertPriority) then | |
242 print('prioritized insert position:', insertPriority, insertPosition) | |
243 break | |
244 else | |
245 print('passing lower priority frame:', clusterTable[i]:GetName()) | |
246 end | |
247 insertPosition = i | |
248 end | |
249 end | |
250 | |
251 | |
232 if not primaryAnchor then | 252 if not primaryAnchor then |
233 primaryAnchor = 'CENTER' | 253 primaryAnchor = 'CENTER' |
234 clusterTable[primaryAnchor] = clusterTable[primaryAnchor] or {} | 254 clusterTable[primaryAnchor] = clusterTable[primaryAnchor] or {} |
235 clusterTable = clusterTable[primaryAnchor] | 255 clusterTable = clusterTable[primaryAnchor] |
236 end | 256 print('using default anchor') |
257 end | |
258 | |
237 if not insertPosition then | 259 if not insertPosition then |
238 insertPosition = #clusterTable + 1 | 260 insertPosition = #clusterTable + 1 |
261 print('using default position') | |
239 end | 262 end |
240 return primaryAnchor, clusterTable, insertPosition | 263 return primaryAnchor, clusterTable, insertPosition |
241 end | 264 end |
242 | 265 |
266 -- args: frame object, list of anchor groups, true for forced top, number for priority layer | |
243 function VeneerCore:AddHandler(handler, ...) | 267 function VeneerCore:AddHandler(handler, ...) |
244 print('|cFFFFFF00*** Adding handler:', handler.moduleName or handler:GetName()) | 268 print('|cFFFFFF00*** Adding handler:', handler.moduleName or handler:GetName()) |
245 | 269 |
270 | |
271 for k,v in pairs(VeneerHandlerMixin) do | |
272 if not handler[k] then | |
273 print(' * from mixin:', k) | |
274 handler[k] = v | |
275 end | |
276 end | |
277 | |
246 if not handler.anchorFrame then | 278 if not handler.anchorFrame then |
247 local anchorGroup, clusterTable, clusterIndex = self:GetClusterFromArgs(...) | 279 local anchorGroup, clusterTable, clusterIndex, clusterPriority = self:GetClusterFromArgs(...) |
248 if clusterIndex == 1 then | 280 if clusterIndex == 1 then |
249 for i, frame in ipairs(clusterTable) do | 281 for i, frame in ipairs(clusterTable) do |
250 frame.clusterIndex = i + 1 | 282 frame.clusterIndex = i + 1 |
251 end | 283 end |
252 end | 284 end |
261 handler.anchorIndex = #clusterTable+1 | 293 handler.anchorIndex = #clusterTable+1 |
262 tinsert(clusterTable, handler.anchorIndex, handler) | 294 tinsert(clusterTable, handler.anchorIndex, handler) |
263 print(' free frame') | 295 print(' free frame') |
264 end | 296 end |
265 | 297 |
266 for k,v in pairs(VeneerHandlerMixin) do | |
267 if not handler[k] then | |
268 print(' * from mixin:', k) | |
269 handler[k] = v | |
270 end | |
271 end | |
272 | |
273 if handler.addonTrigger and not IsAddOnLoaded(handler.addonTrigger) then | 298 if handler.addonTrigger and not IsAddOnLoaded(handler.addonTrigger) then |
274 print('|cFFFF4400 -- dependency:', handler.addonTrigger) | 299 print('|cFFFF4400 -- dependency:', handler.addonTrigger) |
275 self.AddOnCheck[handler.addonTrigger] = self.AddOnCheck[handler.addonTrigger] or {} | 300 self.AddOnCheck[handler.addonTrigger] = self.AddOnCheck[handler.addonTrigger] or {} |
276 tinsert(self.AddOnCheck[handler.addonTrigger], handler) | 301 tinsert(self.AddOnCheck[handler.addonTrigger], handler) |
277 end | 302 end |
320 print('|cFF88FF00DynamicReanchor()') | 345 print('|cFF88FF00DynamicReanchor()') |
321 for anchorPoint, cluster in pairs(parent.FrameClusters) do | 346 for anchorPoint, cluster in pairs(parent.FrameClusters) do |
322 if anchorPoint ~= LE_FREE_FRAMES_GROUP then | 347 if anchorPoint ~= LE_FREE_FRAMES_GROUP then |
323 local lastFrame | 348 local lastFrame |
324 for index, frame in ipairs(cluster) do | 349 for index, frame in ipairs(cluster) do |
325 print(' |cFF00FF00'..index, frame:GetName(), frame:IsVisible(), (lastFrame and ('|cFFFFFF00'..lastFrame:GetName()..'|r') or '|cFF00FFFFUIParent')) | 350 print(' |cFF00FF00'..index, frame:GetName(), frame:IsShown(), (lastFrame and ('|cFFFFFF00'..lastFrame:GetName()..'|r') or '|cFF00FFFFUIParent')) |
326 if frame:IsVisible() then | 351 if frame:IsShown() then |
327 | 352 |
328 if frame.anchorFrame then | 353 if frame.anchorFrame then |
329 print(frame.anchorPoint) | 354 print(frame.anchorPoint) |
330 frame:SetPoint(frame.anchorPoint, frame.anchorFrame, frame.anchorFrom, frame.anchorX, frame.anchorY) | 355 frame:SetPoint(frame.anchorPoint, frame.anchorFrame, frame.anchorFrom, frame.anchorX, frame.anchorY) |
331 print(frame:GetTop(), frame:GetRight()) | 356 print(frame:GetTop(), frame:GetRight()) |
362 local anchorParent, anchorTo = UIParent, anchorPoint | 387 local anchorParent, anchorTo = UIParent, anchorPoint |
363 local subPoint, subTo | 388 local subPoint, subTo |
364 local nextFrame | 389 local nextFrame |
365 for index, frame in ipairs(handler.anchorCluster) do | 390 for index, frame in ipairs(handler.anchorCluster) do |
366 print(' |cFF00FF00'..index, frame:GetName(), frame:IsVisible()) | 391 print(' |cFF00FF00'..index, frame:GetName(), frame:IsVisible()) |
367 if frame:IsVisible() then | 392 if frame:IsShown() then |
368 if frame ~= handler then | 393 if frame ~= handler then |
369 anchorParent = frame | 394 anchorParent = frame |
370 anchorTo = ANCHOR_OFFSET_POINT[anchorPoint] | 395 anchorTo = ANCHOR_OFFSET_POINT[anchorPoint] |
371 | 396 |
372 else | 397 else |
382 break | 407 break |
383 end | 408 end |
384 end | 409 end |
385 end | 410 end |
386 | 411 |
387 if handler:IsVisible() then | 412 if handler:IsShown() then |
388 handler:SetPoint(anchorPoint, anchorParent, anchorTo, 0, 0) | 413 handler:SetPoint(anchorPoint, anchorParent, anchorTo, 0, 0) |
389 else | 414 else |
390 if anchorParent and nextFrame then | 415 if anchorParent and nextFrame then |
391 nextFrame:SetPoint(subPoint, handler, subTo, 0, 0) | 416 nextFrame:SetPoint(subPoint, handler, subTo, 0, 0) |
392 end | 417 end |