WIP V3: show selected time plus drag 'n' drop refinements
This commit is contained in:
parent
de710b1dc7
commit
9467ae4ee5
@ -445,6 +445,17 @@ class PlaylistModel(QAbstractTableModel):
|
||||
|
||||
return QVariant(boldfont)
|
||||
|
||||
def get_rows_duration(self, row_numbers: List[int]) -> int:
|
||||
"""
|
||||
Return the total duration of the passed rows
|
||||
"""
|
||||
|
||||
duration = 0
|
||||
for row_number in row_numbers:
|
||||
duration += self.playlist_rows[row_number].duration
|
||||
|
||||
return duration
|
||||
|
||||
def headerData(
|
||||
self,
|
||||
section: int,
|
||||
|
||||
@ -13,6 +13,7 @@ from PyQt6.QtCore import (
|
||||
QEvent,
|
||||
QModelIndex,
|
||||
QObject,
|
||||
QItemSelection,
|
||||
Qt,
|
||||
# QTimer,
|
||||
)
|
||||
@ -174,10 +175,9 @@ class PlaylistTab(QTableView):
|
||||
self.setAcceptDrops(True)
|
||||
# Set our custom style - this draws the drop indicator across the whole row
|
||||
self.setStyle(PlaylistStyle())
|
||||
|
||||
# TODO: change this later to only enable drags when multiple
|
||||
# rows selected
|
||||
self.setDragEnabled(True)
|
||||
# We will enable dragging when rows are selected. Disabling it
|
||||
# here means we can click and drag to select rows.
|
||||
self.setDragEnabled(False)
|
||||
# Prepare for context menu
|
||||
self.menu = QMenu()
|
||||
self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
@ -189,7 +189,6 @@ class PlaylistTab(QTableView):
|
||||
if isinstance(h_header, QHeaderView):
|
||||
h_header.sectionResized.connect(self._column_resize)
|
||||
h_header.setStretchLastSection(True)
|
||||
# self.itemSelectionChanged.connect(self._select_event)
|
||||
# self.signals.set_next_track_signal.connect(self._reset_next)
|
||||
self.signals = MusicMusterSignals()
|
||||
self.signals.span_cells_signal.connect(self._span_cells)
|
||||
@ -206,9 +205,6 @@ class PlaylistTab(QTableView):
|
||||
self.setModel(PlaylistModel(playlist_id))
|
||||
self._set_column_widths()
|
||||
|
||||
# kae def __repr__(self) -> str:
|
||||
# kae return f"<PlaylistTab(id={self.playlist_id}>"
|
||||
|
||||
# ########## Events other than cell editing ##########
|
||||
|
||||
def dropEvent(self, event):
|
||||
@ -226,8 +222,13 @@ class PlaylistTab(QTableView):
|
||||
and 0 <= to_row <= self.model().rowCount()
|
||||
):
|
||||
self.model().move_rows(from_rows, to_row)
|
||||
|
||||
# Reset drag mode to allow row selection by dragging
|
||||
self.setDragEnabled(False)
|
||||
# Deselect rows
|
||||
self.clear_selection()
|
||||
|
||||
event.accept()
|
||||
super().dropEvent(event)
|
||||
|
||||
# def dropEvent(self, event: Optional[QDropEvent]) -> None:
|
||||
# """
|
||||
@ -314,16 +315,17 @@ class PlaylistTab(QTableView):
|
||||
|
||||
return menu_item
|
||||
|
||||
# def mouseReleaseEvent(self, event):
|
||||
# """
|
||||
# Enable dragging if rows are selected
|
||||
# """
|
||||
def mouseReleaseEvent(self, event):
|
||||
"""
|
||||
Enable dragging if rows are selected
|
||||
"""
|
||||
|
||||
# if self.selectedIndexes():
|
||||
# self.setDragEnabled(True)
|
||||
# else:
|
||||
# self.setDragEnabled(False)
|
||||
# super().mouseReleaseEvent(event)
|
||||
if self.selectedIndexes():
|
||||
self.setDragEnabled(True)
|
||||
else:
|
||||
self.setDragEnabled(False)
|
||||
self.reset()
|
||||
super().mouseReleaseEvent(event)
|
||||
|
||||
# ########## Cell editing ##########
|
||||
|
||||
@ -518,7 +520,7 @@ class PlaylistTab(QTableView):
|
||||
"""Unselect all tracks and reset drag mode"""
|
||||
|
||||
self.clearSelection()
|
||||
# self.setDragEnabled(False)
|
||||
self.setDragEnabled(False)
|
||||
|
||||
def get_selected_row_number(self) -> Optional[int]:
|
||||
"""
|
||||
@ -1855,28 +1857,26 @@ class PlaylistTab(QTableView):
|
||||
if match_row is not None:
|
||||
self.selectRow(row_number)
|
||||
|
||||
# kae def _select_event(self) -> None:
|
||||
# kae """
|
||||
# kae Called when item selection changes.
|
||||
# kae If multiple rows are selected, display sum of durations in status bar.
|
||||
# kae """
|
||||
def selectionChanged(self, selected: QItemSelection, deselected: QItemSelection) -> None:
|
||||
"""
|
||||
Toggle drag behaviour according to whether rows are selected
|
||||
"""
|
||||
|
||||
# kae selected_rows = self._get_selected_rows()
|
||||
# kae # If no rows are selected, we have nothing to do
|
||||
# kae if len(selected_rows) == 0:
|
||||
# kae self.musicmuster.lblSumPlaytime.setText("")
|
||||
# kae return
|
||||
selected_rows = self._get_selected_rows()
|
||||
# If no rows are selected, we have nothing to do
|
||||
if len(selected_rows) == 0:
|
||||
self.musicmuster.lblSumPlaytime.setText("")
|
||||
else:
|
||||
model = cast(PlaylistModel, self.model())
|
||||
selected_duration = model.get_rows_duration(self._get_selected_rows())
|
||||
if selected_duration > 0:
|
||||
self.musicmuster.lblSumPlaytime.setText(
|
||||
f"Selected duration: {ms_to_mmss(selected_duration)}"
|
||||
)
|
||||
else:
|
||||
self.musicmuster.lblSumPlaytime.setText("")
|
||||
|
||||
# kae ms = 0
|
||||
# kae for row_number in selected_rows:
|
||||
# kae ms += self._get_row_duration(row_number)
|
||||
|
||||
# kae if ms > 0:
|
||||
# kae self.musicmuster.lblSumPlaytime.setText(
|
||||
# kae f"Selected duration: {ms_to_mmss(ms)}"
|
||||
# kae )
|
||||
# kae else:
|
||||
# kae self.musicmuster.lblSumPlaytime.setText("")
|
||||
super().selectionChanged(selected, deselected)
|
||||
|
||||
# def _set_cell_colour(
|
||||
# self, row_number: int, column: int, colour: Optional[str] = None
|
||||
|
||||
Loading…
Reference in New Issue
Block a user