def build_window_content(self): scale = self.master.monitor.height / ScreenUtility.ScreenUtility.get_expected_height( ) unique_theme = self.theme_manager.get_unique_theme_for_scale(scale) center_frame = ttk.Frame(self) center_frame.grid(row=0, column=0) center_frame.grid_columnconfigure(0, weight=1) center_frame.grid_columnconfigure(1, weight=0) center_frame.grid_columnconfigure(2, weight=0) center_frame.grid_columnconfigure(3, weight=0) center_frame.grid_columnconfigure(4, weight=1) row_index = 0 if self.settings_manager.get_general_use_logo_image(): self.image_utility = ImageUtility(self.theme_manager) background_image_width = int(800 * scale) background_image_height = int(200 * scale) self.background_image = self.image_utility.load( self.settings_manager.get_general_logo_image_name(), background_image_width, background_image_height, self.settings_manager.get_general_auto_theme_logo()) title = ttk.Label(center_frame, image=self.background_image) else: title = ttk.Label(center_frame, text="Mobbing Timer", style=unique_theme.title_style_id) pad_x_scaled = int(10 * scale) title.grid(row=row_index, columnspan=5, padx=int(30 * scale), pady=(int(70 * scale), pad_x_scaled)) row_index += 1 instructions = ttk.Label( center_frame, text= "Left Click to Increase, Right Click to Decrease, or mouse wheel", style=unique_theme.label_style_id) instructions.grid(row=row_index, columnspan=5, padx=int(30 * scale), pady=pad_x_scaled) row_index += 1 self.label_minutes = ttk.Label(center_frame, text="10", style=unique_theme.clock_style_id) self.label_minutes.grid(row=row_index, column=1, sticky=E) self.label_minutes.bind( "<Button-1>", lambda event: self.time_options_manager.increment_minutes()) self.label_minutes.bind( "<Button-3>", lambda event: self.time_options_manager.decrement_minutes()) self.label_minutes.bind("<MouseWheel>", self.mouse_wheel_minutes) label_colon = ttk.Label(center_frame, text=":", style=unique_theme.clock_style_id) label_colon.grid(row=row_index, column=2, sticky=N) self.label_seconds = ttk.Label(center_frame, text="30", style=unique_theme.clock_style_id) self.label_seconds.grid(row=row_index, column=3, sticky=W) self.label_seconds.bind( "<Button-1>", lambda event: self.time_options_manager. increment_seconds(self.click_seconds_delta)) self.label_seconds.bind( "<Button-3>", lambda event: self.time_options_manager. decrement_seconds(self.click_seconds_delta)) self.label_seconds.bind("<MouseWheel>", self.mouse_wheel_seconds) row_index += 1 self.add_mobber_entry = ttk.Entry( center_frame, style=unique_theme.entry_style_id, font=unique_theme.ttk_entry_style_cannot_specify_a_font_bug) self.add_mobber_entry.grid(row=row_index, column=1, columnspan=2, sticky=N + E + W, padx=pad_x_scaled) self.add_mobber_entry.bind("<Return>", self.add_mobber_left_click) self.add_mobber_entry.bind( "<Control-Return>", lambda event: self.controller.show_transparent_countdown_frame()) button_pad = (int(15 * scale), 0) add_mobber_button = ttk.Button(center_frame, text="Add Mobber", style=unique_theme.button_style_id) add_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=0) add_mobber_button.bind("<Button-1>", self.add_mobber_left_click) row_index += 1 self.names_list = ttk.Treeview(center_frame, style=unique_theme.treeview_style_id) self.names_list.tag_configure( TAGNAME_CURRENT_MOBBER, background=self.theme_manager.highlight_color, foreground=self.theme_manager.background_color) self.names_list['show'] = 'tree' self.names_list.grid(row=row_index, rowspan=7, columnspan=2, column=1, padx=pad_x_scaled, pady=button_pad, sticky=N + E + W + S) remove_mobber_button = ttk.Button(center_frame, text="Remove Mobber", style=unique_theme.button_style_id) remove_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) remove_mobber_button.bind( "<Button-1>", lambda event: self.mobber_manager.remove_mobber( int(self.names_list.index(self.names_list.selection())))) self.names_list.bind("<Delete>", self.remove_mobber_if_screen_blocking) row_index += 1 move_mobber_up_button = ttk.Button(center_frame, text="Move Mobber Up", style=unique_theme.button_style_id) move_mobber_up_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) move_mobber_up_button.bind("<Button-1>", self.move_mobber_up_left_click) row_index += 1 move_mobber_down_button = ttk.Button( center_frame, text="Move Mobber Down", style=unique_theme.button_style_id) move_mobber_down_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) move_mobber_down_button.bind("<Button-1>", self.move_mobber_down_left_click) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Clear Mobbers", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.clear()) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Skip Driver", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind( "<Button-1>", lambda event: self.mobber_manager.switch_next_driver()) row_index += 1 if not self.settings_manager.get_randomize_randomize_next_driver(): clear_mobbers_button = ttk.Button( center_frame, text="Rewind Driver", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind( "<Button-1>", lambda event: self.mobber_manager.rewind_driver()) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Add Team", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", self.add_default_team) row_index += 1 start_button = ttk.Button(center_frame, text="Start Mobbing!", style=unique_theme.start_button_style_id) start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) start_button.bind( "<Button-1>", lambda event: self.controller.show_transparent_countdown_frame()) row_index += 1 start_button = ttk.Button(center_frame, text="Quit Mobbing", style=unique_theme.button_style_id) padx_start_button = int(50 * scale) start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=padx_start_button, pady=button_pad) start_button.bind( "<Button-1>", lambda event: self.controller.quit_and_destroy_session()) row_index += 1 center_frame.grid(row=0, column=0, sticky="nsew") self.focus_mobber_entry()
class ScreenBlockerFrame(ttk.Frame): def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager, tips_manager, theme_manager, **kwargs): super().__init__(master, **kwargs) self.master = master # type : OuterFrame self.controller = controller self.theme_manager = theme_manager self.countdown_manager = countdown_manager self.time_options_manager = time_options_manager self.mobber_manager = mobber_manager self.settings_manager = settings_manager self.mouse_wheel_seconds_delta = self.settings_manager.get_screen_blocker_mouse_wheel_seconds_delta( ) self.click_seconds_delta = self.settings_manager.get_screen_blocker_click_seconds_delta( ) self.build_window_content() self.time_options_manager.subscribe_to_timechange( self.time_change_callback) self.mobber_manager.subscribe_to_mobber_list_change( self.mobber_list_change_callback) def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index): for i in self.names_list.get_children(): self.names_list.delete(i) for index in range(0, mobber_list.__len__()): tags = () name = mobber_list[index] if index == driver_index: tags = (TAGNAME_CURRENT_MOBBER) name += " <= Current" if index == navigator_index: name += " <= Next" self.names_list.insert('', END, text=name, tags=tags) def time_change_callback(self, time, minutes, seconds): self.label_minutes['text'] = "{0:0>2}".format(minutes) self.label_seconds['text'] = "{0:0>2}".format(seconds) def toggle_geometry(self, event): geom = self.controller.winfo_geometry() self.controller.geometry(self._geom) self._geom = geom def mouse_wheel_minutes(self, event): if event.delta > 0: self.time_options_manager.increment_minutes() else: self.time_options_manager.decrement_minutes() def mouse_wheel_seconds(self, event): if event.delta > 0: self.time_options_manager.increment_seconds( self.mouse_wheel_seconds_delta) else: self.time_options_manager.decrement_seconds( self.mouse_wheel_seconds_delta) def build_window_content(self): scale = self.master.monitor.height / ScreenUtility.ScreenUtility.get_expected_height( ) unique_theme = self.theme_manager.get_unique_theme_for_scale(scale) center_frame = ttk.Frame(self) center_frame.grid(row=0, column=0) center_frame.grid_columnconfigure(0, weight=1) center_frame.grid_columnconfigure(1, weight=0) center_frame.grid_columnconfigure(2, weight=0) center_frame.grid_columnconfigure(3, weight=0) center_frame.grid_columnconfigure(4, weight=1) row_index = 0 if self.settings_manager.get_general_use_logo_image(): self.image_utility = ImageUtility(self.theme_manager) background_image_width = int(800 * scale) background_image_height = int(200 * scale) self.background_image = self.image_utility.load( self.settings_manager.get_general_logo_image_name(), background_image_width, background_image_height, self.settings_manager.get_general_auto_theme_logo()) title = ttk.Label(center_frame, image=self.background_image) else: title = ttk.Label(center_frame, text="Mobbing Timer", style=unique_theme.title_style_id) pad_x_scaled = int(10 * scale) title.grid(row=row_index, columnspan=5, padx=int(30 * scale), pady=(int(70 * scale), pad_x_scaled)) row_index += 1 instructions = ttk.Label( center_frame, text= "Left Click to Increase, Right Click to Decrease, or mouse wheel", style=unique_theme.label_style_id) instructions.grid(row=row_index, columnspan=5, padx=int(30 * scale), pady=pad_x_scaled) row_index += 1 self.label_minutes = ttk.Label(center_frame, text="10", style=unique_theme.clock_style_id) self.label_minutes.grid(row=row_index, column=1, sticky=E) self.label_minutes.bind( "<Button-1>", lambda event: self.time_options_manager.increment_minutes()) self.label_minutes.bind( "<Button-3>", lambda event: self.time_options_manager.decrement_minutes()) self.label_minutes.bind("<MouseWheel>", self.mouse_wheel_minutes) label_colon = ttk.Label(center_frame, text=":", style=unique_theme.clock_style_id) label_colon.grid(row=row_index, column=2, sticky=N) self.label_seconds = ttk.Label(center_frame, text="30", style=unique_theme.clock_style_id) self.label_seconds.grid(row=row_index, column=3, sticky=W) self.label_seconds.bind( "<Button-1>", lambda event: self.time_options_manager. increment_seconds(self.click_seconds_delta)) self.label_seconds.bind( "<Button-3>", lambda event: self.time_options_manager. decrement_seconds(self.click_seconds_delta)) self.label_seconds.bind("<MouseWheel>", self.mouse_wheel_seconds) row_index += 1 self.add_mobber_entry = ttk.Entry( center_frame, style=unique_theme.entry_style_id, font=unique_theme.ttk_entry_style_cannot_specify_a_font_bug) self.add_mobber_entry.grid(row=row_index, column=1, columnspan=2, sticky=N + E + W, padx=pad_x_scaled) self.add_mobber_entry.bind("<Return>", self.add_mobber_left_click) self.add_mobber_entry.bind( "<Control-Return>", lambda event: self.controller.show_transparent_countdown_frame()) button_pad = (int(15 * scale), 0) add_mobber_button = ttk.Button(center_frame, text="Add Mobber", style=unique_theme.button_style_id) add_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=0) add_mobber_button.bind("<Button-1>", self.add_mobber_left_click) row_index += 1 self.names_list = ttk.Treeview(center_frame, style=unique_theme.treeview_style_id) self.names_list.tag_configure( TAGNAME_CURRENT_MOBBER, background=self.theme_manager.highlight_color, foreground=self.theme_manager.background_color) self.names_list['show'] = 'tree' self.names_list.grid(row=row_index, rowspan=7, columnspan=2, column=1, padx=pad_x_scaled, pady=button_pad, sticky=N + E + W + S) remove_mobber_button = ttk.Button(center_frame, text="Remove Mobber", style=unique_theme.button_style_id) remove_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) remove_mobber_button.bind( "<Button-1>", lambda event: self.mobber_manager.remove_mobber( int(self.names_list.index(self.names_list.selection())))) self.names_list.bind("<Delete>", self.remove_mobber_if_screen_blocking) row_index += 1 move_mobber_up_button = ttk.Button(center_frame, text="Move Mobber Up", style=unique_theme.button_style_id) move_mobber_up_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) move_mobber_up_button.bind("<Button-1>", self.move_mobber_up_left_click) row_index += 1 move_mobber_down_button = ttk.Button( center_frame, text="Move Mobber Down", style=unique_theme.button_style_id) move_mobber_down_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) move_mobber_down_button.bind("<Button-1>", self.move_mobber_down_left_click) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Clear Mobbers", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.clear()) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Skip Driver", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind( "<Button-1>", lambda event: self.mobber_manager.switch_next_driver()) row_index += 1 if not self.settings_manager.get_randomize_randomize_next_driver(): clear_mobbers_button = ttk.Button( center_frame, text="Rewind Driver", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind( "<Button-1>", lambda event: self.mobber_manager.rewind_driver()) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Add Team", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", self.add_default_team) row_index += 1 start_button = ttk.Button(center_frame, text="Start Mobbing!", style=unique_theme.start_button_style_id) start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) start_button.bind( "<Button-1>", lambda event: self.controller.show_transparent_countdown_frame()) row_index += 1 start_button = ttk.Button(center_frame, text="Quit Mobbing", style=unique_theme.button_style_id) padx_start_button = int(50 * scale) start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=padx_start_button, pady=button_pad) start_button.bind( "<Button-1>", lambda event: self.controller.quit_and_destroy_session()) row_index += 1 center_frame.grid(row=0, column=0, sticky="nsew") self.focus_mobber_entry() def remove_mobber_if_screen_blocking(self, event): if self.controller.last_frame == ScreenBlockerFrame: self.mobber_manager.remove_mobber( int(self.names_list.index(self.names_list.selection()))) def add_default_team(self, event): team = self.settings_manager.get_general_team().split(',') randomize_team = self.settings_manager.get_randomize_team() self.mobber_manager.clear() if randomize_team: random.shuffle(team) for member in team: self.mobber_manager.add_mobber(member) def focus_mobber_entry(self): self.add_mobber_entry.focus_set() def move_mobber_down_left_click(self, event): selected_items = self.names_list.selection() selected_index = int(int(self.names_list.index(selected_items))) self.mobber_manager.move_mobber_down(selected_index) self.names_list.selection_set( self.names_list.get_children()[(selected_index + 1) % self.mobber_manager.mobber_count()]) def move_mobber_up_left_click(self, event): selected_index = int( int(self.names_list.index(self.names_list.selection()))) self.mobber_manager.move_mobber_up(selected_index) count = self.mobber_manager.mobber_count() self.names_list.selection_set( self.names_list.get_children()[((count + selected_index - 1) % count)]) def add_mobber_left_click(self, event): self.mobber_manager.add_mobber(self.add_mobber_entry.get()) self.add_mobber_entry.delete(0, END)
def build_window_content(self): scale = self.master.monitor.height / ScreenUtility.ScreenUtility.get_expected_height() unique_theme = self.theme_manager.get_unique_theme_for_scale(scale) center_frame = ttk.Frame(self) center_frame.grid(row=0, column=0) center_frame.grid_columnconfigure(0, weight=1) center_frame.grid_columnconfigure(1, weight=0) center_frame.grid_columnconfigure(2, weight=0) center_frame.grid_columnconfigure(3, weight=0) center_frame.grid_columnconfigure(4, weight=1) row_index = 0 if self.settings_manager.get_general_use_logo_image(): self.image_utility = ImageUtility(self.theme_manager) background_image_width = int(800 * scale) background_image_height = int(200 * scale) self.background_image = self.image_utility.load(self.settings_manager.get_general_logo_image_name(), background_image_width, background_image_height, self.settings_manager.get_general_auto_theme_logo()) title = ttk.Label(center_frame, image=self.background_image) else: title = ttk.Label(center_frame, text="Mobbing Timer", style=unique_theme.title_style_id) pad_x_scaled = int(10 * scale) title.grid(row=row_index, columnspan=5, padx=int(30 * scale), pady=(int(70 * scale), pad_x_scaled)) row_index += 1 instructions = ttk.Label(center_frame, text="Left Click to Increase, Right Click to Decrease, or mouse wheel", style=unique_theme.label_style_id) instructions.grid(row=row_index, columnspan=5, padx=int(30 * scale), pady=pad_x_scaled) row_index += 1 self.label_minutes = ttk.Label(center_frame, text="10", style=unique_theme.clock_style_id) self.label_minutes.grid(row=row_index, column=1, sticky=E) self.label_minutes.bind("<Button-1>", lambda event: self.time_options_manager.increment_minutes()) self.label_minutes.bind("<Button-3>", lambda event: self.time_options_manager.decrement_minutes()) self.label_minutes.bind("<MouseWheel>", self.mouse_wheel_minutes) label_colon = ttk.Label(center_frame, text=":", style=unique_theme.clock_style_id) label_colon.grid(row=row_index, column=2, sticky=N) self.label_seconds = ttk.Label(center_frame, text="30", style=unique_theme.clock_style_id) self.label_seconds.grid(row=row_index, column=3, sticky=W) self.label_seconds.bind("<Button-1>", lambda event: self.time_options_manager.increment_seconds(self.click_seconds_delta)) self.label_seconds.bind("<Button-3>", lambda event: self.time_options_manager.decrement_seconds(self.click_seconds_delta)) self.label_seconds.bind("<MouseWheel>", self.mouse_wheel_seconds) row_index += 1 self.add_mobber_entry = ttk.Entry(center_frame, style=unique_theme.entry_style_id, font=unique_theme.ttk_entry_style_cannot_specify_a_font_bug) self.add_mobber_entry.grid(row=row_index, column=1, columnspan=2, sticky=N + E + W, padx=pad_x_scaled) self.add_mobber_entry.bind("<Return>", self.add_mobber_left_click) self.add_mobber_entry.bind("<Control-Return>", lambda event: self.controller.show_transparent_countdown_frame()) button_pad = (int(15 * scale), 0) add_mobber_button = ttk.Button(center_frame, text="Add Mobber", style=unique_theme.button_style_id) add_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=0) add_mobber_button.bind("<Button-1>", self.add_mobber_left_click) row_index += 1 self.names_list = ttk.Treeview(center_frame, style=unique_theme.treeview_style_id) self.names_list.tag_configure(TAGNAME_CURRENT_MOBBER, background=self.theme_manager.highlight_color, foreground=self.theme_manager.background_color) self.names_list['show'] = 'tree' self.names_list.grid(row=row_index, rowspan=7, columnspan=2, column=1, padx=pad_x_scaled, pady=button_pad, sticky=N + E + W + S) remove_mobber_button = ttk.Button(center_frame, text="Remove Mobber", style=unique_theme.button_style_id) remove_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) remove_mobber_button.bind("<Button-1>", lambda event: self.mobber_manager.remove_mobber( int(self.names_list.index(self.names_list.selection())))) self.names_list.bind("<Delete>", self.remove_mobber_if_screen_blocking) row_index += 1 move_mobber_up_button = ttk.Button(center_frame, text="Move Mobber Up", style=unique_theme.button_style_id) move_mobber_up_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) move_mobber_up_button.bind("<Button-1>", self.move_mobber_up_left_click) row_index += 1 move_mobber_down_button = ttk.Button(center_frame, text="Move Mobber Down", style=unique_theme.button_style_id) move_mobber_down_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) move_mobber_down_button.bind("<Button-1>", self.move_mobber_down_left_click) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Clear Mobbers", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.clear()) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Skip Driver", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.switch_next_driver()) row_index += 1 if not self.settings_manager.get_randomize_randomize_next_driver(): clear_mobbers_button = ttk.Button(center_frame, text="Rewind Driver", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.rewind_driver()) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Add Team", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", self.add_default_team) row_index += 1 start_button = ttk.Button(center_frame, text="Start Mobbing!", style=unique_theme.start_button_style_id) start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) start_button.bind("<Button-1>", lambda event: self.controller.show_transparent_countdown_frame()) row_index += 1 start_button = ttk.Button(center_frame, text="Quit Mobbing", style=unique_theme.button_style_id) padx_start_button = int(50 * scale) start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=padx_start_button, pady=button_pad) start_button.bind("<Button-1>", lambda event: self.controller.quit_and_destroy_session()) row_index += 1 center_frame.grid(row=0, column=0, sticky="nsew") self.focus_mobber_entry()
class ScreenBlockerFrame(ttk.Frame): def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager, tips_manager, theme_manager, **kwargs): super().__init__(master, **kwargs) self.master = master # type : OuterFrame self.controller = controller self.theme_manager = theme_manager self.countdown_manager = countdown_manager self.time_options_manager = time_options_manager self.mobber_manager = mobber_manager self.settings_manager = settings_manager self.mouse_wheel_seconds_delta = self.settings_manager.get_screen_blocker_mouse_wheel_seconds_delta() self.click_seconds_delta = self.settings_manager.get_screen_blocker_click_seconds_delta() self.build_window_content() self.time_options_manager.subscribe_to_timechange(self.time_change_callback) self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback) def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index): for i in self.names_list.get_children(): self.names_list.delete(i) for index in range(0, mobber_list.__len__()): tags = () name = mobber_list[index] if index == driver_index: tags = (TAGNAME_CURRENT_MOBBER) name += " <= Current" if index == navigator_index: name += " <= Next" self.names_list.insert('', END, text=name, tags=tags) def time_change_callback(self, time, minutes, seconds): self.label_minutes['text'] = "{0:0>2}".format(minutes) self.label_seconds['text'] = "{0:0>2}".format(seconds) def toggle_geometry(self, event): geom = self.controller.winfo_geometry() self.controller.geometry(self._geom) self._geom = geom def mouse_wheel_minutes(self, event): if event.delta > 0: self.time_options_manager.increment_minutes() else: self.time_options_manager.decrement_minutes() def mouse_wheel_seconds(self, event): if event.delta > 0: self.time_options_manager.increment_seconds(self.mouse_wheel_seconds_delta) else: self.time_options_manager.decrement_seconds(self.mouse_wheel_seconds_delta) def build_window_content(self): scale = self.master.monitor.height / ScreenUtility.ScreenUtility.get_expected_height() unique_theme = self.theme_manager.get_unique_theme_for_scale(scale) center_frame = ttk.Frame(self) center_frame.grid(row=0, column=0) center_frame.grid_columnconfigure(0, weight=1) center_frame.grid_columnconfigure(1, weight=0) center_frame.grid_columnconfigure(2, weight=0) center_frame.grid_columnconfigure(3, weight=0) center_frame.grid_columnconfigure(4, weight=1) row_index = 0 if self.settings_manager.get_general_use_logo_image(): self.image_utility = ImageUtility(self.theme_manager) background_image_width = int(800 * scale) background_image_height = int(200 * scale) self.background_image = self.image_utility.load(self.settings_manager.get_general_logo_image_name(), background_image_width, background_image_height, self.settings_manager.get_general_auto_theme_logo()) title = ttk.Label(center_frame, image=self.background_image) else: title = ttk.Label(center_frame, text="Mobbing Timer", style=unique_theme.title_style_id) pad_x_scaled = int(10 * scale) title.grid(row=row_index, columnspan=5, padx=int(30 * scale), pady=(int(70 * scale), pad_x_scaled)) row_index += 1 instructions = ttk.Label(center_frame, text="Left Click to Increase, Right Click to Decrease, or mouse wheel", style=unique_theme.label_style_id) instructions.grid(row=row_index, columnspan=5, padx=int(30 * scale), pady=pad_x_scaled) row_index += 1 self.label_minutes = ttk.Label(center_frame, text="10", style=unique_theme.clock_style_id) self.label_minutes.grid(row=row_index, column=1, sticky=E) self.label_minutes.bind("<Button-1>", lambda event: self.time_options_manager.increment_minutes()) self.label_minutes.bind("<Button-3>", lambda event: self.time_options_manager.decrement_minutes()) self.label_minutes.bind("<MouseWheel>", self.mouse_wheel_minutes) label_colon = ttk.Label(center_frame, text=":", style=unique_theme.clock_style_id) label_colon.grid(row=row_index, column=2, sticky=N) self.label_seconds = ttk.Label(center_frame, text="30", style=unique_theme.clock_style_id) self.label_seconds.grid(row=row_index, column=3, sticky=W) self.label_seconds.bind("<Button-1>", lambda event: self.time_options_manager.increment_seconds(self.click_seconds_delta)) self.label_seconds.bind("<Button-3>", lambda event: self.time_options_manager.decrement_seconds(self.click_seconds_delta)) self.label_seconds.bind("<MouseWheel>", self.mouse_wheel_seconds) row_index += 1 self.add_mobber_entry = ttk.Entry(center_frame, style=unique_theme.entry_style_id, font=unique_theme.ttk_entry_style_cannot_specify_a_font_bug) self.add_mobber_entry.grid(row=row_index, column=1, columnspan=2, sticky=N + E + W, padx=pad_x_scaled) self.add_mobber_entry.bind("<Return>", self.add_mobber_left_click) self.add_mobber_entry.bind("<Control-Return>", lambda event: self.controller.show_transparent_countdown_frame()) button_pad = (int(15 * scale), 0) add_mobber_button = ttk.Button(center_frame, text="Add Mobber", style=unique_theme.button_style_id) add_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=0) add_mobber_button.bind("<Button-1>", self.add_mobber_left_click) row_index += 1 self.names_list = ttk.Treeview(center_frame, style=unique_theme.treeview_style_id) self.names_list.tag_configure(TAGNAME_CURRENT_MOBBER, background=self.theme_manager.highlight_color, foreground=self.theme_manager.background_color) self.names_list['show'] = 'tree' self.names_list.grid(row=row_index, rowspan=7, columnspan=2, column=1, padx=pad_x_scaled, pady=button_pad, sticky=N + E + W + S) remove_mobber_button = ttk.Button(center_frame, text="Remove Mobber", style=unique_theme.button_style_id) remove_mobber_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) remove_mobber_button.bind("<Button-1>", lambda event: self.mobber_manager.remove_mobber( int(self.names_list.index(self.names_list.selection())))) self.names_list.bind("<Delete>", self.remove_mobber_if_screen_blocking) row_index += 1 move_mobber_up_button = ttk.Button(center_frame, text="Move Mobber Up", style=unique_theme.button_style_id) move_mobber_up_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) move_mobber_up_button.bind("<Button-1>", self.move_mobber_up_left_click) row_index += 1 move_mobber_down_button = ttk.Button(center_frame, text="Move Mobber Down", style=unique_theme.button_style_id) move_mobber_down_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) move_mobber_down_button.bind("<Button-1>", self.move_mobber_down_left_click) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Clear Mobbers", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.clear()) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Skip Driver", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.switch_next_driver()) row_index += 1 if not self.settings_manager.get_randomize_randomize_next_driver(): clear_mobbers_button = ttk.Button(center_frame, text="Rewind Driver", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", lambda event: self.mobber_manager.rewind_driver()) row_index += 1 clear_mobbers_button = ttk.Button(center_frame, text="Add Team", style=unique_theme.button_style_id) clear_mobbers_button.grid(row=row_index, column=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) clear_mobbers_button.bind("<Button-1>", self.add_default_team) row_index += 1 start_button = ttk.Button(center_frame, text="Start Mobbing!", style=unique_theme.start_button_style_id) start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=pad_x_scaled, pady=button_pad) start_button.bind("<Button-1>", lambda event: self.controller.show_transparent_countdown_frame()) row_index += 1 start_button = ttk.Button(center_frame, text="Quit Mobbing", style=unique_theme.button_style_id) padx_start_button = int(50 * scale) start_button.grid(row=row_index, column=1, columnspan=3, sticky=N + E + W, padx=padx_start_button, pady=button_pad) start_button.bind("<Button-1>", lambda event: self.controller.quit_and_destroy_session()) row_index += 1 center_frame.grid(row=0, column=0, sticky="nsew") self.focus_mobber_entry() def remove_mobber_if_screen_blocking(self, event): if self.controller.last_frame == ScreenBlockerFrame: self.mobber_manager.remove_mobber(int(self.names_list.index(self.names_list.selection()))) def add_default_team(self, event): team = self.settings_manager.get_general_team().split(',') randomize_team = self.settings_manager.get_randomize_team() self.mobber_manager.clear() if randomize_team: random.shuffle(team) for member in team: self.mobber_manager.add_mobber(member) def focus_mobber_entry(self): self.add_mobber_entry.focus_set() def move_mobber_down_left_click(self, event): selected_items = self.names_list.selection() selected_index = int(int(self.names_list.index(selected_items))) self.mobber_manager.move_mobber_down(selected_index) self.names_list.selection_set( self.names_list.get_children()[(selected_index + 1) % self.mobber_manager.mobber_count()]) def move_mobber_up_left_click(self, event): selected_index = int(int(self.names_list.index(self.names_list.selection()))) self.mobber_manager.move_mobber_up(selected_index) count = self.mobber_manager.mobber_count() self.names_list.selection_set(self.names_list.get_children()[((count + selected_index - 1) % count)]) def add_mobber_left_click(self, event): self.mobber_manager.add_mobber(self.add_mobber_entry.get()) self.add_mobber_entry.delete(0, END)
class MinimalScreenBlockerFrame(ttk.Frame): def __init__(self, master, controller, time_options_manager, mobber_manager, countdown_manager, settings_manager, tips_manager, theme_manager, **kwargs): super().__init__(master, **kwargs) self.showing_extend_time_button = False self.master = master self.controller = controller self.countdown_manager = countdown_manager self.time_options_manager = time_options_manager self.mobber_manager = mobber_manager # type: MobberManager self.settings_manager = settings_manager self.theme_manager = theme_manager self.tips_manager = tips_manager self.build_window_content() self.mobber_manager.subscribe_to_mobber_list_change(self.mobber_list_change_callback) if self.settings_manager.get_continue_screen_blocker_show_current_time(): self.countdown_manager.subscribe_to_time_changes(self.update_current_time) def update_current_time(self, days, minutes, seconds): self.current_time_label["text"] = datetime.now().strftime('%Y-%m-%d %I:%M %p') def build_window_content(self): scale = self.master.monitor.height / ScreenUtility.get_expected_height() unique_theme = self.theme_manager.get_unique_theme_for_scale(scale) center_frame = ttk.Frame(self) center_frame.grid() row_index = 0 image_utility = ImageUtility(self.theme_manager) icon_size = int(75*scale) invisible_path = PathUtility.normalize_path('images\\invisible.png') self.invisible_icon = image_utility.load(invisible_path, icon_size, icon_size) self.fade_label = ttk.Label(center_frame, image=self.invisible_icon) self.fade_label.grid(row=0, column=0, sticky=(N, W)) self.fade_label.bind("<Enter>", lambda event: self.controller.fade_app()) self.fade_label.bind("<Leave>", lambda event: self.controller.unfade_app()) if self.settings_manager.get_general_use_logo_image(): self.image_utility = ImageUtility(self.theme_manager) image_width =int(800*scale) image_height = int(200*scale) self.background_image = self.image_utility.load(self.settings_manager.get_general_logo_image_name(), image_width, image_height, self.settings_manager.get_general_auto_theme_logo()) title = ttk.Label(center_frame, image=self.background_image) else: title = ttk.Label(center_frame, text="Mobbing Timer", style=unique_theme.title_style_id) title_padx = int(150*scale) pad_y = int(10*scale) title.grid(row=row_index, column=0, columnspan=6, padx=title_padx, pady=pad_y) row_index += 1 self.keyboard_icon = image_utility.load(PathUtility.normalize_path('images\\keyboard.png'), icon_size, icon_size) self.keyboard_label = ttk.Label(center_frame, image=self.keyboard_icon) self.keyboard_label.grid(row=row_index, column=1, sticky=(N, E)) self.current_mobber_label = ttk.Label(center_frame, text="", style=unique_theme.current_mobber_label_style_id) self.current_mobber_label.grid(row=row_index, column=2, columnspan=1, sticky=(N, W)) self.current_mobber_label.bind("<Button-1>", lambda event: self.mobber_manager.switch_next_driver()) self.minions_icon = image_utility.load(PathUtility.normalize_path('images\\minions.png'), icon_size, icon_size) self.minions_label = ttk.Label(center_frame, image=self.minions_icon) self.minions_label.grid(row=row_index, column=3, sticky=(N, E)) self.next_mobber_label = ttk.Label(center_frame, text="", style=unique_theme.next_mobber_label_style_id) self.next_mobber_label.grid(row=row_index, column=4, columnspan=1, sticky=(N, W)) row_index += 1 start_button = ttk.Button(center_frame, text="Continue Mobbing!", style=unique_theme.start_button_style_id) start_button.grid(row=row_index, column=1, columnspan=4, sticky=N + E + W, padx=pad_y, pady=pad_y) start_button.bind("<Button-1>", lambda event: self.controller.show_transparent_countdown_frame()) row_index += 1 if self.settings_manager.get_general_enable_tips(): self.tip_text = ttk.Label(center_frame, text="", style=unique_theme.label_style_id, wraplength=500) self.tip_text.grid(row=row_index, column=1, columnspan=4, padx=int(30*scale), pady=pad_y, sticky=(N)) row_index += 1 if self.settings_manager.get_continue_screen_blocker_show_current_time(): self.current_time_label = ttk.Label(center_frame, text="current time", style=unique_theme.label_style_id) self.current_time_label.grid(row=row_index, column=1, columnspan=4, padx=int(30*scale), pady=pad_y, sticky=(N)) row_index += 1 if self.settings_manager.get_timer_extension_enabled() and not self.settings_manager.get_randomize_randomize_next_driver(): minutes = self.settings_manager.get_timer_extension_minutes() seconds = self.settings_manager.get_timer_extension_seconds() self.extend_time_button = ttk.Button(center_frame, text=self.get_extend_time_button_text(), style=unique_theme.button_style_id) self.extend_time_button.grid(row=row_index, column=1, columnspan=4, sticky=N + E + W, padx=int(90*scale), pady=pad_y) self.showing_extend_time_button = True self.extend_time_button.bind("<Button-1>", lambda event: self.controller.rewind_and_extend(minutes, seconds)) row_index += 1 setup_button = ttk.Button(center_frame, text="Mob Setup & Time",style=unique_theme.button_style_id) setup_button.grid(row=row_index, column=1, columnspan=4, sticky=N + E + W, padx=int(90*scale), pady=pad_y) setup_button.bind("<Button-1>", lambda event: self.controller.show_screen_blocker_frame()) row_index += 1 quit_button = ttk.Button(center_frame, text="Quit Mobbing",style=unique_theme.button_style_id) quit_button.grid(row=row_index, column=1, columnspan=4, sticky=N + E + W, padx=int(90*scale), pady=pad_y) quit_button.bind("<Button-1>", lambda event: self.controller.quit_and_destroy_session()) row_index += 1 def get_extend_time_button_text(self): minutes = self.settings_manager.get_timer_extension_minutes() seconds = self.settings_manager.get_timer_extension_seconds() return "Extend Time By {:0>2}:{:0>2} ({})".format(minutes, seconds, self.controller.timer_extension_count - self.controller.extensions_used) def mobber_list_change_callback(self, mobber_list, driver_index, navigator_index): self.current_mobber_label['text'] = "" self.next_mobber_label['text'] = "" for index in range(0, mobber_list.__len__()): name = mobber_list[index] if index == driver_index: self.current_mobber_label['text'] = "{} ".format(name) if index == navigator_index: self.next_mobber_label['text'] = "{}".format(name) if self.settings_manager.get_general_enable_tips(): self.tip_text['text'] = self.tips_manager.get_random_tip() def show_extend_time_button(self): if self.settings_manager.get_timer_extension_enabled() and not self.settings_manager.get_randomize_randomize_next_driver(): if self.controller.extensions_used < self.controller.timer_extension_count: self.extend_time_button["text"] = self.get_extend_time_button_text() self.extend_time_button.grid() else: self.extend_time_button.grid_remove()
def build_window_content(self): scale = self.master.monitor.height / ScreenUtility.get_expected_height() unique_theme = self.theme_manager.get_unique_theme_for_scale(scale) center_frame = ttk.Frame(self) center_frame.grid() row_index = 0 image_utility = ImageUtility(self.theme_manager) icon_size = int(75*scale) invisible_path = PathUtility.normalize_path('images\\invisible.png') self.invisible_icon = image_utility.load(invisible_path, icon_size, icon_size) self.fade_label = ttk.Label(center_frame, image=self.invisible_icon) self.fade_label.grid(row=0, column=0, sticky=(N, W)) self.fade_label.bind("<Enter>", lambda event: self.controller.fade_app()) self.fade_label.bind("<Leave>", lambda event: self.controller.unfade_app()) if self.settings_manager.get_general_use_logo_image(): self.image_utility = ImageUtility(self.theme_manager) image_width =int(800*scale) image_height = int(200*scale) self.background_image = self.image_utility.load(self.settings_manager.get_general_logo_image_name(), image_width, image_height, self.settings_manager.get_general_auto_theme_logo()) title = ttk.Label(center_frame, image=self.background_image) else: title = ttk.Label(center_frame, text="Mobbing Timer", style=unique_theme.title_style_id) title_padx = int(150*scale) pad_y = int(10*scale) title.grid(row=row_index, column=0, columnspan=6, padx=title_padx, pady=pad_y) row_index += 1 self.keyboard_icon = image_utility.load(PathUtility.normalize_path('images\\keyboard.png'), icon_size, icon_size) self.keyboard_label = ttk.Label(center_frame, image=self.keyboard_icon) self.keyboard_label.grid(row=row_index, column=1, sticky=(N, E)) self.current_mobber_label = ttk.Label(center_frame, text="", style=unique_theme.current_mobber_label_style_id) self.current_mobber_label.grid(row=row_index, column=2, columnspan=1, sticky=(N, W)) self.current_mobber_label.bind("<Button-1>", lambda event: self.mobber_manager.switch_next_driver()) self.minions_icon = image_utility.load(PathUtility.normalize_path('images\\minions.png'), icon_size, icon_size) self.minions_label = ttk.Label(center_frame, image=self.minions_icon) self.minions_label.grid(row=row_index, column=3, sticky=(N, E)) self.next_mobber_label = ttk.Label(center_frame, text="", style=unique_theme.next_mobber_label_style_id) self.next_mobber_label.grid(row=row_index, column=4, columnspan=1, sticky=(N, W)) row_index += 1 start_button = ttk.Button(center_frame, text="Continue Mobbing!", style=unique_theme.start_button_style_id) start_button.grid(row=row_index, column=1, columnspan=4, sticky=N + E + W, padx=pad_y, pady=pad_y) start_button.bind("<Button-1>", lambda event: self.controller.show_transparent_countdown_frame()) row_index += 1 if self.settings_manager.get_general_enable_tips(): self.tip_text = ttk.Label(center_frame, text="", style=unique_theme.label_style_id, wraplength=500) self.tip_text.grid(row=row_index, column=1, columnspan=4, padx=int(30*scale), pady=pad_y, sticky=(N)) row_index += 1 if self.settings_manager.get_continue_screen_blocker_show_current_time(): self.current_time_label = ttk.Label(center_frame, text="current time", style=unique_theme.label_style_id) self.current_time_label.grid(row=row_index, column=1, columnspan=4, padx=int(30*scale), pady=pad_y, sticky=(N)) row_index += 1 if self.settings_manager.get_timer_extension_enabled() and not self.settings_manager.get_randomize_randomize_next_driver(): minutes = self.settings_manager.get_timer_extension_minutes() seconds = self.settings_manager.get_timer_extension_seconds() self.extend_time_button = ttk.Button(center_frame, text=self.get_extend_time_button_text(), style=unique_theme.button_style_id) self.extend_time_button.grid(row=row_index, column=1, columnspan=4, sticky=N + E + W, padx=int(90*scale), pady=pad_y) self.showing_extend_time_button = True self.extend_time_button.bind("<Button-1>", lambda event: self.controller.rewind_and_extend(minutes, seconds)) row_index += 1 setup_button = ttk.Button(center_frame, text="Mob Setup & Time",style=unique_theme.button_style_id) setup_button.grid(row=row_index, column=1, columnspan=4, sticky=N + E + W, padx=int(90*scale), pady=pad_y) setup_button.bind("<Button-1>", lambda event: self.controller.show_screen_blocker_frame()) row_index += 1 quit_button = ttk.Button(center_frame, text="Quit Mobbing",style=unique_theme.button_style_id) quit_button.grid(row=row_index, column=1, columnspan=4, sticky=N + E + W, padx=int(90*scale), pady=pad_y) quit_button.bind("<Button-1>", lambda event: self.controller.quit_and_destroy_session()) row_index += 1