vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1  
2 ------------------------------
3 -- Are you local? --
4 ------------------------------
5  
6 local dewdrop = AceLibrary("Dewdrop-2.0")
7 local tablet = AceLibrary("Tablet-2.0")
8  
9 local lodmods, sortmods = {}, {}
10 local reasons, getreason = {}
11  
12  
13 -------------------------------------
14 -- Namespace Declaration --
15 -------------------------------------
16  
17 SupplyAndDemand = AceLibrary("AceAddon-2.0"):new("AceModuleCore-2.0", "AceEvent-2.0", "AceConsole-2.0", "AceDB-2.0", "AceDebug-2.0", "FuBarPlugin-2.0", "AceHook-2.1")
18 SupplyAndDemand:SetModuleMixins("AceDebug-2.0", "AceEvent-2.0")
19 SupplyAndDemand.debugFrame = ChatFrame5
20 SupplyAndDemand.hasNoText = true
21 SupplyAndDemand.clickableTooltip = true
22 SupplyAndDemand.hasIcon = "Interface\\Icons\\Spell_Frost_FrostWard"
23 SupplyAndDemand.independentProfile = true
24 SupplyAndDemand:RegisterDB("SupplyAndDemandDB", "SupplyAndDemandDBPerChar")
25 SupplyAndDemand:RegisterDefaults("profile", {})
26 SupplyAndDemand:RegisterChatCommand({"/SupplyAndDemand", "/snd"}, {type = "group", handler = SupplyAndDemand, args = {
27 ["chat"] = {
28 type = "toggle",
29 name = "Echo to chat",
30 desc = "Echo your quest messages to the party channel.",
31 get = function() return SupplyAndDemand.db.profile.chat end,
32 set = function(v) SupplyAndDemand.db.profile.chat = v end,
33 },
34 }})
35  
36  
37 --------------------------------
38 -- Module Prototype --
39 --------------------------------
40  
41 SupplyAndDemand.modulePrototype.core = SupplyAndDemand
42 SupplyAndDemand.modulePrototype.lodmods = lodmods
43 SupplyAndDemand.modulePrototype.sortmods = sortmods
44  
45 function SupplyAndDemand.modulePrototype:GetDefaults()
46 local opts = {}
47 for name,mod in pairs(lodmods) do
48 local mdata = GetAddOnMetadata(name, self.metadataheader)
49 if mdata then
50 mod.hashandler = true
51 if (not self.metadatacondition) or self.metadatacondition(mdata) then
52 mod[self.metadataheader] = true
53 opts[name] = true
54 end
55 end
56 end
57  
58 return opts
59 end
60  
61  
62 function SupplyAndDemand.modulePrototype:OnEnable()
63 local self = self
64 if not self.tripped and self.loadcondition() then self:Trigger()
65 elseif not self.tripped and self.event then
66 if (type(self.event) == "table") then
67 for _, event in pairs(self.event) do
68 self:RegisterEvent(event, "EventHandler")
69 end
70 else
71 self:RegisterEvent(self.event, "EventHandler")
72 end
73 end
74 end
75  
76  
77 function SupplyAndDemand.modulePrototype:EventHandler()
78 if self.loadcondition() then self:Trigger() end
79 end
80  
81  
82 function SupplyAndDemand.modulePrototype:MenuValid()
83 if self.nomenu then return end
84 if not self.restricttometadata then return true end
85  
86 for name,mod in pairs(lodmods) do
87 if mod[self.metadataheader] then return true end
88 end
89 end
90  
91  
92 function SupplyAndDemand.modulePrototype:OnMenuRequest(level, v1, intip, v2, v3, v4)
93 if level == 2 then
94 for _,mod in pairs(sortmods) do
95 local v = lodmods[mod]
96 if v.hashandler and (not self.restricttometadata) or v[self.metadataheader] then
97 dewdrop:AddLine("text", v.title, "value", mod, "checked", self.db.profile[mod],
98 "func", self.Toggle, "arg1", self, "arg2", mod)
99 end
100 end
101 end
102 end
103  
104  
105 function SupplyAndDemand.modulePrototype:Trigger()
106 self.tripped = true
107 self:UnregisterAllEvents()
108  
109 for name,mod in pairs(lodmods) do
110 if mod.hashandler and self.db.profile[name] and not IsAddOnLoaded(name) then
111 mod.loadedby = self:ToString()
112 LoadAddOn(name)
113 end
114 end
115 end
116  
117  
118 function SupplyAndDemand.modulePrototype:Toggle(mod)
119 self.db.profile[mod] = not self.db.profile[mod]
120 if self.tripped and self.db.profile[mod] and not IsAddOnLoaded(mod) then
121 lodmods[mod].loadedby = self:ToString()
122 LoadAddOn(mod)
123 end
124 end
125  
126  
127 ------------------------------
128 -- Initialization --
129 ------------------------------
130  
131 function SupplyAndDemand:OnInitialize()
132 self.version = (self.version or GetAddOnMetadata("SupplyAndDemand", "Version") or "2.0").. " |cffff8888r".. tonumber(string.sub("$Revision: 9516 $", 12, -3)).. "|r"
133 for i=1,GetNumAddOns() do self:UpdateAddOn(i) end
134 table.sort(sortmods, function(a,b) return lodmods[a].title < lodmods[b].title end)
135  
136 for name,mod in pairs(lodmods) do
137 if GetAddOnMetadata(name, "X-S&D-Placeholder") then mod.hashandler = true end
138 end
139  
140 for name,module in self:IterateModules() do
141 if not module.nodb then
142 self:RegisterDefaults(name, "profile", module:GetDefaults())
143 module.db = self:AcquireDBNamespace(name)
144 end
145 end
146 end
147  
148  
149 function SupplyAndDemand:OnEnable()
150 self:SecureHook("EnableAddOn")
151 self:SecureHook("DisableAddOn")
152 end
153  
154  
155 ------------------------------
156 -- Hooked Methods --
157 ------------------------------
158  
159 function SupplyAndDemand:EnableAddOn(addon)
160 self:UpdateAddOn(addon)
161 self:Update()
162 end
163  
164  
165 function SupplyAndDemand:DisableAddOn(addon)
166 self:UpdateAddOn(addon)
167 self:Update()
168 end
169  
170  
171 -----------------------------
172 -- FuBar Methods --
173 -----------------------------
174  
175 function SupplyAndDemand:OnTooltipUpdate()
176 local cat = tablet:AddCategory("columns", 2)
177 for _,mod in pairs(sortmods) do
178 local v = lodmods[mod]
179 if v.hashandler then
180 if IsAddOnLoaded(mod) then
181 cat:AddLine("text", v.title, "text2", "|cff00ff00".. (v.loadedby or "Loaded"))
182 elseif v.enabled and v.loadable then
183 cat:AddLine("text", v.title, "text2", "Enabled", "func", LoadAddOn, "arg1", mod)
184 elseif not v.enabled then
185 cat:AddLine("text", v.title, "text2", "|cff808080Disabled", "func", EnableAddOn, "arg1", mod)
186 else
187 cat:AddLine("text", v.title, "text2", "|cffff0000"..(getreason(v.reason) or v.reason), "func", DisableAddOn, "arg1", mod)
188 end
189 end
190 end
191 end
192  
193  
194 function SupplyAndDemand:OnMenuRequest(level, v1, intip, v2, v3, v4)
195 if level == 1 then
196 for name,module in self:IterateModules() do
197 if module:MenuValid() then
198 dewdrop:AddLine("text", name, "value", module, "hasArrow", true, "checked", module.tripped)
199 end
200 end
201 dewdrop:AddLine()
202 elseif level == 2 then v1:OnMenuRequest(level, v1, intip, v2, v3, v4) end
203 end
204  
205  
206 ------------------------------
207 -- Helper Methods --
208 ------------------------------
209  
210 function SupplyAndDemand:UpdateAddOn(i)
211 if not IsAddOnLoadOnDemand(i) then return end
212 local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(i)
213 if not lodmods[name] then
214 lodmods[name] = {}
215 table.insert(sortmods, name)
216 end
217 lodmods[name].title = title
218 lodmods[name].enabled = enabled
219 lodmods[name].loadable = loadable
220 lodmods[name].reason = reason
221 end
222  
223  
224 getreason = function(r)
225 if not reasons[r] then reasons[r] = TEXT(getglobal("ADDON_"..r)) end
226 return reasons[r]
227 end