Пример #1
0
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()