diff DependencyLoader/DependencyLoader.lua @ 10:e0a4a8b5b389

lots more modifications...
author mckenziemc
date Sun, 05 Dec 2010 03:10:07 -0800
parents DependencyLoader/frontend.lua@5362e308c3eb
children b230b94d4487
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DependencyLoader/DependencyLoader.lua	Sun Dec 05 03:10:07 2010 -0800
@@ -0,0 +1,99 @@
+--	DependencyLoader
+--	
+
+local addonName, addonTable = ...
+
+
+local DependencyLoader = LibStub("AceAddon-3.0"):NewAddon(addonName, "AceHook-3.0")
+_G[addonName] = DependencyLoader
+
+addonTable.interface = DependencyLoader
+
+
+local libPrint = LibStub("LibPrint-1.0")
+local LibScriptLink = LibStub("LibScriptLink-1.0")
+
+DependencyLoader.printStream = libPrint:NewStream("DependencyLoader", "DpLdr", print)
+DependencyLoader.debugStream = libPrint:NewStream("DependencyLoader", "DpLdr", "mcm")
+
+
+function DependencyLoader:Print(...)
+	self.printStream:Print(...)
+end
+
+
+function DependencyLoader:Debug(...)
+	self.debugStream:Print(...)
+end
+
+
+function DependencyLoader:OnInitialize()
+	self:Debug("Initializing", addonName)
+	self:Enable()
+end
+
+
+function DependencyLoader:OnEnable()
+	self:Print("Enabled", addonName)
+	
+	self:Hook("EnableAddOn", true)
+	
+	self:FixCurrentAddons()
+end
+
+
+function DependencyLoader:OnDisable()
+	self:Print("Disabled", addonName)
+end
+
+
+--	Does not consider user settings or addon errata.
+function DependencyLoader:IsForceLoadAvailable()
+	return IsLoggedIn() and true or false
+end
+
+
+function DependencyLoader:IsForceLoadAllowed()
+	--	TODO: check user settings
+	return true
+end
+
+
+function DependencyLoader:CanForceLoad()
+	return self:IsForceLoadAvailable() and self:IsForceLoadAllowed()
+end
+
+
+--	Enables any dependencies needed by the addons 
+--	that have already been enabled
+function DependencyLoader:FixCurrentAddons()
+	local requestReload = false
+	
+	for i=1, GetNumAddOns() do
+		local addon = addonTable.classes.Addon:Get(i)
+		
+		--	TODO: what if an addon was loaded but its deps were then disabled?
+		if addon:IsEnabled() and not addon:IsLoaded() then
+			local tree = addonTable.classes.Tree:Get(addon)
+			
+			if self:CanForceLoad() and tree:CanForceLoad() then
+				tree:ForceLoad()
+			elseif tree:CanLoD() then
+				tree:PrepareForLoD()
+			elseif tree:CanLoad() then
+				tree:PrepareForReload()
+				requestReload = true
+			end
+		end
+	end
+	
+	if requestReload then
+		local message = LibScriptLink:NewLink(ReloadUI) .. " to reload your UI."
+		self:Print(message)
+	end
+end
+
+
+function DependencyLoader:EnableAddOn(...)
+	print("DependencyLoader:EnableAddOn", ...)
+end