Skip to content

Commit 7c32295

Browse files
committed
Timer cycle working. Can be used as a mob timer now.
1 parent 2f67da0 commit 7c32295

File tree

7 files changed

+40
-33
lines changed

7 files changed

+40
-33
lines changed

Frames/MobTimerController.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from tkinter import *
2+
from Infrastructure.CountdownManager import CountdownManager
23
from Infrastructure.MobberManager import MobberManager
34
from Infrastructure.TimeOptionsManager import TimeOptionsManager
45
from Frames.ScreenBlockerFrame import ScreenBlockerFrame
@@ -16,26 +17,33 @@ def __init__(self, *args, **kwargs):
1617

1718
time_options_manager = TimeOptionsManager()
1819
mobber_manager = MobberManager()
20+
countdown_manager = CountdownManager(container)
1921

2022
self.frames = {}
2123
for F in (ScreenBlockerFrame, TransparentCountdownFrame):
22-
frame = F(container, self, time_options_manager, mobber_manager)
24+
frame = F(container, self, time_options_manager, mobber_manager, countdown_manager)
2325
self.frames[F] = frame
2426
frame.grid(row=0, column=0, sticky="nsew")
25-
27+
self.last_frame = None
2628
self.show_screen_blocker_frame()
2729

2830
def show_frame(self, frame_class):
29-
frame = self.frames[frame_class]
30-
frame.tkraise()
31+
switched_frames = False
32+
if self.last_frame != frame_class:
33+
frame = self.frames[frame_class]
34+
frame.tkraise()
35+
print(frame_class)
36+
switched_frames = True
37+
self.last_frame = frame_class
38+
return switched_frames
3139

3240
def show_screen_blocker_frame(self):
33-
self.set_full_screen_always_on_top()
34-
self.show_frame(ScreenBlockerFrame)
41+
if self.show_frame(ScreenBlockerFrame):
42+
self.set_full_screen_always_on_top()
3543

3644
def show_transparent_countdown_frame(self):
37-
self.show_frame(TransparentCountdownFrame)
38-
self.set_partial_screen_transparent()
45+
if self.show_frame(TransparentCountdownFrame):
46+
self.set_partial_screen_transparent()
3947

4048
def get_current_window_geometry(self):
4149
return "{0}x{1}+0+0".format(
@@ -73,7 +81,7 @@ def set_partial_screen_transparent(self):
7381
window_width = int(screenwidth * 0.3)
7482
window_height = int(screenheight * 0.3)
7583
window_size = "{0}x{1}+0+0".format(window_width, window_height)
76-
bottom_left_screen = "+{}+{}".format(screenwidth - window_width,screenheight - window_height)
84+
bottom_left_screen = "+{}+{}".format(screenwidth - window_width, screenheight - window_height)
7785
controller.geometry(window_size)
7886
controller.geometry(bottom_left_screen)
7987
controller.attributes("-alpha", 0.3)

Frames/ScreenBlockerFrame.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
from tkinter import *
2-
32
from Frames.TransparentCountdownFrame import TransparentCountdownFrame
43

54

65
class ScreenBlockerFrame(Frame):
7-
def __init__(self, parent, controller, time_options_manager, mobber_manager, **kwargs):
8-
super().__init__(parent,**kwargs)
6+
def __init__(self, parent, controller, time_options_manager, mobber_manager, countdown_manager, **kwargs):
7+
super().__init__(parent, **kwargs)
98
self.controller = controller
10-
11-
9+
self.countdown_manager = countdown_manager
1210
self.time_options_manager = time_options_manager
1311
self.mobber_manager = mobber_manager
1412
self.build_window_content()
@@ -110,6 +108,7 @@ def build_window_content(self):
110108
center_frame.pack(anchor=CENTER, pady=60)
111109

112110
def launch_transparent_countdown(self, event):
111+
self.countdown_manager.set_countdown_duration(self.time_options_manager.minutes, self.time_options_manager.seconds)
113112
self.controller.show_transparent_countdown_frame()
114113

115114
def move_mobber_down_left_click(self, event):

Frames/TransparentCountdownFrame.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,18 @@
22

33

44
class TransparentCountdownFrame(Frame):
5-
def __init__(self, parent, controller, time_options_manager, mobber_manager, **kwargs):
5+
def __init__(self, parent, controller, time_options_manager, mobber_manager, countdown_manager, **kwargs):
66
super().__init__(parent, **kwargs)
77
self.master = parent
8-
8+
self.controller = controller
99
self.create_frame_content()
10+
countdown_manager.subscribe_to_time_changes(self.update_time_change_callback)
11+
12+
def update_time_change_callback(self, days, minutes, seconds):
13+
if days< 0 or minutes < 0 or seconds < 0:
14+
self.controller.show_screen_blocker_frame()
15+
self.label_minutes['text'] = "{0:0>2}".format(minutes)
16+
self.label_seconds['text'] = "{0:0>2}".format(seconds)
1017

1118
def create_frame_content(self):
1219
row_index = 0

Infrastructure/CountdownManager.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ def __init__(self, root_tk_app):
88
self.minutes = 0
99
self.seconds = 0
1010
self.time_change_callbacks = []
11-
self.count_down_total = datetime.timedelta(minutes=0, seconds=0)
11+
self.count_down_total = datetime.timedelta(minutes=10, seconds=0)
1212

1313
self.root_tk_app = root_tk_app
1414
self.refresh_timer()
1515

1616
def set_countdown_duration(self, minutes, seconds):
17+
self.start_time = time.time()
1718
self.minutes = minutes
1819
self.seconds = seconds
1920
self.count_down_total = datetime.timedelta(minutes=minutes, seconds=seconds)
@@ -26,11 +27,12 @@ def fire_time_change_callbacks(self):
2627
end_time = time.time()
2728
up_time = end_time - self.start_time
2829
remaining_time = self.count_down_total - datetime.timedelta(seconds=(int(up_time)))
30+
print(remaining_time.days)
2931
for callback in self.time_change_callbacks:
3032
if callback:
31-
callback((remaining_time.seconds // 60) % 60, self.seconds)
33+
callback(remaining_time.days, (remaining_time.seconds // 60) % 60, remaining_time.seconds % 60)
3234

3335
def refresh_timer(self):
3436
if self.root_tk_app:
3537
self.fire_time_change_callbacks()
36-
self.root_tk_app.after(1000, self.refresh_timer)
38+
self.root_tk_app.after(500, self.refresh_timer)

tests/Infrastructure/CountdownManager/TestsCountdownManager.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,10 @@
55
from approvaltests import Approvals
66
from approvaltests.TextDiffReporter import TextDiffReporter
77

8-
from Infrastructure.CountdownManager.TestsCountdownManager import CountdownManager
8+
from Infrastructure.CountdownManager import CountdownManager
99

1010

1111
class TestsCountdownManager(unittest.TestCase):
12-
def test_time(self):
13-
start_time = time.time()
14-
time.sleep(2)
15-
end_time = time.time()
16-
17-
uptime = end_time - start_time
18-
19-
self.assertEqual(datetime.timedelta(seconds=int(uptime)).__str__(), (
20-
datetime.timedelta(seconds=15, minutes=1) - datetime.timedelta(seconds=(int(uptime)))).__str__())
2112

2213
def test_set_countdown_timer(self):
2314
countdown_manager = CountdownManager(None)
@@ -34,7 +25,7 @@ def test_subscribe_to_time_changes(self):
3425
countdown_manager = CountdownManager(None)
3526
result = {"result": "Times changed to\n", "increment": 0}
3627

37-
def time_change_callback(minutes, seconds):
28+
def time_change_callback(days, minutes, seconds):
3829
result["increment"] += 1
3930
result["result"] += "Action " + result["increment"].__str__() + ":"
4031
result["result"] += " {0:0>2}:{1:0>2}".format(minutes, seconds) + "\n"
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Times changed to
22
Action 1: 04:42
3-
Action 2: 603:52
3+
Action 2: 03:52
44
Action 3: 01:03
5-
Action 4: 853:32
6-
Action 5: 03:62
5+
Action 4: 13:32
6+
Action 5: 04:02

tests/infrastrcture/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)