Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:X0F:branches:multimedia
trackma
trackma_qt6-rework.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File trackma_qt6-rework.patch of Package trackma
From 438598a1424e2c1fb6df2d68490e964dd80c8c14 Mon Sep 17 00:00:00 2001 From: v-fox <virtuousfox@gmail.com> Date: Tue, 2 Apr 2024 06:47:59 +0500 Subject: [PATCH] Qt6 support rebase of https://github.com/z411/trackma/compare/master...alsoGAMER:trackma:qt6-rework --- trackma/ui/qt/__init__.py | 25 +++++++--- trackma/ui/qt/accounts.py | 50 ++++++++++---------- trackma/ui/qt/add.py | 16 +++---- trackma/ui/qt/delegates.py | 60 +++++++++++------------ trackma/ui/qt/details.py | 4 +- trackma/ui/qt/mainwindow.py | 76 ++++++++++++++++++------------ trackma/ui/qt/models.py | 46 +++++++++--------- trackma/ui/qt/qt6.py | 19 ++++++++ trackma/ui/qt/settings.py | 37 +++++++-------- trackma/ui/qt/themedcolorpicker.py | 14 +++--- trackma/ui/qt/thumbs.py | 8 ++-- trackma/ui/qt/util.py | 9 +++- trackma/ui/qt/widgets.py | 60 +++++++++++------------ trackma/ui/qt/workers.py | 2 +- 14 files changed, 238 insertions(+), 188 deletions(-) create mode 100644 trackma/ui/qt/qt6.py diff --git a/trackma/ui/qt/__init__.py b/trackma/ui/qt/__init__.py index aa29d02..60fc862 100644 --- a/trackma/ui/qt/__init__.py +++ b/trackma/ui/qt/__init__.py @@ -39,10 +39,23 @@ def main(): debug = True try: - from PyQt5.QtWidgets import QApplication, QMessageBox - except ImportError: - print("Couldn't import Qt5 dependencies. " - "Make sure you installed the PyQt5 package.") + from PyQt6.QtWidgets import QApplication, QMessageBox + os.environ['PYQT6'] = "1" + except ImportError as e: + print("Error while import pyqt6") + print(e) + sys.exit(-1) + + if 'PYQT6' not in os.environ: + try: + import sip + sip.setapi('QVariant', 3) + from PyQt5.QtWidgets import QApplication, QMessageBox + except ImportError as e: + print("Couldn't import Qt5 dependencies. " + "Make sure you installed the PyQt5 package.") + # print(e) + sys.exit(-1) try: from PIL import Image @@ -61,6 +74,6 @@ def main(): try: # keep the variable around to prevent it from being gc'ed main_window = MainWindow(debug) - sys.exit(app.exec_()) + sys.exit(app.exec()) except utils.TrackmaFatal as e: - QMessageBox.critical(None, 'Fatal Error', "{0}".format(e), QMessageBox.Ok) + QMessageBox.critical(None, 'Fatal Error', "{0}".format(e), QMessageBox.StandardButton.Ok) diff --git a/trackma/ui/qt/accounts.py b/trackma/ui/qt/accounts.py index 432dceb..abeb40b 100644 --- a/trackma/ui/qt/accounts.py +++ b/trackma/ui/qt/accounts.py @@ -14,14 +14,14 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -from PyQt5 import QtCore, QtGui -from PyQt5.QtWidgets import (QAbstractItemView, QCheckBox, QComboBox, QDialog, QDialogButtonBox, QFormLayout, +from PyQt6 import QtCore, QtGui +from PyQt6.QtWidgets import (QAbstractItemView, QCheckBox, QComboBox, QDialog, QDialogButtonBox, QFormLayout, QHBoxLayout, QHeaderView, QLabel, QLineEdit, QMessageBox, QPushButton, QTableWidget, QTableWidgetItem, QVBoxLayout) from trackma import utils -pyqt_version = 5 +pyqt_version = 6 class AccountDialog(QDialog): @@ -42,11 +42,11 @@ class AccountDialog(QDialog): # Create list self.table = QTableWidget() self.table.horizontalHeader().setHighlightSections(False) - self.table.setSelectionMode(QAbstractItemView.SingleSelection) - self.table.setSelectionBehavior(QAbstractItemView.SelectRows) - self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.table.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) + self.table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) + self.table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) self.table.verticalHeader().hide() - self.table.setGridStyle(QtCore.Qt.NoPen) + self.table.setGridStyle(QtCore.Qt.PenStyle.NoPen) self.table.doubleClicked.connect(self.select) self.table.itemSelectionChanged.connect(self.update_selection) @@ -63,11 +63,11 @@ class AccountDialog(QDialog): self.edit_btns.addItem('Delete') self.edit_btns.addItem('Purge') self.edit_btns.setItemData( - 1, 'Change the local password/PIN for this account', QtCore.Qt.ToolTipRole) + 1, 'Change the local password/PIN for this account', QtCore.Qt.ItemDataRole.ToolTipRole) self.edit_btns.setItemData( - 2, 'Remove this account from Trackma', QtCore.Qt.ToolTipRole) + 2, 'Remove this account from Trackma', QtCore.Qt.ItemDataRole.ToolTipRole) self.edit_btns.setItemData( - 3, 'Clear local DB for this account', QtCore.Qt.ToolTipRole) + 3, 'Clear local DB for this account', QtCore.Qt.ItemDataRole.ToolTipRole) self.edit_btns.setCurrentIndex(0) self.edit_btns.blockSignals(False) self.edit_btns.activated.connect(self.s_edit) @@ -139,17 +139,17 @@ class AccountDialog(QDialog): def delete(self): reply = QMessageBox.question( - self, 'Confirmation', 'Do you want to delete the selected account?', QMessageBox.Yes, QMessageBox.No) + self, 'Confirmation', 'Do you want to delete the selected account?', QMessageBox.StandardButton.Yes, QMessageBox.StandardButton.No) - if reply == QMessageBox.Yes: + if reply == QMessageBox.StandardButton.Yes: self.accountman.delete_account(self.selected_account_num) self.rebuild() def purge(self): reply = QMessageBox.question( - self, 'Confirmation', 'Do you want to purge the selected account\'s local data?', QMessageBox.Yes, QMessageBox.No) + self, 'Confirmation', 'Do you want to purge the selected account\'s local data?', QMessageBox.StandardButton.Yes, QMessageBox.StandardButton.No) - if reply == QMessageBox.Yes: + if reply == QMessageBox.StandardButton.Yes: self.accountman.purge_account(self.selected_account_num) self.rebuild() @@ -169,8 +169,8 @@ class AccountDialog(QDialog): self.table.setItem(i, 1, AccountItem( k, account['api'], self.icons.get(account['api']))) - if pyqt_version == 5: - self.table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) + if pyqt_version == 6: + self.table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch) else: self.table.horizontalHeader().setResizeMode(0, QHeaderView.Stretch) @@ -187,7 +187,7 @@ class AccountDialog(QDialog): self.close() def _error(self, msg): - QMessageBox.critical(self, 'Error', str(msg), QMessageBox.Ok) + QMessageBox.critical(self, 'Error', str(msg), QMessageBox.StandardButton.Ok) class AccountItem(QTableWidgetItem): @@ -235,8 +235,8 @@ class AccountAddDialog(QDialog): formlayout.addRow(self.lbl_password, pin_layout) bottombox = QDialogButtonBox() - bottombox.addButton(QDialogButtonBox.Save) - bottombox.addButton(QDialogButtonBox.Cancel) + bottombox.addButton(QDialogButtonBox.StandardButton.Save) + bottombox.addButton(QDialogButtonBox.StandardButton.Cancel) bottombox.accepted.connect(self.validate) bottombox.rejected.connect(self.reject) @@ -247,7 +247,7 @@ class AccountAddDialog(QDialog): if self.edit: self.username.setEnabled(False) self.api.setCurrentIndex( - self.api.findData(api, QtCore.Qt.UserRole)) + self.api.findData(api, QtCore.Qt.ItemDataRole.UserRole)) self.api.setEnabled(False) # Finish layouts @@ -289,25 +289,25 @@ class AccountAddDialog(QDialog): if self.adding_api[2] in [utils.Login.OAUTH, utils.Login.OAUTH_PKCE]: self.lbl_username.setText('Name:') self.lbl_password.setText('PIN:') - self.password.setEchoMode(QLineEdit.Normal) + self.password.setEchoMode(QLineEdit.EchoMode.Normal) self.api_auth.show() self.adding_allow = False else: self.lbl_username.setText('Username:') self.lbl_password.setText('Password:') - self.password.setEchoMode(QLineEdit.Password) + self.password.setEchoMode(QLineEdit.EchoMode.Password) self.api_auth.hide() self.adding_allow = True def _error(self, msg): - QMessageBox.critical(self, 'Error', msg, QMessageBox.Ok) + QMessageBox.critical(self, 'Error', msg, QMessageBox.StandardButton.Ok) @staticmethod def do(parent=None, icons=None, edit=False, username='', password='', api='', extra={}): dialog = AccountAddDialog(parent, icons, edit, username, password, api) - result = dialog.exec_() + result = dialog.exec() - if result == QDialog.Accepted: + if result == QDialog.DialogCode.Accepted: currentIndex = dialog.api.currentIndex() return ( str(dialog.username.text()), diff --git a/trackma/ui/qt/add.py b/trackma/ui/qt/add.py index 65555f2..916277c 100644 --- a/trackma/ui/qt/add.py +++ b/trackma/ui/qt/add.py @@ -16,15 +16,15 @@ from datetime import date -from PyQt5 import QtCore -from PyQt5.QtWidgets import (QComboBox, QDialog, QDialogButtonBox, QHBoxLayout, QLineEdit, QMessageBox, QPushButton, +from PyQt6 import QtCore +from PyQt6.QtWidgets import (QComboBox, QDialog, QDialogButtonBox, QHBoxLayout, QLineEdit, QMessageBox, QPushButton, QRadioButton, QSpinBox, QSplitter, QStackedWidget, QVBoxLayout) from trackma import utils from trackma.ui.qt.details import DetailsDialog from trackma.ui.qt.widgets import AddCardView, AddTableDetailsView -pyqt_version = 5 +pyqt_version = 6 class AddDialog(QDialog): @@ -65,7 +65,7 @@ class AddDialog(QDialog): top_layout.addWidget(self.search_rad) top_layout.addWidget(self.search_txt) else: - top_layout.setAlignment(QtCore.Qt.AlignRight) + top_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight) top_layout.addWidget(self.search_btn) @@ -93,10 +93,10 @@ class AddDialog(QDialog): filters_layout.addWidget(self.season_combo) filters_layout.addWidget(self.season_year) - filters_layout.setAlignment(QtCore.Qt.AlignLeft) + filters_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft) filters_layout.addWidget(QSplitter()) else: - filters_layout.setAlignment(QtCore.Qt.AlignRight) + filters_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight) view_combo = QComboBox() view_combo.addItem('Card view') @@ -123,9 +123,9 @@ class AddDialog(QDialog): # self.set_results([{'id': 1, 'title': 'Hola', 'image': 'https://omaera.org/icon.png'}]) bottom_buttons = QDialogButtonBox() - bottom_buttons.addButton("Cancel", QDialogButtonBox.RejectRole) + bottom_buttons.addButton("Cancel", QDialogButtonBox.ButtonRole.RejectRole) self.add_btn = bottom_buttons.addButton( - "Add", QDialogButtonBox.AcceptRole) + "Add", QDialogButtonBox.ButtonRole.AcceptRole) self.add_btn.setEnabled(False) bottom_buttons.accepted.connect(self.s_add) bottom_buttons.rejected.connect(self.close) diff --git a/trackma/ui/qt/delegates.py b/trackma/ui/qt/delegates.py index 3640d2f..9873a6c 100644 --- a/trackma/ui/qt/delegates.py +++ b/trackma/ui/qt/delegates.py @@ -1,5 +1,5 @@ -from PyQt5 import QtCore, QtGui -from PyQt5.QtWidgets import QDoubleSpinBox, QStyle, QStyleOptionProgressBar, QStyledItemDelegate +from PyQt6 import QtCore, QtGui +from PyQt6.QtWidgets import QDoubleSpinBox, QStyle, QStyleOptionProgressBar, QStyledItemDelegate from trackma.ui.qt.util import getColor @@ -25,9 +25,9 @@ class AddListDelegate(QStyledItemDelegate): # Get theme colors palette = QtGui.QPalette() - self.alternatebasecolor = palette.color(palette.AlternateBase) - self.windowtextcolor = palette.color(palette.WindowText) - self.windowcolor = palette.color(palette.Window) + self.alternatebasecolor = QtGui.QColor(palette.color(QtGui.QPalette.ColorGroup.Normal, QtGui.QPalette.ColorRole.AlternateBase)) + self.windowtextcolor = QtGui.QColor(palette.color(QtGui.QPalette.ColorGroup.Normal, QtGui.QPalette.ColorRole.WindowText)) + self.windowcolor = QtGui.QColor(palette.color(QtGui.QPalette.ColorGroup.Normal, QtGui.QPalette.ColorRole.Window)) super().__init__(parent) @@ -41,11 +41,11 @@ class AddListDelegate(QStyledItemDelegate): QtCore.QMargins(MARGIN, MARGIN, MARGIN, MARGIN) data = index.data() - thumb = index.data(QtCore.Qt.DecorationRole) + thumb = index.data(QtCore.Qt.ItemDataRole.DecorationRole) painter.save() - color = index.data(QtCore.Qt.BackgroundRole) + color = index.data(QtCore.Qt.ItemDataRole.BackgroundRole) # Draw background box painter.setPen(QtGui.QPen(self.alternatebasecolor)) @@ -55,7 +55,7 @@ class AddListDelegate(QStyledItemDelegate): # Prepare to draw inside baseRect = outerRect - \ QtCore.QMargins(PADDING, PADDING, PADDING, PADDING) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) # Draw thumbnail (if any) if thumb: @@ -69,7 +69,7 @@ class AddListDelegate(QStyledItemDelegate): # Set our font to bold bfont = QtGui.QFont(self.font) - bfont.setWeight(QtGui.QFont.Bold) + bfont.setWeight(QtGui.QFont.Weight.Bold) painter.setFont(bfont) painter.setPen(QtGui.QPen(QtGui.QColor(10, 10, 10))) @@ -78,7 +78,7 @@ class AddListDelegate(QStyledItemDelegate): textRect -= QtCore.QMargins(5, 0, 5, 0) # Draw title - painter.drawText(textRect, QtCore.Qt.AlignVCenter, data['title']) + painter.drawText(textRect, QtCore.Qt.AlignmentFlag.AlignVCenter, data['title']) painter.setPen(QtGui.QPen(self.windowtextcolor)) @@ -87,9 +87,9 @@ class AddListDelegate(QStyledItemDelegate): dataRect = textRect.adjusted(75, 0, 0, 0) textRect.translate(0, self.fh + 10) - painter.drawText(textRect, QtCore.Qt.AlignTop, "Date") + painter.drawText(textRect, QtCore.Qt.AlignmentFlag.AlignTop, "Date") textRect.translate(0, self.fh + 5) - painter.drawText(textRect, QtCore.Qt.AlignTop, "Episodes") + painter.drawText(textRect, QtCore.Qt.AlignmentFlag.AlignTop, "Episodes") # Draw data painter.setFont(self.font) @@ -105,10 +105,10 @@ class AddListDelegate(QStyledItemDelegate): d_end = '?' dataRect.translate(0, self.fh + 10) - painter.drawText(dataRect, QtCore.Qt.AlignTop, + painter.drawText(dataRect, QtCore.Qt.AlignmentFlag.AlignTop, "{} to {}".format(d_from, d_end)) dataRect.translate(0, self.fh + 5) - painter.drawText(dataRect, QtCore.Qt.AlignTop, + painter.drawText(dataRect, QtCore.Qt.AlignmentFlag.AlignTop, str(data.get('total') or '?')) # Draw synopsis @@ -116,12 +116,12 @@ class AddListDelegate(QStyledItemDelegate): textRect.setBottomRight(baseRect.bottomRight()) if 'extra' in data: - painter.drawText(textRect, QtCore.Qt.AlignTop | QtCore.Qt.TextWordWrap, self._get_extra( + painter.drawText(textRect, QtCore.Qt.AlignmentFlag.AlignTop | QtCore.Qt.TextFlag.TextWordWrap, self._get_extra( data['extra'], 'Synopsis')) # Draw select box - if option.state & QStyle.State_Selected: - painter.setCompositionMode(QtGui.QPainter.CompositionMode_Overlay) + if option.state & QStyle.StateFlag.State_Selected: + painter.setCompositionMode(QtGui.QPainter.CompositionMode.CompositionMode_Overlay) # painter.setOpacity(0.5) painter.fillRect(outerRect, option.palette.highlight()) @@ -173,11 +173,11 @@ class ShowsTableDelegate(QStyledItemDelegate): prog_options.rect = rect prog_options.text = '%d%%' % (value*100/maximum) prog_options.textVisible = self._show_text - option.widget.style().drawControl(QStyle.CE_ProgressBar, prog_options, painter) + option.widget.style().drawControl(QStyle.ControlElement.CE_ProgressBar, prog_options, painter) elif self._bar_style is self.BarStyle04: painter.setBrush(getColor(self.colors['progress_bg'])) - painter.setPen(QtCore.Qt.transparent) + painter.setPen(QtCore.Qt.GlobalColor.transparent) painter.drawRect(rect) self.paintSubValue(painter, rect, subvalue, maximum) if value > 0: @@ -195,25 +195,25 @@ class ShowsTableDelegate(QStyledItemDelegate): elif self._bar_style is self.BarStyleHybrid: painter.setCompositionMode( - QtGui.QPainter.CompositionMode_Source) - painter.fillRect(rect, QtCore.Qt.transparent) + QtGui.QPainter.CompositionMode.CompositionMode_Source) + painter.fillRect(rect, QtCore.Qt.GlobalColor.transparent) painter.setCompositionMode( - QtGui.QPainter.CompositionMode_SourceOver) + QtGui.QPainter.CompositionMode.CompositionMode_SourceOver) prog_options = QStyleOptionProgressBar() prog_options.maximum = maximum prog_options.progress = value prog_options.rect = rect prog_options.text = '%d%%' % (value*100/maximum) - option.widget.style().drawControl(QStyle.CE_ProgressBar, prog_options, painter) + option.widget.style().drawControl(QStyle.ControlElement.CE_ProgressBar, prog_options, painter) painter.setCompositionMode( - QtGui.QPainter.CompositionMode_SourceAtop) - painter.setPen(QtCore.Qt.transparent) + QtGui.QPainter.CompositionMode.CompositionMode_SourceAtop) + painter.setPen(QtCore.Qt.GlobalColor.transparent) self.paintSubValue(painter, rect, subvalue, maximum) self.paintEpisodes(painter, rect, episodes, maximum) painter.setCompositionMode( - QtGui.QPainter.CompositionMode_SourceOver) + QtGui.QPainter.CompositionMode.CompositionMode_SourceOver) if self._show_text: - option.widget.style().drawControl(QStyle.CE_ProgressBarLabel, prog_options, painter) + option.widget.style().drawControl(QStyle.ControlElement.CE_ProgressBarLabel, prog_options, painter) painter.restore() else: @@ -261,7 +261,7 @@ class ShowsTableDelegate(QStyledItemDelegate): def setEditorData(self, editor, index): (value, maximum, decimals, step) = index.model().data( - index, QtCore.Qt.EditRole) + index, QtCore.Qt.ItemDataRole.EditRole) editor.setMaximum(maximum or 999) editor.setDecimals(decimals or 0) @@ -272,8 +272,8 @@ class ShowsTableDelegate(QStyledItemDelegate): def setModelData(self, editor, model, index): editor.interpretText() - old_value = index.model().data(index, QtCore.Qt.EditRole)[0] + old_value = index.model().data(index, QtCore.Qt.ItemDataRole.EditRole)[0] new_value = editor.value() if new_value != old_value: - model.setData(index, new_value, QtCore.Qt.EditRole) + model.setData(index, new_value, QtCore.Qt.ItemDataRole.EditRole) diff --git a/trackma/ui/qt/details.py b/trackma/ui/qt/details.py index d6ef46e..9c52d28 100644 --- a/trackma/ui/qt/details.py +++ b/trackma/ui/qt/details.py @@ -14,7 +14,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout +from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout from trackma.ui.qt.widgets import DetailsWidget @@ -29,7 +29,7 @@ class DetailsDialog(QDialog): main_layout = QVBoxLayout() details = DetailsWidget(self, worker) - bottom_buttons = QDialogButtonBox(QDialogButtonBox.Close) + bottom_buttons = QDialogButtonBox(QDialogButtonBox.StandardButton.Close) bottom_buttons.setCenterButtons(True) bottom_buttons.rejected.connect(self.close) diff --git a/trackma/ui/qt/mainwindow.py b/trackma/ui/qt/mainwindow.py index d08db66..0dbcc72 100644 --- a/trackma/ui/qt/mainwindow.py +++ b/trackma/ui/qt/mainwindow.py @@ -19,8 +19,9 @@ import os import subprocess import sys -from PyQt5 import QtCore, QtGui -from PyQt5.QtWidgets import (QAbstractItemView, QAction, QActionGroup, QApplication, QCheckBox, QComboBox, +from PyQt6 import QtCore, QtGui +from PyQt6.QtGui import QAction, QActionGroup +from PyQt6.QtWidgets import (QAbstractItemView, QApplication, QCheckBox, QComboBox, QDoubleSpinBox, QFormLayout, QHBoxLayout, QHeaderView, QInputDialog, QLabel, QLineEdit, QMainWindow, QMenu, QMessageBox, QProgressBar, QPushButton, QSpinBox, QStyle, QStyleOptionButton, QSystemTrayIcon, QTabBar, QToolButton, QVBoxLayout, QWidget) @@ -36,7 +37,7 @@ from trackma.ui.qt.util import FilterBar, getIcon from trackma.ui.qt.widgets import ShowsTableView from trackma.ui.qt.workers import EngineWorker, ImageWorker -pyqt_version = 5 +pyqt_version = 6 class MainWindow(QMainWindow): @@ -152,7 +153,7 @@ class MainWindow(QMainWindow): self.action_add.triggered.connect(self.s_add) self.action_delete = QAction(getIcon('edit-delete'), '&Delete', self) self.action_delete.setStatusTip('Remove this show from your list.') - self.action_delete.setShortcut(QtCore.Qt.Key_Delete) + self.action_delete.setShortcut(QtCore.Qt.Key.Key_Delete) self.action_delete.triggered.connect(self.s_delete) action_quit = QAction(getIcon('application-exit'), '&Quit', self) action_quit.setShortcut('Ctrl+Q') @@ -221,16 +222,16 @@ class MainWindow(QMainWindow): # Make icons for viewed episodes rect = QtCore.QSize(16, 16) buffer = QtGui.QPixmap(rect) - ep_icon_states = {'all': QStyle.State_On, - 'part': QStyle.State_NoChange, - 'none': QStyle.State_Off} + ep_icon_states = {'all': QStyle.StateFlag.State_On, + 'part': QStyle.StateFlag.State_NoChange, + 'none': QStyle.StateFlag.State_Off} self.ep_icons = {} for key, state in ep_icon_states.items(): - buffer.fill(QtCore.Qt.transparent) + buffer.fill(QtCore.Qt.GlobalColor.transparent) painter = QtGui.QPainter(buffer) opt = QStyleOptionButton() opt.state = state - self.style().drawPrimitive(QStyle.PE_IndicatorMenuCheckMark, opt, painter) + self.style().drawPrimitive(QStyle.PrimitiveElement.PE_IndicatorMenuCheckMark, opt, painter) self.ep_icons[key] = QtGui.QIcon(buffer) painter.end() @@ -350,7 +351,7 @@ class MainWindow(QMainWindow): self.show_image = QLabel('Trackma-qt') self.show_image.setFixedHeight(149) self.show_image.setMinimumWidth(100) - self.show_image.setAlignment(QtCore.Qt.AlignCenter) + self.show_image.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) show_progress_label = QLabel('Progress:') self.show_progress = QSpinBox() self.show_progress_bar = QProgressBar() @@ -390,7 +391,7 @@ class MainWindow(QMainWindow): small_btns_hbox.addWidget(self.show_dec_btn) small_btns_hbox.addWidget(self.show_play_btn) small_btns_hbox.addWidget(self.show_inc_btn) - small_btns_hbox.setAlignment(QtCore.Qt.AlignCenter) + small_btns_hbox.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) left_box.addRow(self.show_image) left_box.addRow(self.show_progress_bar) @@ -514,11 +515,11 @@ class MainWindow(QMainWindow): def error(self, msg): self.status('Error: {}'.format(msg)) - QMessageBox.critical(self, 'Error', str(msg), QMessageBox.Ok) + QMessageBox.critical(self, 'Error', str(msg), QMessageBox.StandardButton.Ok) def fatal(self, msg): QMessageBox.critical( - self, 'Fatal Error', "Fatal Error! Reason:\n\n{0}".format(msg), QMessageBox.Ok) + self, 'Fatal Error', "Fatal Error! Reason:\n\n{0}".format(msg), QMessageBox.StandardButton.Ok) self.accountman.set_default(None) self._busy() self.finish = False @@ -632,9 +633,9 @@ class MainWindow(QMainWindow): def _apply_view(self): if self.config['inline_edit']: - self.view.setEditTriggers(QAbstractItemView.AllEditTriggers) + self.view.setEditTriggers(QAbstractItemView.EditTrigger.AllEditTriggers) else: - self.view.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.view.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) def _apply_tray(self): if self.tray.isVisible() and not self.config['show_tray']: @@ -759,8 +760,16 @@ class MainWindow(QMainWindow): def _init_view(self): # Set view options + + if self.config['sort_order'] == 0: + sort_order = QtCore.Qt.SortOrder.AscendingOrder + elif self.config['sort_order'] == 1: + sort_order = QtCore.Qt.SortOrder.DescendingOrder + else: + sort_order = QtCore.Qt.SortOrder.DescendingOrder + self.view.sortByColumn( - self.config['sort_index'], self.config['sort_order']) + self.config['sort_index'], sort_order) # Hide invisible columns for i, column in enumerate(self.view.model().sourceModel().columns): @@ -771,6 +780,10 @@ class MainWindow(QMainWindow): self.view.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) self.view.horizontalHeader().setSectionResizeMode(2, QHeaderView.Fixed) self.view.horizontalHeader().setSectionResizeMode(3, QHeaderView.Fixed) + elif pyqt_version == 6: + self.view.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch) + self.view.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeMode.Fixed) + self.view.horizontalHeader().setSectionResizeMode(3, QHeaderView.ResizeMode.Fixed) else: self.view.horizontalHeader().setResizeMode(1, QHeaderView.Stretch) self.view.horizontalHeader().setResizeMode(2, QHeaderView.Fixed) @@ -827,7 +840,7 @@ class MainWindow(QMainWindow): # Update information metrics = QtGui.QFontMetrics(self.show_title.font()) title = metrics.elidedText( - show['title'], QtCore.Qt.ElideRight, self.show_title.width()) + show['title'], QtCore.Qt.TextElideMode.ElideRight, self.show_title.width()) self.show_title.setText(title) self.show_progress.setValue(show['my_progress']) @@ -1001,7 +1014,7 @@ class MainWindow(QMainWindow): self.show() def s_tray_clicked(self, reason): - if reason == QSystemTrayIcon.Trigger: + if reason == QSystemTrayIcon.ActivationReason.Trigger: self.s_hide() def s_busy(self): @@ -1045,7 +1058,10 @@ class MainWindow(QMainWindow): def s_filter_changed(self): # TODOMVC DEPRECATED expression = self.show_filter.text() - casesens = self.show_filter_casesens.isChecked() + if self.show_filter_casesens.isChecked(): + casesens = QtCore.Qt.CaseSensitivity.CaseSensitive + else: + casesens = QtCore.Qt.CaseSensitivity.CaseInsensitive # Determine if a show matches a filter. True -> match -> do not hide # Advanced search: Separate the expression into specific field terms, fail if any are not met @@ -1158,9 +1174,9 @@ class MainWindow(QMainWindow): show = self.worker.engine.get_show_info(self.selected_show_id) reply = QMessageBox.question(self, 'Confirmation', 'Are you sure you want to delete %s?' % show['title'], - QMessageBox.Yes, QMessageBox.No) + QMessageBox.StandardButton.Yes, QMessageBox.StandardButton.No) - if reply == QMessageBox.Yes: + if reply == QMessageBox.StandardButton.Yes: self.worker_call('delete_show', self.r_generic, show) def s_scan_library(self): @@ -1211,11 +1227,11 @@ class MainWindow(QMainWindow): reply = QMessageBox.question(self, 'Confirmation', 'There are %d unsynced changes. Do you want to send them first? (Choosing No will discard them!)' % len( queue), - QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel) + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No | QMessageBox.StandardButton.Cancel) - if reply == QMessageBox.Yes: + if reply == QMessageBox.StandardButton.Yes: self.s_send(True) - elif reply == QMessageBox.No: + elif reply == QMessageBox.StandardButton.No: self._busy(True) self.worker_call('list_download', self.r_list_retrieved) else: @@ -1268,7 +1284,7 @@ class MainWindow(QMainWindow): dialog = SettingsDialog( None, self.worker, self.config, self.configfile) dialog.saved.connect(self._update_config) - dialog.exec_() + dialog.exec() def s_about(self): QMessageBox.about(self, 'About Trackma-qt %s' % utils.VERSION, @@ -1284,7 +1300,7 @@ class MainWindow(QMainWindow): def s_show_menu_columns(self, pos): globalPos = self.sender().mapToGlobal(pos) globalPos += QtCore.QPoint(3, 3) - self.menu_columns.exec_(globalPos) + self.menu_columns.exec(globalPos) def s_toggle_column(self, visible): w = self.sender() @@ -1359,9 +1375,9 @@ class MainWindow(QMainWindow): box = QMessageBox(self) box.setWindowTitle("Update prompt") box.setText(f"Do you want to update {show['title']} to {episode}?") - box.setIcon(QMessageBox.Question) - box.setStandardButtons(QMessageBox.Yes | QMessageBox.No) - box.setAttribute(QtCore.Qt.WA_ShowWithoutActivating) + box.setIcon(QMessageBox.Icon.Question) + box.setStandardButtons(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No) + box.setAttribute(QtCore.Qt.WidgetAttribute.WA_ShowWithoutActivating) box.setModal(False) box.accepted.connect(lambda: self.worker_call('set_episode', self.r_generic, @@ -1375,7 +1391,7 @@ class MainWindow(QMainWindow): addwindow = AddDialog( None, self.worker, current_status, default=show['title']) addwindow.setModal(True) - if addwindow.exec_(): + if addwindow.exec(): self.worker_call('set_episode', self.r_generic, addwindow.selected_show['id'], episode) diff --git a/trackma/ui/qt/models.py b/trackma/ui/qt/models.py index f561045..1fb28ed 100644 --- a/trackma/ui/qt/models.py +++ b/trackma/ui/qt/models.py @@ -1,6 +1,6 @@ import datetime -from PyQt5 import QtCore, QtGui +from PyQt6 import QtCore, QtGui from trackma import utils from trackma.ui.qt.thumbs import ThumbManager @@ -32,9 +32,9 @@ class ShowListModel(QtCore.QAbstractTableModel): editable_columns = [COL_MY_PROGRESS, COL_MY_SCORE] common_flags = \ - QtCore.Qt.ItemIsSelectable | \ - QtCore.Qt.ItemIsEnabled | \ - QtCore.Qt.ItemNeverHasChildren + QtCore.Qt.ItemFlag.ItemIsSelectable | \ + QtCore.Qt.ItemFlag.ItemIsEnabled | \ + QtCore.Qt.ItemFlag.ItemNeverHasChildren date_format = "%Y-%m-%d" @@ -150,7 +150,7 @@ class ShowListModel(QtCore.QAbstractTableModel): return len(self.columns) def headerData(self, section, orientation, role): - if role == QtCore.Qt.DisplayRole and orientation == QtCore.Qt.Horizontal: + if role == QtCore.Qt.ItemDataRole.DisplayRole and orientation == QtCore.Qt.Orientation.Horizontal: return self.columns[section] def setData(self, index, value, role): @@ -168,7 +168,7 @@ class ShowListModel(QtCore.QAbstractTableModel): row, column = index.row(), index.column() show = self.showlist[row] - if role == QtCore.Qt.DisplayRole: + if role == QtCore.Qt.ItemDataRole.DisplayRole: if column == ShowListModel.COL_ID: return show['id'] elif column == ShowListModel.COL_TITLE: @@ -206,15 +206,15 @@ class ShowListModel(QtCore.QAbstractTableModel): return show.get('my_tags', '-') elif column == ShowListModel.COL_MY_STATUS: return self.mediainfo['statuses_dict'][show['my_status']] - elif role == QtCore.Qt.BackgroundRole: + elif role == QtCore.Qt.ItemDataRole.BackgroundRole: return self.colors.get(row) - elif role == QtCore.Qt.DecorationRole: + elif role == QtCore.Qt.ItemDataRole.DecorationRole: if column == ShowListModel.COL_TITLE and show['id'] in self.playing: return getIcon('media-playback-start') - elif role == QtCore.Qt.TextAlignmentRole: + elif role == QtCore.Qt.ItemDataRole.TextAlignmentRole: if column in [ShowListModel.COL_MY_PROGRESS, ShowListModel.COL_MY_SCORE]: - return QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter - elif role == QtCore.Qt.ToolTipRole: + return QtCore.Qt.AlignmentFlag.AlignHCenter | QtCore.Qt.AlignmentFlag.AlignVCenter + elif role == QtCore.Qt.ItemDataRole.ToolTipRole: if column == ShowListModel.COL_PERCENT: tooltip = "Watched: %d<br>" % show['my_progress'] if self.eps.get(row): @@ -227,7 +227,7 @@ class ShowListModel(QtCore.QAbstractTableModel): tooltip += "Total: %d" % show['total'] return tooltip - elif role == QtCore.Qt.EditRole: + elif role == QtCore.Qt.ItemDataRole.EditRole: if column == ShowListModel.COL_MY_PROGRESS: return (show['my_progress'], show['total'], 0, 1) elif column == ShowListModel.COL_MY_SCORE: @@ -241,7 +241,7 @@ class ShowListModel(QtCore.QAbstractTableModel): def flags(self, index): if index.column() in self.editable_columns: - return self.common_flags | QtCore.Qt.ItemIsEditable + return self.common_flags | QtCore.Qt.ItemFlag.ItemIsEditable else: return self.common_flags @@ -273,13 +273,13 @@ class AddTableModel(QtCore.QAbstractTableModel): return 3 def headerData(self, section, orientation, role): - if role == QtCore.Qt.DisplayRole and orientation == QtCore.Qt.Horizontal: + if role == QtCore.Qt.ItemDataRole.DisplayRole and orientation == QtCore.Qt.Orientation.Horizontal: return self.columns[section] def data(self, index, role): row, column = index.row(), index.column() - if role == QtCore.Qt.DisplayRole: + if role == QtCore.Qt.ItemDataRole.DisplayRole: item = self.results[row] if column == 0: @@ -314,7 +314,7 @@ class AddListModel(QtCore.QAbstractListModel): def gotThumb(self, iid, thumb): iid = int(iid) self.thumbs[iid] = thumb.scaled( - 100, 140, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + 100, 140, QtCore.Qt.AspectRatioMode.KeepAspectRatio, QtCore.Qt.TransformationMode.SmoothTransformation) self.dataChanged.emit(self.index(iid), self.index(iid)) @@ -337,7 +337,7 @@ class AddListModel(QtCore.QAbstractListModel): if self.pool.exists(filename): self.thumbs[row] = self.pool.getThumb(filename).scaled( - 100, 140, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + 100, 140, QtCore.Qt.AspectRatioMode.KeepAspectRatio, QtCore.Qt.TransformationMode.SmoothTransformation) else: self.pool.queueDownload(row, item['image'], filename) @@ -351,11 +351,11 @@ class AddListModel(QtCore.QAbstractListModel): def data(self, index, role): row = index.row() - if role == QtCore.Qt.DisplayRole: + if role == QtCore.Qt.ItemDataRole.DisplayRole: return self.results[row] - elif role == QtCore.Qt.DecorationRole: + elif role == QtCore.Qt.ItemDataRole.DecorationRole: return self.thumbs.get(row) - elif role == QtCore.Qt.BackgroundRole: + elif role == QtCore.Qt.ItemDataRole.BackgroundRole: t = self.results[row].get('type') if t == utils.Type.TV: return QtGui.QColor(202, 253, 150) @@ -373,8 +373,8 @@ class AddListModel(QtCore.QAbstractListModel): class AddListProxy(QtCore.QSortFilterProxyModel): def lessThan(self, left, right): - leftData = self.sourceModel().data(left, QtCore.Qt.DisplayRole) - rightData = self.sourceModel().data(right, QtCore.Qt.DisplayRole) + leftData = self.sourceModel().data(left, QtCore.Qt.ItemDataRole.DisplayRole) + rightData = self.sourceModel().data(right, QtCore.Qt.ItemDataRole.DisplayRole) return leftData['type'] < rightData['type'] @@ -402,7 +402,7 @@ class ShowListProxy(QtCore.QSortFilterProxyModel): for col in range(self.sourceModel().columnCount(source_parent)): index = self.sourceModel().index(source_row, col) if (col in self.filter_columns and - self.filter_columns[col] not in str(self.sourceModel().data(index, QtCore.Qt.DisplayRole))): + self.filter_columns[col] not in str(self.sourceModel().data(index, QtCore.Qt.ItemDataRole.DisplayRole))): return False return super(ShowListProxy, self).filterAcceptsRow(source_row, source_parent) diff --git a/trackma/ui/qt/qt6.py b/trackma/ui/qt/qt6.py new file mode 100644 index 0000000..5261e73 --- /dev/null +++ b/trackma/ui/qt/qt6.py @@ -0,0 +1,19 @@ +# This file is part of Trackma. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +if __name__ == '__main__': + from . import main + main(force_qt6=True) diff --git a/trackma/ui/qt/settings.py b/trackma/ui/qt/settings.py index 2df6649..f185ffc 100644 --- a/trackma/ui/qt/settings.py +++ b/trackma/ui/qt/settings.py @@ -14,8 +14,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -from PyQt5 import QtCore -from PyQt5.QtWidgets import (QAbstractItemView, QCheckBox, QColorDialog, QComboBox, QDialog, QDialogButtonBox, +from PyQt6 import QtCore +from PyQt6.QtWidgets import (QAbstractItemView, QCheckBox, QColorDialog, QComboBox, QDialog, QDialogButtonBox, QFileDialog, QFormLayout, QFrame, QGridLayout, QGroupBox, QLabel, QLineEdit, QListWidget, QListWidgetItem, QPushButton, QRadioButton, QScrollArea, QSpinBox, QSplitter, QStackedWidget, QTabWidget, QVBoxLayout, QWidget) @@ -25,7 +25,7 @@ from trackma.ui.qt.delegates import ShowsTableDelegate from trackma.ui.qt.themedcolorpicker import ThemedColorPicker from trackma.ui.qt.util import FilterBar, getColor, getIcon -pyqt_version = 5 +pyqt_version = 6 class SettingsDialog(QDialog): @@ -55,7 +55,7 @@ class SettingsDialog(QDialog): getIcon('window-new'), 'User Interface', self.category_list) category_theme = QListWidgetItem( getIcon('applications-graphics'), 'Theme', self.category_list) - self.category_list.setSelectionMode(QAbstractItemView.SingleSelection) + self.category_list.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) self.category_list.setCurrentRow(0) self.category_list.setMaximumWidth( self.category_list.sizeHintForColumn(0) + 15) @@ -65,7 +65,7 @@ class SettingsDialog(QDialog): # Media tab page_media = QWidget() page_media_layout = QVBoxLayout() - page_media_layout.setAlignment(QtCore.Qt.AlignTop) + page_media_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) # Group: Media settings g_media = QGroupBox('Media settings') @@ -116,7 +116,7 @@ class SettingsDialog(QDialog): self.plex_port = QLineEdit() self.plex_user = QLineEdit() self.plex_passw = QLineEdit() - self.plex_passw.setEchoMode(QLineEdit.Password) + self.plex_passw.setEchoMode(QLineEdit.EchoMode.Password) self.plex_obey_wait = QCheckBox() self.plex_ssl = QCheckBox() @@ -175,7 +175,7 @@ class SettingsDialog(QDialog): self.kodi_port = QLineEdit() self.kodi_user = QLineEdit() self.kodi_passw = QLineEdit() - self.kodi_passw.setEchoMode(QLineEdit.Password) + self.kodi_passw.setEchoMode(QLineEdit.EchoMode.Password) self.kodi_obey_wait = QCheckBox() g_kodi_layout = QGridLayout() @@ -204,14 +204,14 @@ class SettingsDialog(QDialog): self.player_browse = QPushButton('Browse...') self.player_browse.clicked.connect(self.s_player_browse) lbl_searchdirs = QLabel('Media directories') - lbl_searchdirs.setAlignment(QtCore.Qt.AlignTop) + lbl_searchdirs.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) self.searchdirs = QListWidget() self.searchdirs_add = QPushButton('Add...') self.searchdirs_add.clicked.connect(self.s_searchdirs_add) self.searchdirs_remove = QPushButton('Remove') self.searchdirs_remove.clicked.connect(self.s_searchdirs_remove) self.searchdirs_buttons = QVBoxLayout() - self.searchdirs_buttons.setAlignment(QtCore.Qt.AlignTop) + self.searchdirs_buttons.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) self.searchdirs_buttons.addWidget(self.searchdirs_add) self.searchdirs_buttons.addWidget(self.searchdirs_remove) self.searchdirs_buttons.addWidget(QSplitter()) @@ -258,7 +258,7 @@ class SettingsDialog(QDialog): # Sync tab page_sync = QWidget() page_sync_layout = QVBoxLayout() - page_sync_layout.setAlignment(QtCore.Qt.AlignTop) + page_sync_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) # Group: Autoretrieve g_autoretrieve = QGroupBox('Autoretrieve') @@ -326,7 +326,7 @@ class SettingsDialog(QDialog): # UI tab page_ui = QWidget() page_ui_layout = QFormLayout() - page_ui_layout.setAlignment(QtCore.Qt.AlignTop) + page_ui_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) # Group: Icon g_icon = QGroupBox('Notification Icon') @@ -383,7 +383,7 @@ class SettingsDialog(QDialog): # Theming tab page_theme = QWidget() page_theme_layout = QFormLayout() - page_theme_layout.setAlignment(QtCore.Qt.AlignTop) + page_theme_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) # Group: Episode Bar g_ep_bar = QGroupBox('Episode Bar') @@ -429,7 +429,7 @@ class SettingsDialog(QDialog): for (key2, label) in self.colors[key1]: self.color_buttons.append(QPushButton()) # self.color_buttons[-1].setStyleSheet('background-color: ' + getColor(self.config['colors'][key]).name()) - self.color_buttons[-1].setFocusPolicy(QtCore.Qt.NoFocus) + self.color_buttons[-1].setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) self.color_buttons[-1].clicked.connect( self.s_color_picker(key2, False)) self.syscolor_buttons.append(QPushButton('System Colors')) @@ -457,17 +457,14 @@ class SettingsDialog(QDialog): scrollable_page.setWidget(page) self.contents.addWidget(scrollable_page) - if pyqt_version != 5: - self.contents.layout().setMargin(0) - # Bottom buttons bottombox = QDialogButtonBox( - QDialogButtonBox.Ok - | QDialogButtonBox.Apply - | QDialogButtonBox.Cancel + QDialogButtonBox.StandardButton.Ok + | QDialogButtonBox.StandardButton.Apply + | QDialogButtonBox.StandardButton.Cancel ) bottombox.accepted.connect(self.s_save) - bottombox.button(QDialogButtonBox.Apply).clicked.connect(self._save) + bottombox.button(QDialogButtonBox.StandardButton.Apply).clicked.connect(self._save) bottombox.rejected.connect(self.reject) # Main layout finish diff --git a/trackma/ui/qt/themedcolorpicker.py b/trackma/ui/qt/themedcolorpicker.py index f2d9c90..d1269f6 100644 --- a/trackma/ui/qt/themedcolorpicker.py +++ b/trackma/ui/qt/themedcolorpicker.py @@ -14,8 +14,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -from PyQt5 import QtCore, QtGui -from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QGridLayout, QPushButton, QVBoxLayout +from PyQt6 import QtCore, QtGui +from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QGridLayout, QPushButton, QVBoxLayout class ThemedColorPicker(QDialog): @@ -37,14 +37,14 @@ class ThemedColorPicker(QDialog): self.colors.append(QPushButton()) self.colors[-1].setStyleSheet('background-color: ' + QtGui.QColor( QtGui.QPalette().color(group, role)).name()) - self.colors[-1].setFocusPolicy(QtCore.Qt.NoFocus) + self.colors[-1].setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) self.colors[-1].clicked.connect(self.s_select(group, role)) colorbox.addWidget(self.colors[-1], row, col, 1, 1) col += 1 row += 1 bottombox = QDialogButtonBox() - bottombox.addButton(QDialogButtonBox.Ok) - bottombox.addButton(QDialogButtonBox.Cancel) + bottombox.addButton(QDialogButtonBox.StandardButton.Ok) + bottombox.addButton(QDialogButtonBox.StandardButton.Cancel) bottombox.accepted.connect(self.accept) bottombox.rejected.connect(self.reject) layout.addLayout(colorbox) @@ -60,9 +60,9 @@ class ThemedColorPicker(QDialog): @staticmethod def do(parent=None, default=None): dialog = ThemedColorPicker(parent, default) - result = dialog.exec_() + result = dialog.exec() - if result == QDialog.Accepted: + if result == QDialog.DialogCode.Accepted: return dialog.colorString else: return None diff --git a/trackma/ui/qt/thumbs.py b/trackma/ui/qt/thumbs.py index 6b06475..769ab0e 100644 --- a/trackma/ui/qt/thumbs.py +++ b/trackma/ui/qt/thumbs.py @@ -1,7 +1,7 @@ import os import queue -from PyQt5 import QtCore, QtGui, QtNetwork +from PyQt6 import QtCore, QtGui, QtNetwork ATTRIB_FILE = 1000 ATTRIB_ID = 1001 @@ -17,7 +17,7 @@ class ThumbManager(QtCore.QObject): is emitted, along with the ID and a QImage object. """ - itemFinished = QtCore.pyqtSignal(str, QtGui.QImage) + itemFinished = QtCore.pyqtSignal(int, QtGui.QImage) def __init__(self, parent=None): self.manager = QtNetwork.QNetworkAccessManager() @@ -53,13 +53,13 @@ class ThumbManager(QtCore.QObject): def onItemFinished(self): reply = self.sender() - iid = str(reply.request().attribute(ATTRIB_ID)) + iid = int(reply.request().attribute(ATTRIB_ID)) fname = reply.request().attribute(ATTRIB_FILE) data = reply.readAll() image = QtGui.QImage.fromData(data) thumb = image.scaled( - 200, 280, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + 200, 280, QtCore.Qt.AspectRatioMode.KeepAspectRatio, QtCore.Qt.TransformationMode.SmoothTransformation) thumb.save(fname) self.downloads.pop(fname) diff --git a/trackma/ui/qt/util.py b/trackma/ui/qt/util.py index caa7dd0..0655f46 100644 --- a/trackma/ui/qt/util.py +++ b/trackma/ui/qt/util.py @@ -14,7 +14,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -from PyQt5 import QtGui +from PyQt6 import QtGui from trackma import utils @@ -36,12 +36,17 @@ def getIcon(icon_name): def getColor(colorString): # Takes a color string in either #RRGGBB format or group,role format (using QPalette int values) + # print(f"colorstring {colorString}") if colorString[0] == "#": return QtGui.QColor(colorString) else: (group, role) = [int(i) for i in colorString.split(',')] + # print(f"group {group}") + # print(f"role {role}") if (0 <= group <= 2) and (0 <= role <= 19): - return QtGui.QColor(QtGui.QPalette().color(group, role)) + return QtGui.QColor(QtGui.QPalette().color(QtGui.QPalette.ColorRole.Dark)) + # FIXME + # return QtGui.QColor(QtGui.QPalette().color(group, role)) else: # Failsafe - return black return QtGui.QColor() diff --git a/trackma/ui/qt/widgets.py b/trackma/ui/qt/widgets.py index 15619f9..793ca9f 100644 --- a/trackma/ui/qt/widgets.py +++ b/trackma/ui/qt/widgets.py @@ -16,8 +16,8 @@ import os -from PyQt5 import QtCore, QtGui -from PyQt5.QtWidgets import (QAbstractItemView, QGridLayout, QHeaderView, QLabel, QListView, QScrollArea, QSplitter, +from PyQt6 import QtCore, QtGui +from PyQt6.QtWidgets import (QAbstractItemView, QGridLayout, QHeaderView, QLabel, QListView, QScrollArea, QSplitter, QTableView, QVBoxLayout, QWidget) from trackma import utils @@ -25,7 +25,7 @@ from trackma.ui.qt.delegates import AddListDelegate, ShowsTableDelegate from trackma.ui.qt.models import AddListModel, AddListProxy, AddTableModel, ShowListModel, ShowListProxy from trackma.ui.qt.workers import ImageWorker -pyqt_version = 5 +pyqt_version = 6 class DetailsWidget(QWidget): @@ -42,20 +42,20 @@ class DetailsWidget(QWidget): show_title_font = QtGui.QFont() show_title_font.setBold(True) show_title_font.setPointSize(12) - self.show_title.setAlignment(QtCore.Qt.AlignCenter) + self.show_title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.show_title.setFont(show_title_font) info_area = QWidget() info_layout = QGridLayout() self.show_image = QLabel() - self.show_image.setAlignment(QtCore.Qt.AlignTop) + self.show_image.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) self.show_info = QLabel() self.show_info.setWordWrap(True) - self.show_info.setAlignment(QtCore.Qt.AlignTop) + self.show_info.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) self.show_description = QLabel() self.show_description.setWordWrap(True) - self.show_description.setAlignment(QtCore.Qt.AlignTop) + self.show_description.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) info_layout.addWidget(self.show_image, 0, 0, 1, 1) info_layout.addWidget(self.show_info, 1, 0, 1, 1) @@ -64,7 +64,7 @@ class DetailsWidget(QWidget): info_area.setLayout(info_layout) scroll_area = QScrollArea() - scroll_area.setBackgroundRole(QtGui.QPalette.Light) + scroll_area.setBackgroundRole(QtGui.QPalette.ColorRole.Light) scroll_area.setWidgetResizable(True) scroll_area.setWidget(info_area) @@ -81,12 +81,12 @@ class DetailsWidget(QWidget): def load(self, show): metrics = QtGui.QFontMetrics(self.show_title.font()) title = metrics.elidedText( - show['title'], QtCore.Qt.ElideRight, self.show_title.width()) + show['title'], QtCore.Qt.TextElideMode.ElideRight, self.show_title.width()) self.show_title.setText("<a href=\"%s\">%s</a>" % (show['url'], title)) - self.show_title.setTextFormat(QtCore.Qt.RichText) + self.show_title.setTextFormat(QtCore.Qt.TextFormat.RichText) self.show_title.setTextInteractionFlags( - QtCore.Qt.TextBrowserInteraction) + QtCore.Qt.TextInteractionFlag.TextBrowserInteraction) self.show_title.setOpenExternalLinks(True) # Load show info @@ -165,24 +165,24 @@ class ShowsTableView(QTableView): self.setModel(proxymodel) self.setItemDelegate(ShowsTableDelegate(self, palette=palette)) - self.setSelectionMode(QAbstractItemView.SingleSelection) - self.setSelectionBehavior(QAbstractItemView.SelectRows) + self.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) + self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) self.horizontalHeader().setHighlightSections(False) - if pyqt_version == 5: + if pyqt_version == 5 or pyqt_version == 6: self.horizontalHeader().setSectionsMovable(True) else: self.horizontalHeader().setMovable(True) - self.horizontalHeader().setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + self.horizontalHeader().setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu) self.verticalHeader().hide() - self.setGridStyle(QtCore.Qt.NoPen) + self.setGridStyle(QtCore.Qt.PenStyle.NoPen) def contextMenuEvent(self, event): - action = self.context_menu.exec_(event.globalPos()) + action = self.context_menu.exec(event.globalPos()) def mousePressEvent(self, event): super().mousePressEvent(event) - if event.button() == QtCore.Qt.MidButton: + if event.button() == QtCore.Qt.MouseButton.MiddleButton: self.middleClicked.emit() @@ -195,14 +195,14 @@ class AddCardView(QListView): m = AddListModel(api_info=api_info) proxy = AddListProxy() proxy.setSourceModel(m) - proxy.sort(0, QtCore.Qt.AscendingOrder) + proxy.sort(0, QtCore.Qt.SortOrder.AscendingOrder) self.setItemDelegate(AddListDelegate()) - self.setFlow(QListView.LeftToRight) + self.setFlow(QListView.Flow.LeftToRight) self.setWrapping(True) - self.setSelectionMode(QAbstractItemView.SingleSelection) - self.setSelectionBehavior(QAbstractItemView.SelectRows) - self.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) + self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) + self.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) self.setModel(proxy) self.selectionModel().currentRowChanged.connect(self.s_show_selected) @@ -237,18 +237,18 @@ class AddTableDetailsView(QSplitter): proxy = QtCore.QSortFilterProxyModel() proxy.setSourceModel(m) - self.table.setGridStyle(QtCore.Qt.NoPen) - self.table.setSelectionMode(QAbstractItemView.SingleSelection) - self.table.setSelectionBehavior(QAbstractItemView.SelectRows) - self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.table.setGridStyle(QtCore.Qt.PenStyle.NoPen) + self.table.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) + self.table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) + self.table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) self.table.setModel(proxy) # Allow sorting but don't sort by default - self.table.horizontalHeader().setSortIndicator(-1, QtCore.Qt.AscendingOrder) + self.table.horizontalHeader().setSortIndicator(-1, QtCore.Qt.SortOrder.AscendingOrder) self.table.setSortingEnabled(True) - if pyqt_version == 5: - self.table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) + if pyqt_version == 6: + self.table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch) else: self.table.horizontalHeader().setResizeMode(0, QHeaderView.Stretch) diff --git a/trackma/ui/qt/workers.py b/trackma/ui/qt/workers.py index 2b29724..7d916f8 100644 --- a/trackma/ui/qt/workers.py +++ b/trackma/ui/qt/workers.py @@ -20,7 +20,7 @@ import urllib.request from io import BytesIO from PIL import Image -from PyQt5 import QtCore +from PyQt6 import QtCore from trackma import utils from trackma.engine import Engine -- 2.44.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor