vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local locals = KC_ITEMS_LOCALS

KC_ItemsModule = AceModule:new();

-- Module DB Closures. These use the addon's (KC_Items's) profilePath to ensure
-- that the proper profile will always get used.

function KC_ItemsModule:GetOpt(path, var)
        if (not var) then var = path; path = nil; end

        if (self.db) then
                local profilePath = path and {self.app.profilePath, path} or self.app.profilePath               
                return self.db:get(profilePath, var)
        else
                return self.app:GetOpt(path, var)               
        end
end

function KC_ItemsModule:SetOpt(path, var, val)
        if (not var) then val = var; var = path; path = nil; end

        if (self.db) then
                local profilePath = path and {self.app.profilePath, path} or self.app.profilePath               
                return self.db:set(profilePath, var, val)
        else
                return self.app:SetOpt(path, var, val)          
        end
end

function KC_ItemsModule:TogOpt(path, var)
        if (not var) then val = var; var = path; path = nil; end

        if (self.db) then
                local profilePath = path and {self.app.profilePath, path} or self.app.profilePath               
                return self.db:toggle(profilePath, var)
        else
                return self.app:TogOpt(path, var)               
        end
end

function KC_ItemsModule:ClearOpt(path, var)
        if (not var) then var = path; path = nil; end

        if (self.db) then
                local profilePath = path and {self.app.profilePath, path} or self.app.profilePath               
                return self.db:set(profilePath, var)
        else
                return self.app:ClearOpt(path, var)             
        end
end


-- Command Reporting Closures

function KC_ItemsModule:Msg(...)
        self.app:Msg(unpack(arg))
end

function KC_ItemsModule:Result(text, val, map)
        self.app:Result(text, val, map)
end

function KC_ItemsModule:TogMsg(var, text)
        local val = self:TogOpt(var)
        self.app:Result(text, val, locals.maps.onOff)
        return val
end

function KC_ItemsModule:Error(...)
        self.app:Error(unpack(arg))
end


-- Enabling/Disabling

function KC_ItemsModule:Register()
        self.disabled = TRUE
        self:RegisterEvent("KC_ITEMS_LOADED")
        self:RegisterEvent("KC_ITEMS_ENABLED")
end

function KC_ItemsModule:KC_ITEMS_LOADED()
        self:debug("KC_Items Loaded")
        if( self.db ) then self.db:Initialize() end
end

function KC_ItemsModule:KC_ITEMS_ENABLED()
        self:CheckEnable()
        self:RegisterEvent("KC_ITEMS_DISABLED")
        self:debug("KC_Items Enabled")
end

function KC_ItemsModule:KC_ITEMS_DISABLED()
        self:Disable()
        self:debug("KC_Items Disabled")
end

function KC_ItemsModule:KC_ITEMS_MODULE_ENABLED()
        if( self.disabled and self:CheckDependencies() ) then self:CheckEnable() end
end

function KC_ItemsModule:KC_ITEMS_MODULE_DISABLED()
        if( self.disabled ) then return end
        if( not self:CheckDependencies() ) then self:Disable() end
end

function KC_ItemsModule:CheckDependencies()
        if( not self.dependencies ) then return TRUE end

        local _, dep
        for _, dep in self.dependencies do
                if( (not self.app.modules[dep]) or
                        (not self.app:ModEnabled(self.app.modules[dep]))
                ) then
                        return
                end
        end

        return TRUE
end

function KC_ItemsModule:CheckEnable(force)
        if( (not self.app.disabled) and (self.app:ModEnabled(self) or force) and
                self:CheckDependencies()
        ) then
                self:Enable()
                self.disabled = FALSE
                self:TriggerEvent("KC_ITEMS_MODULE_ENABLED")
                self:RegisterEvent("KC_ITEMS_DISABLED")
                self:RegisterEvent("KC_ITEMS_MODULE_DISABLED")
                return TRUE
        end
end


-- Should be overridden
function KC_ItemsModule:Enable() end

function KC_ItemsModule:Disable()
        self:UnregisterAllEvents()
        self:UnhookAll()
        self.disabled = TRUE
        self:TriggerEvent("KC_ITEMS_MODULE_DISABLED")
        self:RegisterEvent("KC_ITEMS_ENABLED")
        self:RegisterEvent("KC_ITEMS_MODULE_ENABLED")
end


-- Common Module Command Handlers

function KC_ItemsModule:Toggle()
        if( self.app:ModEnabled(self) ) then
                self.app:SetModState(self, FALSE)
                self:Disable()
                self:Result(self.name, nil, locals.maps.enabled)
        elseif( self:CheckEnable(TRUE)) then
                self.app:SetModState(self, TRUE)
                self:Result(self.name, TRUE, locals.maps.enabled)
        else
                self:Msg(format(locals.err.modEnable, self.name))
                self:Msg(format(locals.err.needs, self.name, table.concat(self.dependencies, ", ")))
        end
end

Generated by GNU Enscript 1.6.5.90.