class PlayoffInputWidget(QWidget): def __init__(self, parent, model): super().__init__(parent) self.model = model self.model.teams_split.connect(self.create_pair_widgets) layout = QVBoxLayout(self) self.setLayout(layout) self.label = QLabel(config.ROUND_STRINGS[1]) self.label.setAlignment(QtCore.Qt.AlignCenter) self.pairs_list = QListWidget(self) self.pairs_list.setStyleSheet( "QListWidget::item { border-bottom: 0.5px solid }") self.pairs_list.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.pairs_list.customContextMenuRequested.connect( self.list_context_menu) self.teams_left_list = QListView(self) self.teams_left_list.setModel(self.model.teams_left_model) self.teams_left_list.doubleClicked.connect(self.team_clicked) self.button = QPushButton("Finish Pairing") self.button.clicked.connect(self.finish_pairing) self.button.setDisabled(True) layout.addWidget(self.label) layout.addWidget(self.pairs_list) layout.addWidget(self.teams_left_list) layout.addWidget(self.button) self.playoff_assign_index = 0 def create_pair_widgets(self): for ppm in self.model.pairs: pr_widget = PlayoffPairWidget(ppm) item = QListWidgetItem(self.pairs_list) item.setSizeHint(pr_widget.sizeHint()) self.pairs_list.addItem(item) self.pairs_list.setItemWidget(item, pr_widget) def team_clicked(self, model_index: QtCore.QModelIndex): index = model_index.row() self.model.assign_team(index) if len(self.model.teams_left) == 0: self.button.setDisabled(False) def finish_pairing(self): self.layout().removeWidget(self.teams_left_list) self.teams_left_list.deleteLater() self.button.setText("Finish Playoff") for ppm in self.model.pairs: ppm.edit = True self.button.clicked.disconnect(self.finish_pairing) self.button.clicked.connect(self.finish_playoff) def finish_playoff(self): self.model.finish() self.pairs_list.setContextMenuPolicy(QtCore.Qt.NoContextMenu) self.layout().removeWidget(self.button) self.button.deleteLater() self.finished_label = QLabel("Playoff Finished") self.finished_label.setAlignment(QtCore.Qt.AlignCenter) self.layout().addWidget(self.finished_label) self.parent().finish_playoff() def list_context_menu(self, pos): self.listMenu = QMenu() current_index = self.pairs_list.currentIndex() model = self.pairs_list.indexWidget(current_index).model name1, name2 = model.get_name(0), model.get_name(1) team_1_won = self.listMenu.addAction(f"{name1} Won") team_1_won.triggered.connect(lambda: model.set_draw_state(-1)) team_1_won.setDisabled(not model.is_draw()) team_1_plus1 = self.listMenu.addAction(f"{name1} +1 ") team_1_plus1.triggered.connect(lambda: model.set_draw_state(-2)) team_1_plus1.setDisabled(not model.is_draw()) draw = self.listMenu.addAction(f"Draw") draw.triggered.connect(lambda: model.set_draw_state(0)) draw.setDisabled(not model.is_draw()) team_2_won = self.listMenu.addAction(f"{name2} Won") team_2_won.triggered.connect(lambda: model.set_draw_state(1)) team_2_won.setDisabled(not model.is_draw()) team_2_plus1 = self.listMenu.addAction(f"{name2} +1 ") team_2_plus1.triggered.connect(lambda: model.set_draw_state(2)) team_2_plus1.setDisabled(not model.is_draw()) parentPosition = self.pairs_list.mapToGlobal(QtCore.QPoint(0, 0)) self.listMenu.move(parentPosition + pos) self.listMenu.show()