WIP: V3 header rows span columns

This commit is contained in:
Keith Edmunds 2023-10-19 18:29:09 +01:00
parent 9a01bf2c2c
commit 978b83ba67
3 changed files with 41 additions and 6 deletions

View File

@ -245,6 +245,7 @@ class MusicMusterSignals(QObject):
"""
set_next_track_signal = pyqtSignal(int, int)
span_cells_signal = pyqtSignal(int, int, int, int)
class PlaylistTrack:

View File

@ -1,6 +1,6 @@
from datetime import datetime
from enum import auto, Enum
from typing import Optional
from typing import Optional, TYPE_CHECKING
from PyQt6.QtCore import (
QAbstractTableModel,
@ -12,7 +12,6 @@ from PyQt6.QtCore import (
from PyQt6.QtGui import (
QBrush,
QColor,
QFont,
)
from config import Config
@ -27,6 +26,9 @@ from models import (
PlaylistRows,
)
if TYPE_CHECKING:
from musicmuster import MusicMusterSignals
class Col(Enum):
START_GAP = 0
@ -40,6 +42,9 @@ class Col(Enum):
NOTE = auto()
HEADER_NOTES_COLUMN = 1
class PlaylistRowData:
def __init__(self, plr: PlaylistRows) -> None:
"""
@ -77,8 +82,11 @@ class PlaylistRowData:
class PlaylistModel(QAbstractTableModel):
def __init__(self, playlist_id: int, *args, **kwargs):
def __init__(
self, playlist_id: int, signals: "MusicMusterSignals", *args, **kwargs
):
self.playlist_id = playlist_id
self.signals = signals
super().__init__(*args, **kwargs)
self.playlist_rows: dict[int, PlaylistRowData] = {}
@ -146,6 +154,21 @@ class PlaylistModel(QAbstractTableModel):
Return text for display
"""
# Detect whether this is a header row
if not prd.path:
header = prd.note
else:
header = ""
if header:
if column == HEADER_NOTES_COLUMN:
self.signals.span_cells_signal.emit(
row, HEADER_NOTES_COLUMN, 1, self.columnCount() - 1
)
return QVariant(prd.note)
else:
return QVariant()
if column == Col.START_GAP.value:
return QVariant(prd.start_gap)
if column == Col.TITLE.value:
@ -168,7 +191,11 @@ class PlaylistModel(QAbstractTableModel):
return QVariant()
def background_role(self, row: int, column: int, prd: PlaylistRowData) -> QBrush:
""" Return background setting """
"""Return background setting"""
# Handle entire row colouring
if file_is_unreadable(prd.path):
return QBrush(QColor(Config.COLOUR_UNREADABLE))
if column == Col.START_GAP.value:
if prd.start_gap and prd.start_gap >= Config.START_GAP_WARNING_THRESHOLD:
@ -199,7 +226,6 @@ class PlaylistModel(QAbstractTableModel):
# cell_colour = Config.COLOUR_BITRATE_OK
# return QVariant(QColor(cell_colour))
# if not rowdata.played:
# font = QFont()
# font.setBold(True)

View File

@ -146,7 +146,7 @@ class PlaylistTab(QTableView):
super().__init__()
self.musicmuster = musicmuster
self.playlist_id = playlist_id
self.setModel(PlaylistModel(playlist_id))
self.setModel(PlaylistModel(playlist_id, signals))
self.signals = signals
# Set up widget
@ -202,6 +202,7 @@ class PlaylistTab(QTableView):
self.horizontalHeader().sectionResized.connect(self._column_resize)
# self.itemSelectionChanged.connect(self._select_event)
# self.signals.set_next_track_signal.connect(self._reset_next)
self.signals.span_cells_signal.connect(self._span_cells)
# Load playlist rows
# self.populate_display(session, self.playlist_id)
@ -2379,6 +2380,13 @@ class PlaylistTab(QTableView):
self.save_playlist(session)
self._update_start_end_times(session)
def _span_cells(self, row: int, column: int, rowSpan: int, columnSpan: int) -> None:
"""
Implement spanning of cells, initiated by signal
"""
self.setSpan(row, column, rowSpan, columnSpan)
def _track_time_between_rows(
self, session: scoped_session, from_plr: PlaylistRows, to_plr: PlaylistRows
) -> Tuple[int, int]: