vanilla-wow-addons – Blame information for rev 1
?pathlinks?
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 |