diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3197565..56fc072 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,6 +5,11 @@ on: pull_request: jobs: + pyqt6-check: + uses: opengisch/qgis-plugin-ci/.github/workflows/pyqt6_test.yml@master + with: + plugin_path: document_management_system + test: runs-on: ubuntu-latest diff --git a/document_management_system/core/document_model.py b/document_management_system/core/document_model.py index c6a3906..072a220 100644 --- a/document_management_system/core/document_model.py +++ b/document_management_system/core/document_model.py @@ -22,20 +22,20 @@ class Role(Enum): - RelationRole = Qt.UserRole + 1 - RelationIdRole = Qt.UserRole + 2 - AggregateRole = Qt.UserRole + 3 - FieldRole = Qt.UserRole + 4 + RelationRole = Qt.ItemDataRole.UserRole + 1 + RelationIdRole = Qt.ItemDataRole.UserRole + 2 + AggregateRole = Qt.ItemDataRole.UserRole + 3 + FieldRole = Qt.ItemDataRole.UserRole + 4 class DocumentModel(QAbstractTableModel): - DocumentIdRole = Qt.UserRole + 1 - DocumentPathRole = Qt.UserRole + 2 - DocumentNameRole = Qt.UserRole + 3 - DocumentExistsRole = Qt.UserRole + 4 - DocumentToolTipRole = Qt.UserRole + 5 - DocumentIsImageRole = Qt.UserRole + 6 + DocumentIdRole = Qt.ItemDataRole.UserRole + 1 + DocumentPathRole = Qt.ItemDataRole.UserRole + 2 + DocumentNameRole = Qt.ItemDataRole.UserRole + 3 + DocumentExistsRole = Qt.ItemDataRole.UserRole + 4 + DocumentToolTipRole = Qt.ItemDataRole.UserRole + 5 + DocumentIsImageRole = Qt.ItemDataRole.UserRole + 6 def __init__(self, parent: QObject = None): super(DocumentModel, self).__init__(parent) @@ -71,7 +71,7 @@ def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) return None def flags(self, index: QModelIndex) -> Qt.ItemFlags: - flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable + flags = Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEditable return flags def data(self, index: QModelIndex, role: int = ...): @@ -80,7 +80,7 @@ def data(self, index: QModelIndex, role: int = ...): return self._document_list[index.row()][role] - def setData(self, index: QModelIndex, value, role: int = Qt.EditRole) -> bool: + def setData(self, index: QModelIndex, value, role: int = Qt.ItemDataRole.EditRole) -> bool: if index.row() < 0 or index.row() >= self.rowCount(QModelIndex()): return False diff --git a/document_management_system/core/file_type_icon_image_provider.py b/document_management_system/core/file_type_icon_image_provider.py index 9346dfb..851a4f3 100644 --- a/document_management_system/core/file_type_icon_image_provider.py +++ b/document_management_system/core/file_type_icon_image_provider.py @@ -8,14 +8,18 @@ # # ----------------------------------------------------------- -from PyQt5.QtQuick import QQuickImageProvider +try: + from qgis.PyQt.QtQuick import QQuickImageProvider +except ImportError: + from PyQt6.QtQuick import QQuickImageProvider + from qgis.PyQt.QtCore import QFileInfo from qgis.PyQt.QtWidgets import QFileIconProvider class FileTypeIconImageProvider(QQuickImageProvider): def __init__(self, maxSize): - super().__init__(QQuickImageProvider.Pixmap) + super().__init__(QQuickImageProvider.ImageType.Pixmap) self._maxSize = maxSize self._provider = QFileIconProvider() diff --git a/document_management_system/core/preview_image_provider.py b/document_management_system/core/preview_image_provider.py index d5e014a..7f1a959 100644 --- a/document_management_system/core/preview_image_provider.py +++ b/document_management_system/core/preview_image_provider.py @@ -8,7 +8,11 @@ # # ----------------------------------------------------------- -from PyQt5.QtQuick import QQuickImageProvider +try: + from qgis.PyQt.QtQuick import QQuickImageProvider +except ImportError: + from PyQt6.QtQuick import QQuickImageProvider + from qgis.PyQt.QtCore import QMimeDatabase from qgis.PyQt.QtGui import QImageReader @@ -16,7 +20,7 @@ class PreviewImageProvider(QQuickImageProvider): def __init__(self): - super().__init__(QQuickImageProvider.Image) + super().__init__(QQuickImageProvider.ImageType.Image) # use an image reader to ensure image orientation and transforms are correctly handled self._imageReader = QImageReader() diff --git a/document_management_system/gui/relation_editor_document_side_widget.py b/document_management_system/gui/relation_editor_document_side_widget.py index 6c7229f..db89dc6 100644 --- a/document_management_system/gui/relation_editor_document_side_widget.py +++ b/document_management_system/gui/relation_editor_document_side_widget.py @@ -44,10 +44,10 @@ class TreeWidgetItemType(Enum): class TreeWidgetItemRole(IntEnum): - Type = Qt.UserRole + 1 - Layer = Qt.UserRole + 2 - Feature = Qt.UserRole + 3 - LinkFeature = Qt.UserRole + 4 + Type = Qt.ItemDataRole.UserRole + 1 + Layer = Qt.ItemDataRole.UserRole + 2 + Feature = Qt.ItemDataRole.UserRole + 3 + LinkFeature = Qt.ItemDataRole.UserRole + 4 class RelationEditorDocumentSideWidget(QgsAbstractRelationEditorWidget, WidgetUi): @@ -87,14 +87,14 @@ def __init__(self, config, parent): self.mToggleEditingToolButton.setDefaultAction(self.actionToggleEditing) self.mSaveEditsToolButton.setDefaultAction(self.actionSaveEdits) self.mShowFormToolButton.setDefaultAction(self.actionShowForm) - self.mShowFormToolButton.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.mShowFormToolButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly) self.mLinkFeaturesToolButton.setDefaultAction(self.actionLinkFeature) - self.mLinkFeaturesToolButton.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.mLinkFeaturesToolButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly) self.mUnlinkFeaturesToolButton.setDefaultAction(self.actionUnlinkFeature) - self.mUnlinkFeaturesToolButton.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.mUnlinkFeaturesToolButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly) # TreeWidgetItem menu - self.mFeaturesTreeWidget.setContextMenuPolicy(Qt.ActionsContextMenu) + self.mFeaturesTreeWidget.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu) self.mFeaturesTreeWidget.addAction(self.actionShowForm) self.mFeaturesTreeWidget.addAction(self.actionUnlinkFeature) diff --git a/document_management_system/gui/relation_editor_feature_side_widget.py b/document_management_system/gui/relation_editor_feature_side_widget.py index a6f63d5..9f9a16b 100644 --- a/document_management_system/gui/relation_editor_feature_side_widget.py +++ b/document_management_system/gui/relation_editor_feature_side_widget.py @@ -12,7 +12,7 @@ from qgis.PyQt.QtQuickWidgets import QQuickWidget except ImportError: # https://github.com/qgis/QGIS/pull/60123 - from PyQt5.QtQuickWidgets import QQuickWidget + from qgis.PyQt.QtQuickWidgets import QQuickWidget import os from enum import Enum from qgis.PyQt.QtCore import QDir, QTimer, QUrl, QVariant, pyqtSignal, pyqtProperty, pyqtSlot @@ -123,7 +123,7 @@ def __init__(self, config, parent): self.view.engine().addImageProvider("fileTypeSmallIconProvider", self._fileTypeSmallIconProvider) self.view.engine().addImageProvider("fileTypeBigIconProvider", self._fileTypeBigIconProvider) self.view.setSource(QUrl.fromLocalFile(os.path.join(os.path.dirname(__file__), "../qml/DocumentList.qml"))) - self.view.setResizeMode(QQuickWidget.SizeRootObjectToView) + self.view.setResizeMode(QQuickWidget.ResizeMode.SizeRootObjectToView) self.layout().addWidget(self.view) # Set initial state for add / remove etc.buttons @@ -331,7 +331,7 @@ def addDroppedDocument(self, fileUrl): fields = self.relation().referencingLayer().fields() # For generated relations insert the referenced layer field - if self.relation().type() == QgsRelation.Generated: + if self.relation().type() == QgsRelation.RelationType.Generated: polyRel = self.relation().polymorphicRelation() keyAttrs[fields.indexFromName(polyRel.referencedLayerField())] = polyRel.layerRepresentation( self.relation().referencedLayer() @@ -339,7 +339,7 @@ def addDroppedDocument(self, fileUrl): if self.nmRelation().isValid(): # only normal relations support m:n relation - if self.nmRelation().type() != QgsRelation.Normal: + if self.nmRelation().type() != QgsRelation.RelationType.Normal: QMessageBox.critical( self, self.tr("Add document"), diff --git a/document_management_system/metadata.txt b/document_management_system/metadata.txt index 609ec6b..0a54ce4 100644 --- a/document_management_system/metadata.txt +++ b/document_management_system/metadata.txt @@ -1,6 +1,7 @@ [general] name=Document Management System qgisMinimumVersion=3.18 +qgisMaximumVersion=4.99 description=Provides an interface to handle document management system relations about=Provides a an interface to handle document management system relations on both sides (document and object side). It supports both 1-N and N-M relations. version=dev diff --git a/document_management_system/qml/DocumentList.qml b/document_management_system/qml/DocumentList.qml index 5ccf6f3..07283b9 100644 --- a/document_management_system/qml/DocumentList.qml +++ b/document_management_system/qml/DocumentList.qml @@ -1,7 +1,7 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import QtQuick.Dialogs 1.1 -import QtQuick.Layouts 1.15 +import QtQuick 6.5 +import QtQuick.Controls 6.4 +import QtQuick.Layouts 2.15 +import QtQuick.Dialogs 6.5 Item { @@ -99,18 +99,17 @@ Item { anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton - onClicked: { - listView.currentIndex = index + onClicked: function(mouse) { + gridView.currentIndex = index - if(mouse.button == Qt.RightButton) - { + if (mouse.button === Qt.RightButton) { contextMenu.documentPath = DocumentPath contextMenu.popup() } } onDoubleClicked: DocumentExists ? Qt.openUrlExternally(DocumentPath) : showMessageDialog(qsTr("Inexisting document"), - qsTr("Document '%1' does't exists.").arg(DocumentPath)); + qsTr("Document '%1' doesn't exists.").arg(DocumentPath)) } } } @@ -181,18 +180,17 @@ Item { anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton - onClicked: { - gridView.currentIndex = index + onClicked: function(mouse) { + listView.currentIndex = index - if(mouse.button == Qt.RightButton) - { + if (mouse.button === Qt.RightButton) { contextMenu.documentPath = DocumentPath contextMenu.popup() } } onDoubleClicked: DocumentExists ? Qt.openUrlExternally(DocumentPath) : showMessageDialog(qsTr("Inexisting document"), - qsTr("Document '%1' doesn't exists.").arg(DocumentPath)) + qsTr("Document '%1' does't exists.").arg(DocumentPath)); } } }