def __init__(self, parent=None):
        super(CalculatorForm, self).__init__(parent)
        self.currentTableState = VideoTableStates.EQUAL

        self.videoTableState = 3
        self.url= C.QUrl.fromLocalFile("c:\Lazer.mp3")
        self.content= M.QMediaContent(self.url)
        self.player = M.QMediaPlayer()
        self.player.setMedia(self.content)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        conn = sqlite3.connect('Youtube_MirrorV2.db')
        self.c = conn.cursor()
        self.c.execute('pragma foreign_keys = ON;')
        conn.commit()

        self.ui.tableWidgetVideos.setAlternatingRowColors(True)
        self.ui.tableWidgetChannels.setColumnCount(3)
        self.ui.tableWidgetChannels.horizontalHeader().setStretchLastSection(True)
        self.ui.tableWidgetChannels.setHorizontalHeaderLabels(('ID', 'Channel', 'No of Videos'))
        self.ui.tableWidgetChannels.verticalHeader().setVisible(False)
        self.ui.tableWidgetChannels.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.ui.tableWidgetChannels.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.ui.tableWidgetChannels.cellClicked.connect(self.cell_was_clicked)
        self.ui.tableWidgetChannels.setColumnHidden(0, True)
        self.ui.tableWidgetChannels.setColumnWidth(1, 170)

        self.ui.tableWidgetVideos.setColumnCount(6)
        self.ui.tableWidgetVideos.setHorizontalHeaderLabels(('ID', 'Video Name', 'Video ID', "Status", "Upload Date", "Download Date"))
        self.ui.tableWidgetVideos.verticalHeader().setVisible(False)
        self.ui.tableWidgetVideos.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.ui.tableWidgetVideos.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.ui.tableWidgetVideos.cellClicked.connect(self.videocell_was_clicked)
        self.ui.tableWidgetVideos.setColumnWidth(1, 300)
        self.ui.tableWidgetVideos.setColumnWidth(4, 150)
        self.ui.tableWidgetVideos.horizontalHeader().setStretchLastSection(True)
        self.ui.tableWidgetVideos.setColumnHidden(0, True)

        self.ui.btnResizeUp.setIcon(self.style().standardIcon(QStyle.SP_ArrowUp))
        self.ui.btnResizeDown.setIcon(self.style().standardIcon(QStyle.SP_ArrowDown))
        self.ui.toolButtonRefresh.setIcon(self.style().standardIcon(QStyle.SP_BrowserReload))

        self.ui.btnResizeUp.clicked.connect(self.btnResizeUp_pressed)
        self.ui.btnResizeDown.clicked.connect(self.btnResizeDown_pressed)
        self.ui.pushButtonAdd.clicked.connect(self.pushButtonAdd_pressed)
class CalculatorForm(QMainWindow):
    def __init__(self, parent=None):
        super(CalculatorForm, self).__init__(parent)
        self.currentTableState = VideoTableStates.EQUAL

        self.videoTableState = 3
        self.url= C.QUrl.fromLocalFile("c:\Lazer.mp3")
        self.content= M.QMediaContent(self.url)
        self.player = M.QMediaPlayer()
        self.player.setMedia(self.content)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        conn = sqlite3.connect('Youtube_MirrorV2.db')
        self.c = conn.cursor()
        self.c.execute('pragma foreign_keys = ON;')
        conn.commit()

        self.ui.tableWidgetVideos.setAlternatingRowColors(True)
        self.ui.tableWidgetChannels.setColumnCount(3)
        self.ui.tableWidgetChannels.horizontalHeader().setStretchLastSection(True)
        self.ui.tableWidgetChannels.setHorizontalHeaderLabels(('ID', 'Channel', 'No of Videos'))
        self.ui.tableWidgetChannels.verticalHeader().setVisible(False)
        self.ui.tableWidgetChannels.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.ui.tableWidgetChannels.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.ui.tableWidgetChannels.cellClicked.connect(self.cell_was_clicked)
        self.ui.tableWidgetChannels.setColumnHidden(0, True)
        self.ui.tableWidgetChannels.setColumnWidth(1, 170)

        self.ui.tableWidgetVideos.setColumnCount(6)
        self.ui.tableWidgetVideos.setHorizontalHeaderLabels(('ID', 'Video Name', 'Video ID', "Status", "Upload Date", "Download Date"))
        self.ui.tableWidgetVideos.verticalHeader().setVisible(False)
        self.ui.tableWidgetVideos.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.ui.tableWidgetVideos.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.ui.tableWidgetVideos.cellClicked.connect(self.videocell_was_clicked)
        self.ui.tableWidgetVideos.setColumnWidth(1, 300)
        self.ui.tableWidgetVideos.setColumnWidth(4, 150)
        self.ui.tableWidgetVideos.horizontalHeader().setStretchLastSection(True)
        self.ui.tableWidgetVideos.setColumnHidden(0, True)

        self.ui.btnResizeUp.setIcon(self.style().standardIcon(QStyle.SP_ArrowUp))
        self.ui.btnResizeDown.setIcon(self.style().standardIcon(QStyle.SP_ArrowDown))
        self.ui.toolButtonRefresh.setIcon(self.style().standardIcon(QStyle.SP_BrowserReload))

        self.ui.btnResizeUp.clicked.connect(self.btnResizeUp_pressed)
        self.ui.btnResizeDown.clicked.connect(self.btnResizeDown_pressed)
        self.ui.pushButtonAdd.clicked.connect(self.pushButtonAdd_pressed)
        #self.style().standardIcon(QStyle.SP_MediaSkipForward))btnResizeUp

    def load_initial_data(self):
        # where c is the cursor
        self.c.execute('''SELECT * FROM channel''')
        channel_rows = self.c.fetchall()

        for channel_row in channel_rows:
            inx = channel_rows.index(channel_row)
            self.ui.tableWidgetChannels.insertRow(inx)
            # add more if there is more columns in the database.
            self.c.execute('''SELECT count(id) FROM video WHERE channelId IS ''' + str(channel_row[0]))
            video_count = self.c.fetchall()[0][0]

            self.ui.tableWidgetChannels.setItem(inx, 0, QTableWidgetItem(str(channel_row[0])))
            self.ui.tableWidgetChannels.setItem(inx, 1, QTableWidgetItem(channel_row[1]))
            self.ui.tableWidgetChannels.setItem(inx, 2, QTableWidgetItem(str(video_count)

            ))

    def getSameRowCell(self, widget, columnName):
       row = widget.currentItem().row()

       #loop through headers and find column number for given column name
       headerCount = widget.columnCount()
       for x in range(0,headerCount,1):
           headerText = widget.horizontalHeaderItem(x).text()
           if columnName == headerText:
               matchCol = x
               break

       cell = widget.item(row,matchCol).text()   # get cell at row, col

       return cell

    @pyqtSlot()
    def pushButtonAdd_pressed(self):

        pass

    @pyqtSlot() # prevents executing following function twice
    def cell_was_clicked(self):
        self.ui.tableWidgetVideos.clearContents()
        self.ui.tableWidgetVideos.setRowCount(0)

        clickedChannelId = self.getSameRowCell(widget = self.ui.tableWidgetChannels, columnName="ID")
        self.c.execute('''SELECT * FROM video WHERE channelId IS ''' + str(clickedChannelId))
        video_rows = self.c.fetchall()

        #self.player.play()
        #self.player.stateChanged.connect(  self.player.stop() )

        for video_row in video_rows:
            inx = video_rows.index(video_row)
            self.ui.tableWidgetVideos.insertRow(inx)

            self.ui.tableWidgetVideos.setItem(inx, 0, QTableWidgetItem(str(video_row[0])))   # Video ID
            self.ui.tableWidgetVideos.setItem(inx, 1, QTableWidgetItem(video_row[4]))   # Video Name
            self.ui.tableWidgetVideos.setItem(inx, 2, QTableWidgetItem(video_row[2]))   # Video ID
            self.ui.tableWidgetVideos.setItem(inx, 3, QTableWidgetItem(video_row[3]))   # Status
            self.ui.tableWidgetVideos.setItem(inx, 4, QTableWidgetItem(datetime.datetime.fromtimestamp(
                                                                        int(video_row[6])
                                                                        ).strftime('%Y-%m-%d %H:%M:%S')))   # Upload Date
            self.ui.tableWidgetVideos.setItem(inx, 5, QTableWidgetItem(datetime.datetime.fromtimestamp(
                                                                        int(video_row[7])
                                                                        ).strftime('%Y-%m-%d %H:%M:%S')))   # Download Date

    @pyqtSlot() # prevents executing following function twice
    def videocell_was_clicked(self):
        clickedVideoId = self.getSameRowCell(widget = self.ui.tableWidgetVideos, columnName="ID")
        self.c.execute('''SELECT * FROM video WHERE id IS ''' + str(clickedVideoId))
        video_row = self.c.fetchall()[0]
        self.ui.txtName.setText(video_row[4])
        self.ui.txtDesc.setText(video_row[5])
        self.ui.txtLLocalLocation.setText(video_row[8])
        self.ui.txtUploadDate.setText(datetime.datetime.fromtimestamp(
                                                                        int(video_row[6])
                                                                        ).strftime('%Y-%m-%d %H:%M:%S'))
        self.ui.txtDownloadDate.setText(datetime.datetime.fromtimestamp(
                                                                        int(video_row[7])
                                                                        ).strftime('%Y-%m-%d %H:%M:%S'))

        player.playlist.clear()
        newfiles = [video_row[8]]
        player.addToPlaylist(newfiles)
        self.ui.mainVideoContainer.sizeConstrain = QLayout.SetMinimumSize

    @pyqtSlot()
    def btnResizeUp_pressed(self):
        if self.currentTableState == VideoTableStates.VIDLISTMIN:
            pass
        elif self.currentTableState == VideoTableStates.VIDLISTSMALL:
            self.ui.tableWidgetVideos.setMaximumHeight(100)
            self.ui.tableWidgetVideos.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
            self.currentTableState = VideoTableStates.VIDLISTMIN
        elif self.currentTableState == VideoTableStates.EQUAL:
            self.ui.tableWidgetVideos.setMaximumHeight(200)
            self.ui.tableWidgetVideos.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
            self.currentTableState = VideoTableStates.VIDLISTSMALL
        elif self.currentTableState == VideoTableStates.VIDDATASMALL:
            self.ui.groupBox.setMaximumHeight(10000)
            player.setMaximumHeight(10000)
            self.ui.tableWidgetVideos.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
            self.currentTableState = VideoTableStates.EQUAL

    @pyqtSlot()
    def btnResizeDown_pressed(self):
        if self.currentTableState == VideoTableStates.VIDLISTMIN:
            self.ui.tableWidgetVideos.setMaximumHeight(200)
            self.ui.tableWidgetVideos.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
            self.currentTableState = VideoTableStates.VIDLISTSMALL
        elif self.currentTableState == VideoTableStates.VIDLISTSMALL:
            self.ui.tableWidgetVideos.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
            self.ui.tableWidgetVideos.setMaximumHeight(10000)
            self.currentTableState = VideoTableStates.EQUAL
        elif self.currentTableState == VideoTableStates.EQUAL:
            self.ui.groupBox.setMaximumHeight(200)
            player.setMaximumHeight(200)
            self.ui.tableWidgetVideos.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
            self.currentTableState = VideoTableStates.VIDDATASMALL