Skip to content

Commit 2d1184f

Browse files
committed
Mobber manager is wired to GUI
1 parent 5848efe commit 2d1184f

File tree

5 files changed

+81
-50
lines changed

5 files changed

+81
-50
lines changed

Infrastructure/MobberManager.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class MobberManager(object):
2+
def __init__(self):
3+
self.mobber_list = []
4+
self.mobber_list_change_callbacks = []
5+
6+
def mobber_count(self):
7+
return self.mobber_list.__len__()
8+
9+
def add_mobber(self, mobber_name):
10+
self.mobber_list.append(mobber_name)
11+
self.fire_time_change_callbacks()
12+
13+
def get_mobbers(self):
14+
return self.mobber_list
15+
16+
def remove_mobber(self, remove_mobber_index):
17+
if self.mobber_count() == 0: return
18+
del self.mobber_list[remove_mobber_index]
19+
self.fire_time_change_callbacks()
20+
21+
def move_mobber_up(self, swap_index):
22+
if self.mobber_count() == 0: return
23+
destination_index = swap_index - 1
24+
self.mobber_list[swap_index], self.mobber_list[destination_index] = self.mobber_list[destination_index], \
25+
self.mobber_list[swap_index]
26+
self.fire_time_change_callbacks()
27+
28+
def move_mobber_down(self, swap_index):
29+
if self.mobber_count() == 0: return
30+
destination_index = (swap_index + 1) % self.mobber_list.__len__()
31+
self.mobber_list[swap_index], self.mobber_list[destination_index] = self.mobber_list[destination_index], \
32+
self.mobber_list[swap_index]
33+
self.fire_time_change_callbacks()
34+
35+
def subscribe_to_mobber_list_change(self, mobber_list_change_callback):
36+
self.mobber_list_change_callbacks.append(mobber_list_change_callback)
37+
self.fire_time_change_callbacks()
38+
39+
def fire_time_change_callbacks(self):
40+
for mobber_list_change_callback in self.mobber_list_change_callbacks:
41+
if mobber_list_change_callback:
42+
mobber_list_change_callback(self.mobber_list)
43+
44+
def clear(self):
45+
self.mobber_list = []
46+
self.fire_time_change_callbacks()

Infrastructure/__init__.py

Whitespace-only changes.

Main.py

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

3+
from Infrastructure.MobberManager import MobberManager
34
from forms.ScreenBlockerMenu import ScreenBlockerMenu
4-
from infrastructure.TimeOptionsManager import TimeOptionsManager
5+
from Infrastructure.TimeOptionsManager import TimeOptionsManager
56

67
root = Tk()
78

8-
time_optons_manager = TimeOptionsManager()
9-
screen_blocker_menu = ScreenBlockerMenu(root, time_optons_manager)
9+
time_options_manager = TimeOptionsManager()
10+
mobber_manager = MobberManager()
11+
screen_blocker_menu = ScreenBlockerMenu(root, time_options_manager, mobber_manager)
1012

1113
root.mainloop()

forms/ScreenBlockerMenu.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,24 @@
22

33

44
class ScreenBlockerMenu(Frame):
5-
def __init__(self, master, time_options_manager, **kwargs):
5+
def __init__(self, master, time_options_manager, mobber_manager, **kwargs):
66
super().__init__(master, **kwargs)
77
self.master = master
8+
89
pad = 0
910
self._geom = '200x200+0+0'
1011

1112
self.time_options_manager = time_options_manager
13+
self.mobber_manager = mobber_manager
1214
self.set_window_properties(master, pad)
1315
self.build_window_content(master)
1416
self.time_options_manager.subscribe_to_timechange(self.time_change_callback)
17+
self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback)
18+
19+
def mobber_list_change_callback(self, mobber_list):
20+
self.names_list.delete(0, END)
21+
for name in mobber_list:
22+
self.names_list.insert(END, name)
1523

1624
def time_change_callback(self, time, minutes, seconds):
1725
self.label_minutes['text'] = "{0:0>2}".format(minutes)
@@ -77,30 +85,35 @@ def build_window_content(self, master):
7785
label_up_next.grid(row=row_index, columnspan=3, padx=30, pady=0, sticky=N)
7886
row_index += 1
7987

80-
add_mobber_label = Entry(center_frame, text="Add Mobber")
81-
add_mobber_label.grid(row=row_index, columnspan=2, sticky=N + E + W, padx=10, pady=10)
88+
add_mobber_entry = Entry(center_frame, text="Add Mobber")
89+
add_mobber_entry.grid(row=row_index, columnspan=2, sticky=N + E + W, padx=10, pady=10)
8290

8391
add_mobber_button = Button(center_frame, text="Add Mobber")
8492
add_mobber_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
93+
add_mobber_button.bind("<Button-1>", lambda event: self.mobber_manager.add_mobber(add_mobber_entry.get()))
8594
row_index += 1
8695

87-
names_list = Listbox(center_frame)
88-
names_list.grid(row=row_index, rowspan=4, columnspan=2, column=0, padx=10, pady=10, sticky=N + E + W)
96+
self.names_list = Listbox(center_frame)
97+
self.names_list.grid(row=row_index, rowspan=4, columnspan=2, column=0, padx=10, pady=10, sticky=N + E + W)
8998

9099
remove_mobber_button = Button(center_frame, text="Remove Mobber")
91100
remove_mobber_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
101+
remove_mobber_button.bind("<Button-1>", lambda event: self.mobber_manager.remove_mobber(int(self.names_list.curselection()[0])))
92102
row_index += 1
93103

94104
move_mobber_up_button = Button(center_frame, text="Move Mobber Up")
95105
move_mobber_up_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
106+
move_mobber_up_button.bind("<Button-1>", lambda event: self.mobber_manager.move_mobber_up(int(self.names_list.curselection()[0])))
96107
row_index += 1
97108

98109
move_mobber_down_button = Button(center_frame, text="Move Mobber Down")
99110
move_mobber_down_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
111+
move_mobber_down_button.bind("<Button-1>", lambda event: self.mobber_manager.move_mobber_down(int(self.names_list.curselection()[0])))
100112
row_index += 1
101113

102114
clear_mobbers_button = Button(center_frame, text="Clear Mobbers")
103115
clear_mobbers_button.grid(row=row_index, column=2, sticky=N + E + W, padx=10, pady=10)
116+
clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.clear())
104117
row_index += 1
105118

106119
start_button = Button(center_frame, text="Start Mobbing!", font="Helvetica 30 bold")

tests/Infrastrcture/MobberManager/TestsMobberManager.py

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,11 @@
11
import os
22
import unittest
3+
34
from approvaltests import Approvals
45
from approvaltests.TextDiffReporter import TextDiffReporter
56

7+
from Infrastructure.MobberManager import MobberManager
68

7-
class MobberManager(object):
8-
def __init__(self):
9-
self.mobber_list = []
10-
self.mobber_list_change_callbacks = []
11-
12-
def mobber_count(self):
13-
return self.mobber_list.__len__()
14-
15-
def add_mobber(self, mobber_name):
16-
self.mobber_list.append(mobber_name)
17-
self.fire_time_change_callbacks()
18-
19-
def get_mobbers(self):
20-
return self.mobber_list
21-
22-
def remove_mobber(self, remove_mobber_index):
23-
if self.mobber_count() == 0: return
24-
del self.mobber_list[remove_mobber_index]
25-
self.fire_time_change_callbacks()
26-
27-
def move_mobber_up(self, swap_index):
28-
if self.mobber_count() == 0: return
29-
destination_index = swap_index - 1
30-
self.mobber_list[swap_index], self.mobber_list[destination_index] = self.mobber_list[destination_index], \
31-
self.mobber_list[swap_index]
32-
self.fire_time_change_callbacks()
33-
34-
def move_mobber_down(self, swap_index):
35-
if self.mobber_count() == 0: return
36-
destination_index = (swap_index + 1) % self.mobber_list.__len__()
37-
self.mobber_list[swap_index], self.mobber_list[destination_index] = self.mobber_list[destination_index], \
38-
self.mobber_list[swap_index]
39-
self.fire_time_change_callbacks()
40-
41-
def subscribe_to_mobber_list_change(self, mobber_list_change_callback):
42-
self.mobber_list_change_callbacks.append(mobber_list_change_callback)
43-
self.fire_time_change_callbacks()
44-
45-
def fire_time_change_callbacks(self):
46-
for mobber_list_change_callback in self.mobber_list_change_callbacks:
47-
if mobber_list_change_callback:
48-
mobber_list_change_callback(self.mobber_list)
499

5010
class TestsMobberManager(unittest.TestCase):
5111
def test_empty_mobber_manager_has_no_items(self):
@@ -132,6 +92,16 @@ def test_remove_empty(self):
13292
result = []
13393
self.assertEqual(mobber_manager.get_mobbers(), result)
13494

95+
def test_clear(self):
96+
mobber_manager = MobberManager()
97+
mobber_manager.add_mobber("Joe")
98+
mobber_manager.add_mobber("Chris")
99+
mobber_manager.add_mobber("Sam")
100+
mobber_manager.clear()
101+
result = []
102+
self.assertEqual(mobber_manager.get_mobbers(), result)
103+
104+
135105
def test_subscribe_to_mobber_list_changes(self):
136106
mobber_manager = MobberManager()
137107
result = { "result" : "Mobbers in List for Each Change\n", "increment" : 0}

0 commit comments

Comments
 (0)