Files
gotify-tray-customized/gotify_tray/gui/models/ApplicationModel.py
2023-05-21 12:53:33 +02:00

82 lines
2.5 KiB
Python

import enum
from PyQt6 import QtCore, QtGui
from gotify_tray import gotify
from gotify_tray.database import Settings
settings = Settings("gotify-tray")
class ApplicationItemDataRole(enum.IntEnum):
ApplicationRole = QtCore.Qt.ItemDataRole.UserRole + 1
IconRole = QtCore.Qt.ItemDataRole.UserRole + 2
class ApplicationModelItem(QtGui.QStandardItem):
def __init__(
self,
application: gotify.GotifyApplicationModel,
icon: QtGui.QIcon | None = None,
*args,
**kwargs,
):
super(ApplicationModelItem, self).__init__(application.name)
self.setDropEnabled(False)
self.setData(application, ApplicationItemDataRole.ApplicationRole)
self.setData(icon, ApplicationItemDataRole.IconRole)
if s := settings.value("ApplicationItem/font", type=str):
font = QtGui.QFont()
font.fromString(s)
self.setFont(font)
if icon:
self.setIcon(icon)
def clone(self):
return ApplicationModelItem(
self.data(ApplicationItemDataRole.ApplicationRole),
self.data(ApplicationItemDataRole.IconRole),
)
class ApplicationAllMessagesItem(QtGui.QStandardItem):
def __init__(self, *args, **kwargs):
super(ApplicationAllMessagesItem, self).__init__("ALL MESSAGES")
self.setDropEnabled(False)
self.setDragEnabled(False)
if s := settings.value("ApplicationItem/font", type=str):
font = QtGui.QFont()
font.fromString(s)
self.setFont(font)
class ApplicationModel(QtGui.QStandardItemModel):
def __init__(self):
super(ApplicationModel, self).__init__()
self.setItemPrototype(
ApplicationModelItem(gotify.GotifyApplicationModel({"name": ""}), None)
)
def setItem(
self,
row: int,
column: int,
item: ApplicationModelItem | ApplicationAllMessagesItem,
) -> None:
super(ApplicationModel, self).setItem(row, column, item)
def itemFromIndex(
self, index: QtCore.QModelIndex
) -> ApplicationModelItem | ApplicationAllMessagesItem:
return super(ApplicationModel, self).itemFromIndex(index)
def itemFromId(self, appid: int) -> ApplicationModelItem | None:
for row in range(self.rowCount()):
item = self.item(row, 0)
if not isinstance(item, ApplicationModelItem):
continue
if item.data(ApplicationItemDataRole.ApplicationRole).id == appid:
return item
return None