From 8838c23c5940b629e123655c6e24416ee1712fc9 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sat, 3 Jul 2021 10:15:08 +0100 Subject: [PATCH] Add end times column. Fixes #24 --- app/musicmuster.py | 2 ++ app/playlists.py | 42 +++++++++++++++++++++++++++++++----------- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index 999a25e..44ffbc3 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -124,6 +124,8 @@ class Window(QMainWindow, Ui_MainWindow): if record.f_int != self.y(): record.update(session, {'f_int': self.y()}) + self.visible_playlist_tab().close(session) + event.accept() def connect_signals_slots(self): diff --git a/app/playlists.py b/app/playlists.py index 16ee017..a03f600 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -29,9 +29,10 @@ class PlaylistTab(QTableWidget): COL_ARTIST = 3 COL_DURATION = 4 COL_START_TIME = 5 - COL_PATH = 6 + COL_END_TIME = 6 + COL_PATH = 7 - NOTE_COL_SPAN = 3 + NOTE_COL_SPAN = 4 NOTE_ROW_SPAN = 1 def __init__(self, *args, **kwargs): @@ -44,7 +45,7 @@ class PlaylistTab(QTableWidget): self.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) self.setRowCount(0) - self.setColumnCount(7) + self.setColumnCount(8) item = QtWidgets.QTableWidgetItem() self.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() @@ -59,11 +60,13 @@ class PlaylistTab(QTableWidget): self.setHorizontalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() self.setHorizontalHeaderItem(6, item) + item = QtWidgets.QTableWidgetItem() + self.setHorizontalHeaderItem(7, item) self.horizontalHeader().setMinimumSectionSize(0) self._set_column_widths() self.setHorizontalHeaderLabels(["ID", "Lead", "Title", "Artist", - "Len", "Start", "Path"]) + "Len", "Start", "End", "Path"]) self.setDragEnabled(True) self.setAcceptDrops(True) @@ -203,9 +206,11 @@ class PlaylistTab(QTableWidget): self.setSpan(row, self.COL_NOTE, self.NOTE_ROW_SPAN, self.NOTE_COL_SPAN) - # Add start times or empty items as background + # Add start/end times or empty items as background # colour won't be set for columns without items - self._set_row_time(row, start_time) + self._set_row_start_time(row, start_time) + item = QTableWidgetItem() + self.setItem(row, self.COL_END_TIME, item) item = QTableWidgetItem() self.setItem(row, self.COL_PATH, item) @@ -804,10 +809,13 @@ class PlaylistTab(QTableWidget): elif row == current: # Set start time - self._set_row_time(row, self.current_track_start_time) + self._set_row_start_time( + row, self.current_track_start_time) # Calculate next_start_time next_start_time = self._calculate_next_start_time( session, row, self.current_track_start_time) + # Set end time + self._set_row_end_time(row, next_start_time) # Set colour self._set_row_colour(row, QColor( Config.COLOUR_CURRENT_PLAYLIST)) @@ -826,7 +834,7 @@ class PlaylistTab(QTableWidget): if not start_time: start_time = next_start_time # Now set it - self._set_row_time(row, start_time) + self._set_row_start_time(row, start_time) next_start_time = self._calculate_next_start_time( session, row, start_time) # Set colour @@ -846,11 +854,13 @@ class PlaylistTab(QTableWidget): if self._get_row_id(row) in self.played_tracks: self._set_row_not_bold(row) else: - # Set time only if we haven't played it yet + # Set start/end times only if we haven't played it yet if next_start_time: - self._set_row_time(row, next_start_time) + self._set_row_start_time(row, next_start_time) next_start_time = self._calculate_next_start_time( session, row, next_start_time) + # Set end time + self._set_row_end_time(row, next_start_time) # Don't dim unplayed tracks self._set_row_bold(row) @@ -955,7 +965,17 @@ class PlaylistTab(QTableWidget): def _set_row_not_bold(self, row): self._set_row_bold(row, False) - def _set_row_time(self, row, time): + def _set_row_end_time(self, row, time): + "Set passed row end time to passed time" + try: + time_str = time.strftime("%H:%M:%S") + except AttributeError: + time_str = "" + item = QTableWidgetItem(time_str) + self.setItem(row, self.COL_END_TIME, item) + + def _set_row_start_time(self, row, time): + "Set passed row start time to passed time" try: time_str = time.strftime("%H:%M:%S") except AttributeError: