Implement hiding played sections
This commit is contained in:
parent
b16845f352
commit
efde8fe7bc
@ -61,6 +61,8 @@ class Config(object):
|
|||||||
HEADER_START_TIME = "Start"
|
HEADER_START_TIME = "Start"
|
||||||
HEADER_TITLE = "Title"
|
HEADER_TITLE = "Title"
|
||||||
HIDE_AFTER_PLAYING_OFFSET = 5000
|
HIDE_AFTER_PLAYING_OFFSET = 5000
|
||||||
|
HIDE_PLAYED_MODE_TRACKS = "TRACKS"
|
||||||
|
HIDE_PLAYED_MODE_SECTIONS = "SECTIONS"
|
||||||
INFO_TAB_TITLE_LENGTH = 15
|
INFO_TAB_TITLE_LENGTH = 15
|
||||||
INTRO_SECONDS_FORMAT = ".1f"
|
INTRO_SECONDS_FORMAT = ".1f"
|
||||||
INTRO_SECONDS_WARNING_MS = 3000
|
INTRO_SECONDS_WARNING_MS = 3000
|
||||||
@ -114,5 +116,6 @@ class Config(object):
|
|||||||
WIKIPEDIA_ON_NEXT = False
|
WIKIPEDIA_ON_NEXT = False
|
||||||
|
|
||||||
# These rely on earlier definitions
|
# These rely on earlier definitions
|
||||||
|
HIDE_PLAYED_MODE = HIDE_PLAYED_MODE_SECTIONS
|
||||||
IMPORT_DESTINATION = os.path.join(ROOT, "Singles")
|
IMPORT_DESTINATION = os.path.join(ROOT, "Singles")
|
||||||
REPLACE_FILES_DEFAULT_DESTINATION = os.path.dirname(REPLACE_FILES_DEFAULT_SOURCE)
|
REPLACE_FILES_DEFAULT_DESTINATION = os.path.dirname(REPLACE_FILES_DEFAULT_SOURCE)
|
||||||
|
|||||||
@ -655,8 +655,8 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
track_sequence.previous = track_sequence.current
|
track_sequence.previous = track_sequence.current
|
||||||
track_sequence.current = None
|
track_sequence.current = None
|
||||||
|
|
||||||
# Tell model previous track has finished
|
# Tell playlist previous track has finished
|
||||||
self.active_proxy_model().previous_track_ended()
|
self.active_tab().previous_track_ended()
|
||||||
|
|
||||||
# Reset clocks
|
# Reset clocks
|
||||||
self.frame_fade.setStyleSheet("")
|
self.frame_fade.setStyleSheet("")
|
||||||
@ -736,6 +736,9 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
self.hide_played_tracks = True
|
self.hide_played_tracks = True
|
||||||
self.active_proxy_model().hide_played_tracks(True)
|
self.active_proxy_model().hide_played_tracks(True)
|
||||||
self.btnHidePlayed.setText("Show played")
|
self.btnHidePlayed.setText("Show played")
|
||||||
|
if Config.HIDE_PLAYED_MODE == Config.HIDE_PLAYED_MODE_SECTIONS:
|
||||||
|
self.active_tab().hide_played_sections()
|
||||||
|
|
||||||
# Reset row heights
|
# Reset row heights
|
||||||
self.active_tab().resize_rows()
|
self.active_tab().resize_rows()
|
||||||
|
|
||||||
|
|||||||
@ -102,6 +102,22 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
f"<PlaylistModel: playlist_id={self.playlist_id}, {self.rowCount()} rows>"
|
f"<PlaylistModel: playlist_id={self.playlist_id}, {self.rowCount()} rows>"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def active_section_header(self) -> int:
|
||||||
|
"""
|
||||||
|
Return the row number of the header above the first unplayed
|
||||||
|
or currently being played track.
|
||||||
|
"""
|
||||||
|
|
||||||
|
header_row = 0
|
||||||
|
|
||||||
|
for row_number in range(len(self.playlist_rows)):
|
||||||
|
if self.is_header_row(row_number):
|
||||||
|
header_row = row_number
|
||||||
|
elif not self.is_played_row(row_number):
|
||||||
|
return header_row
|
||||||
|
|
||||||
|
return header_row
|
||||||
|
|
||||||
def add_track_to_header(
|
def add_track_to_header(
|
||||||
self, row_number: int, track_id: int, note: Optional[str] = None
|
self, row_number: int, track_id: int, note: Optional[str] = None
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -1647,6 +1663,9 @@ class PlaylistProxyModel(QSortFilterProxyModel):
|
|||||||
Subclass to filter by played status. Return True to show this row, False to hide it.
|
Subclass to filter by played status. Return True to show this row, False to hide it.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if Config.HIDE_PLAYED_MODE != Config.HIDE_PLAYED_MODE_TRACKS:
|
||||||
|
return True
|
||||||
|
|
||||||
if self.source_model.played_tracks_hidden:
|
if self.source_model.played_tracks_hidden:
|
||||||
if self.source_model.is_played_row(source_row):
|
if self.source_model.is_played_row(source_row):
|
||||||
# Don't hide current track
|
# Don't hide current track
|
||||||
|
|||||||
@ -801,6 +801,13 @@ class PlaylistTab(QTableView):
|
|||||||
log.debug(f"get_selected_rows() returned: {result=}")
|
log.debug(f"get_selected_rows() returned: {result=}")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def hide_played_sections(self) -> None:
|
||||||
|
"""
|
||||||
|
Scroll played sections off screen
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.scroll_to_top(self.source_model.active_section_header())
|
||||||
|
|
||||||
def _import_from_audacity(self, row_number: int) -> None:
|
def _import_from_audacity(self, row_number: int) -> None:
|
||||||
"""
|
"""
|
||||||
Import current Audacity track to passed row
|
Import current Audacity track to passed row
|
||||||
@ -871,6 +878,17 @@ class PlaylistTab(QTableView):
|
|||||||
except ApplicationError as e:
|
except ApplicationError as e:
|
||||||
show_warning(self.musicmuster, "Audacity error", str(e))
|
show_warning(self.musicmuster, "Audacity error", str(e))
|
||||||
|
|
||||||
|
def previous_track_ended(self) -> None:
|
||||||
|
"""
|
||||||
|
Called when track ends
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Let the model know
|
||||||
|
self.source_model.previous_track_ended()
|
||||||
|
# Scroll to current section if hide mode is by section
|
||||||
|
if Config.HIDE_PLAYED_MODE == Config.HIDE_PLAYED_MODE_SECTIONS:
|
||||||
|
self.hide_played_sections()
|
||||||
|
|
||||||
def _remove_comments(self) -> None:
|
def _remove_comments(self) -> None:
|
||||||
"""
|
"""
|
||||||
Remove comments from selected rows
|
Remove comments from selected rows
|
||||||
@ -913,8 +931,7 @@ class PlaylistTab(QTableView):
|
|||||||
|
|
||||||
def scroll_to_top(self, row_number: int) -> None:
|
def scroll_to_top(self, row_number: int) -> None:
|
||||||
"""
|
"""
|
||||||
Scroll to put passed row_number Config.SCROLL_TOP_MARGIN from the
|
Scroll to put passed row_number at the top of the displayed playlist.
|
||||||
top.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if row_number is None:
|
if row_number is None:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user