Skip to content

Commit 666e0ed

Browse files
committed
Added Config File and Ctrl + Enter to Start Timermer
1 parent 22ca649 commit 666e0ed

File tree

8 files changed

+185
-83
lines changed

8 files changed

+185
-83
lines changed

Frames/MobTimerController.py

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1+
import atexit
12
import uuid
23
from tkinter import *
4+
from tkinter import ttk
35

4-
import atexit
6+
from screeninfo import *
57

8+
from Frames.ScreenBlockerFrame import ScreenBlockerFrame
9+
from Frames.TransparentCountdownFrame import TransparentCountdownFrame
610
from Infrastructure.CountdownManager import CountdownManager
711
from Infrastructure.MobberManager import MobberManager
812
from Infrastructure.SessionManager import SessionManager
13+
from Infrastructure.SettingsManager import SettingsManager
914
from Infrastructure.TimeOptionsManager import TimeOptionsManager
10-
from Frames.ScreenBlockerFrame import ScreenBlockerFrame
11-
from Frames.TransparentCountdownFrame import TransparentCountdownFrame
12-
from screeninfo import *
1315

1416

1517
class MobTimerController(Tk):
1618
def __init__(self, *args, **kwargs):
1719
Tk.__init__(self, *args, **kwargs)
20+
self.settings_manager = SettingsManager()
1821

19-
# self.iconbitmap(default='C:\\Users\\Chris\\OneDrive\\Git\\Pycharm\\MobTimer\\time-bomb.ico')
20-
#TODO: iconbitmap needs to load the ico file as a string because of py2exe =/
2122
self.time_options_manager = TimeOptionsManager()
2223
self.mobber_manager = MobberManager()
2324
self.countdown_manager = CountdownManager(self)
@@ -30,6 +31,12 @@ def __init__(self, *args, **kwargs):
3031

3132
self.countdown_manager.subscribe_to_time_changes(self.show_screen_blocker_when_session_interupted)
3233

34+
style = ttk.Style()
35+
print(style.theme_names())
36+
theme = self.settings_manager.get_general_theme()
37+
if theme != "none":
38+
style.theme_use(theme)
39+
3340
monitors = get_monitors()
3441
num_monitors = monitors.__len__()
3542
self.containers = [self]
@@ -41,15 +48,21 @@ def __init__(self, *args, **kwargs):
4148
for frame_type in self.frame_types:
4249
self.frames[frame_type] = []
4350
for container in self.containers:
44-
container_frame = Frame(container)
45-
container_frame.grid(row=0, column=0, sticky=N + S + E + W)
51+
container.grid_rowconfigure(0, weight=1)
52+
container.grid_columnconfigure(0, weight=1)
53+
54+
container_frame = ttk.Frame(container)
55+
56+
container_frame.grid(row=0, column=0, sticky=(N , S , E , W))
4657
container_frame.grid_rowconfigure(0, weight=1)
4758
container_frame.grid_columnconfigure(0, weight=1)
4859
for frame_type in self.frame_types:
4960
frame_instance = frame_type(container_frame, self, self.time_options_manager, self.mobber_manager,
50-
self.countdown_manager)
61+
self.countdown_manager, self.settings_manager)
5162
self.frames[frame_type].append(frame_instance)
52-
frame_instance.grid(row=0, column=0, sticky="nsew")
63+
frame_instance.grid(row=0, column=0, sticky=(N , S , E , W))
64+
frame_instance.grid_rowconfigure(0, weight=1)
65+
frame_instance.grid_columnconfigure(0, weight=1)
5366
self.last_frame = None
5467
self.show_screen_blocker_frame()
5568
for frame_instance in self.frames[TransparentCountdownFrame]:
@@ -121,11 +134,14 @@ def set_partial_screen_transparent(self):
121134
for controller in self.containers:
122135
screenwidth = self.winfo_screenwidth()
123136
screenheight = self.winfo_screenheight()
124-
window_width = int(screenwidth * 0.3)
125-
window_height = int(screenheight * 0.3)
137+
138+
size_percentage = self.settings_manager.get_transparent_window_screen_size_percent()
139+
alpha = self.settings_manager.get_transparent_window_alpha_percent()
140+
window_width = int(screenwidth * size_percentage)
141+
window_height = int(screenheight * size_percentage)
126142
window_size = "{0}x{1}+0+0".format(window_width, window_height)
127143
controller.geometry(window_size)
128-
controller.attributes("-alpha", 0.3)
144+
controller.attributes("-alpha", alpha)
129145
self.toggle_transparent_frame_position()
130146

131147
def toggle_transparent_frame_position(self, e=None):
@@ -136,8 +152,10 @@ def toggle_transparent_frame_position(self, e=None):
136152
self.remove_title_bar()
137153
self.disable_resizing()
138154

139-
window_width = int(screenwidth * 0.3)
140-
window_height = int(screenheight * 0.3)
155+
size_percentage = self.settings_manager.get_transparent_window_screen_size_percent()
156+
157+
window_width = int(screenwidth * size_percentage)
158+
window_height = int(screenheight * size_percentage)
141159

142160
if self.transparent_frame_position == 0:
143161
self.transparent_frame_position = screenwidth - window_width

Frames/ScreenBlockerFrame.py

Lines changed: 64 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,32 @@
11
from tkinter import *
2+
from tkinter import ttk
23

34

4-
class ScreenBlockerFrame(Frame):
5-
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, **kwargs):
5+
class ScreenBlockerFrame(ttk.Frame):
6+
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager,
7+
**kwargs):
68
super().__init__(master, **kwargs)
9+
710
self.master = master
811
self.controller = controller
912
self.countdown_manager = countdown_manager
1013
self.time_options_manager = time_options_manager
1114
self.mobber_manager = mobber_manager
15+
self.settings_manager = settings_manager
1216
self.build_window_content()
1317
self.time_options_manager.subscribe_to_timechange(self.time_change_callback)
1418
self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback)
1519

16-
17-
def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index ):
18-
self.names_list.delete(0, END)
20+
def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index):
21+
for i in self.names_list.get_children():
22+
self.names_list.delete(i)
1923
for index in range(0, mobber_list.__len__()):
2024
name = mobber_list[index]
2125
if index == driver_index:
22-
name += " <= Current Driver"
26+
name += " <= Current"
2327
if index == navigator_index:
24-
name += " <= Next Driver"
25-
self.names_list.insert(END, name)
28+
name += " <= Next"
29+
self.names_list.insert('', END, text=name)
2630

2731
def time_change_callback(self, time, minutes, seconds):
2832
self.label_minutes['text'] = "{0:0>2}".format(minutes)
@@ -35,100 +39,113 @@ def toggle_geometry(self, event):
3539
self._geom = geom
3640

3741
def build_window_content(self):
38-
center_frame = self
42+
center_frame = Frame(self)
43+
center_frame.grid(row=0, column=0)
44+
center_frame.grid_columnconfigure(0, weight=1)
45+
center_frame.grid_columnconfigure(1, weight=0)
46+
center_frame.grid_columnconfigure(2, weight=0)
47+
center_frame.grid_columnconfigure(3, weight=0)
48+
center_frame.grid_columnconfigure(4, weight=1)
3949

4050
row_index = 0
41-
title = Label(center_frame, text="Mobbing Timer", font="Helvetica 40 bold italic")
42-
title.grid(row=row_index, columnspan=3, padx=30, pady=30, sticky=N + W + E)
51+
title = ttk.Label(center_frame, text="Mobbing Timer", font="Helvetica 40 bold italic")
52+
title.grid(row=row_index, columnspan=5, padx=30, pady=50)
4353
row_index += 1
4454

45-
title = Label(center_frame, text="Left Click to Increase, Right Click to Decrease", font="Helvetica 16 bold")
46-
title.grid(row=row_index, columnspan=3, padx=30, pady=0, sticky=N)
55+
title = ttk.Label(center_frame, text="Left Click to Increase, Right Click to Decrease",
56+
font="Helvetica 16 bold")
57+
title.grid(row=row_index, columnspan=5, padx=30, pady=0)
4758
row_index += 1
4859

49-
self.label_minutes = Label(center_frame, text="10", font="Helvetica 180 bold")
50-
self.label_minutes.grid(row=row_index, column=0, sticky=E)
60+
61+
62+
self.label_minutes = ttk.Label(center_frame, text="10", font="Helvetica 180 bold")
63+
self.label_minutes.grid(row=row_index, column=1, sticky=E)
5164
self.label_minutes.bind("<Button-1>", lambda event: self.time_options_manager.increment_minutes())
5265
self.label_minutes.bind("<Button-3>", lambda event: self.time_options_manager.decrement_minutes())
5366

54-
label_colon = Label(center_frame, text=":", font="Helvetica 180 bold")
55-
label_colon.grid(row=row_index, column=1, sticky=N)
67+
label_colon = ttk.Label(center_frame, text=":", font="Helvetica 180 bold")
68+
label_colon.grid(row=row_index, column=2, sticky=N)
5669

57-
self.label_seconds = Label(center_frame, text="30", font="Helvetica 180 bold")
58-
self.label_seconds.grid(row=row_index, column=2, sticky=W)
70+
self.label_seconds = ttk.Label(center_frame, text="30", font="Helvetica 180 bold")
71+
self.label_seconds.grid(row=row_index, column=3, sticky=W)
5972
self.label_seconds.bind("<Button-1>", lambda event: self.time_options_manager.increment_seconds())
6073
self.label_seconds.bind("<Button-3>", lambda event: self.time_options_manager.decrement_seconds())
6174
row_index += 1
6275

63-
self.add_mobber_entry = Entry(center_frame, text="Add Mobber", font="Helvetica 16 bold")
64-
self.add_mobber_entry.grid(row=row_index, columnspan=2, sticky=N + E + W, padx=10, pady=10)
76+
self.add_mobber_entry = ttk.Entry(center_frame, text="Add Mobber", font="Helvetica 16 bold")
77+
self.add_mobber_entry.grid(row=row_index, column = 1, columnspan=2, sticky=N + E + W, padx=10, pady=10)
6578
self.add_mobber_entry.bind("<Return>", self.add_mobber_left_click)
79+
self.add_mobber_entry.bind("<Control-Return>", self.launch_transparent_countdown)
6680

67-
add_mobber_button = Button(center_frame, text="Add Mobber")
68-
add_mobber_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
81+
add_mobber_button = ttk.Button(center_frame, text="Add Mobber")
82+
add_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=10, pady=10)
6983
add_mobber_button.bind("<Button-1>", self.add_mobber_left_click)
7084
row_index += 1
7185

72-
self.names_list = Listbox(center_frame, font="Helvetica 16 bold")
73-
self.names_list.grid(row=row_index, rowspan=6, columnspan=2, column=0, padx=10, pady=10, sticky=N + E + W)
86+
self.names_list = ttk.Treeview(center_frame)
87+
self.names_list.grid(row=row_index, rowspan=6, columnspan=2, column=1, padx=10, pady=10, sticky=N + E + W)
7488

75-
remove_mobber_button = Button(center_frame, text="Remove Mobber")
76-
remove_mobber_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
89+
remove_mobber_button = ttk.Button(center_frame, text="Remove Mobber")
90+
remove_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=10, pady=10)
7791
remove_mobber_button.bind("<Button-1>", lambda event: self.mobber_manager.remove_mobber(
78-
int(self.names_list.curselection()[0])))
92+
int(self.names_list.index(self.names_list.selection()))))
7993
row_index += 1
8094

81-
move_mobber_up_button = Button(center_frame, text="Move Mobber Up")
82-
move_mobber_up_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
95+
move_mobber_up_button = ttk.Button(center_frame, text="Move Mobber Up")
96+
move_mobber_up_button.grid(row=row_index, column=3, sticky=N + E + W, padx=10, pady=10)
8397
move_mobber_up_button.bind("<Button-1>", self.move_mobber_up_left_click)
8498
row_index += 1
8599

86-
move_mobber_down_button = Button(center_frame, text="Move Mobber Down")
87-
move_mobber_down_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
100+
move_mobber_down_button = ttk.Button(center_frame, text="Move Mobber Down")
101+
move_mobber_down_button.grid(row=row_index, column=3, sticky=N + E + W, padx=10, pady=10)
88102
move_mobber_down_button.bind("<Button-1>", self.move_mobber_down_left_click)
89103
row_index += 1
90104

91-
clear_mobbers_button = Button(center_frame, text="Clear Mobbers")
92-
clear_mobbers_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
105+
clear_mobbers_button = ttk.Button(center_frame, text="Clear Mobbers")
106+
clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=10, pady=10)
93107
clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.clear())
94108
row_index += 1
95109

96-
clear_mobbers_button = Button(center_frame, text="Skip Driver")
97-
clear_mobbers_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
110+
clear_mobbers_button = ttk.Button(center_frame, text="Skip Driver")
111+
clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=10, pady=10)
98112
clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.switch_navigator_driver())
99113
row_index += 1
100114

101-
clear_mobbers_button = Button(center_frame, text="Rewind Driver")
102-
clear_mobbers_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
115+
clear_mobbers_button = ttk.Button(center_frame, text="Rewind Driver")
116+
clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=10, pady=10)
103117
clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.rewind_driver())
104118
row_index += 1
105119

106-
start_button = Button(center_frame, text="Start Mobbing!", font="Helvetica 30 bold")
107-
start_button.grid(row=row_index, columnspan=3, sticky=N + E + W, padx=10, pady=10)
120+
start_button = ttk.Button(center_frame, text="Start Mobbing!")
121+
start_button.grid(row=row_index, column=1,columnspan=3, sticky=N + E + W, padx=10, pady=10)
108122
start_button.bind("<Button-1>", self.launch_transparent_countdown)
109123
row_index += 1
110124

111-
start_button = Button(center_frame, text="Quit Mobbing!", font="Helvetica 10 bold")
112-
start_button.grid(row=row_index, columnspan=3, sticky=N + E + W, padx=50, pady=10)
125+
start_button = ttk.Button(center_frame, text="Quit Mobbing!")
126+
start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=50, pady=10)
113127
start_button.bind("<Button-1>", lambda event: self.controller.quit_and_destroy_session())
114128
row_index += 1
115129

116130
center_frame.grid(row=0, column=0, sticky="nsew")
117131

118132
def launch_transparent_countdown(self, event):
119-
self.countdown_manager.set_countdown_duration(self.time_options_manager.minutes, self.time_options_manager.seconds)
133+
self.countdown_manager.set_countdown_duration(self.time_options_manager.minutes,
134+
self.time_options_manager.seconds)
120135
self.controller.show_transparent_countdown_frame()
121136

122137
def move_mobber_down_left_click(self, event):
123-
selected_index = int(self.names_list.curselection()[0])
138+
selected_items = self.names_list.selection()
139+
selected_index = int(int(self.names_list.index(selected_items)))
124140
self.mobber_manager.move_mobber_down(selected_index)
125-
self.names_list.select_set((selected_index + 1) % self.mobber_manager.mobber_count())
141+
self.names_list.selection_set(
142+
self.names_list.get_children()[(selected_index + 1) % self.mobber_manager.mobber_count()])
126143

127144
def move_mobber_up_left_click(self, event):
128-
selected_index = int(self.names_list.curselection()[0])
145+
selected_index = int(int(self.names_list.index(self.names_list.selection())))
129146
self.mobber_manager.move_mobber_up(selected_index)
130147
count = self.mobber_manager.mobber_count()
131-
self.names_list.select_set((count + selected_index - 1) % count)
148+
self.names_list.selection_set(self.names_list.get_children()[((count + selected_index - 1) % count)])
132149

133150
def add_mobber_left_click(self, event):
134151
self.mobber_manager.add_mobber(self.add_mobber_entry.get())
Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
from tkinter import *
2+
from tkinter import ttk
23

4+
from Infrastructure.SettingsManager import SettingsManager
35

4-
class TransparentCountdownFrame(Frame):
5-
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, **kwargs):
6+
7+
class TransparentCountdownFrame(ttk.Frame):
8+
def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager,
9+
**kwargs):
610
super().__init__(master, **kwargs)
711
self.master = master
812
self.controller = controller
9-
self.create_frame_content()
1013
self.mobber_manager = mobber_manager
14+
self.settings_manager = settings_manager # type: SettingsManager
15+
16+
self.create_frame_content()
1117
self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback)
1218
countdown_manager.subscribe_to_time_changes(self.update_time_change_callback)
1319

14-
15-
1620
def update_time_change_callback(self, days, minutes, seconds):
17-
if days< 0 or minutes < 0 or seconds < 0:
21+
if days < 0 or minutes < 0 or seconds < 0:
1822
self.controller.show_screen_blocker_frame()
1923
self.label_minutes['text'] = "{0:0>2}".format(minutes)
2024
self.label_seconds['text'] = "{0:0>2}".format(seconds)
@@ -32,22 +36,27 @@ def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index
3236

3337
def create_frame_content(self):
3438
row_index = 0
35-
self.label_minutes = Label(self, text="10", font="Helvetica 120 bold")
36-
self.label_minutes.grid(row=row_index, column=0, sticky=E)
37-
label_colon = Label(self, text=":", font="Helvetica 120 bold")
39+
count_down_timer_font = "Helvetica {} bold".format(self.settings_manager.get_transparent_window_count_down_timer_font_size())
40+
self.label_minutes = ttk.Label(self, text="10", font=count_down_timer_font)
41+
self.label_minutes.grid(row=row_index, column=0, sticky=(N, E))
42+
label_colon = ttk.Label(self, text=":", font=count_down_timer_font)
3843
label_colon.grid(row=row_index, column=1, sticky=N)
39-
self.label_seconds = Label(self, text="30", font="Helvetica 120 bold")
40-
self.label_seconds.grid(row=row_index, column=2, sticky=W)
44+
self.label_seconds = ttk.Label(self, text="30", font=count_down_timer_font)
45+
self.label_seconds.grid(row=row_index, column=2, sticky=(N,W))
46+
4147
row_index += 1
42-
self.label_driver = Label(self, text=self.get_driver_text(""), font="Helvetica 20 bold")
43-
self.label_driver.grid(row=row_index, columnspan=3, sticky=E)
48+
next_driver_font = "Helvetica {} bold".format(self.settings_manager.get_transparent_window_next_driver_font_size())
49+
self.label_navigator = ttk.Label(self, text=self.get_navigator_text(""), font=next_driver_font)
50+
self.label_navigator.grid(row=row_index, columnspan=3, sticky=(N,W))
51+
4452
row_index += 1
45-
self.label_navigator = Label(self, text=self.get_navigator_text(""), font="Helvetica 20 bold")
46-
self.label_navigator.grid(row=row_index, columnspan=3, sticky=E)
53+
driver_font = "Helvetica {} bold".format(self.settings_manager.get_transparent_window_driver_font_size())
54+
self.label_driver = ttk.Label(self, text=self.get_driver_text(""), font=driver_font)
55+
self.label_driver.grid(row=row_index, columnspan=3, sticky=(N,W))
4756
row_index += 1
4857

49-
def get_navigator_text(self,name ):
50-
return "Next Driver: " + name
58+
def get_navigator_text(self, name):
59+
return "Next: " + name
5160

5261
def get_driver_text(self, name):
53-
return "Current Driver: " + name
62+
return "Current: " + name

Infrastructure/Sessions/1ee469da-ae0a-11e5-a04e-20c9d042e8c0 renamed to Infrastructure/Sessions/46c7a918-af9e-11e5-8536-20c9d042e8c0

File renamed without changes.

0 commit comments

Comments
 (0)