def _populate_menubars(self) -> None: """Fill in the menubars.""" # ---------- # Game menu # ---------- # New game (F2) new_game_act = self._game_menu.addAction("New game", self._ctrlr.new_game) new_game_act.setShortcut("F2") # Replay game (F3) replay_act = self._game_menu.addAction("Replay", self._ctrlr.restart_game) replay_act.setShortcut("F3") # Create board def switch_create_mode(checked: bool): mode = UIMode.CREATE if checked else UIMode.GAME self._state.ui_mode = mode self._ctrlr.switch_mode(mode) self._create_menu_action = create_act = QAction( "Create board", self, checkable=True, checked=self._state.ui_mode is UIMode.CREATE, ) self._game_menu.addAction(create_act) create_act.triggered.connect(switch_create_mode) # Save board self._game_menu.addAction("Save board", self._open_save_board_modal) # Load board self._game_menu.addAction("Load board", self._open_load_board_modal) self._game_menu.addSeparator() # Current info (F4) info_act = self._game_menu.addAction( "Current game info", self._open_current_info_modal ) info_act.setShortcut("F4") # Solver # - Probabilities (F5) # - Auto flag (Ctrl+F) # - Auto click (Ctrl+Enter) # Highscores (F6) highscores_act = self._game_menu.addAction( "Highscores", self.open_highscores_window ) highscores_act.setShortcut("F6") # Stats (F7) self._game_menu.addSeparator() # Difficulty radiobuttons # - Beginner (b) # - Intermediate (i) # - Expert (e) # - Master (m) # - Custom (c) diff_group = QActionGroup(self) diff_group.setExclusive(True) for diff in Difficulty: diff_act = QAction(diff.name.capitalize(), diff_group, checkable=True) self._diff_menu_actions[diff] = diff_act self._game_menu.addAction(diff_act) diff_act.id = diff if diff is self._state.difficulty: diff_act.setChecked(True) diff_act.triggered.connect( lambda _: self._change_difficulty(diff_group.checkedAction().id) ) diff_act.setShortcut(diff.value) self._game_menu.addSeparator() # Play highscore # self._game_menu.addAction("Play highscore", self._open_play_highscore_modal) # Zoom self._game_menu.addAction("Button size", self._open_zoom_modal) # Styles # - Buttons # - Images # - Numbers def get_change_style_func(grp, style): def change_style(): self._state.styles[grp] = style self._mf_widget.update_style(grp, style) return change_style styles_menu = QMenu("Styles", self) self._game_menu.addMenu(styles_menu) for img_group in [CellImageType.BUTTONS]: img_group_name = img_group.name.capitalize() submenu = QMenu(img_group_name, self) styles_menu.addMenu(submenu) group = QActionGroup(self) group.setExclusive(True) for folder in (utils.IMG_DIR / img_group_name).glob("*"): style = folder.name style_act = QAction(style, self, checkable=True) if style == self._state.styles[img_group]: style_act.setChecked(True) group.addAction(style_act) style_act.triggered.connect(get_change_style_func(img_group, style)) submenu.addAction(style_act) # Advanced options self._game_menu.addAction("Advanced options", self._open_advanced_opts_modal) self._game_menu.addSeparator() # Exit (F4) self._game_menu.addAction("Exit", self.close, shortcut="Alt+F4") # ---------- # Options menu # ---------- # First-click success def toggle_first_success(): new_val = not self._state.pending_first_success self._state.first_success = new_val self._ctrlr.set_first_success(new_val) first_act = QAction( "Safe start", self, checkable=True, checked=self._state.first_success ) self._opts_menu.addAction(first_act) first_act.triggered.connect(toggle_first_success) # Drag select drag_act = self._opts_menu.addAction( "Drag select", lambda: setattr( self._state, "drag_select", not self._state.pending_drag_select ), ) drag_act.setCheckable(True) drag_act.setChecked(self._state.drag_select) # Max mines per cell option def get_change_per_cell_func(n): def change_per_cell(): self._state.per_cell = n self._ctrlr.set_per_cell(n) return change_per_cell per_cell_menu = self._opts_menu.addMenu("Max per cell") per_cell_group = QActionGroup(self) per_cell_group.setExclusive(True) for i in range(1, 4): action = QAction(str(i), self, checkable=True) per_cell_menu.addAction(action) per_cell_group.addAction(action) if self._state.per_cell == i: action.setChecked(True) action.triggered.connect(get_change_per_cell_func(i)) # ---------- # Help menu # ---------- rules_act = QAction("Rules", self) self._help_menu.addAction(rules_act) rules_act.triggered.connect( lambda: self._open_text_popup("Rules", FILES_DIR / "rules.txt") ) tips_act = QAction("Tips", self) self._help_menu.addAction(tips_act) tips_act.triggered.connect( lambda: self._open_text_popup("Tips", FILES_DIR / "tips.txt") ) retrieve_act = QAction("Retrieve highscores", self) retrieve_act.triggered.connect(self._open_retrieve_highscores_modal) self._help_menu.addAction(retrieve_act) self._help_menu.addSeparator() about_act = QAction("About", self) self._help_menu.addAction(about_act) about_act.triggered.connect( lambda: self._open_text_popup("About", FILES_DIR / "about.txt") ) about_act.setShortcut("F1")