Skip to content

Commit e597287

Browse files
committed
Laying foundation for multi window screen blockers
1 parent 17eae0d commit e597287

File tree

4 files changed

+62
-43
lines changed

4 files changed

+62
-43
lines changed

Frames/MobFrame.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from tkinter import Frame
2+
3+
4+
class MobFrame(Frame):
5+
def __init__(self, master, **kwargs):
6+
Frame.__init__(master, **kwargs)
7+
self.frames = {}

Frames/MobTimerController.py

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,38 @@ class MobTimerController(Tk):
1010
def __init__(self, *args, **kwargs):
1111
Tk.__init__(self, *args, **kwargs)
1212

13-
container = Frame(self)
14-
container.pack(side="top", fill="both", expand=True)
15-
container.grid_rowconfigure(0, weight=1)
16-
container.grid_columnconfigure(0, weight=1)
13+
1714

1815
self.time_options_manager = TimeOptionsManager()
1916
self.mobber_manager = MobberManager()
20-
self.countdown_manager = CountdownManager(container)
17+
self.countdown_manager = CountdownManager(self)
2118

19+
self.containers = [self, Toplevel(self)]
20+
self.frame_types = (ScreenBlockerFrame, TransparentCountdownFrame)
2221
self.frames = {}
23-
for F in (ScreenBlockerFrame, TransparentCountdownFrame):
24-
frame = F(container, self, self.time_options_manager, self.mobber_manager, self.countdown_manager)
25-
self.frames[F] = frame
26-
frame.grid(row=0, column=0, sticky="nsew")
22+
for frame_type in self.frame_types:
23+
self.frames[frame_type] = []
24+
for s in self.containers:
25+
container = Frame(s)
26+
container.grid(row=0, column=0, sticky=N + S + E + W)
27+
container.grid_rowconfigure(0, weight=1)
28+
container.grid_columnconfigure(0, weight=1)
29+
for frame_type in self.frame_types:
30+
frame_instance = frame_type(container, self, self.time_options_manager, self.mobber_manager, self.countdown_manager)
31+
self.frames[frame_type].append(frame_instance)
32+
frame_instance.grid(row=0, column=0, sticky="nsew")
2733
self.last_frame = None
2834
self.show_screen_blocker_frame()
29-
self.frames[TransparentCountdownFrame].bind("<Enter>", self.toggle_transparent_frame_position)
35+
for frame_instance in self.frames[TransparentCountdownFrame]:
36+
frame_instance.bind("<Enter>", self.toggle_transparent_frame_position)
3037
self.transparent_frame_position = 0
3138

3239
def show_frame(self, frame_class):
3340
switched_frames = False
3441
if self.last_frame != frame_class:
35-
frame = self.frames[frame_class]
36-
frame.tkraise()
42+
for frame_instances in self.frames[frame_class]:
43+
# for frame in frame_instances:
44+
frame_instances.tkraise()
3745
switched_frames = True
3846
self.last_frame = frame_class
3947
return switched_frames
@@ -52,49 +60,46 @@ def get_current_window_geometry(self):
5260
self.winfo_screenwidth(), self.winfo_screenheight())
5361

5462
def disable_resizing(self):
55-
self.resizable(0, 0)
63+
for container in self.containers:
64+
container.resizable(0, 0)
5665

5766
def remove_title_bar(self):
58-
self.overrideredirect(1)
67+
for container in self.containers:
68+
container.overrideredirect(1)
5969

6070
def set_always_on_top(self):
61-
self.wm_attributes("-topmost", 1)
71+
for container in self.containers:
72+
container.wm_attributes("-topmost", 1)
6273

6374
def set_full_screen_always_on_top(self):
64-
controller = self
65-
controller.geometry(self.get_current_window_geometry())
6675
self.set_always_on_top()
6776
self.remove_title_bar()
6877
self.disable_resizing()
6978
top_left_screen = "+0+0"
70-
controller.geometry(top_left_screen)
71-
72-
controller.wait_visibility(controller)
73-
controller.attributes("-alpha", 1)
79+
for container in self.containers:
80+
container.geometry(self.get_current_window_geometry())
81+
container.geometry(top_left_screen)
82+
container.wait_visibility(container)
83+
container.attributes("-alpha", 1)
7484

7585
def set_partial_screen_transparent(self):
76-
screenwidth = self.winfo_screenwidth()
77-
screenheight = self.winfo_screenheight()
78-
79-
controller = self
80-
8186
self.set_always_on_top()
8287
self.remove_title_bar()
8388
self.disable_resizing()
84-
85-
window_width = int(screenwidth * 0.3)
86-
window_height = int(screenheight * 0.3)
87-
window_size = "{0}x{1}+0+0".format(window_width, window_height)
88-
controller.geometry(window_size)
89-
controller.attributes("-alpha", 0.3)
89+
for controller in self.containers:
90+
screenwidth = self.winfo_screenwidth()
91+
screenheight = self.winfo_screenheight()
92+
window_width = int(screenwidth * 0.3)
93+
window_height = int(screenheight * 0.3)
94+
window_size = "{0}x{1}+0+0".format(window_width, window_height)
95+
controller.geometry(window_size)
96+
controller.attributes("-alpha", 0.3)
9097
self.toggle_transparent_frame_position()
9198

9299
def toggle_transparent_frame_position(self, e=None):
93100
screenwidth = self.winfo_screenwidth()
94101
screenheight = self.winfo_screenheight()
95102

96-
controller = self
97-
98103
self.set_always_on_top()
99104
self.remove_title_bar()
100105
self.disable_resizing()
@@ -108,4 +113,5 @@ def toggle_transparent_frame_position(self, e=None):
108113
self.transparent_frame_position = 0
109114

110115
bottom_left_screen = "+{}+{}".format(self.transparent_frame_position, screenheight - window_height)
111-
controller.geometry(bottom_left_screen)
116+
for controller in self.containers:
117+
controller.geometry(bottom_left_screen)

Frames/ScreenBlockerFrame.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
from tkinter import *
2-
from Frames.TransparentCountdownFrame import TransparentCountdownFrame
2+
3+
from Frames.MobFrame import MobFrame
34

45

56
class ScreenBlockerFrame(Frame):
6-
def __init__(self, parent, controller, time_options_manager, mobber_manager, countdown_manager, **kwargs):
7-
super().__init__(parent, **kwargs)
7+
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, **kwargs):
8+
super().__init__(master, **kwargs)
9+
self.master = master
810
self.controller = controller
911
self.countdown_manager = countdown_manager
1012
self.time_options_manager = time_options_manager
@@ -13,6 +15,7 @@ def __init__(self, parent, controller, time_options_manager, mobber_manager, cou
1315
self.time_options_manager.subscribe_to_timechange(self.time_change_callback)
1416
self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback)
1517

18+
1619
def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index ):
1720
self.names_list.delete(0, END)
1821
for index in range(0, mobber_list.__len__()):
@@ -34,7 +37,7 @@ def toggle_geometry(self, event):
3437
self._geom = geom
3538

3639
def build_window_content(self):
37-
center_frame = Frame(self)
40+
center_frame = self
3841

3942
row_index = 0
4043
title = Label(center_frame, text="Mobbing Timer", font="Helvetica 40 bold italic")
@@ -97,7 +100,7 @@ def build_window_content(self):
97100
start_button.bind("<Button-1>", self.launch_transparent_countdown)
98101
row_index += 1
99102

100-
center_frame.pack(anchor=CENTER, pady=60)
103+
center_frame.grid(row=0, column=0, sticky="nsew")
101104

102105
def launch_transparent_countdown(self, event):
103106
self.countdown_manager.set_countdown_duration(self.time_options_manager.minutes, self.time_options_manager.seconds)

Frames/TransparentCountdownFrame.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
from tkinter import *
22

3+
from Frames.MobFrame import MobFrame
4+
35

46
class TransparentCountdownFrame(Frame):
5-
def __init__(self, parent, controller, time_options_manager, mobber_manager, countdown_manager, **kwargs):
6-
super().__init__(parent, **kwargs)
7-
self.master = parent
7+
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, **kwargs):
8+
super().__init__(master, **kwargs)
9+
self.master = master
810
self.controller = controller
911
self.create_frame_content()
1012
self.mobber_manager = mobber_manager
1113
self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback)
1214
countdown_manager.subscribe_to_time_changes(self.update_time_change_callback)
1315

1416

17+
1518
def update_time_change_callback(self, days, minutes, seconds):
1619
if days< 0 or minutes < 0 or seconds < 0:
1720
self.controller.show_screen_blocker_frame()

0 commit comments

Comments
 (0)