diff --git a/app/musicmuster.py b/app/musicmuster.py index 88f883e..5cd86d3 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -180,18 +180,18 @@ class Window(QMainWindow, Ui_MainWindow): # self.actionMoveSelected.triggered.connect(self.move_selected) self.actionNewPlaylist.triggered.connect(self.create_playlist) self.actionOpenPlaylist.triggered.connect(self.open_playlist) - # ***kae self.actionPlay_next.triggered.connect(self.play_next) # self.actionSearch.triggered.connect(self.search_playlist) # self.actionSearch_database.triggered.connect(self.search_database) -# self.actionSelect_next_track.triggered.connect(self.select_next_row) + self.actionSelect_next_track.triggered.connect(self.select_next_row) # self.actionSelect_played_tracks.triggered.connect(self.select_played) -# self.actionSelect_previous_track.triggered.connect( -# self.select_previous_row) + self.actionSelect_previous_track.triggered.connect( + self.select_previous_row) # self.actionSelect_unplayed_tracks.triggered.connect( # self.select_unplayed) self.actionSetNext.triggered.connect( lambda: self.tabPlaylist.currentWidget().set_selected_as_next()) + # ***kae # self.actionSkip_next.triggered.connect(self.play_next) self.actionStop.triggered.connect(self.stop) # self.btnDrop3db.clicked.connect(self.drop3db) @@ -662,21 +662,21 @@ class Window(QMainWindow, Ui_MainWindow): if playlist: playlist.mark_open(session) self.create_playlist_tab(session, playlist) -# -# def select_next_row(self) -> None: -# """Select next or first row in playlist""" -# -# self.visible_playlist_tab().select_next_row() + + def select_next_row(self) -> None: + """Select next or first row in playlist""" + + self.visible_playlist_tab().select_next_row() # # def select_played(self) -> None: # """Select all played tracks in playlist""" # # self.visible_playlist_tab().select_played_tracks() # -# def select_previous_row(self) -> None: -# """Select previous or first row in playlist""" -# -# self.visible_playlist_tab().select_previous_row() + def select_previous_row(self) -> None: + """Select previous or first row in playlist""" + + self.visible_playlist_tab().select_previous_row() # # def select_unplayed(self) -> None: # """Select all unplayed tracks in playlist""" diff --git a/app/playlists.py b/app/playlists.py index bb47928..fa3c930 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -794,41 +794,43 @@ class PlaylistTab(QTableWidget): # row, FIXUP.COL_USERDATA).data(self.CONTENT_OBJECT) # playlist.add_track(session, track_id, row) # session.commit() -# -# def select_next_row(self) -> None: -# """ -# Select next or first row. Don't select notes. Wrap at last row. -# """ -# -# row: int -# selected_rows: List[int] -# -# selected_rows = [row for row in -# set([a.row() for a in self.selectedItems()])] -# # we will only handle zero or one selected rows -# if len(selected_rows) > 1: -# return -# # select first row if none selected -# if len(selected_rows) == 0: -# row = 0 -# else: -# row = selected_rows[0] + 1 -# if row >= self.rowCount(): -# row = 0 -# -# # Don't select notes -# wrapped: bool = False -# while row in self._get_notes_rows(): -# row += 1 -# if row >= self.rowCount(): -# if wrapped: -# # we're already wrapped once, so there are no -# # non-notes -# return -# row = 0 -# wrapped = True -# -# self.selectRow(row) + + def select_next_row(self) -> None: + """ + Select next or first row. Don't select section headers. + Wrap at last row. + """ + + row: int + selected_rows: List[int] + + selected_rows = self._selected_rows() + # we will only handle zero or one selected rows + if len(selected_rows) > 1: + return + # select first row if none selected + if len(selected_rows) == 0: + row = 0 + else: + row = selected_rows[0] + 1 + if row >= self.rowCount(): + row = 0 + + # Don't select section headers + wrapped: bool = False + track_id = self._get_row_track_id(row) + while not track_id: + row += 1 + if row >= self.rowCount(): + if wrapped: + # we're already wrapped once, so there are no + # non-notes + return + row = 0 + wrapped = True + track_id = self._get_row_track_id(row) + + self.selectRow(row) # # def select_played_tracks(self) -> None: # """Select all played tracks in playlist""" @@ -839,42 +841,44 @@ class PlaylistTab(QTableWidget): # finally: # self.selecting_in_progress = False # self._select_event() -# -# def select_previous_row(self) -> None: -# """ -# Select previous or last track. Don't select notes. Wrap at first row. -# """ -# -# row: int -# selected_rows: List[int] -# -# selected_rows = [row for row in -# set([a.row() for a in self.selectedItems()])] -# # we will only handle zero or one selected rows -# if len(selected_rows) > 1: -# return -# # select last row if none selected -# last_row: int = self.rowCount() - 1 -# if len(selected_rows) == 0: -# row = last_row -# else: -# row = selected_rows[0] - 1 -# if row < 0: -# row = last_row -# -# # Don't select notes -# wrapped: bool = False -# while row in self._get_notes_rows(): -# row -= 1 -# if row < 0: -# if wrapped: -# # we're already wrapped once, so there are no -# # non-notes -# return -# row = last_row -# wrapped = True -# -# self.selectRow(row) + + def select_previous_row(self) -> None: + """ + Select previous or last track. Don't select section headers. + Wrap at first row. + """ + + row: int + selected_rows: List[int] + + selected_rows = self._selected_rows() + # we will only handle zero or one selected rows + if len(selected_rows) > 1: + return + # select last row if none selected + last_row = self.rowCount() - 1 + if len(selected_rows) == 0: + row = last_row + else: + row = selected_rows[0] - 1 + if row < 0: + row = last_row + + # Don't select section headers + wrapped: bool = False + track_id = self._get_row_track_id(row) + while not track_id: + row -= 1 + if row < 0: + if wrapped: + # we're already wrapped once, so there are no + # non-notes + return + row = last_row + wrapped = True + track_id = self._get_row_track_id(row) + + self.selectRow(row) # # def select_unplayed_tracks(self) -> None: # """Select all unplayed tracks in playlist""" @@ -1750,7 +1754,7 @@ class PlaylistTab(QTableWidget): else: self.musicmuster.lblSumPlaytime.setText("") - def _selected_rows(self) -> Optional[List[int]]: + def _selected_rows(self) -> List[int]: """Return a list of selected row numbers""" # Use a set to deduplicate result (a selected row will have all