annotate 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
rev   line source
mckenziemc@10 1 -- DependencyLoader
mckenziemc@0 2 --
mckenziemc@0 3
mckenziemc@0 4 local addonName, addonTable = ...
mckenziemc@0 5
mckenziemc@0 6
mckenziemc@10 7 local DependencyLoader = LibStub("AceAddon-3.0"):NewAddon(addonName, "AceHook-3.0")
mckenziemc@0 8 _G[addonName] = DependencyLoader
mckenziemc@0 9
mckenziemc@10 10 addonTable.interface = DependencyLoader
mckenziemc@10 11
mckenziemc@10 12
mckenziemc@0 13 local libPrint = LibStub("LibPrint-1.0")
mckenziemc@10 14 local LibScriptLink = LibStub("LibScriptLink-1.0")
mckenziemc@10 15
mckenziemc@0 16 DependencyLoader.printStream = libPrint:NewStream("DependencyLoader", "DpLdr", print)
mckenziemc@0 17 DependencyLoader.debugStream = libPrint:NewStream("DependencyLoader", "DpLdr", "mcm")
mckenziemc@0 18
mckenziemc@0 19
mckenziemc@0 20 function DependencyLoader:Print(...)
mckenziemc@0 21 self.printStream:Print(...)
mckenziemc@0 22 end
mckenziemc@0 23
mckenziemc@0 24
mckenziemc@0 25 function DependencyLoader:Debug(...)
mckenziemc@0 26 self.debugStream:Print(...)
mckenziemc@0 27 end
mckenziemc@0 28
mckenziemc@0 29
mckenziemc@0 30 function DependencyLoader:OnInitialize()
mckenziemc@10 31 self:Debug("Initializing", addonName)
mckenziemc@0 32 self:Enable()
mckenziemc@0 33 end
mckenziemc@0 34
mckenziemc@0 35
mckenziemc@0 36 function DependencyLoader:OnEnable()
mckenziemc@10 37 self:Print("Enabled", addonName)
mckenziemc@0 38
mckenziemc@10 39 self:Hook("EnableAddOn", true)
mckenziemc@0 40
mckenziemc@0 41 self:FixCurrentAddons()
mckenziemc@0 42 end
mckenziemc@0 43
mckenziemc@10 44
mckenziemc@0 45 function DependencyLoader:OnDisable()
mckenziemc@0 46 self:Print("Disabled", addonName)
mckenziemc@0 47 end
mckenziemc@0 48
mckenziemc@0 49
mckenziemc@10 50 -- Does not consider user settings or addon errata.
mckenziemc@10 51 function DependencyLoader:IsForceLoadAvailable()
mckenziemc@10 52 return IsLoggedIn() and true or false
mckenziemc@10 53 end
mckenziemc@10 54
mckenziemc@10 55
mckenziemc@10 56 function DependencyLoader:IsForceLoadAllowed()
mckenziemc@10 57 -- TODO: check user settings
mckenziemc@10 58 return true
mckenziemc@10 59 end
mckenziemc@10 60
mckenziemc@10 61
mckenziemc@10 62 function DependencyLoader:CanForceLoad()
mckenziemc@10 63 return self:IsForceLoadAvailable() and self:IsForceLoadAllowed()
mckenziemc@10 64 end
mckenziemc@10 65
mckenziemc@0 66
mckenziemc@0 67 -- Enables any dependencies needed by the addons
mckenziemc@0 68 -- that have already been enabled
mckenziemc@0 69 function DependencyLoader:FixCurrentAddons()
mckenziemc@10 70 local requestReload = false
mckenziemc@10 71
mckenziemc@0 72 for i=1, GetNumAddOns() do
mckenziemc@10 73 local addon = addonTable.classes.Addon:Get(i)
mckenziemc@0 74
mckenziemc@10 75 -- TODO: what if an addon was loaded but its deps were then disabled?
mckenziemc@10 76 if addon:IsEnabled() and not addon:IsLoaded() then
mckenziemc@10 77 local tree = addonTable.classes.Tree:Get(addon)
mckenziemc@10 78
mckenziemc@10 79 if self:CanForceLoad() and tree:CanForceLoad() then
mckenziemc@10 80 tree:ForceLoad()
mckenziemc@10 81 elseif tree:CanLoD() then
mckenziemc@10 82 tree:PrepareForLoD()
mckenziemc@10 83 elseif tree:CanLoad() then
mckenziemc@10 84 tree:PrepareForReload()
mckenziemc@10 85 requestReload = true
mckenziemc@0 86 end
mckenziemc@0 87 end
mckenziemc@0 88 end
mckenziemc@10 89
mckenziemc@10 90 if requestReload then
mckenziemc@10 91 local message = LibScriptLink:NewLink(ReloadUI) .. " to reload your UI."
mckenziemc@10 92 self:Print(message)
mckenziemc@10 93 end
mckenziemc@0 94 end
mckenziemc@10 95
mckenziemc@10 96
mckenziemc@10 97 function DependencyLoader:EnableAddOn(...)
mckenziemc@10 98 print("DependencyLoader:EnableAddOn", ...)
mckenziemc@10 99 end