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