-- rLib: core -- zork, 2016 ----------------------------- -- Variables ----------------------------- local A, L = ... L.addonName = A local mediapath = "interface\\addons\\"..A.."\\media\\" ----------------------------- -- rLib Global ----------------------------- rLib = {} rLib.addonName = A rLib.mediapath = mediapath ----------------------------- -- Functions ----------------------------- --copyTable local function copyTable(orig) local orig_type = type(orig) local copy if orig_type == 'table' then copy = {} for orig_key, orig_value in next, orig, nil do copy[copyTable(orig_key)] = copyTable(orig_value) end setmetatable(copy, copyTable(getmetatable(orig))) else -- number, string, boolean, etc copy = orig end return copy end rLib.CopyTable = copyTable --rLib:RegisterCallback function rLib:RegisterCallback(event, callback, ...) if not self.eventFrame then self.eventFrame = CreateFrame("Frame") function self.eventFrame:OnEvent(event, ...) for callback, args in next, self.callbacks[event] do callback(args, ...) end end self.eventFrame:SetScript("OnEvent", self.eventFrame.OnEvent) end if not self.eventFrame.callbacks then self.eventFrame.callbacks = {} end if not self.eventFrame.callbacks[event] then self.eventFrame.callbacks[event] = {} end self.eventFrame.callbacks[event][callback] = {...} self.eventFrame:RegisterEvent(event) end --rLib:CallElementFunction function rLib:CallElementFunction(element, func, ...) if element and func and element[func] then element[func](element, ...) end end --L:GetPoint function L:GetPoint(frame) if not frame then return end local point = {} point.a1, point.af, point.a2, point.x, point.y = frame:GetPoint() if point.af and point.af:GetName() then point.af = point.af:GetName() end return point end --L:GetSize function L:GetSize(frame) if not frame then return end local size = {} size.w, size.h = frame:GetWidth(), frame:GetHeight() return size end --L:ResetPoint function L:ResetPoint(frame) if not frame then return end if not frame.defaultPoint then return end if InCombatLockdown() then return end local point = frame.defaultPoint frame:ClearAllPoints() if point.af and point.a2 then frame:SetPoint(point.a1 or "CENTER", point.af, point.a2, point.x or 0, point.y or 0) elseif point.af then frame:SetPoint(point.a1 or "CENTER", point.af, point.x or 0, point.y or 0) else frame:SetPoint(point.a1 or "CENTER", point.x or 0, point.y or 0) end end --L:ResetSize function L:ResetSize(frame) if not frame then return end if not frame.defaultSize then return end if InCombatLockdown() then return end frame:SetSize(frame.defaultSize.w,frame.defaultSize.h) end --L:UnlockFrame function L:UnlockFrame(frame) if not frame then return end if not frame:IsUserPlaced() then return end if frame.frameVisibility then if frame.frameVisibilityFunc then UnregisterStateDriver(frame,frame.frameVisibilityFunc) end RegisterStateDriver(frame, "visibility", "show") end frame.dragFrame:Show() end --L:LockFrame function L:LockFrame(frame) if not frame then return end if not frame:IsUserPlaced() then return end if frame.frameVisibility then if frame.frameVisibilityFunc then UnregisterStateDriver(frame, "visibility") --hack to make it refresh properly, otherwise if you had state n (no vehicle exit button) it would not update properly because the state n is still in place RegisterStateDriver(frame, frame.frameVisibilityFunc, "zorkwashere") RegisterStateDriver(frame, frame.frameVisibilityFunc, frame.frameVisibility) else RegisterStateDriver(frame, "visibility", frame.frameVisibility) end end frame.dragFrame:Hide() end --L:UnlockFrames function L:UnlockFrames(frames,str) if not frames then return end for idx, frame in next, frames do self:UnlockFrame(frame) end print(str) end --L:LockFrames function L:LockFrames(frames,str) if not frames then return end for idx, frame in next, frames do self:LockFrame(frame) end print(str) end --L:ResetFrames function L:ResetFrames(frames,str) if not frames then return end if InCombatLockdown() then print("|c00FF0000ERROR:|r "..str.." not allowed while in combat!") return end for idx, frame in next, frames do self:ResetPoint(frame) self:ResetSize(frame) end print(str) end