Skip to content

Commit 214af36

Browse files
committed
Added simple start screen and randomized tips
1 parent 9fa8b49 commit 214af36

25 files changed

+254
-70
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
from tkinter import ttk, N, E, W
2+
3+
4+
class MinimalScreenBlockerFrame(ttk.Frame):
5+
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager,
6+
tips_manager,
7+
**kwargs):
8+
super().__init__(master, **kwargs)
9+
10+
self.master = master
11+
self.controller = controller
12+
self.countdown_manager = countdown_manager
13+
self.time_options_manager = time_options_manager
14+
self.mobber_manager = mobber_manager
15+
self.settings_manager = settings_manager
16+
self.build_window_content()
17+
self.tips_manager = tips_manager
18+
self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback)
19+
20+
21+
def build_window_content(self):
22+
center_frame = ttk.Frame(self)
23+
center_frame.grid(row=0, column=0)
24+
center_frame.grid_columnconfigure(0, weight=0)
25+
center_frame.grid_columnconfigure(1, weight=0)
26+
center_frame.grid_columnconfigure(2, weight=1)
27+
center_frame.grid_columnconfigure(3, weight=0)
28+
center_frame.grid_columnconfigure(4, weight=0)
29+
30+
row_index = 0
31+
32+
title = ttk.Label(center_frame, text="Mobbing Timer", font="Helvetica 60 bold italic")
33+
title.grid(row=row_index, columnspan=5, padx=150, pady=10)
34+
row_index += 1
35+
36+
self.current_mobber_label = ttk.Label(center_frame, text="", font="Helvetica 50 bold italic",
37+
style="Highlight.TLabel")
38+
self.current_mobber_label.grid(row=row_index, columnspan=5, padx=30, pady=10)
39+
row_index += 1
40+
41+
self.next_mobber_label = ttk.Label(center_frame, text="", font="Helvetica 20 bold italic")
42+
self.next_mobber_label.grid(row=row_index, columnspan=5, padx=30, pady=10)
43+
row_index += 1
44+
45+
start_button = ttk.Button(center_frame, text=" Start Mobbing! ", style="StartButton.TButton", )
46+
start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=10, pady=10)
47+
start_button.bind("<Button-1>", lambda event: self.controller.show_transparent_countdown_frame())
48+
row_index += 1
49+
50+
self.tip_text = ttk.Label(center_frame, text="", font="Helvetica 15 bold", wraplength=500)
51+
self.tip_text.grid(row=row_index, columnspan=3, padx=30, pady=10)
52+
row_index += 1
53+
54+
start_button = ttk.Button(center_frame, text="Mob Setup & Time")
55+
start_button.grid(row=row_index, column=2, columnspan=3, sticky=N + E + W, padx=90, pady=10)
56+
start_button.bind("<Button-1>", lambda event: self.controller.show_screen_blocker_frame())
57+
row_index += 1
58+
59+
start_button = ttk.Button(center_frame, text="Quit Mobbing!")
60+
start_button.grid(row=row_index, column=2, columnspan=3, sticky=N + E + W, padx=90, pady=10)
61+
start_button.bind("<Button-1>", lambda event: self.controller.quit_and_destroy_session())
62+
row_index += 1
63+
64+
def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index):
65+
self.current_mobber_label['text'] = ""
66+
self.next_mobber_label['text'] = ""
67+
for index in range(0, mobber_list.__len__()):
68+
name = mobber_list[index]
69+
if index == driver_index:
70+
self.current_mobber_label['text'] = "{}, time to drive!".format(name)
71+
if index == navigator_index:
72+
self.next_mobber_label['text'] = "{}, up next!".format(name)
73+
self.tip_text['text'] = self.tips_manager.get_random_tip()

Frames/MobFrame.py

Lines changed: 0 additions & 7 deletions
This file was deleted.

Frames/MobTimerController.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from screeninfo import *
77

8+
from Frames.MinimalScreenBlockerFrame import MinimalScreenBlockerFrame
89
from Frames.ScreenBlockerFrame import ScreenBlockerFrame
910
from Frames.TransparentCountdownFrame import TransparentCountdownFrame
1011
from Infrastructure.CountdownManager import CountdownManager
@@ -13,13 +14,14 @@
1314
from Infrastructure.SettingsManager import SettingsManager
1415
from Infrastructure.ThemeManager import ThemeManager
1516
from Infrastructure.TimeOptionsManager import TimeOptionsManager
17+
from Infrastructure.TipsManager import TipsManager
1618

1719

1820
class MobTimerController(Tk):
1921
def __init__(self, *args, **kwargs):
2022
Tk.__init__(self, *args, **kwargs)
2123
self.settings_manager = SettingsManager()
22-
24+
self.tips_manager = TipsManager()
2325
self.time_options_manager = TimeOptionsManager()
2426
self.mobber_manager = MobberManager()
2527
self.countdown_manager = CountdownManager(self)
@@ -43,7 +45,7 @@ def __init__(self, *args, **kwargs):
4345
for monitor_index in range(1, num_monitors):
4446
monitor_screen_blocker = Toplevel(self)
4547
self.containers.append(monitor_screen_blocker)
46-
self.frame_types = (ScreenBlockerFrame, TransparentCountdownFrame)
48+
self.frame_types = (ScreenBlockerFrame, TransparentCountdownFrame, MinimalScreenBlockerFrame)
4749
self.frames = {}
4850
for frame_type in self.frame_types:
4951
self.frames[frame_type] = []
@@ -58,7 +60,7 @@ def __init__(self, *args, **kwargs):
5860
container_frame.grid_columnconfigure(0, weight=1)
5961
for frame_type in self.frame_types:
6062
frame_instance = frame_type(container_frame, self, self.time_options_manager, self.mobber_manager,
61-
self.countdown_manager, self.settings_manager)
63+
self.countdown_manager, self.settings_manager, self.tips_manager)
6264
self.frames[frame_type].append(frame_instance)
6365
frame_instance.grid(row=0, column=0, sticky=(N, S, E, W))
6466
frame_instance.grid_rowconfigure(0, weight=1)
@@ -70,11 +72,16 @@ def __init__(self, *args, **kwargs):
7072
self.transparent_frame_position = 0
7173
self.title("Mob Timer")
7274
self.bind_all("<Control-Return>", self.launch_transparent_countdown_if_blocking)
75+
self.time_options_manager.set_countdown_time(self.settings_manager.get_general_minutes(), self.settings_manager.get_general_seconds())
7376

7477
def launch_transparent_countdown_if_blocking(self, event):
75-
if self.last_frame == ScreenBlockerFrame:
78+
if self.last_frame == ScreenBlockerFrame or self.last_frame == MinimalScreenBlockerFrame:
7679
self.show_transparent_countdown_frame()
7780

81+
def show_minimal_screen_blocker_frame(self):
82+
if self.last_frame != ScreenBlockerFrame:
83+
self.launch_blocking_Frame(MinimalScreenBlockerFrame)
84+
7885
def quit_and_destroy_session(self):
7986
self.session_manager.clear_sessions()
8087
self.quit()
@@ -95,10 +102,14 @@ def show_frame(self, frame_class):
95102
self.focus_force()
96103
self.focus_set()
97104
self.last_frame = frame_class
105+
98106
return switched_frames
99107

100108
def show_screen_blocker_frame(self):
101-
if self.show_frame(ScreenBlockerFrame):
109+
self.launch_blocking_Frame(ScreenBlockerFrame)
110+
111+
def launch_blocking_Frame(self, frame):
112+
if self.show_frame(frame):
102113
self.mobber_manager.switch_navigator_driver()
103114
self.set_full_screen_always_on_top()
104115

Frames/ScreenBlockerFrame.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44

55
class ScreenBlockerFrame(ttk.Frame):
6-
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager,
6+
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager,tips_manager,
77
**kwargs):
88
super().__init__(master, **kwargs)
99

@@ -18,6 +18,7 @@ def __init__(self, master, controller, time_options_manager, mobber_manager, cou
1818
self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback)
1919

2020
def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index):
21+
self.current_dev['text'] = ""
2122
for i in self.names_list.get_children():
2223
self.names_list.delete(i)
2324
for index in range(0, mobber_list.__len__()):
@@ -58,8 +59,6 @@ def build_window_content(self):
5859
title.grid(row=row_index, columnspan=5, padx=30, pady=0)
5960
row_index += 1
6061

61-
62-
6362
self.label_minutes = ttk.Label(center_frame, text="10", font="Helvetica 180 bold")
6463
self.label_minutes.grid(row=row_index, column=1, sticky=E)
6564
self.label_minutes.bind("<Button-1>", lambda event: self.time_options_manager.increment_minutes())
@@ -78,10 +77,12 @@ def build_window_content(self):
7877
self.current_dev.grid(row=row_index, columnspan=5)
7978
row_index += 1
8079

81-
self.add_mobber_entry = ttk.Entry(center_frame, style="EntryStyle.TEntry", text="Add Mobber", font="Helvetica 16 bold")
82-
self.add_mobber_entry.grid(row=row_index, column = 1, columnspan=2, sticky=N + E + W, padx=10, pady=10)
80+
self.add_mobber_entry = ttk.Entry(center_frame, style="EntryStyle.TEntry", text="Add Mobber",
81+
font="Helvetica 16 bold")
82+
self.add_mobber_entry.grid(row=row_index, column=1, columnspan=2, sticky=N + E + W, padx=10, pady=10)
8383
self.add_mobber_entry.bind("<Return>", self.add_mobber_left_click)
84-
self.add_mobber_entry.bind("<Control-Return>", self.launch_transparent_countdown)
84+
self.add_mobber_entry.bind("<Control-Return>", lambda event: self.controller.show_transparent_countdown_frame()
85+
)
8586

8687
add_mobber_button = ttk.Button(center_frame, text="Add Mobber")
8788
add_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=10, pady=10)
@@ -123,9 +124,9 @@ def build_window_content(self):
123124
clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.rewind_driver())
124125
row_index += 1
125126

126-
start_button = ttk.Button(center_frame, text="Start Mobbing!", style="StartButton.TButton",)
127-
start_button.grid(row=row_index, column=1,columnspan=3, sticky=N + E + W, padx=10, pady=10)
128-
start_button.bind("<Button-1>", self.launch_transparent_countdown)
127+
start_button = ttk.Button(center_frame, text="Start Mobbing!", style="StartButton.TButton", )
128+
start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=10, pady=10)
129+
start_button.bind("<Button-1>", lambda event: self.controller.show_transparent_countdown_frame())
129130
row_index += 1
130131

131132
start_button = ttk.Button(center_frame, text="Quit Mobbing!")
@@ -135,12 +136,10 @@ def build_window_content(self):
135136

136137
center_frame.grid(row=0, column=0, sticky="nsew")
137138

138-
self.add_mobber_entry.focus_set()
139+
self.focus_mobber_entry()
139140

140-
def launch_transparent_countdown(self, event):
141-
self.countdown_manager.set_countdown_duration(self.time_options_manager.minutes,
142-
self.time_options_manager.seconds)
143-
self.controller.show_transparent_countdown_frame()
141+
def focus_mobber_entry(self):
142+
self.add_mobber_entry.focus_set()
144143

145144
def move_mobber_down_left_click(self, event):
146145
selected_items = self.names_list.selection()

Frames/TransparentCountdownFrame.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77
class TransparentCountdownFrame(ttk.Frame):
8-
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager,
8+
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager,tips_manager,
99
**kwargs):
1010
super().__init__(master, **kwargs)
1111
self.master = master
@@ -19,7 +19,7 @@ def __init__(self, master, controller, time_options_manager, mobber_manager, cou
1919

2020
def update_time_change_callback(self, days, minutes, seconds):
2121
if days < 0 or minutes < 0 or seconds < 0:
22-
self.controller.show_screen_blocker_frame()
22+
self.controller.show_minimal_screen_blocker_frame()
2323
self.label_minutes['text'] = "{0:0>2}".format(minutes)
2424
self.label_seconds['text'] = "{0:0>2}".format(seconds)
2525

Infrastructure/MobberManager.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ def mobber_count(self):
99
return self.mobber_list.__len__()
1010

1111
def add_mobber(self, mobber_name):
12-
self.mobber_list.append(mobber_name)
13-
self.fire_time_change_callbacks()
12+
if str(mobber_name).strip() != "":
13+
self.mobber_list.append(mobber_name)
14+
self.fire_time_change_callbacks()
1415

1516
def get_mobbers(self):
1617
return self.mobber_list

Infrastructure/SettingsManager.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,35 @@
44
class SettingsManager(object):
55
TRANSPARENT_WINDOW_SETTINGS = "TRANSPARENT WINDOW SETTINGS"
66
GENERAL_SETTINGS = "GENERAL SETTINGS"
7+
TIMER_SETTINGS = "TIMER SETTINGS"
78

89
def __init__(self):
910
self.config = configparser.ConfigParser()
1011
self.config.read("MobTimer.cfg")
11-
# with open("MobTimer.cfg", 'w') as configfile:
12-
# self.config.write(configfile)
12+
self.window_settings_ = self.config[SettingsManager.TRANSPARENT_WINDOW_SETTINGS]
13+
self.general_settings_ = self.config[SettingsManager.GENERAL_SETTINGS]
14+
self.timer_settings_ = self.config[SettingsManager.TIMER_SETTINGS]
1315

1416
def get_transparent_window_screen_size_percent(self):
15-
return self.config[SettingsManager.TRANSPARENT_WINDOW_SETTINGS].getfloat("size percentage", 0.3)
17+
return self.window_settings_.getfloat("size percentage", 0.3)
1618

1719
def get_transparent_window_alpha_percent(self):
18-
return self.config[SettingsManager.TRANSPARENT_WINDOW_SETTINGS].getfloat("alpha percentage", 0.3)
20+
return self.window_settings_.getfloat("alpha percentage", 0.3)
1921

2022
def get_transparent_window_count_down_timer_font_size(self):
21-
return self.config[SettingsManager.TRANSPARENT_WINDOW_SETTINGS].getint("count down timer font size", 30)
23+
return self.window_settings_.getint("count down timer font size", 30)
2224

2325
def get_transparent_window_driver_font_size(self):
24-
return self.config[SettingsManager.TRANSPARENT_WINDOW_SETTINGS].getint("driver font size", 10)
26+
return self.window_settings_.getint("driver font size", 10)
2527

2628
def get_transparent_window_next_driver_font_size(self):
27-
return self.config[SettingsManager.TRANSPARENT_WINDOW_SETTINGS].getint("next driver font size", 10)
29+
return self.window_settings_.getint("next driver font size", 10)
2830

2931
def get_general_theme(self):
30-
return self.config[SettingsManager.GENERAL_SETTINGS].get("theme", 'none')
32+
return self.general_settings_.get("theme", 'none')
33+
34+
def get_general_minutes(self):
35+
return self.timer_settings_.getint("minutes", 10)
36+
37+
def get_general_seconds(self):
38+
return self.timer_settings_.getint("seconds", 0)

Infrastructure/ThemeManager.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def set_theme(self, theme_name):
3131
('active', highlight_color)])
3232

3333
style.configure('TLabel', background=background_color, foreground=text_color)
34+
style.configure('Highlight.TLabel', background=background_color, foreground=highlight_color)
3435
style.configure("Treeview", background=background_color,
3536
foreground=text_color, fieldbackground=background_color, font="Helvetica 16 bold")
3637
style.element_create("plain.field", "from", "clam")

Infrastructure/TipsManager.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import os, random
2+
class TipsManager(object):
3+
def __init__(self, seed = None):
4+
if seed is not None:
5+
random.seed(seed)
6+
7+
def get_random_tip(self):
8+
tips_folder = "Tips"
9+
random_file = random.choice(os.listdir("%s" % tips_folder))
10+
return "{}: {}" .format(random_file, TipsManager.random_line(tips_folder + "\\" + random_file))
11+
12+
@staticmethod
13+
def random_line(file_name):
14+
with open(file_name) as a_file:
15+
line = next(a_file)
16+
for num, aline in enumerate(a_file):
17+
if random.randrange(num + 2): continue
18+
line = aline
19+
return line

MobTimer.cfg

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
#These settings effect the transparent count down page.
22
[TRANSPARENT WINDOW SETTINGS]
3-
size percentage = 0.1
4-
alpha percentage = 0.5
3+
size percentage = 0.12
4+
alpha percentage = 0.4
55
count down timer font size = 40
6-
driver font size = 10
7-
next driver font size = 20
6+
driver font size = 25
7+
next driver font size = 30
88

99
#Theme options either 'none' or a file form the Themes folder. e.g. 'Dark'
1010
[GENERAL SETTINGS]
1111
theme = Dark
12+
13+
[TIMER SETTINGS]
14+
minutes = 5
15+
seconds = 0

0 commit comments

Comments
 (0)