-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwork_timer.py
125 lines (88 loc) · 3.96 KB
/
work_timer.py
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import tkinter as tk
import tkinter.simpledialog as tkdlg
from tkinter import ttk
import timers
import config
from notifier import Notifier
class WorkTimer:
def __init__(self, ui):
self.__ui = ui
self.__ui.set_time_text('Ready?')
self.__ui.set_timer_set_button_text('Set')
self.__ui.set_timer_set_button_listener(
self.__timer_set_button_listener
)
self.__ui.set_timer_button_text('Let\'s begin!')
self.__ui.set_timer_button_listener(self.__timer_button_listener)
self.__timer_button_state = 'init'
self.__notifier = Notifier()
def __timer_button_listener(self):
if self.__timer_button_state == 'init':
self.__ui.set_timer_button_text('Take a break.')
self.__countdown_timer = timers.Countdown(
config.work_period, self.__timer_done
)
self.__countdown_timer.set_progress_callback(self.__timer_update)
self.__countdown_timer.start()
self.__timer_button_state = 'break'
elif self.__timer_button_state == 'begin':
self.__ui.set_timer_button_text('Take a break.')
self.__countdown_timer = timers.Countdown(
config.work_period, self.__timer_done
)
self.__countdown_timer.set_progress_callback(self.__timer_update)
self.__countdown_timer.start()
self.__timer_button_state = 'break'
elif self.__timer_button_state == 'break':
self.__ui.set_timer_button_text('Let\'s work!')
if not self.__countdown_timer.completed():
self.__countdown_timer.cancel()
self.__ui.set_time_text('Done')
self.__countdown_timer = None
self.__timer_button_state = 'begin'
def __timer_set_button_listener(self):
dur = self.__ui.get_integer("Timer interval in minutes:", int(config.work_period//60))
if dur != None and dur > 0: config.work_period = dur * 60
def __timer_done(self):
self.__ui.set_time_text('Done')
self.__notifier.notify('Take a break.')
def __timer_update(self, seconds):
minutes = seconds // 60
self.__ui.set_time_text( str(minutes) + ' minute(s) left')
def cleanup(self): pass
class WorkTimerUI:
def __init__(self, master):
frame = ttk.Frame(master, padding=8, borderwidth=1, relief='solid')
frame.grid(sticky=tk.NSEW)
master.rowconfigure(0, weight=1)
master.columnconfigure(0, weight=1)
self.__timer_time = ttk.Label(frame)
self.__timer_time.grid(row=0, column=0)
self.__timer_set_button = ttk.Button(
frame, command=self.__click_timer_set_button
)
self.__timer_set_button.grid(row=0, column=1, padx=(0,8))
self.__timer_set_button_listener = None
self.__timer_button = ttk.Button(
frame, command=self.__click_timer_button
)
self.__timer_button.grid(row=0, column=2)
self.__timer_button_listener = None
frame.columnconfigure(0, weight = 1)
def __click_timer_button(self):
if self.__timer_button_listener != None: self.__timer_button_listener()
def __click_timer_set_button(self):
if self.__timer_set_button_listener != None:
self.__timer_set_button_listener()
def set_time_text(self, txt): self.__timer_time.config(text = txt)
def set_timer_button_text(self, txt): self.__timer_button.config(text = txt)
def set_timer_button_listener(self, listener = None):
self.__timer_button_listener = listener
def set_timer_set_button_text(self, txt):
self.__timer_set_button.config(text = txt)
def set_timer_set_button_listener(self, listener = None):
self.__timer_set_button_listener = listener
def get_integer(self, message, default='0', title=''):
value = tkdlg.askstring(title, message, initialvalue=default)
try: return int(value)
except: return None