vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 --[[
2 Healers Assist by Kiki of European Cho'gall (Alliance)
3 Plugins
4  
5 ]]
6  
7  
8 --------------- Constantes ---------------
9  
10 HA_EVENT_WINDOW_SHOW = 1;
11 HA_EVENT_WINDOW_HIDE = 2;
12 HA_EVENT_WINDOW_SIZED = 3;
13  
14 HA_EVENT_GUI_UPDATED_HEALERS = 5;
15 HA_EVENT_GUI_UPDATED_EMERGENCY = 6;
16  
17 HA_EVENT_PLUGIN_LOAD = 11;
18 HA_EVENT_PLUGIN_UNLOAD = 12;
19  
20 HA_EVENT_USE_ACTION = 31;
21 HA_EVENT_CAST_SPELL = 32;
22 HA_EVENT_CAST_SPELL_BY_NAME = 33;
23  
24 HA_EVENT_RAIDER_JOINED = 51;
25 HA_EVENT_RAIDER_LEFT = 52;
26 HA_EVENT_HEALER_JOINED = 53;
27 HA_EVENT_HEALER_LEFT = 54;
28 HA_EVENT_RAIDER_DIED = 56;
29 HA_EVENT_RAIDER_RESURRECTED = 57;
30 HA_EVENT_HEALER_DIED = 58;
31 HA_EVENT_HEALER_RESURRECTED = 59;
32  
33  
34 --------------- Shared variables ---------------
35  
36 HA_Plugins = {};
37 HA_ActivePlugins = {};
38  
39 --------------- Local variables ---------------
40  
41 --------------- Local functions ---------------
42  
43 local _HA_Plugin_AnchorConvertFrom = { ["LEFT"] = "TOPRIGHT", ["RIGHT"] = "TOPLEFT", ["TOP"] = "BOTTOMLEFT", ["BOTTOM"] = "TOPLEFT" };
44 local _HA_Plugin_AnchorConvertRelative = { ["LEFT"] = "TOPLEFT", ["RIGHT"] = "TOPRIGHT", ["TOP"] = "TOPLEFT", ["BOTTOM"] = "BOTTOMLEFT" };
45  
46 local function _HA_SetPluginsAnchors()
47 local pos,x,y,relative;
48 local anchors = {};
49 anchors["LEFT"] = "HealersAssistMainFrame";
50 anchors["RIGHT"] = "HealersAssistMainFrame";
51 anchors["TOP"] = "HealersAssistMainFrame";
52 anchors["BOTTOM"] = "HealersAssistMainFrame";
53  
54 for n,pl in HA_ActivePlugins
55 do
56 if(pl.Anchors)
57 then
58 for frame,anchor in pl.Anchors
59 do
60 x = 0;
61 y = 0;
62 if(anchor.x) then x = anchor.x; end
63 if(anchor.y) then y = anchor.y; end
64 relative = anchors[anchor.point];
65 if(relative ~= nil)
66 then
67 getglobal(frame):SetPoint(_HA_Plugin_AnchorConvertFrom[anchor.point],relative,_HA_Plugin_AnchorConvertRelative[anchor.point],x,y);
68 anchors[anchor.point] = frame;
69 end
70 end
71 end
72 end
73 end
74  
75 --------------- Shared functions ---------------
76  
77 function HA_RegisterPlugin(plugin)
78 if(type(plugin) ~= "table")
79 then
80 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin : Passed plugin is not a table");
81 return;
82 end
83 if(plugin.Name == nil)
84 then
85 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin : Passed plugin has no 'Name' parameter");
86 return;
87 end
88 if(type(plugin.Name) ~= "string")
89 then
90 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin : Passed plugin's 'Name' value is not a string");
91 return;
92 end
93 local name = plugin.Name;
94 -- Check for double load
95 if(HA_Plugins[name] ~= nil)
96 then
97 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin '"..name.."'. Plugin already loaded");
98 return;
99 end
100 if(plugin.OnEvent and type(plugin.OnEvent) ~= "function")
101 then
102 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin '"..name.."' : Passed plugin's 'OnEvent' value is not a function");
103 return;
104 end
105 -- Must check other functions
106 if(plugin.OnGetHealersList and type(plugin.OnGetHealersList) ~= "function")
107 then
108 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin '"..name.."' : Passed plugin's 'OnGetHealersList' value is not a function");
109 return;
110 end
111 if(plugin.SortHealers and type(plugin.SortHealers) ~= "function")
112 then
113 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin '"..name.."' : Passed plugin's 'SortHealers' value is not a function");
114 return;
115 end
116 if(plugin.OnGetEmergencyList and type(plugin.OnGetEmergencyList) ~= "function")
117 then
118 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin '"..name.."' : Passed plugin's 'OnGetEmergencyList' value is not a function");
119 return;
120 end
121 if(plugin.SortEmergency and type(plugin.SortEmergency) ~= "function")
122 then
123 HA_ChatPrint("HA_RegisterPlugin : Failed to register plugin '"..name.."' : Passed plugin's 'SortEmergency' value is not a function");
124 return;
125 end
126 -- Ok add plugin
127 HA_Plugins[name] = plugin;
128 HA_ChatDebug(HA_DEBUG_GLOBAL,"HA_RegisterPlugin : Successfully loaded plugin '"..name.."'");
129 end
130  
131 function HA_CheckLoadPlugins()
132 -- Remove not loaded plugins
133 local new_list = {};
134 for idx,name in HA_Config.PluginOrder
135 do
136 if(HA_Plugins[name])
137 then
138 tinsert(new_list,name);
139 end
140 end
141 HA_Config.PluginOrder = new_list;
142  
143 -- Now load plugins
144 for name in HA_Plugins
145 do
146 if(HA_GetPluginIndex(name) == 0) -- First time loaded
147 then
148 HA_ChoosePluginIndex(name);
149 HA_ChatDebug(HA_DEBUG_GLOBAL,"HA_CheckLoadPlugins : First time for plugin '"..name.."'");
150 end
151 -- Check if we must auto load the plugin
152 if(HA_IsAutoLoadedPlugin(name))
153 then
154 HA_LoadPlugin(name);
155 end
156 end
157 end
158  
159 function HA_IsAutoLoadedPlugin(Name)
160 if(HA_Config.PluginAuto[Name])
161 then
162 return true;
163 end
164 return false;
165 end
166  
167 function HA_LoadPlugin(Name)
168 local plugin = HA_Plugins[Name];
169 HA_ActivePlugins[HA_GetPluginIndex(Name)] = plugin;
170 if(plugin.OnEvent)
171 then
172 plugin.OnEvent(HA_EVENT_PLUGIN_LOAD);
173 -- Forward current list of healers/raiders to the plugin
174 for name,raider in HA_Raiders
175 do
176 plugin.OnEvent(HA_EVENT_RAIDER_JOINED,{name});
177 if(raider.ishealer)
178 then
179 plugin.OnEvent(HA_EVENT_HEALER_JOINED,{name});
180 end
181 end
182  
183 _HA_SetPluginsAnchors();
184 if(HealersAssistMainFrame:IsVisible())
185 then
186 plugin.OnEvent(HA_EVENT_WINDOW_SHOW);
187 HA_SetWidgetSizeAndPosition();
188 else
189 plugin.OnEvent(HA_EVENT_WINDOW_HIDE);
190 end
191 end
192 end
193  
194 function HA_UnLoadPlugin(Name)
195 if(HA_Plugins[Name].OnEvent)
196 then
197 HA_Plugins[Name].OnEvent(HA_EVENT_WINDOW_HIDE);
198 HA_Plugins[Name].OnEvent(HA_EVENT_PLUGIN_UNLOAD);
199 end
200 HA_ActivePlugins[HA_GetPluginIndex(Name)] = nil;
201 _HA_SetPluginsAnchors();
202 end
203  
204 function HA_SetAutoLoadedPlugin(Name,state)
205 if(state)
206 then
207 HA_Config.PluginAuto[Name] = true;
208 else
209 HA_Config.PluginAuto[Name] = nil;
210 end
211 end
212  
213 function HA_IsPluginActive(Name)
214 for i,pl in HA_ActivePlugins
215 do
216 if(pl.Name == Name)
217 then
218 return true;
219 end
220 end
221 return false;
222 end
223  
224 function HA_ChoosePluginIndex(Name)
225 tinsert(HA_Config.PluginOrder,Name);
226 end
227  
228 function HA_GetPluginIndex(Name)
229 for i,n in HA_Config.PluginOrder
230 do
231 if(n == Name)
232 then
233 return i;
234 end
235 end
236 return 0;
237 end
238  
239 function HA_GetPluginsCount()
240 return table.getn(HA_Config.PluginOrder);
241 end
242  
243 function HA_MovePluginUp(Name)
244 local idx = HA_GetPluginIndex(Name);
245 if(idx ~= 0)
246 then
247 local old = HA_Config.PluginOrder[idx-1];
248 HA_Config.PluginOrder[idx-1] = HA_Config.PluginOrder[idx];
249 HA_Config.PluginOrder[idx] = old;
250 local old_act = HA_ActivePlugins[idx-1];
251 HA_ActivePlugins[idx-1] = HA_ActivePlugins[idx];
252 HA_ActivePlugins[idx] = old_act;
253 end
254 end
255  
256 function HA_MovePluginDown(Name)
257 local idx = HA_GetPluginIndex(Name);
258 if(idx ~= 0)
259 then
260 local old = HA_Config.PluginOrder[idx+1];
261 HA_Config.PluginOrder[idx+1] = HA_Config.PluginOrder[idx];
262 HA_Config.PluginOrder[idx] = old;
263 local old_act = HA_ActivePlugins[idx+1];
264 HA_ActivePlugins[idx+1] = HA_ActivePlugins[idx];
265 HA_ActivePlugins[idx] = old_act;
266 end
267 end
268  
269  
270 --------------- XML functions ---------------
271  
272 local selectPlItem = nil;
273 local HA_PL_MAX_LIST_ITEMS = 10;
274  
275 function HA_Config_Plugins_OnSelected(item)
276 selectPlItem = item.Name;
277 HA_Config_Plugins_UpdateList();
278 end
279  
280 function HA_Config_Plugins_OnClickAuto(button)
281 if(button:GetChecked())
282 then
283 HA_SetAutoLoadedPlugin(button:GetParent().Name,true);
284 else
285 HA_SetAutoLoadedPlugin(button:GetParent().Name,false);
286 end
287 end
288  
289 function HA_Config_Plugins_OnClickLoad(button)
290 if(button:GetChecked())
291 then
292 HA_LoadPlugin(button:GetParent().Name);
293 else
294 HA_UnLoadPlugin(button:GetParent().Name);
295 end
296 end
297  
298 function HA_Config_Plugins_GetList()
299 local list = {};
300 local auto,load;
301 for idx,name in HA_Config.PluginOrder
302 do
303 if(HA_IsPluginActive(name)) then load = true; else load = false; end;
304 if(HA_IsAutoLoadedPlugin(name)) then auto = true; else auto = false; end;
305 list[idx] = { Name=name; Auto=auto; Load=load };
306 end
307 return list;
308 end
309  
310 function HA_Config_Plugins_UpdateList()
311 if(not HAConfFramePluginsMenuFrame:IsVisible()) then
312 return;
313 end
314 local list = HA_Config_Plugins_GetList();
315 local size = table.getn(list);
316 local enableButtons = false;
317  
318 local offset = FauxScrollFrame_GetOffset(HAConfFramePluginsMenuFramePlListScrollFrame);
319 numButtons = HA_PL_MAX_LIST_ITEMS;
320 i = 1;
321  
322 while (i <= numButtons) do
323 local j = i + offset
324 local prefix = "HAConfFramePluginsMenuFramePlListItem"..i;
325 local button = getglobal(prefix);
326  
327 if (j <= size) then
328 button.Name = list[j].Name;
329 getglobal(prefix.."Name"):SetText(list[j].Name);
330 getglobal(prefix.."Auto"):SetChecked(list[j].Auto);
331 getglobal(prefix.."Load"):SetChecked(list[j].Load);
332 button:Show();
333  
334 -- selected
335 if (selectPlItem == list[j].Name) then
336 button:LockHighlight();
337 enableButtons = true;
338 else
339 button:UnlockHighlight();
340 end
341 else
342 button.Name = nil;
343 button:Hide();
344 end
345  
346 i = i + 1;
347 end
348  
349 if(enableButtons)
350 then
351 HAConfFramePluginsMenuFrameConfigure:Show();
352 HAConfFramePluginsMenuFrameMoveUp:Show();
353 HAConfFramePluginsMenuFrameMoveDown:Show();
354 if(HA_GetPluginIndex(selectPlItem) == 1)
355 then
356 HAConfFramePluginsMenuFrameMoveUp:Disable();
357 else
358 HAConfFramePluginsMenuFrameMoveUp:Enable();
359 end
360 if(HA_GetPluginIndex(selectPlItem) == HA_GetPluginsCount())
361 then
362 HAConfFramePluginsMenuFrameMoveDown:Disable();
363 else
364 HAConfFramePluginsMenuFrameMoveDown:Enable();
365 end
366 if(HA_Plugins[selectPlItem].OnConfigure)
367 then
368 HAConfFramePluginsMenuFrameConfigure:Enable();
369 else
370 HAConfFramePluginsMenuFrameConfigure:Disable();
371 end
372 else
373 HAConfFramePluginsMenuFrameConfigure:Hide();
374 HAConfFramePluginsMenuFrameMoveUp:Hide();
375 HAConfFramePluginsMenuFrameMoveDown:Hide();
376 end
377 FauxScrollFrame_Update(HAConfFramePluginsMenuFramePlListScrollFrame, size, HA_PL_MAX_LIST_ITEMS, 1);
378 end
379  
380 function HA_Config_Plugins_OnConfigure()
381 HA_Plugins[selectPlItem].OnConfigure();
382 end
383  
384 function HA_Config_Plugins_OnMoveUp()
385 HA_MovePluginUp(selectPlItem);
386 HA_Config_Plugins_UpdateList();
387 _HA_SetPluginsAnchors();
388 end
389  
390 function HA_Config_Plugins_OnMoveDown()
391 HA_MovePluginDown(selectPlItem);
392 HA_Config_Plugins_UpdateList();
393 _HA_SetPluginsAnchors();
394 end