This repository has been archived by the owner on Sep 11, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 43
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Revert "Make core class using Poncho"
This reverts commit ee7e857.
- Loading branch information
João Cardoso
committed
Apr 1, 2017
1 parent
ee7e857
commit cea31d9
Showing
1 changed file
with
66 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,75 +1,91 @@ | ||
--[[ | ||
classes.lua | ||
Base class used by all UI components and custom event broadcast system | ||
Utility method for constructing object classes and messaging between them | ||
--]] | ||
local ADDON, Addon = ... | ||
local CreateClass = LibStub('Poncho-1.0') | ||
local Base = CreateClass() | ||
local Mixins = {'RegisterEvent', 'UnregisterEvent', 'UnregisterEvents', 'RegisterMessage', 'UnregisterMessage', 'UnregisterMessages', 'SendMessage'} | ||
local Messages = {} | ||
LibStub('AceAddon-3.0'):NewAddon(Addon, ADDON, 'AceEvent-3.0') | ||
Addon.SendCall = LibStub('CallbackHandler-1.0'):New(Addon, 'RegisterCall', 'UnregisterCall', 'UnregisterCalls').Fire | ||
LibStub('AceAddon-3.0'):NewAddon(Addon, ADDON, 'AceEvent-3.0', 'AceConsole-3.0') | ||
Addon.SendMessage = LibStub('CallbackHandler-1.0'):New(Messages, 'RegisterMessage', 'UnregisterMessage', 'UnregisterMessages').Fire | ||
Addon.Cache = LibStub('LibItemCache-1.1') | ||
function Addon:NewClass(name, type, xml, parent) | ||
local class = CreateClass(type, ADDON .. className, nil, xml, parent or Base) | ||
self[name] = class | ||
return class | ||
for key, func in pairs(Messages) do | ||
Addon[key] = func | ||
end | ||
--[[ Base Methods ]]-- | ||
--[[ API ]]-- | ||
function Addon:NewClass(name, type, parent) | ||
local class = CreateFrame(type) | ||
class.__index = class | ||
class.Name = name | ||
class:Hide() | ||
if parent then | ||
class = setmetatable(class, parent) | ||
class.__super = parent | ||
else | ||
class.Bind = function(self, obj) | ||
return setmetatable(obj, self) | ||
end | ||
function Base:UnregisterEvents() | ||
self:UnregisterAllEvents() | ||
self:UnregisterCalls() | ||
end | ||
class.RegisterFrameMessage = function(self, msg, ...) | ||
self:RegisterMessage(self:GetFrameID() .. msg, ...) | ||
end | ||
function Base:RegisterFrameCall (msg, ...) | ||
self:RegisterCall(self:GetFrameID() .. msg, ...) | ||
end | ||
class.UnregisterFrameMessage = function(self, msg, ...) | ||
self:UnregisterMessage(self:GetFrameID() .. msg, ...) | ||
end | ||
function Base:UnregisterFrameCall (msg, ...) | ||
self:UnregisterCall(self:GetFrameID() .. msg, ...) | ||
end | ||
class.SendFrameMessage = function(self, msg, ...) | ||
self:SendMessage(self:GetFrameID() .. msg, ...) | ||
end | ||
function Base:SendFrameCall (msg, ...) | ||
self:SendCall(self:GetFrameID() .. msg, ...) | ||
end | ||
class.GetFrameID = function(self) | ||
local frame = self:GetFrame() | ||
return frame and frame.frameID | ||
end | ||
function Base:GetFrameID () | ||
local frame = self:GetFrame() | ||
return frame and frame.frameID | ||
end | ||
class.GetProfile = function(self) | ||
local frame = self:GetFrame() | ||
return frame and frame:GetProfile() | ||
end | ||
function Base:GetProfile () | ||
local frame = self:GetFrame() | ||
return frame and frame:GetProfile() | ||
end | ||
class.GetPlayer = function(self) | ||
local frame = self:GetFrame() | ||
return frame and frame:GetPlayer() | ||
end | ||
function Base:GetPlayer () | ||
local frame = self:GetFrame() | ||
return frame and frame:GetPlayer() | ||
end | ||
class.IsCached = function(self) | ||
local frame = self:GetFrame() | ||
return frame and frame:IsCached() | ||
end | ||
function Base:IsCached () | ||
local frame = self:GetFrame() | ||
return frame and frame:IsCached() | ||
end | ||
class.GetFrame = function(self) | ||
if not self.frame then -- loop of doom, do only once | ||
local parent = self:GetParent() | ||
while parent and not parent.frameID do | ||
parent = parent:GetParent() | ||
end | ||
function Base:GetFrame () | ||
if not self.frame then -- loop of doom, do only once | ||
local parent = self:GetParent() | ||
while parent and not parent.frameID do | ||
parent = parent:GetParent() | ||
self.frame = parent | ||
end | ||
return self.frame | ||
end | ||
self.frame = parent | ||
for i, func in ipairs(Mixins) do | ||
class[func] = self[func] | ||
end | ||
end | ||
return self.frame | ||
self[name] = class | ||
return class | ||
end | ||
Base.SendCall = Addon.SendCall | ||
Base.RegisterCall = Addon.RegisterCall | ||
Base.UnregisterCall = Addon.UnregisterCall | ||
Base.UnregisterCalls = Addon.UnregisterCalls | ||
function Addon:UnregisterEvents() | ||
Addon.UnregisterAllEvents(self) | ||
Addon.UnregisterMessages(self) | ||
end |