def _setup_difficulties_menu(self): game = default_database.default_prime2_game_description() for i, trick_level in enumerate(LayoutTrickLevel): if trick_level not in { LayoutTrickLevel.NO_TRICKS, LayoutTrickLevel.MINIMAL_RESTRICTIONS }: difficulty_action = QAction(self) difficulty_action.setText(trick_level.long_name) self.menu_difficulties.addAction(difficulty_action) difficulty_action.triggered.connect( functools.partial(self._open_difficulty_details_popup, trick_level)) configurable_tricks = TrickLevelConfiguration.all_possible_tricks() tricks_in_use = used_tricks(game.world_list) for trick in sorted(game.resource_database.trick, key=lambda _trick: _trick.long_name): if trick.index not in configurable_tricks or trick not in tricks_in_use: continue trick_menu = QMenu(self) trick_menu.setTitle(trick.long_name) self.menu_trick_details.addAction(trick_menu.menuAction()) used_difficulties = difficulties_for_trick(game.world_list, trick) for i, trick_level in enumerate(LayoutTrickLevel): if trick_level in used_difficulties: difficulty_action = QAction(self) difficulty_action.setText(trick_level.long_name) trick_menu.addAction(difficulty_action) difficulty_action.triggered.connect( functools.partial(self._open_trick_details_popup, trick, trick_level))
def _setup_difficulties_menu(self, game: RandovaniaGame, menu: QtWidgets.QMenu): from randovania.game_description import default_database game = default_database.game_description_for(game) tricks_in_use = used_tricks(game) menu.clear() for trick in sorted(game.resource_database.trick, key=lambda _trick: _trick.long_name): if trick not in tricks_in_use: continue trick_menu = QtWidgets.QMenu(self) trick_menu.setTitle(trick.long_name) menu.addAction(trick_menu.menuAction()) used_difficulties = difficulties_for_trick(game, trick) for i, trick_level in enumerate(iterate_enum(LayoutTrickLevel)): if trick_level in used_difficulties: difficulty_action = QtWidgets.QAction(self) difficulty_action.setText(trick_level.long_name) trick_menu.addAction(difficulty_action) difficulty_action.triggered.connect( functools.partial(self._open_trick_details_popup, game, trick, trick_level))
def _setup_difficulties_menu(self): game = default_database.default_prime2_game_description() tricks_in_use = used_tricks(game) for trick in sorted(game.resource_database.trick, key=lambda _trick: _trick.long_name): if trick not in tricks_in_use: continue trick_menu = QMenu(self) trick_menu.setTitle(trick.long_name) self.menu_trick_details.addAction(trick_menu.menuAction()) used_difficulties = difficulties_for_trick(game, trick) for i, trick_level in enumerate(iterate_enum(LayoutTrickLevel)): if trick_level in used_difficulties: difficulty_action = QAction(self) difficulty_action.setText(trick_level.long_name) trick_menu.addAction(difficulty_action) difficulty_action.triggered.connect( functools.partial(self._open_trick_details_popup, trick, trick_level))
def setup_trick_level_elements(self): self.trick_level_minimal_logic_check.stateChanged.connect(self._on_trick_level_minimal_logic_check) self.trick_difficulties_layout = QtWidgets.QGridLayout() self._slider_for_trick = {} tricks_in_use = used_tricks(self.game_description) size_policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) self._create_difficulty_details_row() row = 2 for trick in sorted(self.resource_database.trick, key=lambda _trick: _trick.long_name): if trick not in tricks_in_use: continue if row > 1: self.trick_difficulties_layout.addItem(QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)) trick_label = QtWidgets.QLabel(self.trick_level_scroll_contents) trick_label.setSizePolicy(size_policy) trick_label.setWordWrap(True) trick_label.setFixedWidth(100) trick_label.setText(trick.long_name) self.trick_difficulties_layout.addWidget(trick_label, row, 1, 1, 1) slider_layout = QtWidgets.QGridLayout() slider_layout.setHorizontalSpacing(0) for i in range(12): slider_layout.setColumnStretch(i, 1) horizontal_slider = QtWidgets.QSlider(self.trick_level_scroll_contents) horizontal_slider.setMaximum(5) horizontal_slider.setPageStep(2) horizontal_slider.setOrientation(QtCore.Qt.Horizontal) horizontal_slider.setTickPosition(QtWidgets.QSlider.TicksBelow) horizontal_slider.setEnabled(False) horizontal_slider.valueChanged.connect(functools.partial(self._on_slide_trick_slider, trick)) self._slider_for_trick[trick] = horizontal_slider slider_layout.addWidget(horizontal_slider, 0, 1, 1, 10) used_difficulties = difficulties_for_trick(self.game_description, trick) for i, trick_level in enumerate(iterate_enum(LayoutTrickLevel)): if trick_level == LayoutTrickLevel.DISABLED or trick_level in used_difficulties: difficulty_label = QtWidgets.QLabel(self.trick_level_scroll_contents) difficulty_label.setAlignment(QtCore.Qt.AlignHCenter) difficulty_label.setText(trick_level.long_name) slider_layout.addWidget(difficulty_label, 1, 2 * i, 1, 2) self.trick_difficulties_layout.addLayout(slider_layout, row, 2, 1, 1) if self._window_manager is not None: tool_button = QtWidgets.QToolButton(self.trick_level_scroll_contents) tool_button.setText("?") tool_button.clicked.connect(functools.partial(self._open_trick_details_popup, trick)) self.trick_difficulties_layout.addWidget(tool_button, row, 3, 1, 1) row += 1 self.trick_level_layout.addLayout(self.trick_difficulties_layout)
def setup_trick_level_elements(self): # logic_combo_box for i, trick_level in enumerate(LayoutTrickLevel): self.logic_combo_box.setItemData(i, trick_level) self.logic_combo_box.currentIndexChanged.connect( self._on_trick_level_changed) self.trick_difficulties_layout = QtWidgets.QGridLayout() self._checkbox_for_trick = {} self._slider_for_trick = {} configurable_tricks = TrickLevelConfiguration.all_possible_tricks() tricks_in_use = used_tricks(self.world_list) size_policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) self._create_difficulty_details_row() row = 2 for trick in sorted(self.resource_database.trick, key=lambda _trick: _trick.long_name): if trick.index not in configurable_tricks or trick not in tricks_in_use: continue if row > 1: self.trick_difficulties_layout.addItem( QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)) trick_configurable = QtWidgets.QCheckBox( self.trick_level_scroll_contents) trick_configurable.setFixedWidth(16) trick_configurable.stateChanged.connect( functools.partial(self._on_check_trick_configurable, trick)) self._checkbox_for_trick[trick] = trick_configurable self.trick_difficulties_layout.addWidget(trick_configurable, row, 0, 1, 1) trick_label = QtWidgets.QLabel(self.trick_level_scroll_contents) trick_label.setSizePolicy(size_policy) trick_label.setWordWrap(True) trick_label.setFixedWidth(80) trick_label.setText(trick.long_name) self.trick_difficulties_layout.addWidget(trick_label, row, 1, 1, 1) slider_layout = QtWidgets.QGridLayout() slider_layout.setHorizontalSpacing(0) for i in range(12): slider_layout.setColumnStretch(i, 1) horizontal_slider = QtWidgets.QSlider( self.trick_level_scroll_contents) horizontal_slider.setMaximum(5) horizontal_slider.setPageStep(2) horizontal_slider.setOrientation(QtCore.Qt.Horizontal) horizontal_slider.setTickPosition(QtWidgets.QSlider.TicksBelow) horizontal_slider.setEnabled(False) horizontal_slider.valueChanged.connect( functools.partial(self._on_slide_trick_slider, trick)) self._slider_for_trick[trick] = horizontal_slider slider_layout.addWidget(horizontal_slider, 0, 1, 1, 10) used_difficulties = difficulties_for_trick(self.world_list, trick) for i, trick_level in enumerate(LayoutTrickLevel): if trick_level == LayoutTrickLevel.NO_TRICKS or trick_level in used_difficulties: difficulty_label = QtWidgets.QLabel( self.trick_level_scroll_contents) difficulty_label.setAlignment(QtCore.Qt.AlignHCenter) difficulty_label.setText(trick_level.long_name) slider_layout.addWidget(difficulty_label, 1, 2 * i, 1, 2) self.trick_difficulties_layout.addLayout(slider_layout, row, 2, 1, 1) tool_button = QtWidgets.QToolButton( self.trick_level_scroll_contents) tool_button.setText("?") tool_button.clicked.connect( functools.partial(self._open_trick_details_popup, trick)) self.trick_difficulties_layout.addWidget(tool_button, row, 3, 1, 1) row += 1 self.trick_level_layout.addLayout(self.trick_difficulties_layout)
def __init__(self, editor: PresetEditor, game_description: GameDescription, window_manager: WindowManager): super().__init__(editor) self.setupUi(self) self.game_description = game_description self._window_manager = window_manager self.trick_level_layout.setAlignment(QtCore.Qt.AlignTop) signal_handling.on_checked(self.underwater_abuse_check, self._on_underwater_abuse_check) self.underwater_abuse_label.linkActivated.connect( self._on_click_link_underwater_details) self.trick_difficulties_layout = QtWidgets.QGridLayout() self._slider_for_trick = {} tricks_in_use = trick_lib.used_tricks(self.game_description) size_policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) self.trick_level_line_1.setVisible( self.game_enum != RandovaniaGame.METROID_PRIME_CORRUPTION) self.underwater_abuse_label.setText( self.underwater_abuse_label.text().replace("color:#0000ff;", "")) if self.game_enum != RandovaniaGame.METROID_PRIME: for w in [ self.underwater_abuse_check, self.underwater_abuse_label ]: w.setVisible(False) self._create_difficulty_details_row() row = 2 for trick in sorted(self.game_description.resource_database.trick, key=lambda _trick: _trick.long_name): if trick not in tricks_in_use: continue if row > 1: self.trick_difficulties_layout.addItem( QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)) trick_label = QtWidgets.QLabel(self.trick_level_scroll_contents) trick_label.setSizePolicy(size_policy) trick_label.setWordWrap(True) trick_label.setFixedWidth(100) trick_label.setText(trick.long_name) self.trick_difficulties_layout.addWidget(trick_label, row, 1, 1, 1) slider_layout = QtWidgets.QGridLayout() slider_layout.setHorizontalSpacing(0) for i in range(12): slider_layout.setColumnStretch(i, 1) horizontal_slider = QtWidgets.QSlider( self.trick_level_scroll_contents) horizontal_slider.setMaximum(5) horizontal_slider.setPageStep(2) horizontal_slider.setOrientation(QtCore.Qt.Horizontal) horizontal_slider.setTickPosition(QtWidgets.QSlider.TicksBelow) horizontal_slider.setEnabled(False) horizontal_slider.valueChanged.connect( functools.partial(self._on_slide_trick_slider, trick)) self._slider_for_trick[trick] = horizontal_slider slider_layout.addWidget(horizontal_slider, 0, 1, 1, 10) used_difficulties = trick_lib.difficulties_for_trick( self.game_description, trick) for i, trick_level in enumerate( enum_lib.iterate_enum(LayoutTrickLevel)): if trick_level == LayoutTrickLevel.DISABLED or trick_level in used_difficulties: difficulty_label = QtWidgets.QLabel( self.trick_level_scroll_contents) difficulty_label.setAlignment(QtCore.Qt.AlignHCenter) difficulty_label.setText(trick_level.long_name) slider_layout.addWidget(difficulty_label, 1, 2 * i, 1, 2) self.trick_difficulties_layout.addLayout(slider_layout, row, 2, 1, 1) if self._window_manager is not None: tool_button = QtWidgets.QToolButton( self.trick_level_scroll_contents) tool_button.setText("?") tool_button.clicked.connect( functools.partial(self._open_trick_details_popup, trick)) self.trick_difficulties_layout.addWidget( tool_button, row, 3, 1, 1) row += 1 self.trick_level_layout.addLayout(self.trick_difficulties_layout)