-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtimer.py
More file actions
81 lines (67 loc) · 2.77 KB
/
timer.py
File metadata and controls
81 lines (67 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from threading import Timer
from gui.timer_entry import TimerEntry
from datetime import datetime
from gui.log_view import LogView
import application
from util.time_util import convert_time
import timeframe
class RepeatTimer(Timer):
def run(self):
while not self.finished.wait(self.interval):
self.function(*self.args, **self.kwargs)
class Timer:
def __init__(self, row):
self.row = row
self.paused = True
self.timeframes = []
self.current_time = 0.0
self.begin_time = datetime.now()
self.timer_entry = TimerEntry(self)
self.timerThread = RepeatTimer(1, self.update_timer)
self.timer_entry.render_at_row(self.row)
def clear_timeframes(self):
self.timeframes.clear()
def view_logs(self):
log_view = LogView(f"Timer {self.row + 1} logs", self)
log_view.display()
def get_current_time(self):
return self.current_time
def log(self, context):
if self.current_time > 0:
if len(self.timer_entry.note.get()) > 0:
application.write_log(f"{datetime.today().strftime('%Y-%m-%d %H:%M:%S')}"
f" stopwatch {self.row + 1} with label '{self.timer_entry.note.get()}'"
f" {context} at {self.timer_entry.time_text['text']}\n")
else:
application.write_log(f"{datetime.today().strftime('%Y-%m-%d %H:%M:%S')}"
f" stopwatch {self.row + 1} {context}"
f" at {self.timer_entry.time_text['text']}\n")
def destroy(self):
self.stop_timer()
self.timer_entry.destroy()
def remove(self):
self.log('removed')
self.destroy()
application.instance.remove_timer(self.row)
def update_timer(self):
self.current_time += 1
self.timer_entry.time_text['text'] = convert_time(self.current_time)
application.instance.update_total_time()
def start_timer(self):
self.timer_entry.time_text['bg'] = '#e89595'
if not self.timerThread.is_alive():
self.begin_time = datetime.now()
self.timerThread = RepeatTimer(1, self.update_timer)
self.timerThread.start()
def stop_timer(self):
self.timer_entry.time_text['bg'] = '#f0f0f0'
if self.timerThread.is_alive():
new_timeframe = timeframe.Timeframe(self.begin_time, datetime.now(), self.timer_entry.note.get())
self.timeframes.append(new_timeframe)
self.timerThread.cancel()
def reset_timer(self):
self.stop_timer()
self.log('reset')
self.current_time = 0
self.timer_entry.time_text['text'] = "0:00:00"
application.instance.update_total_time()