vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 -- Does not get called if the timer is paused or stopped.
2 -- The function is called with two parameters:
3  
4 -- First parameter (integer): The time remaining (if counting down)/time elapsed(if counting up), both in seconds.
5 -- Second parameter (integer): Whether the timer is counting up or down (1 for up, -1 for down).
6  
7 CT_Timer_CallFunctions = { };
8 -- Global variable. Add your function to the list to get it called every time the timer counts 1 second (works both counting up and counting down).
9 -- You can add the function using "tinsert(CT_Timer_CallFunctions, functionName);"
10  
11 CT_Timer = { };
12 function CT_Timer_OnMouseOver()
13 CT_TimerFrameDragClickFrame.step = 0.05;
14 end
15  
16 function CT_Timer_OnMouseOut()
17 CT_TimerFrameDragClickFrame.step = -0.05;
18 end
19  
20 function CT_Timer_Toggle(btn)
21 if ( not btn ) then btn = this:GetParent(); end
22 if ( CT_Timer.status and CT_Timer.status == 1 ) then
23 CT_Timer.status = 0;
24 getglobal(btn:GetName() .. "Time"):SetTextColor(1, 0.5, 0);
25 CT_Timer.color = { 1, 0.5, 0 };
26 else
27 if ( not CT_Timer.status ) then
28 if ( CT_Timer.time > 0 ) then
29 CT_Timer.countfrom = CT_Timer_GetTimeString(CT_Timer.time);
30 CT_Timer.step = -1;
31 else
32 CT_Timer.step = 1;
33 end
34 end
35 getglobal(btn:GetName() .. "Time"):SetTextColor(0, 1, 0);
36 CT_Timer.color = { 0, 1, 0 };
37 CT_Timer.status = 1;
38 end
39 end
40  
41 function CT_Timer_UpdateTime(elapsed)
42 if ( CT_Timer.hideBG ) then
43 CT_Timer.alphaUpdate = ( CT_Timer.alphaUpdate or 0 ) + elapsed;
44 if ( CT_Timer.alphaUpdate > 0.05 ) then
45 if ( ( not CT_Timer.alphaWait or CT_Timer.alphaWait < 1 ) and ( CT_TimerFrameDragClickFrame.step or 0 ) > 0 ) then
46 CT_Timer.alphaWait = ( CT_Timer.alphaWait or 0 ) + elapsed;
47 CT_TimerFrameHeaderTexture:SetAlpha(0);
48 CT_TimerFrameScrollDownHour:SetAlpha(0);
49 CT_TimerFrameScrollDownMin:SetAlpha(0);
50 CT_TimerFrameScrollUpHour:SetAlpha(0);
51 CT_TimerFrameScrollUpMin:SetAlpha(0);
52 else
53 CT_Timer.alpha = ( CT_Timer.alpha or 0 ) + ( CT_TimerFrameDragClickFrame.step or 0 );
54 if ( CT_Timer.alpha < 0 ) then
55 CT_Timer.alpha = 0;
56 CT_Timer.alphaWait = nil;
57 elseif ( CT_Timer.alpha > 1 ) then
58 CT_Timer.alpha = 1;
59 end
60 CT_TimerFrameHeaderTexture:SetAlpha(CT_Timer.alpha);
61 CT_TimerFrameScrollDownHour:SetAlpha(CT_Timer.alpha);
62 CT_TimerFrameScrollDownMin:SetAlpha(CT_Timer.alpha);
63 CT_TimerFrameScrollUpHour:SetAlpha(CT_Timer.alpha);
64 CT_TimerFrameScrollUpMin:SetAlpha(CT_Timer.alpha);
65 end
66 end
67 else
68 CT_Timer.alpha = nil;
69 CT_Timer.alphaWait = nil;
70 CT_Timer.alphaUpdate = nil;
71 CT_TimerFrameHeaderTexture:SetAlpha(1);
72 CT_TimerFrameScrollDownHour:SetAlpha(1);
73 CT_TimerFrameScrollDownMin:SetAlpha(1);
74 CT_TimerFrameScrollUpHour:SetAlpha(1);
75 CT_TimerFrameScrollUpMin:SetAlpha(1);
76 end
77 if ( not CT_Timer.status or CT_Timer.status == 0 ) then
78 if ( CT_Timer.color ) then
79 CT_TimerFrameTime:SetTextColor(CT_Timer.color[1], CT_Timer.color[2], CT_Timer.color[3]);
80 end
81 return;
82 end
83 CT_TimerFrame.update = ( CT_TimerFrame.update or 0 ) + elapsed;
84 if ( CT_TimerFrame.update >= 1 ) then
85 if ( CT_Timer.color ) then
86 CT_TimerFrameTime:SetTextColor(CT_Timer.color[1], CT_Timer.color[2], CT_Timer.color[3]);
87 end
88 CT_Timer.time = CT_Timer.time + CT_Timer.step;
89  
90 -- Process call list
91 for k, v in CT_Timer_CallFunctions do
92 if ( type(v) == "function" ) then
93 v(CT_Timer.time, CT_Timer.step);
94 end
95 end
96  
97 if ( CT_Timer.time == 0 ) then
98 DEFAULT_CHAT_FRAME:AddMessage(format(CT_TIMER_FINISHCOUNT, CT_Timer.countfrom), 1, 0.5, 0);
99 PlaySound("TellMessage");
100 CT_Timer_Reset();
101 else
102 CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame);
103 end
104 CT_TimerFrame.update = CT_TimerFrame.update - 1;
105 end
106 end
107  
108 function CT_Timer_Start(seconds)
109 CT_Timer.status = 1;
110 if ( seconds ) then
111 CT_Timer.step = -1;
112 CT_Timer.countfrom = CT_Timer_GetTimeString(seconds);
113 else
114 CT_Timer.step = 1;
115 end
116 if ( seconds ) then
117 CT_Timer.time = seconds;
118 else
119 CT_Timer.time = 0;
120 end
121 CT_TimerFrameTime:SetTextColor(0, 1, 0);
122 CT_Timer.color = { 0, 1, 0 };
123 end
124  
125 function CT_Timer_Pause(newStatus)
126 if ( not newStatus and ( not CT_Timer.status or CT_Timer.status == 0 ) ) then
127 newStatus = 1;
128 elseif ( newStatus and newStatus ~= 0 and newStatus ~= 1 ) then
129 newStatus = nil;
130 end
131  
132 if ( newStatus ) then
133 if ( not CT_Timer.status ) then
134 if ( CT_Timer.time > 0 ) then
135 CT_Timer.countfrom = CT_Timer_GetTimeString(CT_Timer.time);
136 CT_Timer.step = -1;
137 else
138 CT_Timer.step = 1;
139 end
140 end
141 CT_Timer.status = 1;
142 CT_TimerFrameTime:SetTextColor(0, 1, 0);
143 CT_Timer.color = { 0, 1, 0 };
144 else
145 CT_Timer.status = 0;
146 CT_TimerFrameTime:SetTextColor(1, 0.5, 0);
147 CT_Timer.color = { 1, 0.5, 0 };
148 end
149 end
150  
151 function CT_Timer_SetTime(num, field)
152 if ( not num ) then return; end
153 local hours, mins, secs, temp;
154  
155 if ( num >= 3600 ) then
156 hours = floor(num / 3600);
157 temp = num - (hours*3600);
158 mins = floor(temp / 60);
159 secs = temp - (mins*60);
160 elseif ( num >= 60 ) then
161 hours = 0;
162 mins = floor(num / 60);
163 secs = num - (mins*60);
164 else
165 hours = 0;
166 mins = 0;
167 secs = num;
168 end
169 if ( not CT_Timer.showsecs ) then
170 getglobal(field:GetName() .. "Time"):SetText(CT_Timer_AddZeros(hours) .. ":" .. CT_Timer_AddZeros(mins));
171 else
172 getglobal(field:GetName() .. "Time"):SetText(CT_Timer_AddZeros(hours) .. ":" .. CT_Timer_AddZeros(mins) .. ":" .. CT_Timer_AddZeros(secs));
173 end
174 if ( CT_Timer.time < 60 ) then
175 CT_TimerFrameScrollDownMin:Disable();
176 CT_TimerFrameScrollDownHour:Disable();
177 elseif ( CT_Timer.time < 3600 ) then
178 CT_TimerFrameScrollDownHour:Disable();
179 CT_TimerFrameScrollDownMin:Enable();
180 else
181 CT_TimerFrameScrollDownMin:Enable();
182 CT_TimerFrameScrollDownHour:Enable();
183 end
184 end
185  
186 function CT_Timer_GetTimeString(num)
187  
188 local hours, mins, secs;
189  
190 if ( num >= 3600 ) then
191 hours = floor(num / 3600);
192 mins = floor(mod(num, 3600) / 60);
193 else
194 hours = 0;
195 mins = floor(num / 60);
196 end
197  
198 if ( hours == 0 ) then
199 if ( mins == 1 ) then
200 return "1 " .. CT_TIMER_MIN;
201 else
202 return mins .. " " .. CT_TIMER_MINS;
203 end
204 else
205 local str;
206 if ( hours == 1 ) then
207 str = "1 " .. CT_TIMER_HOUR;
208 else
209 str = hours .. " " .. CT_TIMER_HOURS;
210 end
211 if ( mins == 0 ) then
212 return str;
213 elseif ( mins == 1 ) then
214 return str .. " and 1 " .. CT_TIMER_MIN;
215 else
216 return str .. " and " .. mins .. CT_TIMER_MINS;
217 end
218 end
219 end
220  
221 function CT_Timer_AddZeros(num)
222 if ( strlen(num) == 1 ) then
223 return "0" .. num;
224 elseif ( strlen(num) == 2 ) then
225 return num;
226 else
227 return "--";
228 end
229 end
230  
231 function CT_Timer_ModTime(num)
232 CT_Timer.time = CT_Timer.time + num;
233 if ( CT_Timer.time < 0 ) then
234 CT_Timer.time = 0;
235 end
236 CT_Timer_SetTime(CT_Timer.time, this:GetParent());
237 end
238  
239 function CT_Timer_SetTimerTime(num)
240 if ( num < 0 ) then
241 num = 0;
242 end
243 CT_Timer.time = num;
244 CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame);
245 end
246  
247 function CT_Timer_Reset()
248 CT_TimerFrameTime:SetTextColor(1, 0, 0);
249 CT_Timer.color = { 1, 0, 0 };
250 CT_Timer.status = nil;
251 CT_Timer.time = 0;
252 CT_Timer.countfrom = nil;
253 CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame);
254 end
255  
256 if ( CT_RegisterMod ) then
257 local function modfunc(modId)
258 if ( CT_TimerOptionsFrame:IsVisible() ) then
259 HideUIPanel(CT_TimerOptionsFrame);
260 else
261 ShowUIPanel(CT_TimerOptionsFrame);
262 end
263 end
264  
265 CT_RegisterMod( CT_TIMER_MODNAME,
266 CT_TIMER_SUBNAME,
267 5,
268 "Interface\\Icons\\INV_Misc_Key_02",
269 CT_TIMER_TOOLTIP,
270 "off",
271 nil,
272 modfunc
273 );
274 end
275  
276 SlashCmdList["TIMER"] = function(msg)
277 if ( msg == "" ) then
278 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[1], 1, 1, 0);
279 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[2], 1, 1, 0);
280 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[3], 1, 1, 0);
281 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[4], 1, 1, 0);
282 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[5], 1, 1, 0);
283 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[6], 1, 1, 0);
284 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[7], 1, 1, 0);
285 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[8], 1, 1, 0);
286 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[9], 1, 1, 0);
287 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[10], 1, 1, 0);
288 elseif ( msg == "show" ) then
289 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_SHOW_ON, 1, 1, 0);
290 CT_TimerFrame:Show();
291 CT_Timer.show = 1;
292 elseif ( msg == "hide" ) then
293 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_SHOW_OFF, 1, 1, 0);
294 CT_TimerFrame:Hide();
295 CT_Timer.show = nil;
296 CT_Timer_ShowTimer = 0;
297 elseif ( msg == "secs on" ) then
298 CT_Timer.showsecs = 1;
299 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_SHOWSECS_ON, 1, 1, 0);
300 CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame);
301 elseif ( msg == "secs off" ) then
302 CT_Timer.showsecs = nil;
303 DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_SHOWSECS_OFF, 1, 1, 0);
304 CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame);
305 elseif ( msg == "start" ) then
306 CT_Timer_Start();
307 elseif ( msg == "stop" ) then
308 CT_Timer_Pause();
309 elseif ( msg == "reset" ) then
310 CT_Timer_Reset();
311 elseif ( msg == "bg on" ) then
312 CT_Timer.hideBG = nil;
313 CT_Timer.alphaUpdate = 5; -- Force redraw
314 elseif ( msg == "bg off" ) then
315 CT_Timer.hideBG = 1;
316 CT_Timer.alphaUpdate = 5; -- Force redraw
317 elseif ( msg == "options" ) then
318 ShowUIPanel(CT_TimerOptionsFrame);
319 elseif ( string.find(msg, "^%d+$") ) then
320 local _, _, mins = string.find(msg, "^(%d+)$");
321 CT_Timer_Start(tonumber(mins)*60);
322 elseif ( string.find(msg, "^%d+:%d+$") ) then
323 local _, _, mins, sec = string.find(msg, "^(%d+):(%d+)$");
324 CT_Timer_Start(tonumber(mins)*60+tonumber(sec));
325 else
326 SlashCmdList["TIMER"]("");
327 end
328 end
329  
330 SLASH_TIMER1 = "/timer";
331 SLASH_TIMER2 = "/tr";
332  
333 function CT_Timer_OnEvent(event)
334 if ( event == "VARIABLES_LOADED" and not CT_RegisterMod ) then
335 if ( CT_Timer.color ) then
336 CT_TimerFrameTime:SetTextColor(CT_Timer.color[1], CT_Timer.color[2], CT_Timer.color[3]);
337 end
338 CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame);
339 end
340 end
341  
342 tinsert(UISpecialFrames, "CT_TimerOptionsFrame");
343  
344 function CT_TimerOptions_Initialize()
345 CT_TimerOptions_OnClick(1, CT_Timer.show);
346 CT_TimerOptions_OnClick(2, CT_Timer.showsecs);
347 CT_TimerOptions_OnClick(3, CT_Timer.hideBG);
348 end
349  
350 function CT_TimerOptions_OnClick(id, checked)
351 if ( id == 1 ) then
352 CT_Timer.show = checked;
353 getglobal("CT_TimerOptionsFrameShowTimerCB"):SetChecked(checked);
354 if ( checked ) then
355 CT_TimerFrame:Show();
356 else
357 CT_TimerFrame:Hide();
358 end
359 elseif ( id == 2 ) then
360 CT_Timer.showsecs = checked;
361 getglobal("CT_TimerOptionsFrameShowSecondsCB"):SetChecked(checked);
362 CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame);
363 elseif ( id == 3 ) then
364 CT_Timer.hideBG = checked;
365 getglobal("CT_TimerOptionsFrameHideBackgroundCB"):SetChecked(checked);
366 CT_Timer.alphaUpdate = 5; -- Force redraw
367 end
368 end