Implement header row foreground colour
This commit is contained in:
parent
b7b825f0ef
commit
f7f4cdc622
@ -30,6 +30,7 @@ class NoteColoursTable(Model):
|
|||||||
substring: Mapped[str] = mapped_column(String(256), index=False)
|
substring: Mapped[str] = mapped_column(String(256), index=False)
|
||||||
colour: Mapped[str] = mapped_column(String(21), index=False)
|
colour: Mapped[str] = mapped_column(String(21), index=False)
|
||||||
enabled: Mapped[bool] = mapped_column(default=True, index=True)
|
enabled: Mapped[bool] = mapped_column(default=True, index=True)
|
||||||
|
foreground: Mapped[Optional[str]] = mapped_column(String(21), index=False)
|
||||||
is_regex: Mapped[bool] = mapped_column(default=False, index=False)
|
is_regex: Mapped[bool] = mapped_column(default=False, index=False)
|
||||||
is_casesensitive: Mapped[bool] = mapped_column(default=False, index=False)
|
is_casesensitive: Mapped[bool] = mapped_column(default=False, index=False)
|
||||||
order: Mapped[Optional[int]] = mapped_column(index=True)
|
order: Mapped[Optional[int]] = mapped_column(index=True)
|
||||||
|
|||||||
@ -70,14 +70,17 @@ class NoteColours(dbtables.NoteColoursTable):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_colour(session: Session, text: str) -> Optional[str]:
|
def get_colour(session: Session, text: str, foreground: bool = False) -> Optional[str]:
|
||||||
"""
|
"""
|
||||||
Parse text and return colour string if matched, else empty string
|
Parse text and return background (foreground if foreground==True) colour
|
||||||
|
string if matched, else None
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not text:
|
if not text:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
match = False
|
||||||
for rec in session.scalars(
|
for rec in session.scalars(
|
||||||
select(NoteColours)
|
select(NoteColours)
|
||||||
.filter(NoteColours.enabled.is_(True))
|
.filter(NoteColours.enabled.is_(True))
|
||||||
@ -89,15 +92,20 @@ class NoteColours(dbtables.NoteColoursTable):
|
|||||||
flags |= re.IGNORECASE
|
flags |= re.IGNORECASE
|
||||||
p = re.compile(rec.substring, flags)
|
p = re.compile(rec.substring, flags)
|
||||||
if p.match(text):
|
if p.match(text):
|
||||||
return rec.colour
|
match = True
|
||||||
else:
|
else:
|
||||||
if rec.is_casesensitive:
|
if rec.is_casesensitive:
|
||||||
if rec.substring in text:
|
if rec.substring in text:
|
||||||
return rec.colour
|
match = True
|
||||||
else:
|
else:
|
||||||
if rec.substring.lower() in text.lower():
|
if rec.substring.lower() in text.lower():
|
||||||
return rec.colour
|
match = True
|
||||||
|
|
||||||
|
if match:
|
||||||
|
if foreground:
|
||||||
|
return rec.foreground
|
||||||
|
else:
|
||||||
|
return rec.colour
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -147,9 +147,9 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
if self.is_header_row(row):
|
if self.is_header_row(row):
|
||||||
# Check for specific header colouring
|
# Check for specific header colouring
|
||||||
with db.Session() as session:
|
with db.Session() as session:
|
||||||
note_colour = NoteColours.get_colour(session, rat.note)
|
note_background = NoteColours.get_colour(session, rat.note)
|
||||||
if note_colour:
|
if note_background:
|
||||||
return QBrush(QColor(note_colour))
|
return QBrush(QColor(note_background))
|
||||||
else:
|
else:
|
||||||
return QBrush(QColor(Config.COLOUR_NOTES_PLAYLIST))
|
return QBrush(QColor(Config.COLOUR_NOTES_PLAYLIST))
|
||||||
# Unreadable track file
|
# Unreadable track file
|
||||||
@ -184,9 +184,9 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
if column == Col.NOTE.value:
|
if column == Col.NOTE.value:
|
||||||
if rat.note:
|
if rat.note:
|
||||||
with db.Session() as session:
|
with db.Session() as session:
|
||||||
note_colour = NoteColours.get_colour(session, rat.note)
|
note_background = NoteColours.get_colour(session, rat.note)
|
||||||
if note_colour:
|
if note_background:
|
||||||
return QBrush(QColor(note_colour))
|
return QBrush(QColor(note_background))
|
||||||
|
|
||||||
return QBrush()
|
return QBrush()
|
||||||
|
|
||||||
@ -303,6 +303,7 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
int(Qt.ItemDataRole.DisplayRole): self.display_role,
|
int(Qt.ItemDataRole.DisplayRole): self.display_role,
|
||||||
int(Qt.ItemDataRole.EditRole): self.edit_role,
|
int(Qt.ItemDataRole.EditRole): self.edit_role,
|
||||||
int(Qt.ItemDataRole.FontRole): self.font_role,
|
int(Qt.ItemDataRole.FontRole): self.font_role,
|
||||||
|
int(Qt.ItemDataRole.ForegroundRole): self.foreground_role,
|
||||||
int(Qt.ItemDataRole.ToolTipRole): self.tooltip_role,
|
int(Qt.ItemDataRole.ToolTipRole): self.tooltip_role,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,7 +317,6 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
Qt.ItemDataRole.WhatsThisRole,
|
Qt.ItemDataRole.WhatsThisRole,
|
||||||
Qt.ItemDataRole.SizeHintRole,
|
Qt.ItemDataRole.SizeHintRole,
|
||||||
Qt.ItemDataRole.TextAlignmentRole,
|
Qt.ItemDataRole.TextAlignmentRole,
|
||||||
Qt.ItemDataRole.ForegroundRole,
|
|
||||||
Qt.ItemDataRole.CheckStateRole,
|
Qt.ItemDataRole.CheckStateRole,
|
||||||
Qt.ItemDataRole.InitialSortOrderRole,
|
Qt.ItemDataRole.InitialSortOrderRole,
|
||||||
]:
|
]:
|
||||||
@ -447,6 +447,17 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
|
|
||||||
return QVariant()
|
return QVariant()
|
||||||
|
|
||||||
|
def foreground_role(self, row: int, column: int, rat: RowAndTrack) -> QBrush:
|
||||||
|
"""Return header foreground colour or QBrush() if none"""
|
||||||
|
|
||||||
|
if self.is_header_row(row):
|
||||||
|
with db.Session() as session:
|
||||||
|
note_foreground = NoteColours.get_colour(session, rat.note, foreground=True)
|
||||||
|
if note_foreground:
|
||||||
|
return QBrush(QColor(note_foreground))
|
||||||
|
|
||||||
|
return QBrush()
|
||||||
|
|
||||||
def flags(self, index: QModelIndex) -> Qt.ItemFlag:
|
def flags(self, index: QModelIndex) -> Qt.ItemFlag:
|
||||||
"""
|
"""
|
||||||
Standard model flags
|
Standard model flags
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user