コード例 #1
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(533, 433)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.selection_label = QtWidgets.QLabel(self.centralwidget)
        self.selection_label.setGeometry(QtCore.QRect(20, 20, 71, 16))
        self.selection_label.setObjectName("selection_label")
        self.batsman_label = QtWidgets.QLabel(self.centralwidget)
        self.batsman_label.setGeometry(QtCore.QRect(30, 50, 71, 16))
        self.batsman_label.setObjectName("batsman_label")
        self.batsman = QtWidgets.QLabel(self.centralwidget)
        self.batsman.setGeometry(QtCore.QRect(110, 50, 21, 16))
        self.batsman.setObjectName("batsman")
        self.bowler_label = QtWidgets.QLabel(self.centralwidget)
        self.bowler_label.setGeometry(QtCore.QRect(140, 50, 71, 16))
        self.bowler_label.setObjectName("bowler_label")
        self.bowler = QtWidgets.QLabel(self.centralwidget)
        self.bowler.setGeometry(QtCore.QRect(220, 50, 21, 16))
        self.bowler.setObjectName("bowler")
        self.allrounder_label = QtWidgets.QLabel(self.centralwidget)
        self.allrounder_label.setGeometry(QtCore.QRect(250, 50, 81, 16))
        self.allrounder_label.setObjectName("allrounder_label")
        self.allrounder = QtWidgets.QLabel(self.centralwidget)
        self.allrounder.setGeometry(QtCore.QRect(340, 50, 21, 16))
        self.allrounder.setObjectName("allrounder")
        self.wicket_keeper_label = QtWidgets.QLabel(self.centralwidget)
        self.wicket_keeper_label.setGeometry(QtCore.QRect(370, 50, 101, 16))
        self.wicket_keeper_label.setObjectName("wicket_keeper_label")
        self.wicket_keeper = QtWidgets.QLabel(self.centralwidget)
        self.wicket_keeper.setGeometry(QtCore.QRect(480, 50, 21, 16))
        self.wicket_keeper.setObjectName("wicket_keeper")
        self.points_available_label = QtWidgets.QLabel(self.centralwidget)
        self.points_available_label.setGeometry(QtCore.QRect(30, 90, 81, 16))
        self.points_available_label.setObjectName("points_available_label")
        self.points_available = QtWidgets.QLabel(self.centralwidget)
        self.points_available.setGeometry(QtCore.QRect(110, 90, 31, 16))
        self.points_available.setObjectName("points_available")
        self.points_used_label = QtWidgets.QLabel(self.centralwidget)
        self.points_used_label.setGeometry(QtCore.QRect(290, 90, 81, 16))
        self.points_used_label.setObjectName("points_used_label")
        self.points_used = QtWidgets.QLabel(self.centralwidget)
        self.points_used.setGeometry(QtCore.QRect(350, 90, 31, 16))
        self.points_used.setObjectName("points_used")
        self.points_available_frame = QtWidgets.QFrame(self.centralwidget)
        self.points_available_frame.setGeometry(QtCore.QRect(
            30, 110, 211, 231))
        self.points_available_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.points_available_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.points_available_frame.setObjectName("points_available_frame")
        self.allrounder_radio = QtWidgets.QRadioButton(
            self.points_available_frame)
        self.allrounder_radio.setGeometry(QtCore.QRect(111, 10, 42, 17))
        self.allrounder_radio.setObjectName("allrounder_radio")
        self.bowler_radio = QtWidgets.QRadioButton(self.points_available_frame)
        self.bowler_radio.setGeometry(QtCore.QRect(58, 10, 47, 17))
        self.bowler_radio.setObjectName("bowler_radio")
        self.batsman_radio = QtWidgets.QRadioButton(
            self.points_available_frame)
        self.batsman_radio.setGeometry(QtCore.QRect(10, 10, 42, 17))
        self.batsman_radio.setObjectName("batsman_radio")
        self.wicket_keeper_radio = QtWidgets.QRadioButton(
            self.points_available_frame)
        self.wicket_keeper_radio.setGeometry(QtCore.QRect(159, 10, 42, 17))
        self.wicket_keeper_radio.setObjectName("wicket_keeper_radio")
        self.player_available_list = QtWidgets.QListWidget(
            self.points_available_frame)
        self.player_available_list.setGeometry(QtCore.QRect(0, 0, 211, 241))
        self.player_available_list.setObjectName("player_available_list")
        self.player_available_list.raise_()

        # trigger the method to shift player from available to occupied
        self.player_available_list.currentRowChanged.connect(
            self.update_avaiable_player_list)

        self.allrounder_radio.raise_()
        self.bowler_radio.raise_()
        self.wicket_keeper_radio.raise_()
        self.batsman_radio.raise_()
        self.points_used_frame = QtWidgets.QFrame(self.centralwidget)
        self.points_used_frame.setGeometry(QtCore.QRect(290, 110, 211, 231))
        self.points_used_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.points_used_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.points_used_frame.setObjectName("points_used_frame")
        self.team_name_label = QtWidgets.QLabel(self.points_used_frame)
        self.team_name_label.setGeometry(QtCore.QRect(10, 10, 56, 13))
        self.team_name_label.setObjectName("team_name_label")
        self.team_name = QtWidgets.QLabel(self.points_used_frame)
        self.team_name.setGeometry(QtCore.QRect(88, 10, 86, 13))
        self.team_name.setObjectName("team_name")
        self.player_used_list = QtWidgets.QListWidget(self.points_used_frame)
        self.player_used_list.setGeometry(QtCore.QRect(0, 0, 211, 251))
        self.player_used_list.setObjectName("player_used_list")
        self.player_used_list.raise_()

        # trigger method to shift player to occupied to available when doubled clicked
        self.player_used_list.currentRowChanged.connect(
            self.update_selected_player_list)

        self.team_name_label.raise_()
        self.team_name.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 533, 21))
        self.menubar.setObjectName("menubar")
        self.menuManage_Teams = QtWidgets.QMenu(self.menubar)
        self.menuManage_Teams.setObjectName("menuManage_Teams")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionNew_Team = QtWidgets.QAction(MainWindow)
        self.actionNew_Team.setObjectName("actionNew_Team")
        self.actionOpen_Team = QtWidgets.QAction(MainWindow)
        self.actionOpen_Team.setObjectName("actionOpen_Team")
        self.actionSave_Team = QtWidgets.QAction(MainWindow)
        self.actionSave_Team.setObjectName("actionSave_Team")
        self.actionEvaluate_Team = QtWidgets.QAction(MainWindow)
        self.actionEvaluate_Team.setObjectName("actionEvaluate_Team")
        self.actionQuit = QtWidgets.QAction(MainWindow)
        self.actionQuit.setObjectName("actionQuit")
        self.menuManage_Teams.addAction(self.actionNew_Team)
        self.menuManage_Teams.addAction(self.actionOpen_Team)
        self.menuManage_Teams.addAction(self.actionSave_Team)
        self.menuManage_Teams.addAction(self.actionEvaluate_Team)
        self.menuManage_Teams.addAction(self.actionQuit)
        self.menubar.addAction(self.menuManage_Teams.menuAction())

        # Data holding variables
        self.__data_allrounder = None
        self.__data_bowler = None
        self.__data_wicket_keeper = None
        self.__data_batsmen = None
        self.__data_used_player = list()
        self.__data_allrounder_copy = None
        self.__data_bowler_copy = None
        self.__data_wicket_keeper_copy = None
        self.__data_batsmen_copy = None

        # value holding variables
        self.__data_bowler_value = None
        self.__data_batsmen_value = None
        self.__data_wicket_keeper_value = None
        self.__data_allrounder_value = None
        self.__data_used_player_value = list()
        self.__data_player_info = list()

        # databse credentials
        self.__database_name = "fantasy-cricket1.db"
        self.__database_connection = False

        # current radio button selected
        self.current_radio_button_selected = None

        # init dialog box class
        self.error_dialog = Dialog()

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.selection_label.setText(_translate("MainWindow",
                                                "Your Selection"))
        self.batsman_label.setText(_translate("MainWindow", "Batsman (BAT)"))
        self.batsman.setText(_translate("MainWindow", "0"))
        self.bowler_label.setText(_translate("MainWindow", "Bowler (BOW)"))
        self.bowler.setText(_translate("MainWindow", "0"))
        self.allrounder_label.setText(
            _translate("MainWindow", "Allrounder (AR)"))
        self.allrounder.setText(_translate("MainWindow", "0"))
        self.wicket_keeper_label.setText(
            _translate("MainWindow", "Wicket-keeper (WK)"))
        self.wicket_keeper.setText(_translate("MainWindow", "0"))
        self.points_available_label.setText(
            _translate("MainWindow", "Points Available"))
        self.points_available.setText(_translate("MainWindow", "0"))
        self.points_used_label.setText(_translate("MainWindow", "Points Used"))
        self.points_used.setText(_translate("MainWindow", "0"))
        self.allrounder_radio.setText(_translate("MainWindow", "AR"))

        # trigger show_allrounders method when allrounder_radio is clicked
        self.allrounder_radio.clicked.connect(self.show_allrounders)

        self.bowler_radio.setText(_translate("MainWindow", "BOW"))

        # trigger show_bowlers method when bowler_radio is clicked
        self.bowler_radio.clicked.connect(self.show_bowlers)

        self.batsman_radio.setText(_translate("MainWindow", "BAT"))

        # trigger show_batsmen method when batsman_radio is clicked
        self.batsman_radio.clicked.connect(self.show_batsmen)

        self.wicket_keeper_radio.setText(_translate("MainWindow", "WK"))

        # trigger show_wicket_keepers method when wicket_keeper_radio is clicke
        self.wicket_keeper_radio.clicked.connect(self.show_wicket_keepers)

        self.team_name_label.setText(_translate("MainWindow", "Team Name"))
        self.team_name.setText(_translate("MainWindow", "##"))
        self.menuManage_Teams.setTitle(_translate("MainWindow",
                                                  "Manage Teams"))
        self.actionNew_Team.setText(_translate("MainWindow", "New Team"))
        self.actionNew_Team.setShortcut(_translate("MainWindow", "Ctrl+N"))

        # trigger method to create new team
        self.actionNew_Team.triggered.connect(self.new_team)

        self.actionOpen_Team.setText(_translate("MainWindow", "Open Team"))
        self.actionOpen_Team.setShortcut(_translate("MainWindow", "Ctrl+O"))

        #trigger method to open a saved team
        self.actionOpen_Team.triggered.connect(self.open_team)

        self.actionSave_Team.setText(_translate("MainWindow", "Save Team"))
        self.actionSave_Team.setShortcut(_translate("MainWindow", "Ctrl+S"))
        #trigger method to save a team
        self.actionSave_Team.triggered.connect(self.save_team)
        self.actionEvaluate_Team.setText(
            _translate("MainWindow", "Evaluate Team"))
        self.actionEvaluate_Team.setShortcut(_translate(
            "MainWindow", "Ctrl+E"))

        # trigger method to evaluate a team
        self.actionEvaluate_Team.triggered.connect(self.evaluate_team)

        self.actionQuit.setText(_translate("MainWindow", "Quit"))
        self.actionQuit.setShortcut(_translate("MainWindow", "Ctrl+Q"))

        # trigger method to ask confirmation to quit game
        self.actionQuit.triggered.connect(self.quit)

    def new_team(self):
        try:
            team_name, okPressed = QtWidgets.QInputDialog.getText(
                self.centralwidget, "Get Team name", "Enter Team name :",
                QtWidgets.QLineEdit.Normal, "")

            if okPressed and team_name != '':
                # Reset current UI for new team selection by user
                self.reset_ui()
                self.team_name.setText(str(team_name))
                self.points_available.setText(
                    str(1000)
                )  #set font color different than black same for points used
        except:
            print("error")

    def open_team(self):
        try:
            file_name, _ = QtWidgets.QFileDialog.getOpenFileName(
                None,
                'Open File',
                options=QtWidgets.QFileDialog.DontUseNativeDialog)

            with open(file_name, 'r') as file:
                self.team_name.setText(str(file.readline()))
                self.batsman.setText(str(file.readline()))
                self.bowler.setText(str(file.readline()))
                self.allrounder.setText(file.readline())
                self.wicket_keeper.setText(str(file.readline()))
                self.points_available.setText(str(file.readline()))
                self.points_used.setText(str(file.readline()))
                self.__data_batsmen = json.loads(file.readline()) or list()
                self.__data_batsmen_copy = json.loads(
                    file.readline()) or list()
                self.__data_batsmen_value = json.loads(
                    file.readline()) or list()
                self.__data_bowler = json.loads(file.readline()) or list()
                self.__data_bowler_copy = json.loads(file.readline()) or list()
                self.__data_bowler_value = json.loads(
                    file.readline()) or list()
                self.__data_allrounder = json.loads(file.readline()) or list()
                self.__data_allrounder_copy = json.loads(
                    file.readline()) or list()
                self.__data_allrounder_value = json.loads(
                    file.readline()) or list()
                self.__data_wicket_keeper = json.loads(
                    file.readline()) or list()
                self.__data_wicket_keeper_copy = json.loads(
                    file.readline()) or list()
                self.__data_wicket_keeper_value = json.loads(
                    file.readline()) or list()
                self.__data_used_player = json.loads(file.readline()) or list()
                self.__data_used_player_value = json.loads(
                    file.readline()) or list()

                self.show_batsmen()
                self.show_used_players()
        except:
            self.error_dialog.set_title("Invalid File")
            self.error_dialog.error("The file you selected is invalid")
            print("file open error")

    def save_team(self):
        try:
            file_name, okPressed = QtWidgets.QInputDialog.getText(
                self.centralwidget, "Get File name", "Enter File name :",
                QtWidgets.QLineEdit.Normal, "")

            with open(file_name + ".fc", 'w+') as file:
                file.write(str(self.team_name.text()) + "\n")  #team name
                file.write(str(self.batsman.text()) +
                           "\n")  #selected batsman in count
                file.write(str(self.bowler.text()) +
                           "\n")  #selected bowler count
                file.write(str(self.allrounder.text()) +
                           "\n")  #selected allrounder count
                file.write(str(self.wicket_keeper.text()) +
                           "\n")  #selected wicket keeper count
                file.write(str(self.points_available.text()) +
                           "\n")  #current available points
                file.write(str(self.points_used.text()) +
                           "\n")  #current used points
                file.write(json.dumps(self.__data_batsmen) +
                           "\n")  #batsman data
                file.write(json.dumps(self.__data_batsmen_copy) +
                           "\n")  # batsman copy data
                file.write(json.dumps(self.__data_batsmen_value) +
                           "\n")  #batsman value
                file.write(json.dumps(self.__data_bowler) + "\n")  #bowler data
                file.write(json.dumps(self.__data_bowler_copy) + "\n")
                file.write(json.dumps(self.__data_bowler_value) + "\n")
                file.write(json.dumps(self.__data_allrounder) + "\n")
                file.write(json.dumps(self.__data_allrounder_copy) + "\n")
                file.write(json.dumps(self.__data_allrounder_value) + "\n")
                file.write(json.dumps(self.__data_wicket_keeper) + "\n")
                file.write(json.dumps(self.__data_wicket_keeper_copy) + "\n")
                file.write(json.dumps(self.__data_wicket_keeper_value) + "\n")
                file.write(json.dumps(self.__data_used_player) + "\n")
                file.write(json.dumps(self.__data_used_player_value) + "\n")

        except:
            self.error_dialog.set_title("File Not Saved")
            self.error_dialog.error("There was error saving file")
            print("file save error")

    def evaluate_team(self):

        if len(self.__data_used_player) == 0:
            return

        players_query = """select matches.scored, matches.faced, matches.fours, matches.sixes, matches.bowled,
                            matches.maiden, matches.given, matches.wkts, matches.catches, matches.stumping,
                            matches.run_out,player_information.runs,player_information.`100s`, player_information.`50s`,
                            player_category.name,players.name
                            from players, player_category, player_information,matches
                            where player_category.id = players.category and player_information.player_id = players.id 
                            and matches.player_id = players.id"""

        self.__data_player_info = self.get_complete_data_from_database(
            query=players_query)

        player_names = []
        score = []
        for player in self.__data_player_info:
            batting_score = self.batting_rule(player)
            fielding_score = self.fielding_rule(player)
            bowling_score = self.bowling_rule(player)
            player_names.append(player[15])
            score.append(batting_score + fielding_score + bowling_score)

        self.error_dialog.information(score, player_names,
                                      self.__data_used_player)

    def batting_rule(self, player):
        score = 0
        if player[0] >= 2:  # 1 point for 2 runs scored
            score += 1

        if player[13] > 0:  # additional 5 point for half century
            score += 5

        if player[12] > 0:  # additional 10 points for century
            score += 10

        if player[11] >= 80 and player[11] <= 100 or player[
                1] >= 80 and player[1] <= 100:
            # 2 points for strike rate (runs/balls faced) of 80-100
            score += 2

        if player[11] > 100 or player[1] > 100:
            # 4 points for strike rate (runs/balls faced) of 80-100
            score += 4
        if player[2] >= 1:  # 1 point for boundry (four)
            score += 1

        if player[3] >= 1:  # 2 point for over boundry (six)
            score += 2

        return score

    def fielding_rule(self, player):
        score = 0

        if player[8] > 0:  # 10 point for catch
            score += 10

        if player[9] > 0:  # 10 point for stumping
            score += 10

        if player[10] > 0:  # 10 point for run out
            score += 10

        return score

    def bowling_rule(self, player):
        score = 0
        if player[7] > 0:
            score += (10 * player[7])

        if player[7] >= 3:
            score += 5

        if player[7] >= 5:
            score += 10

        try:
            economy_rate = player[6] / (player[4] / 6)
            if economy_rate >= 3.5 and economy_rate <= 4.5:
                score += 4

            if economy_rate >= 2.0 and economy_rate <= 3.5:
                score += 7

            if economy_rate < 2.0:
                score += 10
        except:
            pass  #Division by zero exception
        return score

    def get_complete_data_from_database(self, query=None):

        if query is None:
            print("query error")
            return

        # self.__database_connection is False when initializing so
        if not self.__database_connection or not self.__database_connection.isOpen(
        ):
            print("opening connection")
            self.connect_to_database()

        query_db = QtSql.QSqlQuery(self.__database_connection)
        player_info = []
        if query_db.exec_(query):
            while query_db.next():
                player_info.append(
                    (query_db.value(0), query_db.value(1), query_db.value(2),
                     query_db.value(3), query_db.value(4), query_db.value(5),
                     query_db.value(6), query_db.value(7), query_db.value(8),
                     query_db.value(9), query_db.value(10), query_db.value(11),
                     query_db.value(12), query_db.value(13),
                     query_db.value(14), query_db.value(15)))
        else:
            print("sql syntax")

        return player_info

    def quit(self):
        self.error_dialog.user_quit_confirm()

    def reset_ui(self):
        self.batsman.setText("0")
        self.bowler.setText("0")
        self.allrounder.setText("0")
        self.wicket_keeper.setText("0")
        self.points_available.setText("0")
        self.points_used.setText("0")
        self.team_name.setText("##")

    def show_allrounders(self):

        self.current_radio_button_selected = "allrounder_radio"
        #all_rounder_query = "select player.name from players as player, player_category as category where
        # category.name = 'AR' and category.id = player.category"
        all_rounder_query = """select player.name,player_information.value from players as player,
                                player_category as category, player_information where category.name = 'AR' 
                                and category.id = player.category and player_information.player_id = player.id"""
        if self.__data_allrounder is None:
            self.__data_allrounder, self.__data_allrounder_value = self.get_player_name_and_value_from_database(
                query=all_rounder_query)
            self.__data_allrounder_copy = self.__data_allrounder.copy()

        self.player_available_list.clear()
        # leave first 2 position in list blank
        for index in range(2):
            self.player_available_list.addItem("")

        for player_name in self.__data_allrounder:
            self.player_available_list.addItem(player_name)

    def show_bowlers(self):
        self.current_radio_button_selected = "bowler_radio"
        #bowlers_query = "select player.name from players as player, player_category as category where
        # category.name = 'BWL' and category.id = player.category"
        bowlers_query = """select player.name,player_information.value from players as player, player_category 
                            as category, player_information where category.name = 'BWL' and 
                            category.id = player.category and player_information.player_id = player.id"""

        if self.__data_bowler is None:
            self.__data_bowler, self.__data_bowler_value = self.get_player_name_and_value_from_database(
                query=bowlers_query
            )  #List of all available Bowlers from database
            self.__data_bowler_copy = self.__data_bowler.copy()

        self.player_available_list.clear()
        # leave first 2 position in list blank
        for index in range(2):
            self.player_available_list.addItem("")

        for player_name in self.__data_bowler:
            self.player_available_list.addItem(player_name)

    def show_batsmen(self):
        self.current_radio_button_selected = "batsman_radio"
        #batsmen_query = "select player.name from players as player, player_category as category where
        # category.name = 'BAT' and category.id = player.category"
        batsmen_query = """ select player.name,player_information.value from players as player, player_category
                              as category, player_information where category.name = 'BAT' and 
                              category.id = player.category and player_information.player_id = player.id"""
        if self.__data_batsmen is None:
            self.__data_batsmen, self.__data_batsmen_value = self.get_player_name_and_value_from_database(
                query=batsmen_query
            )  #List of all available batsmen from database
            self.__data_batsmen_copy = self.__data_batsmen.copy()

        self.player_available_list.clear()
        # leave first 2 position in list blank
        for index in range(2):
            self.player_available_list.addItem("")

        for player_name in self.__data_batsmen:
            self.player_available_list.addItem(player_name)

    def show_wicket_keepers(self):
        self.current_radio_button_selected = "wicket_keeper_radio"

        #wicket_keeper_query = "select player.name from players as player, player_category as category where
        # category.name = 'WK' and category.id = player.category"
        wicket_keeper_query = """select player.name,player_information.value from players as player, player_category 
                                as category, player_information where category.name = 'WK' and 
                                category.id = player.category and player_information.player_id = player.id"""
        if self.__data_wicket_keeper is None:
            self.__data_wicket_keeper, self.__data_wicket_keeper_value = self.get_player_name_and_value_from_database(
                query=wicket_keeper_query
            )  #List of all available Bowlers from database
            self.__data_wicket_keeper_copy = self.__data_wicket_keeper.copy()

        self.player_available_list.clear()

        # leave first 2 position in list blank
        for index in range(2):
            self.player_available_list.addItem("")

        for player_name in self.__data_wicket_keeper:
            self.player_available_list.addItem(player_name)

    def get_player_name_and_value_from_database(self, query=None):
        if query is None:
            print("query error")

        # self.__database_connection is False when initializing so
        if not self.__database_connection or not self.__database_connection.isOpen(
        ):
            self.connect_to_database()

        query_db = QtSql.QSqlQuery(self.__database_connection)
        player_name = []
        player_value = []
        if query_db.exec_(query):
            while query_db.next():
                player_name.append((query_db.value(0)))
                player_value.append(query_db.value(1))
        else:
            print("sql syntax")

        return player_name, player_value

    def connect_to_database(self):
        self.__database_connection = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        self.__database_connection.setDatabaseName(self.__database_name)
        self.__database_connection.open()

    def update_available_points(self, point):
        self.points_available.setText(str(point))

    def update_used_points(self, points=None):
        if points is None:
            self.points_used.setText(
                str(1000 - int(self.points_available.text())))
        else:
            self.points_used.setText(str(points))

    def update_selected_player_list(self):
        try:

            current_row_index = self.player_used_list.currentRow()

            if self.player_used_list.currentRow() != -1:
                current_selected_text = self.__data_used_player[
                    current_row_index - 2]
                current_selected_text_value = self.__data_used_player_value[
                    current_row_index - 2]
                used_point = int(
                    self.points_used.text()) - current_selected_text_value
                available_point = int(
                    self.points_available.text()) + current_selected_text_value
                self.update_available_points(available_point)
                self.update_used_points(points=used_point)

                player_name = self.__data_used_player.pop(current_row_index -
                                                          2)
                self.__data_used_player_value.pop(current_row_index - 2)

                if self.__data_batsmen_copy is not None and current_selected_text in self.__data_batsmen_copy:
                    self.__data_batsmen.append(current_selected_text)
                    self.__data_batsmen_value.append(
                        current_selected_text_value)
                    self.decrement_batsmen_count()

                elif self.__data_wicket_keeper_copy is not None and current_selected_text in self.__data_wicket_keeper_copy:
                    self.__data_wicket_keeper.append(current_selected_text)
                    self.__data_wicket_keeper_value.append(
                        current_selected_text_value)
                    self.decrement_wicket_keeper_count()

                elif self.__data_bowler_copy is not None and current_selected_text in self.__data_bowler_copy:
                    self.__data_bowler.append(current_selected_text)
                    self.__data_bowler_value.append(
                        current_selected_text_value)
                    self.decrement_bowler_count()

                else:
                    self.__data_allrounder.append(current_selected_text)
                    self.__data_allrounder_value.append(
                        current_selected_text_value)
                    self.decrement_all_rounder_count()

            self.show_used_players()
        except:
            pass

    def update_avaiable_player_list(self):
        try:
            current_row_index = self.player_available_list.currentRow()

            if len(self.__data_used_player) > 11:
                self.show_maximun_team_player_error()
                return

            if self.player_available_list.currentRow() != -1:

                if self.current_radio_button_selected == "bowler_radio":
                    current_selected_text = self.__data_bowler[
                        current_row_index - 2]
                    current_selected_text_value = self.__data_bowler_value[
                        current_row_index - 2]
                    values = int(self.points_available.text()
                                 ) - current_selected_text_value
                    if values < 0:
                        self.show_inefficient_points_error()
                        return

                    self.update_available_points(values)
                    self.update_used_points()
                    self.__data_used_player.append(current_selected_text)
                    self.remove_player_from_available_list(
                        current_selected_text)
                    index = self.__data_bowler_value.index(
                        current_selected_text_value)
                    self.__data_used_player_value.append(
                        self.__data_bowler_value.pop(index))
                    self.increment_bowler_count()
                    self.show_bowlers()

                elif self.current_radio_button_selected == "batsman_radio":
                    current_selected_text = self.__data_batsmen[
                        current_row_index - 2]
                    current_selected_text_value = self.__data_batsmen_value[
                        current_row_index - 2]
                    values = int(self.points_available.text()
                                 ) - current_selected_text_value
                    if values < 0:
                        self.show_inefficient_points_error()
                        return

                    self.update_available_points(values)
                    self.update_used_points()
                    self.__data_used_player.append(current_selected_text)
                    self.remove_player_from_available_list(
                        current_selected_text)
                    index = self.__data_batsmen_value.index(
                        current_selected_text_value)
                    self.__data_used_player_value.append(
                        self.__data_batsmen_value.pop(index))
                    self.show_batsmen()
                    self.increment_batsmen_count()

                elif self.current_radio_button_selected == "wicket_keeper_radio":
                    if self.wicket_keeper.text() == "1":
                        self.show_wicket_keeper_error()
                    else:
                        current_selected_text = self.__data_wicket_keeper[
                            current_row_index - 2]
                        current_selected_text_value = self.__data_wicket_keeper_value[
                            current_row_index - 2]
                        values = int(self.points_available.text()
                                     ) - current_selected_text_value
                        if values < 0:
                            self.show_inefficient_points_error()
                            return

                        self.update_available_points(values)
                        self.update_used_points()
                        self.__data_used_player.append(current_selected_text)
                        self.remove_player_from_available_list(
                            current_selected_text)
                        self.__data_used_player_value.append(
                            self.__data_wicket_keeper_value.pop(
                                current_row_index - 2))
                        self.show_wicket_keepers()
                        self.increment_wicket_keeper_count()

                elif self.current_radio_button_selected == "allrounder_radio":  # All rounder radio selected
                    current_selected_text = self.__data_allrounder[
                        current_row_index - 2]
                    current_selected_text_value = self.__data_allrounder_value[
                        current_row_index - 2]
                    values = int(self.points_available.text()
                                 ) - current_selected_text_value
                    if values < 0:
                        self.show_inefficient_points_error()
                        return

                    self.update_available_points(values)
                    self.update_used_points()
                    self.__data_used_player.append(current_selected_text)
                    self.remove_player_from_available_list(
                        current_selected_text)
                    self.__data_used_player_value.append(
                        self.__data_allrounder_value.pop(current_row_index -
                                                         2))
                    self.show_allrounders()
                    self.increment_all_rounder_count()
                else:
                    print("error")
                self.show_used_players()
                return
        except:
            pass

    def show_inefficient_points_error(self):
        self.error_dialog.set_title("inefficient error")
        self.error_dialog.error("inefficient points")

    def show_maximun_team_player_error(self):

        self.error_dialog.set_title("Maximum players")
        self.error_dialog.error("Maximum Player Selected")

    def show_wicket_keeper_error(self):
        self.error_dialog.set_title("Wicket Keeper error")
        self.error_dialog.error("Maximum 1 wicket keeper can only be selected")

    def show_used_players(self):
        self.player_used_list.clear()

        # leave first 2 position in list blank
        for index in range(2):
            self.player_used_list.addItem("")

        for player_name in self.__data_used_player:
            self.player_used_list.addItem(player_name)

    def increment_wicket_keeper_count(self):
        current_count = int(self.wicket_keeper.text())
        self.wicket_keeper.setText(str(current_count + 1))

    def decrement_wicket_keeper_count(self):
        current_count = int(self.wicket_keeper.text())
        self.wicket_keeper.setText(str(current_count - 1))

    def increment_batsmen_count(self):
        current_count = int(self.batsman.text())
        self.batsman.setText(str(current_count + 1))

    def decrement_batsmen_count(self):
        current_count = int(self.batsman.text())
        self.batsman.setText(str(current_count - 1))

    def increment_all_rounder_count(self):
        current_count = int(self.allrounder.text())
        self.allrounder.setText(str(current_count + 1))

    def decrement_all_rounder_count(self):
        current_count = int(self.allrounder.text())
        self.allrounder.setText(str(current_count - 1))

    def increment_bowler_count(self):
        current_count = int(self.bowler.text())
        self.bowler.setText(str(current_count + 1))

    def decrement_bowler_count(self):
        current_count = int(self.bowler.text())
        self.bowler.setText(str(current_count - 1))

    def remove_player_from_available_list(self, player_name):
        index = None
        if self.current_radio_button_selected == "bowler_radio":
            index = self.__data_bowler.index(player_name)

            if index != -1:
                self.__data_bowler.pop(index)

        elif self.current_radio_button_selected == "batsman_radio":
            index = self.__data_batsmen.index(player_name)
            if index != -1:
                self.__data_batsmen.pop(index)

        elif self.current_radio_button_selected == "wicket_keeper_radio":
            index = self.__data_wicket_keeper.index(player_name)
            if index != -1:
                self.__data_wicket_keeper.pop(index)

        else:  # All rounder radio selected
            index = self.__data_allrounder.index(player_name)
            if index != -1:
                self.__data_allrounder.pop(index)
        return