From 74028fadf7849341c98b49664f6ee151a073473c Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sun, 1 Jan 2023 14:25:06 +0000 Subject: [PATCH] Set colours of tabs correctly. --- app/musicmuster.py | 41 ++++++++++++++++++++++++++++++++--------- app/playlists.py | 31 ++++++++++++++++--------------- 2 files changed, 48 insertions(+), 24 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index 7cbe9d3..315aef8 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -1054,14 +1054,17 @@ class Window(QMainWindow, Ui_MainWindow): if self.current_track.playlist_tab != self.next_track.playlist_tab: self.set_tab_colour(self.current_track.playlist_tab, QColor(Config.COLOUR_NORMAL_TAB)) - # Set current track playlist_tab colour - self.set_tab_colour(self.current_track.playlist_tab, - QColor(Config.COLOUR_CURRENT_TAB)) # Move next track to current track. + # stop_playing() above has called end_of_track_actions() + # which will have populated self.previous_track self.current_track = self.next_track self.next_track = PlaylistTrack() + # Set current track playlist_tab colour + self.set_tab_colour(self.current_track.playlist_tab, + QColor(Config.COLOUR_CURRENT_TAB)) + # Restore volume if -3dB active if self.btnDrop3db.isChecked(): self.btnDrop3db.setChecked(False) @@ -1232,7 +1235,7 @@ class Window(QMainWindow, Ui_MainWindow): """Scroll to show current track""" if self.current_track.playlist_tab != self.visible_playlist_tab(): - self.tabPlaylist.setCurrentWidget(self.current.track_playlist_tab) + self.tabPlaylist.setCurrentWidget(self.current_track.playlist_tab) self.tabPlaylist.currentWidget().scroll_current_to_top() def show_next(self) -> None: @@ -1320,16 +1323,36 @@ class Window(QMainWindow, Ui_MainWindow): """ - # Clear next track if on another tab - if self.next_track.playlist_tab and ( - self.next_track.playlist_tab != playlist_tab): - # Repaint ex-next track playlist to remove highlighting - self.next_track.playlist_tab.update_display(session) + if plr.track_id is None: + return + + # Clean up if we are replacing an existing "next track" + original_next_track_playlist_tab = None + if ( + # If we already have a next tab lined up and it's neither + # the "new" next tab nor the current track tab then we need + # to reset the tab colour. + self.next_track.playlist_tab and + self.next_track.playlist_tab != playlist_tab and + self.next_track.playlist_tab != self.current_track.playlist_tab + ): + original_next_track_playlist_tab = self.next_track.playlist_tab + self.set_tab_colour(self.next_track.playlist_tab, + QColor(Config.COLOUR_NORMAL_TAB)) + # Discard now-incorrect next_track PlaylistTrack self.next_track = PlaylistTrack() self.next_track.set_plr(session, plr, playlist_tab) self.next_track.playlist_tab.update_display(session) + if self.current_track.playlist_tab != self.next_track.playlist_tab: + self.set_tab_colour(self.next_track.playlist_tab, + QColor(Config.COLOUR_NEXT_TAB)) + + # If we've changed playlist tabs for next track, refresh old one + # to remove highligting of next track + if original_next_track_playlist_tab: + original_next_track_playlist_tab.update_display(session) # Populate footer if we're not currently playing if not self.playing and self.next_track.track_id: diff --git a/app/playlists.py b/app/playlists.py index 82d002a..6429e31 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -938,6 +938,8 @@ class PlaylistTab(QTableWidget): # Set row heights self.resizeRowsToContents() self.setColumnWidth(len(columns) - 1, 0) + with Session() as session: + self.update_display(session) def update_display(self, session: Session) -> None: """ @@ -1299,12 +1301,24 @@ class PlaylistTab(QTableWidget): def _get_current_track_row_number(self) -> Optional[int]: """Return current track row or None""" - return self.musicmuster.current_track.row_number + current_track = self.musicmuster.current_track + if not current_track.track_id: + return None + if current_track.playlist_tab == self: + return current_track.row_number + else: + return None def _get_next_track_row_number(self) -> Optional[int]: """Return next track row or None""" - return self.musicmuster.next_track.row_number + next_track = self.musicmuster.next_track + if not next_track.track_id: + return None + if next_track.playlist_tab == self: + return next_track.row_number + else: + return None @staticmethod def _get_note_text_time(text: str) -> Optional[datetime]: @@ -1501,19 +1515,6 @@ class PlaylistTab(QTableWidget): ) raise AttributeError(f"Multiple '{metadata}' metadata {matches}") - def _meta_set_attribute(self, row: int, attribute: int) -> None: - """Set row metadata""" - - if row is None: - raise ValueError(f"_meta_set_attribute({row=}, {attribute=})") - - current_metadata: int = self._meta_get(row) - if not current_metadata: - new_metadata: int = (1 << attribute) - else: - new_metadata = self._meta_get(row) | (1 << attribute) - self.item(row, USERDATA).setData(self.ROW_FLAGS, new_metadata) - def _move_row(self, session: Session, plr: PlaylistRows, new_row_number: int) -> None: """Move playlist row to new_row_number using parent copy/paste"""