916d578ecc9a5940da4925479fcbaefece040885
[imago.git] / timer.py
1 #!/usr/bin/env python
2
3 """Go timer"""
4
5 import os
6 import sys
7 import time
8 import argparse
9
10 import pygame
11
12 class Timer:
13     def __init__(self, main_time):
14         self._last = 0
15         self._elapsed = 0.
16         self._main_t = main_time
17
18     def get_time(self):
19         if self._last > 0:
20             r_time = main_time - (time.time() - self._last + self._elapsed)
21             if (r_time - int(r_time)) < 0.75:
22                 sep = ":"
23             else:
24                sep = " "
25         else:
26             r_time = main_time - self._elapsed
27             sep = ":"
28         if r_time < 0:
29             r_time = 0
30         return "{0:0>2}".format(int(r_time / 60)) + sep + "{0:0>2}".format(int(r_time % 60))
31
32     def start(self):
33         self._last = time.time()
34
35     def stop(self):
36         self._elapsed += time.time() - self._last
37         self._last = 0
38
39     def is_running(self):
40         if self._last > 0:
41             return True
42         else:
43             return False
44
45 parser = argparse.ArgumentParser(description=__doc__)
46 parser.add_argument('-m', type=int, default=45,
47                     help="main time in minutes")
48 args = parser.parse_args()
49
50
51 pygame.init()
52 pygame.display.set_mode((600, 100))
53 pygame.display.set_caption("Go timer")
54 screen = pygame.display.get_surface()
55
56 clock = pygame.time.Clock()
57
58 font = pygame.font.Font(pygame.font.match_font('monospace'), 80)
59
60 done = False
61 first = True
62
63 main_time = args.m * 60
64
65 timers = (Timer(main_time), Timer(main_time))
66
67 while not done:
68
69     for event in pygame.event.get():
70         if event.type == pygame.QUIT:
71             done = True
72         elif event.type == pygame.KEYDOWN:
73             if first:
74                 timers[0].start()
75                 first = False
76                 continue
77             for timer in timers:
78                 if timer.is_running():
79                     timer.stop()
80                 else:
81                     timer.start()
82
83     screen.fill([0, 0, 0])
84     text1 = font.render(timers[0].get_time(), True, [128, 255, 128])
85     screen.blit(text1, [10, 10])
86     text2 = font.render(timers[1].get_time(), True, [128, 255, 128])
87     screen.blit(text2, [300, 10])
88     pygame.display.flip()
89     clock.tick(15)