Skip to content

Commit a22dfc1

Browse files
committed
Refactored forms to Frames
1 parent f9a5a52 commit a22dfc1

File tree

5 files changed

+200
-0
lines changed

5 files changed

+200
-0
lines changed

Frames/MobTimerController.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from tkinter import *
2+
3+
from Infrastructure.MobberManager import MobberManager
4+
from Infrastructure.TimeOptionsManager import TimeOptionsManager
5+
from Frames.ScreenBlockerFrame import ScreenBlockerFrame
6+
from Frames.TransparentCountdownFrame import TransparentCountdownFrame
7+
8+
9+
class MobTimerController(Tk):
10+
11+
def __init__(self, *args, **kwargs):
12+
Tk.__init__(self, *args, **kwargs)
13+
14+
container = Frame(self)
15+
container.pack(side="top", fill="both", expand=True)
16+
container.grid_rowconfigure(0, weight=1)
17+
container.grid_columnconfigure(0, weight=1)
18+
19+
time_options_manager = TimeOptionsManager()
20+
mobber_manager = MobberManager()
21+
22+
self.frames = {}
23+
for F in (ScreenBlockerFrame, TransparentCountdownFrame):
24+
frame = F(container, self, time_options_manager, mobber_manager)
25+
self.frames[F] = frame
26+
frame.grid(row=0, column=0, sticky="nsew")
27+
28+
self.show_frame(ScreenBlockerFrame)
29+
30+
def show_frame(self, frame_class):
31+
frame = self.frames[frame_class]
32+
frame.tkraise()
33+
34+
def show_screen_blocker_frame(self):
35+
self.show_frame(ScreenBlockerFrame)
36+
37+
def show_transparent_countdown_frame(self):
38+
self.show_frame(TransparentCountdownFrame)

Frames/ScreenBlockerFrame.py

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
from tkinter import *
2+
3+
from Frames.TransparentCountdownFrame import TransparentCountdownFrame
4+
5+
6+
class ScreenBlockerFrame(Frame):
7+
def __init__(self, parent, controller, time_options_manager, mobber_manager, **kwargs):
8+
super().__init__(parent,**kwargs)
9+
self.controller = controller
10+
11+
self._geom = '200x200+0+0'
12+
13+
self.time_options_manager = time_options_manager
14+
self.mobber_manager = mobber_manager
15+
self.set_window_properties(controller)
16+
self.build_window_content()
17+
self.time_options_manager.subscribe_to_timechange(self.time_change_callback)
18+
self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback)
19+
20+
def mobber_list_change_callback(self, mobber_list):
21+
self.names_list.delete(0, END)
22+
for index in range(0, mobber_list.__len__()):
23+
name = mobber_list[index]
24+
if index == 0:
25+
name += " <= Driver"
26+
if index == 1:
27+
name += " <= Navigator"
28+
self.names_list.insert(END, name)
29+
30+
def time_change_callback(self, time, minutes, seconds):
31+
self.label_minutes['text'] = "{0:0>2}".format(minutes)
32+
self.label_seconds['text'] = "{0:0>2}".format(seconds)
33+
34+
def set_window_properties(self, controller):
35+
controller.geometry(self.get_current_window_geomitry(controller, 0))
36+
controller.bind('<Escape>', self.toggle_geometry)
37+
self.set_always_on_top(controller)
38+
self.remove_title_bar(controller)
39+
self.disable_resizing(controller)
40+
41+
def get_current_window_geomitry(self, master, pad):
42+
return "{0}x{1}+0+0".format(
43+
master.winfo_screenwidth() - pad, master.winfo_screenheight() - pad)
44+
45+
def disable_resizing(self, master):
46+
master.resizable(0, 0)
47+
48+
def remove_title_bar(self, master):
49+
master.overrideredirect(1)
50+
51+
def set_always_on_top(self, master):
52+
master.wm_attributes("-topmost", 1)
53+
54+
def toggle_geometry(self, event):
55+
geom = self.controller.winfo_geometry()
56+
print(geom, self._geom)
57+
self.controller.geometry(self._geom)
58+
self._geom = geom
59+
60+
def build_window_content(self):
61+
center_frame = Frame(self)
62+
63+
row_index = 0
64+
title = Label(center_frame, text="Mobbing Timer", font="Helvetica 40 bold italic")
65+
title.grid(row=row_index, columnspan=3, padx=30, pady=30, sticky=N + W + E)
66+
row_index += 1
67+
68+
title = Label(center_frame, text="Left Click to Increase, Right Click to Decrease", font="Helvetica 16 bold")
69+
title.grid(row=row_index, columnspan=3, padx=30, pady=0, sticky=N)
70+
row_index += 1
71+
72+
self.label_minutes = Label(center_frame, text="10", font="Helvetica 180 bold")
73+
self.label_minutes.grid(row=row_index, column=0, sticky=E)
74+
self.label_minutes.bind("<Button-1>", lambda event: self.time_options_manager.increment_minutes())
75+
self.label_minutes.bind("<Button-3>", lambda event: self.time_options_manager.decrement_minutes())
76+
77+
label_colon = Label(center_frame, text=":", font="Helvetica 180 bold")
78+
label_colon.grid(row=row_index, column=1, sticky=N)
79+
80+
self.label_seconds = Label(center_frame, text="30", font="Helvetica 180 bold")
81+
self.label_seconds.grid(row=row_index, column=2, sticky=W)
82+
self.label_seconds.bind("<Button-1>", lambda event: self.time_options_manager.increment_seconds())
83+
self.label_seconds.bind("<Button-3>", lambda event: self.time_options_manager.decrement_seconds())
84+
row_index += 1
85+
86+
self.label_current_mobber = Label(center_frame, text="Mobber Sit At the Keyboard", font="Helvetica 50 bold")
87+
self.label_current_mobber.grid(row=row_index, columnspan=3, padx=30, pady=0, sticky=N)
88+
row_index += 1
89+
90+
self.label_next_mobber = Label(center_frame, text="Next Mobber get ready!", font="Helvetica 16 bold")
91+
self.label_next_mobber.grid(row=row_index, columnspan=3, padx=30, pady=0, sticky=N)
92+
row_index += 1
93+
94+
self.add_mobber_entry = Entry(center_frame, text="Add Mobber", font="Helvetica 16 bold")
95+
self.add_mobber_entry.grid(row=row_index, columnspan=2, sticky=N + E + W, padx=10, pady=10)
96+
self.add_mobber_entry.bind("<Return>", self.add_mobber_left_click)
97+
98+
add_mobber_button = Button(center_frame, text="Add Mobber")
99+
add_mobber_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
100+
add_mobber_button.bind("<Button-1>", self.add_mobber_left_click)
101+
row_index += 1
102+
103+
self.names_list = Listbox(center_frame, font="Helvetica 16 bold")
104+
self.names_list.grid(row=row_index, rowspan=4, columnspan=2, column=0, padx=10, pady=10, sticky=N + E + W)
105+
106+
remove_mobber_button = Button(center_frame, text="Remove Mobber")
107+
remove_mobber_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
108+
remove_mobber_button.bind("<Button-1>", lambda event: self.mobber_manager.remove_mobber(
109+
int(self.names_list.curselection()[0])))
110+
row_index += 1
111+
112+
move_mobber_up_button = Button(center_frame, text="Move Mobber Up")
113+
move_mobber_up_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
114+
move_mobber_up_button.bind("<Button-1>", self.move_mobber_up_left_click)
115+
row_index += 1
116+
117+
move_mobber_down_button = Button(center_frame, text="Move Mobber Down")
118+
move_mobber_down_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
119+
move_mobber_down_button.bind("<Button-1>", self.move_mobber_down_left_click)
120+
row_index += 1
121+
122+
clear_mobbers_button = Button(center_frame, text="Clear Mobbers")
123+
clear_mobbers_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
124+
clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.clear())
125+
row_index += 1
126+
127+
start_button = Button(center_frame, text="Start Mobbing!", font="Helvetica 30 bold")
128+
start_button.grid(row=row_index, columnspan=3, sticky=N + E + W, padx=10, pady=10)
129+
start_button.bind("<Button-1>", self.launch_transparent_countdown)
130+
row_index += 1
131+
132+
center_frame.pack(anchor=CENTER, pady=60)
133+
134+
def launch_transparent_countdown(self, event):
135+
self.controller.show_transparent_countdown_frame()
136+
137+
def move_mobber_down_left_click(self, event):
138+
selected_index = int(self.names_list.curselection()[0])
139+
self.mobber_manager.move_mobber_down(selected_index)
140+
self.names_list.select_set((selected_index + 1) % self.mobber_manager.mobber_count())
141+
142+
def move_mobber_up_left_click(self, event):
143+
selected_index = int(self.names_list.curselection()[0])
144+
self.mobber_manager.move_mobber_up(selected_index)
145+
count = self.mobber_manager.mobber_count()
146+
self.names_list.select_set((count + selected_index - 1) % count)
147+
148+
def add_mobber_left_click(self, event):
149+
self.mobber_manager.add_mobber(self.add_mobber_entry.get())
150+
self.add_mobber_entry.delete(0, END)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from tkinter import Frame, Message, Button
2+
3+
4+
class TransparentCountdownFrame(Frame):
5+
def __init__(self, parent, controller, time_options_manager, mobber_manager, **kwargs):
6+
super().__init__(parent, **kwargs)
7+
self.master = parent
8+
msg = Message(self, text="hello world")
9+
msg.pack()
10+
11+
button = Button(self, text="Dismiss", command=controller.show_screen_blocker_frame)
12+
button.pack()

Frames/__init__.py

Whitespace-only changes.
-7.16 KB
Binary file not shown.

0 commit comments

Comments
 (0)