diff --git a/QgisModelBaker/gui/basket_manager.py b/QgisModelBaker/gui/basket_manager.py index c61ae13a1..6441cd5a8 100644 --- a/QgisModelBaker/gui/basket_manager.py +++ b/QgisModelBaker/gui/basket_manager.py @@ -93,7 +93,7 @@ def _add_basket(self): self, self.db_connector, self.datasetname ) if create_basket_dialog.baskets_can_be_created(): - create_basket_dialog.exec_() + create_basket_dialog.exec() # Refresh existing baskets in basket manager after creation self._refresh_baskets() @@ -105,7 +105,7 @@ def _add_basket(self): f"The dataset '{self.datasetname}' already contains one basket for each topic.\n\n" f"No additional baskets can be created." ), - QMessageBox.Close, + QMessageBox.StandardButton.Close, ) def _edit_basket(self) -> None: @@ -114,7 +114,7 @@ def _edit_basket(self) -> None: edit_basket_dialog = EditBasketDialog( self, self.db_connector, selected_basket_settings ) - edit_basket_dialog.exec_() + edit_basket_dialog.exec() # Refresh existing baskets in basket manager after edition self._refresh_baskets() @@ -128,7 +128,7 @@ def _delete_basket(self) -> None: self.tr( "Delete baskets is only available for database schemas created with --createBasketCol parameter." ), - QMessageBox.Close, + QMessageBox.StandardButton.Close, ) return @@ -139,9 +139,9 @@ def _delete_basket(self) -> None: self.tr( "Deleting a Basket will also delete all the data it contains. This operation cannot be reverted.\n\nAre you sure you want to proceed?" ), - QMessageBox.No | QMessageBox.Yes, + QMessageBox.StandardButton.No | QMessageBox.StandardButton.Yes, ) - == QMessageBox.Yes + == QMessageBox.StandardButton.Yes ): basket_config = self.baskets_panel.selected_basket_settings() res, msg = self._do_delete_basket(basket_config) @@ -155,11 +155,11 @@ def _delete_basket(self) -> None: warning_box = QMessageBox(self) warning_box.setIcon( - QMessageBox.Information if res else QMessageBox.Warning + QMessageBox.Icon.Information if res else QMessageBox.Icon.Warning ) warning_box.setWindowTitle(self.tr("Delete Basket")) warning_box.setText(msg) - warning_box.exec_() + warning_box.exec() def _refresh_map_layers(self): # Refresh layer data sources and also their symbology (including feature count) @@ -224,4 +224,6 @@ def _do_delete_basket(self, basket_config): return res, msg def _log_on_delete_dataset_error(self, log): - QgsMessageLog.logMessage(log, self.tr("Delete dataset from DB"), Qgis.Critical) + QgsMessageLog.logMessage( + log, self.tr("Delete dataset from DB"), Qgis.MessageLevel.Critical + ) diff --git a/QgisModelBaker/gui/create_baskets.py b/QgisModelBaker/gui/create_baskets.py index 62f29efa2..8f773e44e 100644 --- a/QgisModelBaker/gui/create_baskets.py +++ b/QgisModelBaker/gui/create_baskets.py @@ -56,7 +56,7 @@ def _accepted(self): ] if negative_feedbacks: warning_box = QMessageBox(self) - warning_box.setIcon(QMessageBox.Critical) + warning_box.setIcon(QMessageBox.Icon.Critical) warning_title = self.tr("Creating baskets failed") warning_box.setWindowTitle(warning_title) warning_box.setText( @@ -65,7 +65,7 @@ def _accepted(self): "\n(The problem is often an incorrectly formatted BID)", ) ) - warning_box.exec_() + warning_box.exec() self.close() def _rejected(self): diff --git a/QgisModelBaker/gui/custom_model_dir.py b/QgisModelBaker/gui/custom_model_dir.py index d3587a397..782ffefec 100644 --- a/QgisModelBaker/gui/custom_model_dir.py +++ b/QgisModelBaker/gui/custom_model_dir.py @@ -75,7 +75,11 @@ def browse_dir(self): ) def set_flags(self, item): - item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled) + item.setFlags( + Qt.ItemFlag.ItemIsSelectable + | Qt.ItemFlag.ItemIsEditable + | Qt.ItemFlag.ItemIsEnabled + ) def on_selection_changed(self): enable = len(self.model_dir_list.selectedItems()) == 1 diff --git a/QgisModelBaker/gui/dataset_manager.py b/QgisModelBaker/gui/dataset_manager.py index abfb7aa39..5c3f2bcd0 100644 --- a/QgisModelBaker/gui/dataset_manager.py +++ b/QgisModelBaker/gui/dataset_manager.py @@ -53,18 +53,20 @@ def __init__(self, iface, parent=None, wizard_embedded=False): self.setupUi(self) self.buttonBox.accepted.connect(self._accepted) self.bar = QgsMessageBar() - self.bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) - self.info_layout.addWidget(self.bar, 0, Qt.AlignTop) + self.bar.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + self.info_layout.addWidget(self.bar, 0, Qt.AlignmentFlag.AlignTop) self.db_simple_factory = DbSimpleFactory() self.dataset_model = DatasetModel() self.dataset_tableview.horizontalHeader().setSectionResizeMode( - QHeaderView.Stretch + QHeaderView.ResizeMode.Stretch ) self.dataset_tableview.horizontalHeader().hide() self.dataset_tableview.verticalHeader().hide() - self.dataset_tableview.setSelectionMode(QTableView.SingleSelection) + self.dataset_tableview.setSelectionMode( + QTableView.SelectionMode.SingleSelection + ) self.dataset_tableview.setModel(self.dataset_model) self.add_button.clicked.connect(self._add_dataset) @@ -92,14 +94,14 @@ def __init__(self, iface, parent=None, wizard_embedded=False): def _close_editing(self): editable_layers = [] for layer in QgsProject.instance().mapLayers().values(): - if layer.type() == QgsMapLayer.VectorLayer: + if layer.type() == QgsMapLayer.LayerType.VectorLayer: self.iface.vectorLayerTools().stopEditing(layer) if layer.isEditable(): editable_layers.append(layer) if editable_layers: # in case it could not close it automatically warning_box = QMessageBox(self) - warning_box.setIcon(QMessageBox.Warning) + warning_box.setIcon(QMessageBox.Icon.Warning) warning_title = self.tr("Layers still editable") warning_box.setWindowTitle(warning_title) warning_box.setText( @@ -107,7 +109,7 @@ def _close_editing(self): "You still have layers in edit mode.\nIn case you modify datasets on the database of those layers, it could lead to database locks.\nEditable layers are:\n - {}" ).format("\n - ".join([layer.name() for layer in editable_layers])) ) - warning_box.exec_() + warning_box.exec() def _valid_selection(self): """ @@ -142,7 +144,7 @@ def _add_dataset(self): db_connector = db_utils.get_db_connector(self.configuration) if db_connector and db_connector.get_basket_handling(): edit_dataset_dialog = EditDatasetDialog(self, db_connector) - edit_dataset_dialog.exec_() + edit_dataset_dialog.exec() self._refresh_datasets() self._jump_to_entry(edit_dataset_dialog.dataset_line_edit.text()) @@ -159,7 +161,7 @@ def _edit_dataset(self): ), ) edit_dataset_dialog = EditDatasetDialog(self, db_connector, dataset) - edit_dataset_dialog.exec_() + edit_dataset_dialog.exec() self._refresh_datasets() self._jump_to_entry(edit_dataset_dialog.dataset_line_edit.text()) @@ -173,7 +175,7 @@ def _delete_dataset(self): self.tr( "Delete datasets is only available for database schemas created with --createBasketCol parameter." ), - QMessageBox.Close, + QMessageBox.StandardButton.Close, ) return @@ -184,9 +186,9 @@ def _delete_dataset(self): self.tr( "Deleting a Dataset will also delete children baskets and all the data they contain. This operation cannot be reverted.\n\nAre you sure you want to proceed?" ), - QMessageBox.No | QMessageBox.Yes, + QMessageBox.StandardButton.No | QMessageBox.StandardButton.Yes, ) - == QMessageBox.Yes + == QMessageBox.StandardButton.Yes ): dataset = self.dataset_tableview.selectedIndexes()[0].data( int(DatasetModel.Roles.DATASETNAME) @@ -203,14 +205,16 @@ def _delete_dataset(self): warning_box = QMessageBox(self) warning_box.setIcon( - QMessageBox.Information if res else QMessageBox.Warning + QMessageBox.Icon.Information if res else QMessageBox.Icon.Warning ) warning_box.setWindowTitle(self.tr("Delete Dataset")) warning_box.setText(msg) - warning_box.exec_() + warning_box.exec() def _log_on_delete_dataset_error(self, log): - QgsMessageLog.logMessage(log, self.tr("Delete dataset from DB"), Qgis.Critical) + QgsMessageLog.logMessage( + log, self.tr("Delete dataset from DB"), Qgis.MessageLevel.Critical + ) def _refresh_map_layers(self): # Refresh layer data sources and also their symbology (including feature count) @@ -230,15 +234,15 @@ def _open_basket_manager(self): basket_manager_dialog = BasketManagerDialog( self.iface, self, db_connector, datasetname, self.configuration ) - basket_manager_dialog.exec_() + basket_manager_dialog.exec() def _jump_to_entry(self, datasetname): matches = self.dataset_model.match( self.dataset_model.index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, datasetname, 1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) if matches: self.dataset_tableview.setCurrentIndex(matches[0]) diff --git a/QgisModelBaker/gui/drop_message.py b/QgisModelBaker/gui/drop_message.py index 0d9738fde..0756cd353 100644 --- a/QgisModelBaker/gui/drop_message.py +++ b/QgisModelBaker/gui/drop_message.py @@ -18,9 +18,8 @@ """ import os -from PyQt5.QtCore import QSize from qgis.gui import QgsGui -from qgis.PyQt.QtCore import QSettings +from qgis.PyQt.QtCore import QSettings, QSize from qgis.PyQt.QtWidgets import QDialog from QgisModelBaker.utils import gui_utils diff --git a/QgisModelBaker/gui/edit_basket.py b/QgisModelBaker/gui/edit_basket.py index 0b259c724..e15105f01 100644 --- a/QgisModelBaker/gui/edit_basket.py +++ b/QgisModelBaker/gui/edit_basket.py @@ -16,9 +16,8 @@ * * ***************************************************************************/ """ -from PyQt5.QtWidgets import QMessageBox from qgis.PyQt.QtCore import Qt -from qgis.PyQt.QtWidgets import QDialog, QWidget +from qgis.PyQt.QtWidgets import QDialog, QMessageBox, QWidget from QgisModelBaker.libs.modelbaker.dbconnector.db_connector import DBConnector from QgisModelBaker.utils import gui_utils @@ -49,7 +48,9 @@ def __init__( if not dataset_data["enabled"]: model = self.cboDatasets.model() item = model.item(self.cboDatasets.count() - 1) - item.setFlags(item.flags() & ~Qt.ItemIsEnabled) # Disable mirror item + item.setFlags( + item.flags() & ~Qt.ItemFlag.ItemIsEnabled + ) # Disable mirror item # Select the current basket's dataset self.cboDatasets.setCurrentIndex( @@ -99,5 +100,8 @@ def _save_edited_basket(self) -> None: res, msg = self.db_connector.edit_basket(basket_config) if not res: QMessageBox.warning( - self, self.tr("Edit Basket Failed"), msg, QMessageBox.Close + self, + self.tr("Edit Basket Failed"), + msg, + QMessageBox.StandardButton.Close, ) diff --git a/QgisModelBaker/gui/edit_command.py b/QgisModelBaker/gui/edit_command.py index 3fb431400..ec694b6ea 100644 --- a/QgisModelBaker/gui/edit_command.py +++ b/QgisModelBaker/gui/edit_command.py @@ -29,4 +29,6 @@ def __init__(self, parent=None): QDialog.__init__(self, parent) self.setupUi(self) QgsGui.instance().enableAutoGeometryRestore(self) - self.button_box.button(QDialogButtonBox.Ok).setText(self.tr("Run")) + self.button_box.button(QDialogButtonBox.StandardButton.Ok).setText( + self.tr("Run") + ) diff --git a/QgisModelBaker/gui/edit_dataset_name.py b/QgisModelBaker/gui/edit_dataset_name.py index db6ec505a..1dbd015a3 100644 --- a/QgisModelBaker/gui/edit_dataset_name.py +++ b/QgisModelBaker/gui/edit_dataset_name.py @@ -59,13 +59,13 @@ def accepted(self): status, message = self.database_command(new_dataset_name) if not status: warning_box = QMessageBox(self) - warning_box.setIcon(QMessageBox.Critical) + warning_box.setIcon(QMessageBox.Icon.Critical) warning_title = ( self.tr("Rename Dataset") if self.tid else self.tr("Create Dataset") ) warning_box.setWindowTitle(warning_title) warning_box.setText(message) - warning_box.exec_() + warning_box.exec() self.close() def database_command(self, new_dataset_name): diff --git a/QgisModelBaker/gui/ili2db_options.py b/QgisModelBaker/gui/ili2db_options.py index 3ec452e78..45e804618 100644 --- a/QgisModelBaker/gui/ili2db_options.py +++ b/QgisModelBaker/gui/ili2db_options.py @@ -156,8 +156,8 @@ def __init__(self, parent=None, remove_create_tid_group=True): ) self.bar = QgsMessageBar() - self.bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) - self.layout().addWidget(self.bar, 0, 0, Qt.AlignTop) + self.bar.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + self.layout().addWidget(self.bar, 0, 0, Qt.AlignmentFlag.AlignTop) def accepted(self): """Save settings before accepting the dialog""" @@ -168,7 +168,7 @@ def accepted(self): ]: if ( line_edit.validator().validate(line_edit.text().strip(), 0)[0] - != QValidator.Acceptable + != QValidator.State.Acceptable ): self.bar.pushWarning( self.tr("Warning"), diff --git a/QgisModelBaker/gui/options.py b/QgisModelBaker/gui/options.py index 7402538be..fd4c72424 100644 --- a/QgisModelBaker/gui/options.py +++ b/QgisModelBaker/gui/options.py @@ -124,7 +124,7 @@ def accepted(self): def show_custom_model_dir(self): dlg = CustomModelDirDialog(self.custom_model_directories_line_edit.text(), self) - dlg.exec_() + dlg.exec() def help_requested(self): os_language = QLocale(QSettings().value("locale/userLocale")).name()[:2] diff --git a/QgisModelBaker/gui/panel/create_basket_panel.py b/QgisModelBaker/gui/panel/create_basket_panel.py index d8c678c22..c3260653a 100644 --- a/QgisModelBaker/gui/panel/create_basket_panel.py +++ b/QgisModelBaker/gui/panel/create_basket_panel.py @@ -57,13 +57,13 @@ def rowCount(self, parent): def flags(self, index): if index.column() == CreateBasketModel.Columns.DO_CREATE: - return Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEnabled if index.column() in ( CreateBasketModel.Columns.BID_VALUE, CreateBasketModel.Columns.ATTACHMENT_KEY, ): - return Qt.ItemIsEditable | Qt.ItemIsEnabled - return Qt.ItemIsSelectable | Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEditable | Qt.ItemFlag.ItemIsEnabled + return Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: """ @@ -78,7 +78,10 @@ def parent(self, index): return index def headerData(self, section, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if ( + orientation == Qt.Orientation.Horizontal + and role == Qt.ItemDataRole.DisplayRole + ): if section == CreateBasketModel.Columns.DO_CREATE: return self.tr("Create") if section == CreateBasketModel.Columns.TOPIC: @@ -91,7 +94,9 @@ def headerData(self, section, orientation, role): return self.tr("Attachment key") def data(self, index, role): - if role == int(Qt.DisplayRole) or role == int(Qt.EditRole): + if role == int(Qt.ItemDataRole.DisplayRole) or role == int( + Qt.ItemDataRole.EditRole + ): key = list(self.basket_settings.keys())[index.row()] if index.column() == CreateBasketModel.Columns.DO_CREATE: return self.basket_settings[key]["create"] @@ -103,7 +108,7 @@ def data(self, index, role): return self.basket_settings[key]["bid_value"] if index.column() == CreateBasketModel.Columns.ATTACHMENT_KEY: return self.basket_settings[key]["attachmentkey"] - elif role == int(Qt.ToolTipRole): + elif role == int(Qt.ItemDataRole.ToolTipRole): key = list(self.basket_settings.keys())[index.row()] if index.column() == CreateBasketModel.Columns.DO_CREATE: return self.tr("If this basket should be created") @@ -147,7 +152,7 @@ def data(self, index, role): return None def setData(self, index, data, role): - if role == int(Qt.EditRole): + if role == int(Qt.ItemDataRole.EditRole): key = list(self.basket_settings.keys())[index.row()] if index.column() == CreateBasketModel.Columns.BID_VALUE: self.basket_settings[key]["bid_value"] = data @@ -238,26 +243,28 @@ def __init__(self, parent=None): self.basket_view.setModel(self.bid_model) self.basket_view.horizontalHeader().setSectionResizeMode( - CreateBasketModel.Columns.DO_CREATE, QHeaderView.ResizeToContents + CreateBasketModel.Columns.DO_CREATE, QHeaderView.ResizeMode.ResizeToContents ) self.basket_view.horizontalHeader().setSectionResizeMode( - CreateBasketModel.Columns.TOPIC, QHeaderView.Stretch + CreateBasketModel.Columns.TOPIC, QHeaderView.ResizeMode.Stretch ) self.basket_view.horizontalHeader().setSectionResizeMode( - CreateBasketModel.Columns.BID_DOMAIN, QHeaderView.ResizeToContents + CreateBasketModel.Columns.BID_DOMAIN, + QHeaderView.ResizeMode.ResizeToContents, ) self.basket_view.horizontalHeader().setSectionResizeMode( - CreateBasketModel.Columns.BID_VALUE, QHeaderView.ResizeToContents + CreateBasketModel.Columns.BID_VALUE, QHeaderView.ResizeMode.ResizeToContents ) self.basket_view.horizontalHeader().setSectionResizeMode( - CreateBasketModel.Columns.ATTACHMENT_KEY, QHeaderView.ResizeToContents + CreateBasketModel.Columns.ATTACHMENT_KEY, + QHeaderView.ResizeMode.ResizeToContents, ) self.basket_view.setItemDelegateForColumn( CreateBasketModel.Columns.DO_CREATE, - CheckDelegate(self, Qt.EditRole), + CheckDelegate(self, Qt.ItemDataRole.EditRole), ) - self.basket_view.setEditTriggers(QAbstractItemView.AllEditTriggers) + self.basket_view.setEditTriggers(QAbstractItemView.EditTrigger.AllEditTriggers) def load_basket_config(self, db_connector, dataset): self.bid_model.load_basket_config(db_connector, dataset) diff --git a/QgisModelBaker/gui/panel/dataset_selector.py b/QgisModelBaker/gui/panel/dataset_selector.py index f01ea1661..129e19413 100644 --- a/QgisModelBaker/gui/panel/dataset_selector.py +++ b/QgisModelBaker/gui/panel/dataset_selector.py @@ -36,7 +36,7 @@ class DatasetSelector(QComboBox): def __init__(self, parent=None): QWidget.__init__(self, parent) - self.setSizeAdjustPolicy(QComboBox.AdjustToContents) + self.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToContents) self.setToolTip(self.tr("Dataset used as default value in form")) self.db_simple_factory = DbSimpleFactory() @@ -95,7 +95,7 @@ def set_current_layer(self, layer): # let it pass, it will have no entries what is okay pass - self.filtered_model.setFilterRegExp( + self.filtered_model.setFilterRegularExpression( "|".join(self.current_schema_topic_identificators) ) @@ -119,7 +119,7 @@ def _set_index(self, default_basket_topic): int(BasketSourceModel.Roles.BASKET_TID), current_basket_tid, 1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) if matches: self.setCurrentIndex(matches[0].row()) @@ -145,7 +145,9 @@ def _store_default_basket_tid(self, schema_identificator, model_topic): schema_topic_identificator = slugify( f"{schema_identificator}_{model_topic}" ) - self.filtered_model.setFilterRegExp(f"{schema_topic_identificator}") + self.filtered_model.setFilterRegularExpression( + f"{schema_topic_identificator}" + ) first_index = self.model().index(0, 0) basket_tid = first_index.data(int(BasketSourceModel.Roles.BASKET_TID)) QgsExpressionContextUtils.setProjectVariable( diff --git a/QgisModelBaker/gui/panel/filter_data_panel.py b/QgisModelBaker/gui/panel/filter_data_panel.py index 95d19eb82..1e9d04c4f 100644 --- a/QgisModelBaker/gui/panel/filter_data_panel.py +++ b/QgisModelBaker/gui/panel/filter_data_panel.py @@ -115,8 +115,9 @@ def _filter_changed(self): self.parent.current_filter_mode = filter def _select_all_items(self, state): - if state != Qt.PartiallyChecked and state != self._evaluated_check_state( - self.items_view.model() + if ( + state != Qt.CheckState.PartiallyChecked + and state != self._evaluated_check_state(self.items_view.model()) ): self.items_view.model().check_all(state) @@ -129,6 +130,6 @@ def _evaluated_check_state(self, model): nbr_of_checked = len(model.checked_entries()) if nbr_of_checked: if nbr_of_checked == model.rowCount(): - return Qt.Checked - return Qt.PartiallyChecked - return Qt.Unchecked + return Qt.CheckState.Checked + return Qt.CheckState.PartiallyChecked + return Qt.CheckState.Unchecked diff --git a/QgisModelBaker/gui/panel/gpkg_config_panel.py b/QgisModelBaker/gui/panel/gpkg_config_panel.py index c61d47a8b..198f5d2a6 100644 --- a/QgisModelBaker/gui/panel/gpkg_config_panel.py +++ b/QgisModelBaker/gui/panel/gpkg_config_panel.py @@ -113,7 +113,7 @@ def is_valid(self): if ( not db_file or self.gpkg_file_line_edit.validator().validate(db_file, 0)[0] - != QValidator.Acceptable + != QValidator.State.Acceptable ): message = self.tr( "Please set a valid database file before creating the project." diff --git a/QgisModelBaker/gui/panel/layer_tids_panel.py b/QgisModelBaker/gui/panel/layer_tids_panel.py index 97bf27a61..2bb941849 100644 --- a/QgisModelBaker/gui/panel/layer_tids_panel.py +++ b/QgisModelBaker/gui/panel/layer_tids_panel.py @@ -58,7 +58,7 @@ class TIDModel(QAbstractTableModel): """ class Roles(Enum): - LAYER = Qt.UserRole + 1 + LAYER = Qt.ItemDataRole.UserRole + 1 def __int__(self): return self.value @@ -89,10 +89,10 @@ def flags(self, index): TIDModel.Columns.UNIQUE, ] ): - return Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEnabled if index.column() == TIDModel.Columns.DEFAULT_VALUE: - return Qt.ItemIsEditable | Qt.ItemIsEnabled - return Qt.ItemIsSelectable | Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEditable | Qt.ItemFlag.ItemIsEnabled + return Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: """ @@ -107,7 +107,10 @@ def parent(self, index): return index def headerData(self, section, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if ( + orientation == Qt.Orientation.Horizontal + and role == Qt.ItemDataRole.DisplayRole + ): if section == TIDModel.Columns.NAME: return self.tr("Layer") if section == TIDModel.Columns.OID_DOMAIN: @@ -122,7 +125,9 @@ def headerData(self, section, orientation, role): return self.tr("Unique") def data(self, index, role): - if role == int(Qt.DisplayRole) or role == int(Qt.EditRole): + if role == int(Qt.ItemDataRole.DisplayRole) or role == int( + Qt.ItemDataRole.EditRole + ): key = list(self.oid_settings.keys())[index.row()] if index.column() == TIDModel.Columns.NAME: return f"{key} ({self.oid_settings[key]['interlis_topic']})" @@ -136,7 +141,7 @@ def data(self, index, role): return self.oid_settings[key]["not_null"] if index.column() == TIDModel.Columns.UNIQUE: return self.oid_settings[key]["unique"] - elif role == int(Qt.ToolTipRole): + elif role == int(Qt.ItemDataRole.ToolTipRole): key = list(self.oid_settings.keys())[index.row()] if index.column() == TIDModel.Columns.NAME: return f"{key} ({self.oid_settings[key]['interlis_topic']})" @@ -204,7 +209,7 @@ def data(self, index, role): return None def setData(self, index, data, role): - if role == int(Qt.EditRole): + if role == int(Qt.ItemDataRole.EditRole): if index.column() == TIDModel.Columns.DEFAULT_VALUE: key = list(self.oid_settings.keys())[index.row()] self.oid_settings[key]["default_value_expression"] = data @@ -246,12 +251,12 @@ def createEditor(self, parent, option, index): return self.editor def setEditorData(self, editor, index): - value = index.data(int(Qt.DisplayRole)) + value = index.data(int(Qt.ItemDataRole.DisplayRole)) self.editor.setExpression(value) def setModelData(self, editor, model, index): value = editor.expression() - model.setData(index, value, int(Qt.EditRole)) + model.setData(index, value, int(Qt.ItemDataRole.EditRole)) def updateEditorGeometry(self, editor, option, index): self.editor.setGeometry(option.rect) @@ -259,7 +264,7 @@ def updateEditorGeometry(self, editor, option, index): def paint(self, painter, option, index): opt = self.createEditor(self.parent, option, index) opt.editable = False - value = index.data(int(Qt.DisplayRole)) + value = index.data(int(Qt.ItemDataRole.DisplayRole)) opt.setExpression(value) opt.resize(option.rect.width(), option.rect.height()) pixmap = QPixmap(opt.width(), opt.height()) @@ -277,22 +282,22 @@ def __init__(self, parent=None): self.layer_tids_view.setModel(self.tid_model) self.layer_tids_view.horizontalHeader().setSectionResizeMode( - TIDModel.Columns.NAME, QHeaderView.Stretch + TIDModel.Columns.NAME, QHeaderView.ResizeMode.Stretch ) self.layer_tids_view.horizontalHeader().setSectionResizeMode( - TIDModel.Columns.OID_DOMAIN, QHeaderView.ResizeToContents + TIDModel.Columns.OID_DOMAIN, QHeaderView.ResizeMode.ResizeToContents ) self.layer_tids_view.horizontalHeader().setSectionResizeMode( - TIDModel.Columns.DEFAULT_VALUE, QHeaderView.ResizeToContents + TIDModel.Columns.DEFAULT_VALUE, QHeaderView.ResizeMode.ResizeToContents ) self.layer_tids_view.horizontalHeader().setSectionResizeMode( - TIDModel.Columns.IN_FORM, QHeaderView.ResizeToContents + TIDModel.Columns.IN_FORM, QHeaderView.ResizeMode.ResizeToContents ) self.layer_tids_view.horizontalHeader().setSectionResizeMode( - TIDModel.Columns.NOTNULL, QHeaderView.ResizeToContents + TIDModel.Columns.NOTNULL, QHeaderView.ResizeMode.ResizeToContents ) self.layer_tids_view.horizontalHeader().setSectionResizeMode( - TIDModel.Columns.UNIQUE, QHeaderView.ResizeToContents + TIDModel.Columns.UNIQUE, QHeaderView.ResizeMode.ResizeToContents ) self.layer_tids_view.setItemDelegateForColumn( @@ -301,17 +306,19 @@ def __init__(self, parent=None): ) self.layer_tids_view.setItemDelegateForColumn( TIDModel.Columns.IN_FORM, - CheckDelegate(self, Qt.EditRole), + CheckDelegate(self, Qt.ItemDataRole.EditRole), ) self.layer_tids_view.setItemDelegateForColumn( TIDModel.Columns.NOTNULL, - CheckDelegate(self, Qt.EditRole), + CheckDelegate(self, Qt.ItemDataRole.EditRole), ) self.layer_tids_view.setItemDelegateForColumn( TIDModel.Columns.UNIQUE, - CheckDelegate(self, Qt.EditRole), + CheckDelegate(self, Qt.ItemDataRole.EditRole), + ) + self.layer_tids_view.setEditTriggers( + QAbstractItemView.EditTrigger.AllEditTriggers ) - self.layer_tids_view.setEditTriggers(QAbstractItemView.AllEditTriggers) def load_tid_config(self, qgis_project=QgsProject.instance()): self.tid_model.load_tid_config(qgis_project) diff --git a/QgisModelBaker/gui/panel/log_panel.py b/QgisModelBaker/gui/panel/log_panel.py index 1bdee36e1..e5c6eab4d 100644 --- a/QgisModelBaker/gui/panel/log_panel.py +++ b/QgisModelBaker/gui/panel/log_panel.py @@ -19,11 +19,16 @@ import logging -from PyQt5.QtWidgets import QGridLayout, QProgressBar from qgis.core import Qgis from qgis.gui import QgsMessageBar from qgis.PyQt.QtCore import QSize, Qt -from qgis.PyQt.QtWidgets import QGridLayout, QSizePolicy, QTextBrowser, QWidget +from qgis.PyQt.QtWidgets import ( + QGridLayout, + QProgressBar, + QSizePolicy, + QTextBrowser, + QWidget, +) from QgisModelBaker.utils.gui_utils import ( LogLevel, @@ -38,10 +43,10 @@ def __init__(self, parent=None): self.txtStdout = QTextBrowser() self.bar = QgsMessageBar() - self.bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) + self.bar.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) self.txtStdout.setLayout(QGridLayout()) self.txtStdout.layout().setContentsMargins(0, 0, 0, 0) - self.txtStdout.layout().addWidget(self.bar, 0, 0, Qt.AlignTop) + self.txtStdout.layout().addWidget(self.bar, 0, 0, Qt.AlignmentFlag.AlignTop) self.scrollbar = self.txtStdout.verticalScrollBar() self.busy_bar = QProgressBar() @@ -75,7 +80,7 @@ def print_stdout_info(self, text): self.print_info(text, get_parsed_log_text_level(text)) def show_message(self, level, message): - if level == Qgis.Warning: - self.bar.pushMessage(message, Qgis.Info, 10) - elif level == Qgis.Critical: - self.bar.pushMessage(message, Qgis.Warning, 10) + if level == Qgis.MessageLevel.Warning: + self.bar.pushMessage(message, Qgis.MessageLevel.Info, 10) + elif level == Qgis.MessageLevel.Critical: + self.bar.pushMessage(message, Qgis.MessageLevel.Warning, 10) diff --git a/QgisModelBaker/gui/panel/pg_config_panel.py b/QgisModelBaker/gui/panel/pg_config_panel.py index bde65be26..1f52b8d84 100644 --- a/QgisModelBaker/gui/panel/pg_config_panel.py +++ b/QgisModelBaker/gui/panel/pg_config_panel.py @@ -44,15 +44,15 @@ class PgConfigPanel(DbConfigPanel, WIDGET_UI): """ class _SERVICE_COMBOBOX_ROLE(IntEnum): - DBSERVICE = Qt.UserRole - DBHOST = Qt.UserRole + 1 - DBPORT = Qt.UserRole + 2 - DBUSR = Qt.UserRole + 3 - DATABASE = Qt.UserRole + 4 - DBSCHEMA = Qt.UserRole + 5 - DBPWD = Qt.UserRole + 6 - DBAUTHID = Qt.UserRole + 7 - SSLMODE = Qt.UserRole + 8 + DBSERVICE = Qt.ItemDataRole.UserRole + DBHOST = Qt.ItemDataRole.UserRole + 1 + DBPORT = Qt.ItemDataRole.UserRole + 2 + DBUSR = Qt.ItemDataRole.UserRole + 3 + DATABASE = Qt.ItemDataRole.UserRole + 4 + DBSCHEMA = Qt.ItemDataRole.UserRole + 5 + DBPWD = Qt.ItemDataRole.UserRole + 6 + DBAUTHID = Qt.ItemDataRole.UserRole + 7 + SSLMODE = Qt.ItemDataRole.UserRole + 8 REFRESH_SCHEMAS_TIMEOUT_MS = 500 @@ -137,45 +137,45 @@ def __init__(self, parent, db_action_type): self.pg_ssl_mode_combo_box.addItem("verify-full", "verify-full") self.pg_ssl_mode_combo_box.setItemData( - 0, self.tr("Do not set the sslmode parameter"), Qt.ToolTipRole + 0, self.tr("Do not set the sslmode parameter"), Qt.ItemDataRole.ToolTipRole ) self.pg_ssl_mode_combo_box.setItemData( - 1, self.tr("Only try a non-SSL connection"), Qt.ToolTipRole + 1, self.tr("Only try a non-SSL connection"), Qt.ItemDataRole.ToolTipRole ) self.pg_ssl_mode_combo_box.setItemData( 2, self.tr( "First try a non-SSL connection; if that fails, try an SSL connection" ), - Qt.ToolTipRole, + Qt.ItemDataRole.ToolTipRole, ) self.pg_ssl_mode_combo_box.setItemData( 3, self.tr( "First try an SSL connection; if that fails, try a non-SSL connection" ), - Qt.ToolTipRole, + Qt.ItemDataRole.ToolTipRole, ) self.pg_ssl_mode_combo_box.setItemData( 4, self.tr( "Only try an SSL connection. If a root CA file is present, verify the certificate in the same way as if verify-ca was specified" ), - Qt.ToolTipRole, + Qt.ItemDataRole.ToolTipRole, ) self.pg_ssl_mode_combo_box.setItemData( 5, self.tr( "Only try an SSL connection, and verify that the server certificate is issued by a trusted certificate authority (CA)" ), - Qt.ToolTipRole, + Qt.ItemDataRole.ToolTipRole, ) self.pg_ssl_mode_combo_box.setItemData( 6, self.tr( "Only try an SSL connection, verify that the server certificate is issued by a trusted CA and that the requested server host name matches that in the certificate" ), - Qt.ToolTipRole, + Qt.ItemDataRole.ToolTipRole, ) self._show_panel() diff --git a/QgisModelBaker/gui/panel/session_panel.py b/QgisModelBaker/gui/panel/session_panel.py index 67d0d250f..73d50a5a6 100644 --- a/QgisModelBaker/gui/panel/session_panel.py +++ b/QgisModelBaker/gui/panel/session_panel.py @@ -313,7 +313,7 @@ def edit_command(self): command = porter.command(True) edit_command_dialog = EditCommandDialog(self) edit_command_dialog.command_edit.setPlainText(command) - if edit_command_dialog.exec_(): + if edit_command_dialog.exec(): edited_command = edit_command_dialog.command_edit.toPlainText() self.run(edited_command) @@ -335,7 +335,7 @@ def run(self, edited_command=None): porter = self._get_porter() - with OverrideCursor(Qt.WaitCursor): + with OverrideCursor(Qt.CursorShape.WaitCursor): self.progress_bar.setTextVisible(False) self.progress_bar.setValue(10) diff --git a/QgisModelBaker/gui/panel/summary_basket_panel.py b/QgisModelBaker/gui/panel/summary_basket_panel.py index dc948b883..f6633d1e3 100644 --- a/QgisModelBaker/gui/panel/summary_basket_panel.py +++ b/QgisModelBaker/gui/panel/summary_basket_panel.py @@ -51,7 +51,7 @@ def rowCount(self, parent): return len(self.basket_settings) def flags(self, index): - return Qt.ItemIsSelectable | Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: """ @@ -66,7 +66,10 @@ def parent(self, index): return index def headerData(self, section, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if ( + orientation == Qt.Orientation.Horizontal + and role == Qt.ItemDataRole.DisplayRole + ): if section == BasketModel.Columns.DATASET: return self.tr("Dataset") if section == BasketModel.Columns.TOPIC: @@ -79,7 +82,9 @@ def headerData(self, section, orientation, role): return self.tr("Attachment key") def data(self, index, role): - if role == int(Qt.DisplayRole) or role == int(Qt.EditRole): + if role == int(Qt.ItemDataRole.DisplayRole) or role == int( + Qt.ItemDataRole.EditRole + ): key = list(self.basket_settings.keys())[index.row()] if index.column() == BasketModel.Columns.DATASET: return self.basket_settings[key]["datasetname"] @@ -91,7 +96,7 @@ def data(self, index, role): return self.basket_settings[key]["bid_value"] if index.column() == BasketModel.Columns.ATTACHMENT_KEY: return self.basket_settings[key]["attachmentkey"] - elif role == int(Qt.ToolTipRole): + elif role == int(Qt.ItemDataRole.ToolTipRole): key = list(self.basket_settings.keys())[index.row()] if index.column() == BasketModel.Columns.DATASET: return self.tr("Dataset this basket belongs to") @@ -180,19 +185,19 @@ def __init__(self, parent=None): self.basket_view.setModel(self.bid_model) self.basket_view.horizontalHeader().setSectionResizeMode( - BasketModel.Columns.DATASET, QHeaderView.ResizeToContents + BasketModel.Columns.DATASET, QHeaderView.ResizeMode.ResizeToContents ) self.basket_view.horizontalHeader().setSectionResizeMode( - BasketModel.Columns.TOPIC, QHeaderView.Stretch + BasketModel.Columns.TOPIC, QHeaderView.ResizeMode.Stretch ) self.basket_view.horizontalHeader().setSectionResizeMode( - BasketModel.Columns.BID_DOMAIN, QHeaderView.ResizeToContents + BasketModel.Columns.BID_DOMAIN, QHeaderView.ResizeMode.ResizeToContents ) self.basket_view.horizontalHeader().setSectionResizeMode( - BasketModel.Columns.BID_VALUE, QHeaderView.ResizeToContents + BasketModel.Columns.BID_VALUE, QHeaderView.ResizeMode.ResizeToContents ) self.basket_view.horizontalHeader().setSectionResizeMode( - BasketModel.Columns.ATTACHMENT_KEY, QHeaderView.ResizeToContents + BasketModel.Columns.ATTACHMENT_KEY, QHeaderView.ResizeMode.ResizeToContents ) def load_basket_config(self, db_connector, dataset): diff --git a/QgisModelBaker/gui/tid_manager.py b/QgisModelBaker/gui/tid_manager.py index d1e2c1d6e..ff1acb6d9 100644 --- a/QgisModelBaker/gui/tid_manager.py +++ b/QgisModelBaker/gui/tid_manager.py @@ -49,27 +49,27 @@ def __init__(self, iface, parent=None, base_config=None): self.setStyleSheet(gui_utils.DEFAULT_STYLE) self.bar = QgsMessageBar() - self.bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) - self.layout().addWidget(self.bar, 0, 0, Qt.AlignTop) + self.bar.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + self.layout().addWidget(self.bar, 0, 0, Qt.AlignmentFlag.AlignTop) result, message = self.tid_configurator_panel.setup_dialog( QgsProject.instance() ) if not result: self.tid_configurator_panel.setEnabled(False) - self.bar.pushMessage(message, Qgis.Warning) + self.bar.pushMessage(message, Qgis.MessageLevel.Warning) def _close_editing(self): editable_layers = [] for layer in QgsProject.instance().mapLayers().values(): - if layer.type() == QgsMapLayer.VectorLayer: + if layer.type() == QgsMapLayer.LayerType.VectorLayer: self.iface.vectorLayerTools().stopEditing(layer) if layer.isEditable(): editable_layers.append(layer) if editable_layers: # in case it could not close it automatically warning_box = QMessageBox(self) - warning_box.setIcon(QMessageBox.Warning) + warning_box.setIcon(QMessageBox.Icon.Warning) warning_title = self.tr("Layers still editable") warning_box.setWindowTitle(warning_title) warning_box.setText( @@ -77,17 +77,17 @@ def _close_editing(self): "You still have layers in edit mode.\nIn case you modify the sequence in the database of those layers, it could lead to database locks.\nEditable layers are:\n - {}" ).format("\n - ".join([layer.name() for layer in editable_layers])) ) - warning_box.exec_() + warning_box.exec() def _accepted(self): result, message = self.tid_configurator_panel.set_tid_configuration() if not result: error_box = QMessageBox(self) - error_box.setIcon(QMessageBox.Critical) + error_box.setIcon(QMessageBox.Icon.Critical) warning_title = self.tr("Problems on setting T_Id sequence.") error_box.setWindowTitle(warning_title) error_box.setText(message) - error_box.exec_() + error_box.exec() else: self.close() diff --git a/QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py b/QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py index c6aa66ae3..51f8eea01 100644 --- a/QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py +++ b/QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py @@ -54,7 +54,7 @@ def rowCount(self, parent): return len(self.parameters) def flags(self, index): - return Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEnabled def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: """ @@ -69,14 +69,19 @@ def parent(self, index): return index def headerData(self, section, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if ( + orientation == Qt.Orientation.Horizontal + and role == Qt.ItemDataRole.DisplayRole + ): if section == ParametersModel.Columns.NAME: return self.tr("Name") if section == ParametersModel.Columns.VALUE: return self.tr("Value") def data(self, index, role): - if role == int(Qt.DisplayRole) or role == int(Qt.EditRole): + if role == int(Qt.ItemDataRole.DisplayRole) or role == int( + Qt.ItemDataRole.EditRole + ): if index.column() == ParametersModel.Columns.NAME: return list(self.parameters.keys())[index.row()] if index.column() == ParametersModel.Columns.VALUE: @@ -86,7 +91,7 @@ def data(self, index, role): # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): - if role == int(Qt.EditRole): + if role == int(Qt.ItemDataRole.EditRole): if index.column() == ParametersModel.Columns.NAME: key = list(self.parameters.keys())[index.row()] self.parameters[key] = self.parameters.pop(key) @@ -124,9 +129,11 @@ def __init__(self, parent, title): ) self.parameters_table_view.setModel(self.parameters_model) self.parameters_table_view.horizontalHeader().setSectionResizeMode( - QHeaderView.Stretch + QHeaderView.ResizeMode.Stretch + ) + self.parameters_table_view.setSelectionMode( + QTableView.SelectionMode.SingleSelection ) - self.parameters_table_view.setSelectionMode(QTableView.SingleSelection) self.toml_file_browse_button.clicked.connect( make_file_selector( @@ -253,7 +260,7 @@ def validatePage(self) -> bool: def _refresh_combobox(self): self.schema_combobox.clear() for layer in QgsProject.instance().mapLayers().values(): - if layer.type() == QgsMapLayer.VectorLayer: + if layer.type() == QgsMapLayer.LayerType.VectorLayer: source_provider = layer.dataProvider() if not source_provider: continue @@ -312,4 +319,6 @@ def _schema_changed(self): self.topping_wizard.busy(self, False) def _log_on_export_metagonfig_error(self, log): - QgsMessageLog.logMessage(log, self.tr("Export metaConfig"), Qgis.Critical) + QgsMessageLog.logMessage( + log, self.tr("Export metaConfig"), Qgis.MessageLevel.Critical + ) diff --git a/QgisModelBaker/gui/topping_wizard/layer_style_categories.py b/QgisModelBaker/gui/topping_wizard/layer_style_categories.py index 1f8273dc8..4975d5451 100644 --- a/QgisModelBaker/gui/topping_wizard/layer_style_categories.py +++ b/QgisModelBaker/gui/topping_wizard/layer_style_categories.py @@ -86,17 +86,17 @@ def setCategories(self, categories: QgsMapLayer.StyleCategories): self._checked_entries = {} for category_name in LayerStyleCategoriesModel.CATEGORY_MAP.keys(): self._checked_entries[category_name] = ( - Qt.Checked + Qt.CheckState.Checked if categories & LayerStyleCategoriesModel.CATEGORY_MAP[category_name] - else Qt.Unchecked + else Qt.CheckState.Unchecked ) self.endResetModel() def categories(self): categories = 0 for name in self._checked_entries.keys(): - if self._checked_entries[name] == Qt.Checked: + if self._checked_entries[name] == Qt.CheckState.Checked: categories |= LayerStyleCategoriesModel.CATEGORY_MAP[name] return categories @@ -113,7 +113,9 @@ def __init__(self, parent=None): self.style_categories_list_view.model().check ) else: - self.model = QgsMapLayerStyleCategoriesModel(QgsMapLayer.VectorLayer) + self.model = QgsMapLayerStyleCategoriesModel( + QgsMapLayer.LayerType.VectorLayer + ) self.style_categories_list_view.setModel(self.model) self.style_categories_list_view.setWordWrap(True) self.style_categories_list_view.setItemDelegate( @@ -134,13 +136,15 @@ def set_layer_type(self, type): def select_all_items(self, state): if Qgis.QGIS_VERSION_INT < 34000: - self.model.check_all(Qt.Checked if state else Qt.Unchecked) + self.model.check_all( + Qt.CheckState.Checked if state else Qt.CheckState.Unchecked + ) else: for i in range(self.model.rowCount()): self.model.setData( self.model.index(i, 0), - Qt.Checked if state else Qt.Unchecked, - Qt.CheckStateRole, + Qt.CheckState.Checked if state else Qt.CheckState.Unchecked, + Qt.ItemDataRole.CheckStateRole, ) def set_categories(self, categories: QgsMapLayer.StyleCategories): diff --git a/QgisModelBaker/gui/topping_wizard/layers_page.py b/QgisModelBaker/gui/topping_wizard/layers_page.py index bde87fb76..bda7b7ec4 100644 --- a/QgisModelBaker/gui/topping_wizard/layers_page.py +++ b/QgisModelBaker/gui/topping_wizard/layers_page.py @@ -71,7 +71,9 @@ def __init__(self, parent=None, rect=None): self.settings_button.setIcon( QgsApplication.getThemeIcon("/propertyicons/symbology.svg") ) - self.settings_button.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) + self.settings_button.setSizePolicy( + QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum + ) self.settings_button.setVisible(False) self.checkbox.stateChanged.connect(self.settings_button.setVisible) @@ -81,7 +83,7 @@ def __init__(self, parent=None, rect=None): layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) self.setLayout(layout) - self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) + self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) class LayerModel(QgsLayerTreeModel): @@ -90,8 +92,8 @@ class LayerModel(QgsLayerTreeModel): """ class Roles(IntEnum): - CATEGORIES = Qt.UserRole + 1 - LAYERTYPE = Qt.UserRole + 2 + CATEGORIES = Qt.ItemDataRole.UserRole + 1 + LAYERTYPE = Qt.ItemDataRole.UserRole + 2 class Columns(IntEnum): NAME = 0 @@ -114,20 +116,23 @@ def columnCount(self, parent=None): def flags(self, index): if index.column() == LayerModel.Columns.NAME: - return Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEnabled if index.column() == LayerModel.Columns.USE_DEFINITION: - return Qt.ItemIsUserCheckable | Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsUserCheckable | Qt.ItemFlag.ItemIsEnabled if index.column() == LayerModel.Columns.USE_STYLE: - return Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEnabled else: node = self.index2node(index) if not QgsLayerTree.isGroup(node): - return Qt.ItemIsUserCheckable | Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsUserCheckable | Qt.ItemFlag.ItemIsEnabled else: - return Qt.NoItemFlags + return Qt.ItemFlag.NoItemFlags def headerData(self, section, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if ( + orientation == Qt.Orientation.Horizontal + and role == Qt.ItemDataRole.DisplayRole + ): if section == LayerModel.Columns.NAME: return self.tr("Layers and Groups") if section == LayerModel.Columns.USE_STYLE: @@ -136,7 +141,10 @@ def headerData(self, section, orientation, role): return self.tr("Definition (QLR)") if section == LayerModel.Columns.USE_SOURCE: return self.tr("Source") - if orientation == Qt.Horizontal and role == Qt.ToolTipRole: + if ( + orientation == Qt.Orientation.Horizontal + and role == Qt.ItemDataRole.ToolTipRole + ): if section == LayerModel.Columns.NAME: return self.tr( "The layers/groups listed here will be stored the layertree in the project topping (YAML) file. To remove a layer or a group, remove it in your project." @@ -156,7 +164,7 @@ def headerData(self, section, orientation, role): return QgsLayerTreeModel.headerData(self, section, orientation, role) def data(self, index, role): - if role == Qt.CheckStateRole: + if role == Qt.ItemDataRole.CheckStateRole: node = self.index2node(index) if node: if ( @@ -166,12 +174,20 @@ def data(self, index, role): settings = self.export_settings.get_setting( ExportSettings.ToppingType.QMLSTYLE, node ) - return Qt.Checked if settings.get("export", False) else Qt.Unchecked + return ( + Qt.CheckState.Checked + if settings.get("export", False) + else Qt.CheckState.Unchecked + ) if index.column() == LayerModel.Columns.USE_DEFINITION: settings = self.export_settings.get_setting( ExportSettings.ToppingType.DEFINITION, node ) - return Qt.Checked if settings.get("export", False) else Qt.Unchecked + return ( + Qt.CheckState.Checked + if settings.get("export", False) + else Qt.CheckState.Unchecked + ) if ( index.column() == LayerModel.Columns.USE_SOURCE and not QgsLayerTree.isGroup(node) @@ -179,16 +195,20 @@ def data(self, index, role): settings = self.export_settings.get_setting( ExportSettings.ToppingType.SOURCE, node ) - return Qt.Checked if settings.get("export", False) else Qt.Unchecked + return ( + Qt.CheckState.Checked + if settings.get("export", False) + else Qt.CheckState.Unchecked + ) - if role == Qt.BackgroundRole: + if role == Qt.ItemDataRole.BackgroundRole: node = self.index2node(index) if QgsLayerTree.isGroup(node): - return QColor(Qt.gray) + return QColor(Qt.GlobalColor.gray) else: layer = QgsProject.instance().mapLayersByName(node.name())[0] if layer: - if layer.type() == QgsMapLayer.VectorLayer: + if layer.type() == QgsMapLayer.LayerType.VectorLayer: if self._is_ili_schema(layer): return QColor(gui_utils.BLUE) return QColor(gui_utils.GREEN) @@ -219,7 +239,7 @@ def data(self, index, role): # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): - if role == Qt.CheckStateRole: + if role == Qt.ItemDataRole.CheckStateRole: node = self.index2node(index) if node: if ( @@ -315,11 +335,20 @@ def setData(self, index, role, data): return QgsLayerTreeModel.setData(self, index, role, data) def check(self, index): - if index.flags() & (Qt.ItemIsUserCheckable | Qt.ItemIsEnabled): - if self.data(index, Qt.CheckStateRole) == Qt.Checked: - self.setData(index, Qt.CheckStateRole, Qt.Unchecked) + if index.flags() & ( + Qt.ItemFlag.ItemIsUserCheckable | Qt.ItemFlag.ItemIsEnabled + ): + if ( + self.data(index, Qt.ItemDataRole.CheckStateRole) + == Qt.CheckState.Checked + ): + self.setData( + index, Qt.ItemDataRole.CheckStateRole, Qt.CheckState.Unchecked + ) else: - self.setData(index, Qt.CheckStateRole, Qt.Checked) + self.setData( + index, Qt.ItemDataRole.CheckStateRole, Qt.CheckState.Checked + ) def reload(self, load_defaults=False): self._load_ili_schema_identificators() @@ -330,17 +359,17 @@ def _disable_children(self, parent: QModelIndex): for child_row in range(self.rowCount(parent)): self.setData( self.index(child_row, LayerModel.Columns.USE_STYLE, parent), - Qt.CheckStateRole, + Qt.ItemDataRole.CheckStateRole, False, ) self.setData( self.index(child_row, LayerModel.Columns.USE_DEFINITION, parent), - Qt.CheckStateRole, + Qt.ItemDataRole.CheckStateRole, False, ) self.setData( self.index(child_row, LayerModel.Columns.USE_SOURCE, parent), - Qt.CheckStateRole, + Qt.ItemDataRole.CheckStateRole, False, ) self._disable_children( @@ -356,7 +385,7 @@ def _disable_parent_definition(self, index: QModelIndex): LayerModel.Columns.USE_DEFINITION, index.parent().parent(), ) - self.setData(parent_definition_index, Qt.CheckStateRole, False) + self.setData(parent_definition_index, Qt.ItemDataRole.CheckStateRole, False) if index.parent() != QModelIndex(): self._disable_parent_definition(index.parent()) @@ -368,7 +397,7 @@ def _load_ili_schema_identificators(self): self.ili_schema_identificators = [] checked_schema_identificator = [] for layer in QgsProject.instance().mapLayers().values(): - if layer.type() == QgsMapLayer.VectorLayer: + if layer.type() == QgsMapLayer.LayerType.VectorLayer: source_provider = layer.dataProvider() if not source_provider: continue @@ -508,16 +537,20 @@ def createEditor(self, parent, option, index): widget = LayerStyleWidget(parent, option.rect) widget.setAutoFillBackground(True) palette = QPalette() - palette.setColor(QPalette.Base, QColor(index.data(Qt.BackgroundRole))) + palette.setColor( + QPalette.ColorRole.Base, QColor(index.data(Qt.ItemDataRole.BackgroundRole)) + ) widget.setPalette(palette) widget.checkbox.stateChanged.connect( - lambda state: index.model().setData(index, Qt.CheckStateRole, state) + lambda state: index.model().setData( + index, Qt.ItemDataRole.CheckStateRole, state + ) ) widget.settings_button.clicked.connect(lambda: self.button_clicked.emit(index)) return widget def setEditorData(self, editor, index): - check_state = index.data(Qt.CheckStateRole) + check_state = index.data(Qt.ItemDataRole.CheckStateRole) if check_state is not None: editor.checkbox.setVisible(True) editor.checkbox.setCheckState(check_state) @@ -549,7 +582,7 @@ def __init__(self, parent, title): self.layermodel.setFlags(QgsLayerTreeModel.Flags()) self.layer_table_view.setModel(self.layermodel) self.layer_table_view.header().setSectionResizeMode( - LayerModel.Columns.NAME, QHeaderView.Stretch + LayerModel.Columns.NAME, QHeaderView.ResizeMode.Stretch ) self.layer_table_view.header().setStretchLastSection(False) @@ -571,7 +604,7 @@ def reload_layermodel(self): self.topping_wizard.busy(self, False) def open_categories_dialog(self, index): - layername = index.data(int(Qt.DisplayRole)) + layername = index.data(int(Qt.ItemDataRole.DisplayRole)) self.categories_dialog.setWindowTitle( self.tr(f"Layer Style Categories of {layername}") ) @@ -580,7 +613,7 @@ def open_categories_dialog(self, index): ) categories = index.data(int(LayerModel.Roles.CATEGORIES)) self.categories_dialog.set_categories(categories) - if self.categories_dialog.exec_(): + if self.categories_dialog.exec(): self.layermodel.setData( index, int(LayerModel.Roles.CATEGORIES), diff --git a/QgisModelBaker/gui/topping_wizard/models_page.py b/QgisModelBaker/gui/topping_wizard/models_page.py index 38f2951be..e6e833b87 100644 --- a/QgisModelBaker/gui/topping_wizard/models_page.py +++ b/QgisModelBaker/gui/topping_wizard/models_page.py @@ -87,7 +87,7 @@ def _load_available_models_and_sources(self): sources = set() for layer in QgsProject.instance().mapLayers().values(): - if layer.type() == QgsMapLayer.VectorLayer: + if layer.type() == QgsMapLayer.LayerType.VectorLayer: source_provider = layer.dataProvider() if not source_provider: continue diff --git a/QgisModelBaker/gui/topping_wizard/referencedata_page.py b/QgisModelBaker/gui/topping_wizard/referencedata_page.py index 5c358435f..ea73f3204 100644 --- a/QgisModelBaker/gui/topping_wizard/referencedata_page.py +++ b/QgisModelBaker/gui/topping_wizard/referencedata_page.py @@ -80,9 +80,9 @@ def __init__(self, parent, title): self.ilireferencedatacache.sorted_model, self.input_line_edit, ) - completer.setCaseSensitivity(Qt.CaseInsensitive) + completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive) completer.setModelSorting(QCompleter.ModelSorting.CaseInsensitivelySortedModel) - completer.setFilterMode(Qt.MatchContains) + completer.setFilterMode(Qt.MatchFlag.MatchContains) completer.popup().setItemDelegate(self.ilireferencedata_delegate) self.input_line_edit.setCompleter(completer) self.input_line_edit.textChanged.connect(self._complete_referencedata_completer) @@ -162,7 +162,7 @@ def _complete_referencedata_completer(self): if self.input_line_edit.hasFocus(): if not self.input_line_edit.text(): self.input_line_edit.completer().setCompletionMode( - QCompleter.UnfilteredPopupCompletion + QCompleter.CompletionMode.UnfilteredPopupCompletion ) self.input_line_edit.completer().complete() else: @@ -171,15 +171,15 @@ def _complete_referencedata_completer(self): .completionModel() .match( self.input_line_edit.completer().completionModel().index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.input_line_edit.text(), -1, - Qt.MatchContains, + Qt.MatchFlag.MatchContains, ) ) if len(match_contains) > 1: self.input_line_edit.completer().setCompletionMode( - QCompleter.PopupCompletion + QCompleter.CompletionMode.PopupCompletion ) self.input_line_edit.completer().complete() self.input_line_edit.completer().popup().scrollToTop() @@ -190,10 +190,10 @@ def _valid_source(self): .completionModel() .match( self.input_line_edit.completer().completionModel().index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.input_line_edit.text(), -1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) ) return ( @@ -234,10 +234,10 @@ def add_source(self, source, origin_info): path = "" matches = self.ilireferencedatacache.model.match( self.ilireferencedatacache.model.index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.input_line_edit.text(), 1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) if matches: model_index = matches[0] diff --git a/QgisModelBaker/gui/topping_wizard/target_page.py b/QgisModelBaker/gui/topping_wizard/target_page.py index 39889977b..7227c84dc 100644 --- a/QgisModelBaker/gui/topping_wizard/target_page.py +++ b/QgisModelBaker/gui/topping_wizard/target_page.py @@ -96,8 +96,10 @@ def validatePage(self) -> bool: or "Model Baker User" ) ) - publishing_date = self.publishingdate_date_edit.date().toString(Qt.ISODate) - version = self.version_date_edit.date().toString(Qt.ISODate) + publishing_date = self.publishingdate_date_edit.date().toString( + Qt.DateFormat.ISODate + ) + version = self.version_date_edit.date().toString(Qt.DateFormat.ISODate) mainfolder = os.path.abspath(self.main_folder_line_edit.text()) subfolder = self.sub_folder_line_edit.text() diff --git a/QgisModelBaker/gui/topping_wizard/topping_wizard.py b/QgisModelBaker/gui/topping_wizard/topping_wizard.py index 9505832ab..d0b3e0c23 100644 --- a/QgisModelBaker/gui/topping_wizard/topping_wizard.py +++ b/QgisModelBaker/gui/topping_wizard/topping_wizard.py @@ -38,8 +38,8 @@ def __init__(self, iface, base_config, parent): QWizard.__init__(self, parent) self.setWindowTitle(self.tr("QGIS Model Baker Topping Maker Wizard")) - self.setWizardStyle(QWizard.ModernStyle) - self.setOption(QWizard.NoCancelButtonOnLastPage) + self.setWizardStyle(QWizard.WizardStyle.ModernStyle) + self.setOption(QWizard.WizardOption.NoCancelButtonOnLastPage) self.current_id = 0 @@ -132,12 +132,12 @@ def __init__(self, iface, base_config, parent): self.log_panel = LogPanel() self.topping_wizard = ToppingWizard(self.iface, self.base_config, self) self.topping_wizard.setStartId(ToppingWizardPageIds.Target) - self.topping_wizard.setWindowFlags(Qt.Widget) + self.topping_wizard.setWindowFlags(Qt.WindowType.Widget) self.topping_wizard.show() self.topping_wizard.finished.connect(self.done) layout = QVBoxLayout() - splitter = QSplitter(Qt.Vertical) + splitter = QSplitter(Qt.Orientation.Vertical) splitter.addWidget(self.topping_wizard) splitter.addWidget(self.log_panel) layout.addWidget(splitter) diff --git a/QgisModelBaker/gui/validate.py b/QgisModelBaker/gui/validate.py index ff6ffda9c..29d31237a 100644 --- a/QgisModelBaker/gui/validate.py +++ b/QgisModelBaker/gui/validate.py @@ -19,7 +19,6 @@ import logging import os -from PyQt5.QtGui import QColor, QGuiApplication from qgis.core import ( QgsApplication, QgsExpressionContextUtils, @@ -31,6 +30,7 @@ ) from qgis.gui import QgsGui from qgis.PyQt.QtCore import QStandardPaths, Qt, QTimer +from qgis.PyQt.QtGui import QColor, QGuiApplication from qgis.PyQt.QtWidgets import ( QAction, QApplication, @@ -75,20 +75,20 @@ def __init__(self, roles): self.setHorizontalHeaderLabels([role.name for role in self.roles]) def flags(self, index): - return Qt.ItemIsEnabled | Qt.ItemIsSelectable + return Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable def data(self, index, role): item = self.item(index.row(), 0) if item: - if role == Qt.DisplayRole: + if role == Qt.ItemDataRole.DisplayRole: return item.data(int(self.roles[index.column()])) - if role == Qt.DecorationRole: + if role == Qt.ItemDataRole.DecorationRole: return ( QColor(gui_utils.SUCCESS_COLOR) if item.data(int(ValidationResultModel.Roles.FIXED)) else QColor(gui_utils.ERROR_COLOR) ) - if role == Qt.ToolTipRole: + if role == Qt.ItemDataRole.ToolTipRole: tooltip_text = "{type} at {tid} in {object}".format( type=item.data(int(ValidationResultModel.Roles.TYPE)), object=item.data(int(ValidationResultModel.Roles.OBJ_TAG)), @@ -152,7 +152,9 @@ def __init__(self, base_config, iface): self.run_button.clicked.connect(self._run) self.visibilityChanged.connect(self._visibility_changed) - self.result_table_view.setContextMenuPolicy(Qt.CustomContextMenu) + self.result_table_view.setContextMenuPolicy( + Qt.ContextMenuPolicy.CustomContextMenu + ) self.result_table_view.customContextMenuRequested.connect( self._table_context_menu_requested ) @@ -205,12 +207,16 @@ def _reset_gui(self): ValidationResultTableModel(self.requested_roles) ) self.result_table_view.horizontalHeader().setSectionResizeMode( - 0, QHeaderView.Stretch + 0, QHeaderView.ResizeMode.Stretch ) self.result_table_view.verticalHeader().hide() self.result_table_view.horizontalHeader().hide() - self.result_table_view.setSelectionBehavior(QHeaderView.SelectRows) - self.result_table_view.setSelectionMode(QHeaderView.SingleSelection) + self.result_table_view.setSelectionBehavior( + QHeaderView.SelectionBehavior.SelectRows + ) + self.result_table_view.setSelectionMode( + QHeaderView.SelectionMode.SingleSelection + ) self.setDisabled(True) @@ -245,11 +251,15 @@ def set_current_layer(self, layer, force_reload=False): if valid and mode: output_file_name = "{}.xtf".format(self.current_schema_identificator) self.current_configuration.xtflog = os.path.join( - QStandardPaths.writableLocation(QStandardPaths.TempLocation), + QStandardPaths.writableLocation( + QStandardPaths.StandardLocation.TempLocation + ), output_file_name, ) self.current_configuration.xtffile = os.path.join( - QStandardPaths.writableLocation(QStandardPaths.TempLocation), + QStandardPaths.writableLocation( + QStandardPaths.StandardLocation.TempLocation + ), f"dataexport_{output_file_name}", ) if mode == DbIliMode.gpkg: @@ -399,7 +409,7 @@ def _run(self, edited_command=None): self.progress_bar.setValue(20) validation_result_state = False - with OverrideCursor(Qt.WaitCursor): + with OverrideCursor(Qt.CursorShape.WaitCursor): try: self._validator_stdout(f"Run: {validator.command(True)}") validation_result_state = ( @@ -442,7 +452,7 @@ def _set_result(self, valid): ) self.result_table_view.setWordWrap(True) - self.result_table_view.setTextElideMode(Qt.ElideLeft) + self.result_table_view.setTextElideMode(Qt.TextElideMode.ElideLeft) self.result_table_view.resizeRowsToContents() if valid: @@ -478,7 +488,7 @@ def _table_context_menu_requested(self, pos): coord_y = index.data(int(ValidationResultModel.Roles.COORD_Y)) t_ili_tid = index.data(int(ValidationResultModel.Roles.TID)) id = index.data(int(ValidationResultModel.Roles.ID)) - text = index.data(Qt.DisplayRole) + text = index.data(Qt.ItemDataRole.DisplayRole) menu = QMenu() if coord_x and coord_y: @@ -529,7 +539,7 @@ def _table_context_menu_requested(self, pos): lambda: QGuiApplication.clipboard().setText(text) ) menu.addAction(action_copy) - menu.exec_(self.result_table_view.mapToGlobal(pos)) + menu.exec(self.result_table_view.mapToGlobal(pos)) def _table_clicked(self, index): if not index.isValid(): @@ -645,7 +655,7 @@ def _get_feature_in_project(self, t_ili_tid): schema_identificator and schema_identificator == self.current_schema_identificator ): - if layer.type() == QgsMapLayer.VectorLayer: + if layer.type() == QgsMapLayer.LayerType.VectorLayer: idx = layer.fields().lookupField("t_ili_tid") if idx < 0: continue diff --git a/QgisModelBaker/gui/workflow_wizard/execution_page.py b/QgisModelBaker/gui/workflow_wizard/execution_page.py index 5208e0185..f38241d75 100644 --- a/QgisModelBaker/gui/workflow_wizard/execution_page.py +++ b/QgisModelBaker/gui/workflow_wizard/execution_page.py @@ -143,7 +143,9 @@ def setup_sessions(self, configuration, sessions): for session_widget in self.session_widget_list: session_layout.addWidget(session_widget) session_layout.addSpacerItem( - QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Expanding) + QSpacerItem( + 40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding + ) ) content.setLayout(session_layout) self.scroll_area.setWidget(content) diff --git a/QgisModelBaker/gui/workflow_wizard/export_data_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/export_data_configuration_page.py index bf3963918..0fa6349e3 100644 --- a/QgisModelBaker/gui/workflow_wizard/export_data_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/export_data_configuration_page.py @@ -89,7 +89,7 @@ def setup_dialog(self, basket_handling): def _set_current_export_target(self, text): self.setComplete( self.xtf_file_line_edit.validator().validate(text, 0)[0] - == QValidator.Acceptable + == QValidator.State.Acceptable ) self.workflow_wizard.current_export_target = text diff --git a/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py index 257b0efe3..80fb6780e 100644 --- a/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py @@ -158,22 +158,29 @@ def __init__(self, parent, title): ) self.file_table_view.setModel(self.workflow_wizard.import_data_file_model) self.file_table_view.horizontalHeader().setSectionResizeMode( - gui_utils.SourceModel.Columns.SOURCE, QHeaderView.Stretch + gui_utils.SourceModel.Columns.SOURCE, QHeaderView.ResizeMode.Stretch ) self.file_table_view.horizontalHeader().setSectionResizeMode( - gui_utils.SourceModel.Columns.DELETE_DATA, QHeaderView.ResizeToContents + gui_utils.SourceModel.Columns.DELETE_DATA, + QHeaderView.ResizeMode.ResizeToContents, ) self.file_table_view.horizontalHeader().setSectionResizeMode( - gui_utils.SourceModel.Columns.IS_CATALOGUE, QHeaderView.ResizeToContents + gui_utils.SourceModel.Columns.IS_CATALOGUE, + QHeaderView.ResizeMode.ResizeToContents, ) self.file_table_view.horizontalHeader().setSectionResizeMode( - gui_utils.SourceModel.Columns.DATASET, QHeaderView.ResizeToContents + gui_utils.SourceModel.Columns.DATASET, + QHeaderView.ResizeMode.ResizeToContents, ) - self.file_table_view.setEditTriggers(QAbstractItemView.AllEditTriggers) + self.file_table_view.setEditTriggers( + QAbstractItemView.EditTrigger.AllEditTriggers + ) self.file_table_view.verticalHeader().setSectionsMovable(True) self.file_table_view.verticalHeader().setDragEnabled(True) - self.file_table_view.verticalHeader().setDragDropMode(QHeaderView.InternalMove) + self.file_table_view.verticalHeader().setDragDropMode( + QHeaderView.DragDropMode.InternalMove + ) self.file_table_view.resizeColumnsToContents() self.workflow_wizard.import_data_file_model.dataChanged.connect( self._update_delegates @@ -290,7 +297,7 @@ def _complete_referencedata_completer(self): if self.ilireferencedata_line_edit.hasFocus(): if not self.ilireferencedata_line_edit.text(): self.ilireferencedata_line_edit.completer().setCompletionMode( - QCompleter.UnfilteredPopupCompletion + QCompleter.CompletionMode.UnfilteredPopupCompletion ) self.ilireferencedata_line_edit.completer().complete() else: @@ -301,15 +308,15 @@ def _complete_referencedata_completer(self): self.ilireferencedata_line_edit.completer() .completionModel() .index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.ilireferencedata_line_edit.text(), -1, - Qt.MatchContains, + Qt.MatchFlag.MatchContains, ) ) if len(match_contains) > 1: self.ilireferencedata_line_edit.completer().setCompletionMode( - QCompleter.PopupCompletion + QCompleter.CompletionMode.PopupCompletion ) self.ilireferencedata_line_edit.completer().complete() self.ilireferencedata_line_edit.completer().popup().scrollToTop() @@ -322,10 +329,10 @@ def _valid_referencedata(self): self.ilireferencedata_line_edit.completer() .completionModel() .index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.ilireferencedata_line_edit.text(), -1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) ) return len(match_contains) == 1 @@ -338,9 +345,9 @@ def _update_referencedata_completer(self): self.workflow_wizard.ilireferencedatacache.sorted_model, self.ilireferencedata_line_edit, ) - completer.setCaseSensitivity(Qt.CaseInsensitive) + completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive) completer.setModelSorting(QCompleter.ModelSorting.CaseInsensitivelySortedModel) - completer.setFilterMode(Qt.MatchContains) + completer.setFilterMode(Qt.MatchFlag.MatchContains) completer.popup().setItemDelegate(self.ilireferencedata_delegate) self.ilireferencedata_line_edit.setCompleter(completer) self.ilireferencedata_line_edit.setEnabled( @@ -353,10 +360,10 @@ def _add_row(self): def _get_referencedata(self): matches = self.workflow_wizard.ilireferencedatacache.model.match( self.workflow_wizard.ilireferencedatacache.model.index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.ilireferencedata_line_edit.text(), 1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) if matches: model_index = matches[0] @@ -437,9 +444,9 @@ def _show_datasetmanager_dialog(self): self.datasetmanager_dlg = DatasetManagerDialog( self.workflow_wizard.iface, self, True ) - self.datasetmanager_dlg.setAttribute(Qt.WA_DeleteOnClose) + self.datasetmanager_dlg.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.datasetmanager_dlg.setWindowFlags( - self.datasetmanager_dlg.windowFlags() | Qt.Tool + self.datasetmanager_dlg.windowFlags() | Qt.WindowType.Tool ) self.datasetmanager_dlg.show() self.datasetmanager_dlg.finished.connect( diff --git a/QgisModelBaker/gui/workflow_wizard/import_schema_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/import_schema_configuration_page.py index a2e546fd3..f5e9e0812 100644 --- a/QgisModelBaker/gui/workflow_wizard/import_schema_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/import_schema_configuration_page.py @@ -259,7 +259,7 @@ def _complete_metaconfig_completer(self): if not self.ili_metaconfig_line_edit.text(): self._clean_metaconfig() self.ili_metaconfig_line_edit.completer().setCompletionMode( - QCompleter.UnfilteredPopupCompletion + QCompleter.CompletionMode.UnfilteredPopupCompletion ) self.ili_metaconfig_line_edit.completer().complete() else: @@ -270,15 +270,15 @@ def _complete_metaconfig_completer(self): self.ili_metaconfig_line_edit.completer() .completionModel() .index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.ili_metaconfig_line_edit.text(), -1, - Qt.MatchContains, + Qt.MatchFlag.MatchContains, ) ) if len(match_contains) > 1: self.ili_metaconfig_line_edit.completer().setCompletionMode( - QCompleter.PopupCompletion + QCompleter.CompletionMode.PopupCompletion ) self.ili_metaconfig_line_edit.completer().complete() @@ -288,9 +288,9 @@ def _update_metaconfig_completer(self, rows): completer = QCompleter( self.ilimetaconfigcache.sorted_model, self.ili_metaconfig_line_edit ) - completer.setCaseSensitivity(Qt.CaseInsensitive) + completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive) completer.setModelSorting(QCompleter.ModelSorting.CaseInsensitivelySortedModel) - completer.setFilterMode(Qt.MatchContains) + completer.setFilterMode(Qt.MatchFlag.MatchContains) completer.popup().setItemDelegate(self.metaconfig_delegate) self.ili_metaconfig_line_edit.setCompleter(completer) self.ili_metaconfig_line_edit.setEnabled(bool(rows)) @@ -300,10 +300,10 @@ def _on_metaconfig_completer_activated(self, text=None): self._clean_metaconfig() matches = self.ilimetaconfigcache.model.match( self.ilimetaconfigcache.model.index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.ili_metaconfig_line_edit.text(), 1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) if matches: model_index = matches[0] @@ -318,7 +318,9 @@ def _on_metaconfig_completer_activated(self, text=None): self.tr( "

Current Metaconfig File: {} ({})
{}

" ).format( - self.ilimetaconfigcache.model.data(model_index, Qt.DisplayRole), + self.ilimetaconfigcache.model.data( + model_index, Qt.ItemDataRole.DisplayRole + ), metaconfig_id, self.ilimetaconfigcache.model.data( model_index, int(IliDataItemModel.Roles.SHORT_DESCRIPTION) diff --git a/QgisModelBaker/gui/workflow_wizard/import_source_selection_page.py b/QgisModelBaker/gui/workflow_wizard/import_source_selection_page.py index 38fdf3bba..fd351275c 100644 --- a/QgisModelBaker/gui/workflow_wizard/import_source_selection_page.py +++ b/QgisModelBaker/gui/workflow_wizard/import_source_selection_page.py @@ -118,7 +118,7 @@ def _complete_models_completer(self): if self.input_line_edit.hasFocus(): if not self.input_line_edit.text(): self.input_line_edit.completer().setCompletionMode( - QCompleter.UnfilteredPopupCompletion + QCompleter.CompletionMode.UnfilteredPopupCompletion ) self.input_line_edit.completer().complete() else: @@ -127,15 +127,15 @@ def _complete_models_completer(self): .completionModel() .match( self.input_line_edit.completer().completionModel().index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.input_line_edit.text(), -1, - Qt.MatchContains, + Qt.MatchFlag.MatchContains, ) ) if len(match_contains) > 1: self.input_line_edit.completer().setCompletionMode( - QCompleter.PopupCompletion + QCompleter.CompletionMode.PopupCompletion ) self.input_line_edit.completer().complete() self.input_line_edit.completer().popup().scrollToTop() @@ -146,16 +146,16 @@ def _valid_source(self): .completionModel() .match( self.input_line_edit.completer().completionModel().index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.input_line_edit.text(), -1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) ) return ( len(match_contains) == 1 or self.fileValidator.validate(self.input_line_edit.text(), 0)[0] - == QValidator.Acceptable + == QValidator.State.Acceptable ) def _valid_selection(self): @@ -163,9 +163,9 @@ def _valid_selection(self): def update_models_completer(self): completer = QCompleter(self.ilicache.sorted_model, self.input_line_edit) - completer.setCaseSensitivity(Qt.CaseInsensitive) + completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive) completer.setModelSorting(QCompleter.ModelSorting.CaseInsensitivelySortedModel) - completer.setFilterMode(Qt.MatchContains) + completer.setFilterMode(Qt.MatchFlag.MatchContains) completer.popup().setItemDelegate(self.model_delegate) self.input_line_edit.setCompleter(completer) @@ -183,7 +183,7 @@ def _remove_selected_rows(self): self.remove_button.setEnabled(self._valid_selection()) def _clear_cache_button_clicked(self): - with OverrideCursor(Qt.WaitCursor): + with OverrideCursor(Qt.CursorShape.WaitCursor): try: IliCache.clear_cache() diff --git a/QgisModelBaker/gui/workflow_wizard/project_creation_page.py b/QgisModelBaker/gui/workflow_wizard/project_creation_page.py index 4d8040293..ddb5a6087 100644 --- a/QgisModelBaker/gui/workflow_wizard/project_creation_page.py +++ b/QgisModelBaker/gui/workflow_wizard/project_creation_page.py @@ -176,11 +176,11 @@ def _use_existing(self, state): self.ilitoppingcache.sorted_model, self.topping_line_edit, ) - completer.setCaseSensitivity(Qt.CaseInsensitive) + completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive) completer.setModelSorting( QCompleter.ModelSorting.CaseInsensitivelySortedModel ) - completer.setFilterMode(Qt.MatchContains) + completer.setFilterMode(Qt.MatchFlag.MatchContains) completer.popup().setItemDelegate(self.ilitopping_delegate) self.topping_line_edit.setCompleter(completer) @@ -265,7 +265,7 @@ def _complete_completer(self): if self.topping_line_edit.hasFocus() and self.topping_line_edit.completer(): if not self.topping_line_edit.text(): self.topping_line_edit.completer().setCompletionMode( - QCompleter.UnfilteredPopupCompletion + QCompleter.CompletionMode.UnfilteredPopupCompletion ) self.topping_line_edit.completer().complete() else: @@ -276,15 +276,15 @@ def _complete_completer(self): self.topping_line_edit.completer() .completionModel() .index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.topping_line_edit.text(), -1, - Qt.MatchContains, + Qt.MatchFlag.MatchContains, ) ) if len(match_contains) > 1: self.topping_line_edit.completer().setCompletionMode( - QCompleter.PopupCompletion + QCompleter.CompletionMode.PopupCompletion ) self.topping_line_edit.completer().complete() self.topping_line_edit.completer().popup().scrollToTop() @@ -299,10 +299,10 @@ def _on_completer_activated(self, text=None): matches = self.ilitoppingcache.model.match( self.ilitoppingcache.model.index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, self.topping_line_edit.text(), 1, - Qt.MatchExactly, + Qt.MatchFlag.MatchExactly, ) if matches: model_index = matches[0] @@ -674,7 +674,7 @@ def _create_project(self): continue matches = qml_file_model.match( qml_file_model.index(0, 0), - Qt.DisplayRole, + Qt.ItemDataRole.DisplayRole, qml_section[layer_qml], 1, ) diff --git a/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py b/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py index 95414aea8..ed960f929 100644 --- a/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py +++ b/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py @@ -81,8 +81,11 @@ def __init__(self, iface, base_config, parent): QWizard.__init__(self, parent) self.setWindowTitle(self.tr("QGIS Model Baker Wizard")) - self.setWizardStyle(QWizard.ModernStyle) - self.setOptions(QWizard.NoCancelButtonOnLastPage | QWizard.HaveHelpButton) + self.setWizardStyle(QWizard.WizardStyle.ModernStyle) + self.setOptions( + QWizard.WizardOption.NoCancelButtonOnLastPage + | QWizard.WizardOption.HaveHelpButton + ) self.current_id = 0 @@ -116,7 +119,9 @@ def __init__(self, iface, base_config, parent): self.import_data_file_model.print_info.connect(self.log_panel.print_info) self.import_data_file_model.setSourceModel(self.source_model) self.import_data_file_model.setFilterRole(int(SourceModel.Roles.TYPE)) - self.import_data_file_model.setFilterRegExp("|".join(TransferExtensions)) + self.import_data_file_model.setFilterRegularExpression( + "|".join(TransferExtensions) + ) self.ilireferencedatacache = IliDataCache( self.import_schema_configuration.base_configuration, "referenceData", @@ -401,17 +406,18 @@ def id_changed(self, new_id): if self.current_id == PageIds.ImportSourceSelection: # Add extra button Clear cache - self.setOption(QWizard.HaveCustomButton1, True) + self.setOption(QWizard.WizardOption.HaveCustomButton1, True) self.setButton( - QWizard.CustomButton1, self.source_selection_page.clear_cache_button + QWizard.WizardButton.CustomButton1, + self.source_selection_page.clear_cache_button, ) else: # Remove extra button Clear cache if ( - self.button(QWizard.CustomButton1) + self.button(QWizard.WizardButton.CustomButton1) == self.source_selection_page.clear_cache_button ): - self.setOption(QWizard.HaveCustomButton1, False) + self.setOption(QWizard.WizardOption.HaveCustomButton1, False) if self.current_id == PageIds.ImportDatabaseSelection: # use schema config to restore @@ -576,7 +582,7 @@ def get_topping_file_list(self, id_list): for file_id in id_list: matches = topping_file_model.match( - topping_file_model.index(0, 0), Qt.DisplayRole, file_id, 1 + topping_file_model.index(0, 0), Qt.ItemDataRole.DisplayRole, file_id, 1 ) if matches: file_path = matches[0].data(int(topping_file_model.Roles.LOCALFILEPATH)) @@ -723,7 +729,7 @@ def _show_help(self): log_paragraph = f'

< {logline}

' self.help_dlg = HelpDialog(self, title, log_paragraph, text) - self.help_dlg.setAttribute(Qt.WA_DeleteOnClose) + self.help_dlg.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.help_dlg.show() def busy(self, page, busy, text="Busy..."): @@ -746,12 +752,12 @@ def __init__(self, iface, base_config, parent): self.log_panel = LogPanel() self.workflow_wizard = WorkflowWizard(self.iface, self.base_config, self) self.workflow_wizard.setStartId(PageIds.Intro) - self.workflow_wizard.setWindowFlags(Qt.Widget) + self.workflow_wizard.setWindowFlags(Qt.WindowType.Widget) self.workflow_wizard.show() self.workflow_wizard.finished.connect(self.done) layout = QVBoxLayout() - splitter = QSplitter(Qt.Vertical) + splitter = QSplitter(Qt.Orientation.Vertical) splitter.addWidget(self.workflow_wizard) splitter.addWidget(self.log_panel) layout.addWidget(splitter) diff --git a/QgisModelBaker/metadata.txt b/QgisModelBaker/metadata.txt index 1247133af..afdd39b16 100644 --- a/QgisModelBaker/metadata.txt +++ b/QgisModelBaker/metadata.txt @@ -4,7 +4,8 @@ description=Model Baker creates QGIS projects from models or database schemas version=dev icon=images/QgisModelBaker-icon.svg qgisMinimumVersion=3.16 -qgisMaximumVersion=3.99 +qgisMaximumVersion=4.99 +supportsQt6=True author=OPENGIS.ch GmbH in collaboration with SwissTierras Colombia email=info@opengis.ch about=Model Baker (previously QgsProjectGenerator) creates QGIS projects from INTERLIS models, PostGIS database schemas or GeoPackages. It preconfigures layers, widgets, relations and much more based on meta information available from models. diff --git a/QgisModelBaker/qgismodelbaker.py b/QgisModelBaker/qgismodelbaker.py index 862a2254a..e839179ee 100644 --- a/QgisModelBaker/qgismodelbaker.py +++ b/QgisModelBaker/qgismodelbaker.py @@ -299,9 +299,9 @@ def show_workflow_wizard_dialog(self): self.workflow_wizard_dlg = WorkflowWizardDialog( self.iface, self.ili2db_configuration, self.iface.mainWindow() ) - self.workflow_wizard_dlg.setAttribute(Qt.WA_DeleteOnClose) + self.workflow_wizard_dlg.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.workflow_wizard_dlg.setWindowFlags( - self.workflow_wizard_dlg.windowFlags() | Qt.Tool + self.workflow_wizard_dlg.windowFlags() | Qt.WindowType.Tool ) self.workflow_wizard_dlg.show() self.workflow_wizard_dlg.finished.connect( @@ -320,9 +320,9 @@ def show_topping_wizard_dialog(self): self.topping_wizard_dlg = ToppingWizardDialog( self.iface, self.ili2db_configuration, self.iface.mainWindow() ) - self.topping_wizard_dlg.setAttribute(Qt.WA_DeleteOnClose) + self.topping_wizard_dlg.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.topping_wizard_dlg.setWindowFlags( - self.topping_wizard_dlg.windowFlags() | Qt.Tool + self.topping_wizard_dlg.windowFlags() | Qt.WindowType.Tool ) self.topping_wizard_dlg.show() self.topping_wizard_dlg.finished.connect( @@ -341,9 +341,9 @@ def show_datasetmanager_dialog(self): self.datasetmanager_dlg = DatasetManagerDialog( self.iface, self.iface.mainWindow() ) - self.datasetmanager_dlg.setAttribute(Qt.WA_DeleteOnClose) + self.datasetmanager_dlg.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.datasetmanager_dlg.setWindowFlags( - self.datasetmanager_dlg.windowFlags() | Qt.Tool + self.datasetmanager_dlg.windowFlags() | Qt.WindowType.Tool ) self.datasetmanager_dlg.show() self.datasetmanager_dlg.finished.connect( @@ -364,9 +364,9 @@ def show_tidmanager_dialog(self): self.tidmanager_dlg = TIDManagerDialog( self.iface, self.iface.mainWindow(), self.ili2db_configuration ) - self.tidmanager_dlg.setAttribute(Qt.WA_DeleteOnClose) + self.tidmanager_dlg.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose) self.tidmanager_dlg.setWindowFlags( - self.tidmanager_dlg.windowFlags() | Qt.Tool + self.tidmanager_dlg.windowFlags() | Qt.WindowType.Tool ) self.tidmanager_dlg.show() self.tidmanager_dlg.finished.connect(self.tidmanager_dialog_finished) @@ -381,7 +381,7 @@ def show_validate_dock(self): def show_options_dialog(self): dlg = OptionsDialog(self.ili2db_configuration) - if dlg.exec_(): + if dlg.exec(): settings = QSettings() settings.beginGroup("QgisModelBaker/ili2db") self.ili2db_configuration.save(settings) @@ -407,7 +407,7 @@ def show_about_dialog(self): self.msg.fontMetrics().lineSpacing() * 5, ) self.msg.setIconPixmap(pixmap) - self.msg.setTextFormat(Qt.RichText) + self.msg.setTextFormat(Qt.TextFormat.RichText) self.msg.setWindowTitle(self.tr("About Model Baker")) self.msg.setText( """

{title}

@@ -428,15 +428,17 @@ def show_about_dialog(self): ), ) ) - self.msg.setStandardButtons(QMessageBox.Close) - self.msg.exec_() + self.msg.setStandardButtons(QMessageBox.StandardButton.Close) + self.msg.exec() def init_validate_dock(self): settings = QSettings() self.__validate_dock = ValidateDock(self.ili2db_configuration, self.iface) self.iface.addDockWidget( settings.value( - "QgisModelBaker/validate_dock/area", Qt.RightDockWidgetArea, type=int + "QgisModelBaker/validate_dock/area", + Qt.DockWidgetArea.RightDockWidgetArea, + type=Qt.DockWidgetArea, ), self.__validate_dock, ) @@ -519,7 +521,9 @@ def _set_dropped_file_configuration(self): settings.setValue( "QgisModelBaker/ili2gpkg/dbfile", os.path.join( - QStandardPaths.writableLocation(QStandardPaths.TempLocation), + QStandardPaths.writableLocation( + QStandardPaths.StandardLocation.TempLocation + ), output_file_name, ), ) @@ -564,14 +568,14 @@ def _is_handling_requested(self, dropped_files): ] if drop_mode == DropMode.ASK: drop_message_dialog = DropMessageDialog(dropped_files) - return drop_message_dialog.exec_() + return drop_message_dialog.exec() return drop_mode == DropMode.YES def eventFilter(self, obj, event): """ When files are dropped, then ask to use it in the model baker. """ - if event.type() == QEvent.Drop and hasattr(event, "mimeData"): + if event.type() == QEvent.Type.Drop and hasattr(event, "mimeData"): ( dropped_files, dropped_xml_files, diff --git a/QgisModelBaker/utils/gui_utils.py b/QgisModelBaker/utils/gui_utils.py index c7b51e538..05317b0da 100644 --- a/QgisModelBaker/utils/gui_utils.py +++ b/QgisModelBaker/utils/gui_utils.py @@ -7,7 +7,6 @@ import xml.etree.ElementTree as CET from enum import Enum, IntEnum -from PyQt5.QtWidgets import QApplication from qgis.core import QgsApplication from qgis.PyQt.QtCore import ( QEvent, @@ -28,6 +27,7 @@ QValidator, ) from qgis.PyQt.QtWidgets import ( + QApplication, QCheckBox, QLineEdit, QListView, @@ -201,7 +201,11 @@ class DropMode(Enum): def get_text_color(level: LogLevel = LogLevel.INFO) -> str: if level == LogLevel.INFO: - return QgsApplication.palette().color(QPalette.WindowText).name(QColor.HexRgb) + return ( + QgsApplication.palette() + .color(QPalette.ColorRole.WindowText) + .name(QColor.NameFormat.HexRgb) + ) elif level == LogLevel.SUCCESS: return "#0f6e00" # From night mapping theme elif level == LogLevel.WARNING: @@ -305,10 +309,10 @@ def __init__(self, parent=None): super().__init__(parent) def nextCheckState(self) -> None: - if self.checkState() == Qt.Checked: - self.setCheckState(Qt.Unchecked) + if self.checkState() == Qt.CheckState.Checked: + self.setCheckState(Qt.CheckState.Unchecked) else: - self.setCheckState(Qt.Checked) + self.setCheckState(Qt.CheckState.Checked) class FileDropListView(QListView): @@ -325,7 +329,7 @@ class FileDropListView(QListView): def __init__(self, parent=None): super().__init__(parent) self.setAcceptDrops(True) - self.setDragDropMode(QListView.InternalMove) + self.setDragDropMode(QListView.DragDropMode.InternalMove) def dragEnterEvent(self, event): for url in event.mimeData().urls(): @@ -377,13 +381,13 @@ class SourceModel(QStandardItemModel): print_info = pyqtSignal([str], [str, str]) class Roles(Enum): - NAME = Qt.UserRole + 1 - TYPE = Qt.UserRole + 2 - PATH = Qt.UserRole + 3 - DATASET_NAME = Qt.UserRole + 5 - IS_CATALOGUE = Qt.UserRole + 6 - ORIGIN_INFO = Qt.UserRole + 7 - DELETE_DATA = Qt.UserRole + 8 + NAME = Qt.ItemDataRole.UserRole + 1 + TYPE = Qt.ItemDataRole.UserRole + 2 + PATH = Qt.ItemDataRole.UserRole + 3 + DATASET_NAME = Qt.ItemDataRole.UserRole + 5 + IS_CATALOGUE = Qt.ItemDataRole.UserRole + 6 + ORIGIN_INFO = Qt.ItemDataRole.UserRole + 7 + DELETE_DATA = Qt.ItemDataRole.UserRole + 8 def __int__(self): return self.value @@ -399,20 +403,23 @@ def __init__(self): self.setColumnCount(3) def flags(self, index): - return Qt.ItemIsSelectable | Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled def headerData(self, section, orientation, role): - if orientation == Qt.Vertical and role == Qt.DisplayRole: + if ( + orientation == Qt.Orientation.Vertical + and role == Qt.ItemDataRole.DisplayRole + ): return "↑ ↓" return QStandardItemModel.headerData(self, section, orientation, role) def data(self, index, role): item = self.item(index.row(), index.column()) if item: - if role == Qt.DisplayRole: + if role == Qt.ItemDataRole.DisplayRole: if index.column() == SourceModel.Columns.SOURCE: return "{}{}".format( - item.data(int(Qt.DisplayRole)), + item.data(int(Qt.ItemDataRole.DisplayRole)), f" ({item.data(int(SourceModel.Roles.PATH))})" if item.data(int(SourceModel.Roles.TYPE)) != "model" else "", @@ -425,7 +432,7 @@ def data(self, index, role): else: return item.data(int(SourceModel.Roles.DATASET_NAME)) - if role == Qt.DecorationRole: + if role == Qt.ItemDataRole.DecorationRole: if index.column() == SourceModel.Columns.SOURCE: type = "data" if item.data(int(SourceModel.Roles.TYPE)) and item.data( @@ -438,7 +445,7 @@ def data(self, index, role): f"../images/file_types/{type}.png", ) ) - if role == Qt.ToolTipRole: + if role == Qt.ItemDataRole.ToolTipRole: if index.column() == SourceModel.Columns.IS_CATALOGUE: return self.tr( "If the data is a catalog, it is imported into the corresponding dataset (called catalogueset)." @@ -455,7 +462,7 @@ def add_source(self, name, type, path, origin_info=None): return False item = QStandardItem() - item.setData(name, int(Qt.DisplayRole)) + item.setData(name, int(Qt.ItemDataRole.DisplayRole)) item.setData(name, int(SourceModel.Roles.NAME)) item.setData(type, int(SourceModel.Roles.TYPE)) item.setData(path, int(SourceModel.Roles.PATH)) @@ -497,7 +504,11 @@ def remove_sources(self, indices): def _source_in_model(self, name, type, path): match_existing = self.match( - self.index(0, 0), int(SourceModel.Roles.NAME), name, -1, Qt.MatchExactly + self.index(0, 0), + int(SourceModel.Roles.NAME), + name, + -1, + Qt.MatchFlag.MatchExactly, ) if ( match_existing @@ -554,13 +565,13 @@ def refresh_model(self, source_model, db_connector=None, silent=False): int(SourceModel.Roles.PATH) ), ), - Qt.Checked, + Qt.CheckState.Checked, ) if enabled and modelname not in self.checked_models() and self._LV95_equivalent_name(modelname) not in self.checked_models() - else Qt.Unchecked, + else Qt.CheckState.Unchecked, enabled, ) if not silent: @@ -601,13 +612,13 @@ def refresh_model(self, source_model, db_connector=None, silent=False): int(SourceModel.Roles.PATH) ), ), - Qt.Checked + Qt.CheckState.Checked if model is models[-1] and enabled and model["name"] not in self.checked_models() and self._LV95_equivalent_name(model["name"]) not in self.checked_models() - else Qt.Unchecked, + else Qt.CheckState.Unchecked, ), enabled, ) @@ -623,7 +634,7 @@ def refresh_model(self, source_model, db_connector=None, silent=False): ) # models from the transfer files - filtered_source_model.setFilterRegExp("|".join(TransferExtensions)) + filtered_source_model.setFilterRegularExpression("|".join(TransferExtensions)) for r in range(0, filtered_source_model.rowCount()): filtered_source_model_index = filtered_source_model.index( r, SourceModel.Columns.SOURCE @@ -649,12 +660,12 @@ def refresh_model(self, source_model, db_connector=None, silent=False): int(SourceModel.Roles.PATH) ), ), - Qt.Checked + Qt.CheckState.Checked if enabled and model["name"] not in self.checked_models() and self._LV95_equivalent_name(model["name"]) not in self.checked_models() - else Qt.Unchecked, + else Qt.CheckState.Unchecked, ), enabled, ) @@ -752,9 +763,11 @@ def add_source(self, name, type, path, origin_info, checked, enabled): item = QStandardItem() self._checked_models[(name, path)] = checked item.setFlags( - Qt.ItemIsSelectable | Qt.ItemIsEnabled if enabled else Qt.NoItemFlags + Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled + if enabled + else Qt.ItemFlag.NoItemFlags ) - item.setData(name, int(Qt.DisplayRole)) + item.setData(name, int(Qt.ItemDataRole.DisplayRole)) item.setData(name, int(SourceModel.Roles.NAME)) item.setData(type, int(SourceModel.Roles.TYPE)) item.setData(path, int(SourceModel.Roles.PATH)) @@ -762,16 +775,16 @@ def add_source(self, name, type, path, origin_info, checked, enabled): self.appendRow(item) def data(self, index, role): - if role == Qt.DisplayRole: + if role == Qt.ItemDataRole.DisplayRole: return "{}{}".format( "" - if index.flags() & Qt.ItemIsEnabled + if index.flags() & Qt.ItemFlag.ItemIsEnabled else self.tr("Already in the database: "), - SourceModel.data(self, index, (Qt.DisplayRole)), + SourceModel.data(self, index, (Qt.ItemDataRole.DisplayRole)), ) - if role == Qt.ToolTipRole: + if role == Qt.ItemDataRole.ToolTipRole: return self.data(index, int(SourceModel.Roles.ORIGIN_INFO)) - if role == Qt.CheckStateRole: + if role == Qt.ItemDataRole.CheckStateRole: return self._checked_models[ ( self.data(index, int(SourceModel.Roles.NAME)), @@ -782,7 +795,7 @@ def data(self, index, role): # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): - if role == Qt.CheckStateRole: + if role == Qt.ItemDataRole.CheckStateRole: self.beginResetModel() self._checked_models[ ( @@ -796,20 +809,27 @@ def flags(self, index): item = self.item(index.row(), index.column()) if item: return item.flags() - return Qt.NoItemFlags + return Qt.ItemFlag.NoItemFlags def check(self, index): - if index.flags() & Qt.ItemIsEnabled: - if self.data(index, Qt.CheckStateRole) == Qt.Checked: - self.setData(index, Qt.CheckStateRole, Qt.Unchecked) + if index.flags() & Qt.ItemFlag.ItemIsEnabled: + if ( + self.data(index, Qt.ItemDataRole.CheckStateRole) + == Qt.CheckState.Checked + ): + self.setData( + index, Qt.ItemDataRole.CheckStateRole, Qt.CheckState.Unchecked + ) else: - self.setData(index, Qt.CheckStateRole, Qt.Checked) + self.setData( + index, Qt.ItemDataRole.CheckStateRole, Qt.CheckState.Checked + ) def import_sessions(self): sessions = {} for r in range(0, self.rowCount()): item = self.index(r, SourceModel.Columns.SOURCE) - if item.data(int(Qt.Checked)): + if item.data(int(Qt.CheckState.Checked)): type = item.data(int(SourceModel.Roles.TYPE)) model = item.data(int(SourceModel.Roles.NAME)) source = ( @@ -822,7 +842,7 @@ def import_sessions(self): self._checked_models[ (model, item.data(int(SourceModel.Roles.PATH))) ] - == Qt.Checked + == Qt.CheckState.Checked ): models = [] if source in sessions: @@ -839,7 +859,7 @@ def checked_models(self): return [ key[0] for key in self._checked_models.keys() - if self._checked_models[key] == Qt.Checked + if self._checked_models[key] == Qt.CheckState.Checked ] @@ -855,16 +875,16 @@ def __init__(self): def flags(self, index): if index.column() == SourceModel.Columns.IS_CATALOGUE: - return Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEnabled if index.column() == SourceModel.Columns.DELETE_DATA: - return Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsEnabled if index.column() == SourceModel.Columns.DATASET: if self.index(index.row(), SourceModel.Columns.IS_CATALOGUE).data( int(SourceModel.Roles.IS_CATALOGUE) ): - return Qt.ItemIsEnabled - return Qt.ItemIsEditable | Qt.ItemIsEnabled - return Qt.ItemIsEnabled | Qt.ItemIsSelectable + return Qt.ItemFlag.ItemIsEnabled + return Qt.ItemFlag.ItemIsEditable | Qt.ItemFlag.ItemIsEnabled + return Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable def import_sessions(self, order_list) -> dict(): sessions = {} @@ -906,7 +926,7 @@ def __init__(self, parent=None): # to act when space is pressed def keyPressEvent(self, e): - if e.key() == Qt.Key_Space: + if e.key() == Qt.Key.Key_Space: _selected_indexes = self.selectedIndexes() self.space_pressed.emit(_selected_indexes[0]) super().keyPressEvent(e) @@ -922,29 +942,31 @@ def __init__(self): self._checked_entries = {} def flags(self, index): - return Qt.ItemIsSelectable | Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled def data(self, index, role): - if role == Qt.CheckStateRole: - if self.data(index, Qt.DisplayRole) in self._checked_entries: - return self._checked_entries[self.data(index, Qt.DisplayRole)] + if role == Qt.ItemDataRole.CheckStateRole: + if self.data(index, Qt.ItemDataRole.DisplayRole) in self._checked_entries: + return self._checked_entries[ + self.data(index, Qt.ItemDataRole.DisplayRole) + ] else: - return Qt.Unchecked + return Qt.CheckState.Unchecked else: return QStringListModel.data(self, index, role) # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): - if role == Qt.CheckStateRole: - self._checked_entries[self.data(index, Qt.DisplayRole)] = data + if role == Qt.ItemDataRole.CheckStateRole: + self._checked_entries[self.data(index, Qt.ItemDataRole.DisplayRole)] = data else: QStringListModel.setData(self, index, data, role) def check(self, index): - if self.data(index, Qt.CheckStateRole) == Qt.Checked: - self.setData(index, Qt.CheckStateRole, Qt.Unchecked) + if self.data(index, Qt.ItemDataRole.CheckStateRole) == Qt.CheckState.Checked: + self.setData(index, Qt.ItemDataRole.CheckStateRole, Qt.CheckState.Unchecked) else: - self.setData(index, Qt.CheckStateRole, Qt.Checked) + self.setData(index, Qt.ItemDataRole.CheckStateRole, Qt.CheckState.Checked) self._emit_data_changed() def check_all(self, state): @@ -962,7 +984,8 @@ def checked_entries(self): return [ name for name in self.stringList() - if self._checked_entries.get(name, Qt.Unchecked) == Qt.Checked + if self._checked_entries.get(name, Qt.CheckState.Unchecked) + == Qt.CheckState.Checked ] def check_entries(self, entries: list = []): @@ -971,9 +994,9 @@ def check_entries(self, entries: list = []): """ for name in self.stringList(): if name in entries: - self._checked_entries[name] == Qt.Checked + self._checked_entries[name] == Qt.CheckState.Checked else: - self._checked_entries[name] == Qt.Unchecked + self._checked_entries[name] == Qt.CheckState.Unchecked def refresh_stringlist(self, values): """ @@ -988,7 +1011,7 @@ def refresh_stringlist(self, values): if value in self._checked_entries: new_checked_entries[value] = self._checked_entries[value] else: - new_checked_entries[value] = Qt.Checked + new_checked_entries[value] = Qt.CheckState.Checked self._checked_entries = new_checked_entries self._emit_data_changed() @@ -1002,7 +1025,7 @@ class SchemaModelsModel(CheckEntriesModel): """ class Roles(Enum): - PARENT_MODELS = Qt.UserRole + 1 + PARENT_MODELS = Qt.ItemDataRole.UserRole + 1 def __int__(self): return self.value @@ -1012,8 +1035,8 @@ def __init__(self): self._parent_models = {} def data(self, index, role): - if role == Qt.ToolTipRole: - model_name = self.data(index, Qt.DisplayRole) + if role == Qt.ItemDataRole.ToolTipRole: + model_name = self.data(index, Qt.ItemDataRole.DisplayRole) if self._parent_models[model_name]: return self.tr( """ @@ -1023,14 +1046,14 @@ def data(self, index, role): """ ).format(model_name, ", ".join(self._parent_models[model_name])) if role == int(SchemaModelsModel.Roles.PARENT_MODELS): - return self._parent_models[self.data(index, Qt.DisplayRole)] + return self._parent_models[self.data(index, Qt.ItemDataRole.DisplayRole)] else: return CheckEntriesModel.data(self, index, role) # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): if role == int(SchemaModelsModel.Roles.PARENT_MODELS): - self._parent_models[self.data(index, Qt.DisplayRole)] = data + self._parent_models[self.data(index, Qt.ItemDataRole.DisplayRole)] = data else: CheckEntriesModel.setData(self, index, role, data) @@ -1083,7 +1106,7 @@ def refresh_model(self, db_connector=None): self.setStringList(datasetnames) self._checked_entries = { - datasetname: Qt.Checked for datasetname in datasetnames + datasetname: Qt.CheckState.Checked for datasetname in datasetnames } return self.rowCount() @@ -1114,7 +1137,9 @@ def refresh_model(self, db_connector=None): self._basket_ids[basketname] = record["basket_t_ili_tid"] self.setStringList(basketnames) - self._checked_entries = {basketname: Qt.Checked for basketname in basketnames} + self._checked_entries = { + basketname: Qt.CheckState.Checked for basketname in basketnames + } return self.rowCount() @@ -1122,7 +1147,8 @@ def checked_entries(self): return [ self._basket_ids[name] for name in self.stringList() - if self._checked_entries[name] == Qt.Checked and name in self._basket_ids + if self._checked_entries[name] == Qt.CheckState.Checked + and name in self._basket_ids ] @@ -1132,8 +1158,8 @@ class DatasetModel(QStandardItemModel): """ class Roles(Enum): - TID = Qt.UserRole + 1 - DATASETNAME = Qt.UserRole + 2 + TID = Qt.ItemDataRole.UserRole + 1 + DATASETNAME = Qt.ItemDataRole.UserRole + 2 def __int__(self): return self.value @@ -1142,7 +1168,7 @@ def __init__(self): super().__init__() def flags(self, index): - return Qt.ItemIsSelectable | Qt.ItemIsEnabled + return Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled def refresh_model(self, db_connector=None): self.beginResetModel() @@ -1153,7 +1179,7 @@ def refresh_model(self, db_connector=None): if record["datasetname"] == CATALOGUE_DATASETNAME: continue item = QStandardItem() - item.setData(record["datasetname"], int(Qt.DisplayRole)) + item.setData(record["datasetname"], int(Qt.ItemDataRole.DisplayRole)) item.setData(record["datasetname"], int(DatasetModel.Roles.DATASETNAME)) item.setData(record["t_id"], int(DatasetModel.Roles.TID)) self.appendRow(item) @@ -1167,12 +1193,12 @@ class BasketSourceModel(QStandardItemModel): """ class Roles(Enum): - DATASETNAME = Qt.UserRole + 1 - MODEL_TOPIC = Qt.UserRole + 2 - BASKET_TID = Qt.UserRole + 3 + DATASETNAME = Qt.ItemDataRole.UserRole + 1 + MODEL_TOPIC = Qt.ItemDataRole.UserRole + 2 + BASKET_TID = Qt.ItemDataRole.UserRole + 3 # The SCHEMA_TOPIC_IDENTIFICATOR is a combination of db parameters and the topic # This because a dataset is usually valid per topic and db schema - SCHEMA_TOPIC_IDENTIFICATOR = Qt.UserRole + 4 + SCHEMA_TOPIC_IDENTIFICATOR = Qt.ItemDataRole.UserRole + 4 def __int__(self): return self.value @@ -1187,7 +1213,7 @@ def refresh(self): for schema_identificator in self.schema_baskets.keys(): for basket in self.schema_baskets[schema_identificator]: item = QStandardItem() - item.setData(basket["datasetname"], int(Qt.DisplayRole)) + item.setData(basket["datasetname"], int(Qt.ItemDataRole.DisplayRole)) item.setData( basket["datasetname"], int(BasketSourceModel.Roles.DATASETNAME) ) @@ -1218,7 +1244,7 @@ def reload_schema_baskets(self, db_connector, schema_identificator): def data(self, index, role): item = self.item(index.row(), index.column()) - if role == Qt.DisplayRole: + if role == Qt.ItemDataRole.DisplayRole: return f"{item.data(int(role))} ({item.data(int(BasketSourceModel.Roles.MODEL_TOPIC))})" return item.data(int(role)) @@ -1243,7 +1269,7 @@ def __init__(self, parent, role, disable_role=None): self.disable_role = disable_role def editorEvent(self, event, model, option, index): - if event.type() == QEvent.MouseButtonPress: + if event.type() == QEvent.Type.MouseButtonPress: value = index.data(int(self.role)) or False model.setData(index, not value, int(self.role)) return True @@ -1258,8 +1284,12 @@ def paint(self, painter, option, index): opt.rect = option.rect center_x = opt.rect.x() + opt.rect.width() / 2 center_y = opt.rect.y() + opt.rect.height() / 2 - checkbox_width = QApplication.style().pixelMetric(QStyle.PM_IndicatorWidth) - checkbox_height = QApplication.style().pixelMetric(QStyle.PM_IndicatorHeight) + checkbox_width = QApplication.style().pixelMetric( + QStyle.PixelMetric.PM_IndicatorWidth + ) + checkbox_height = QApplication.style().pixelMetric( + QStyle.PixelMetric.PM_IndicatorHeight + ) checkbox_rect = QRect( int(center_x - checkbox_width / 2), int(center_y - checkbox_height / 2), @@ -1269,8 +1299,10 @@ def paint(self, painter, option, index): opt.rect = checkbox_rect value = index.data(int(self.role)) or False - opt.state |= QStyle.State_On if value else QStyle.State_Off - QApplication.style().drawControl(QStyle.CE_CheckBox, opt, painter) + opt.state |= QStyle.StateFlag.State_On if value else QStyle.StateFlag.State_Off + QApplication.style().drawControl( + QStyle.ControlElement.CE_CheckBox, opt, painter + ) class Validators(QObject): @@ -1281,14 +1313,20 @@ def validate_line_edits(self, *args, **kwargs): senderObj = self.sender() validator = senderObj.validator() if validator is None: - color = QgsApplication.palette().color(QPalette.Base).name(QColor.HexRgb) + color = ( + QgsApplication.palette() + .color(QPalette.ColorRole.Base) + .name(QColor.NameFormat.HexRgb) + ) else: state = validator.validate(senderObj.text().strip(), 0)[0] - if state == QValidator.Acceptable: + if state == QValidator.State.Acceptable: color = ( - QgsApplication.palette().color(QPalette.Base).name(QColor.HexRgb) + QgsApplication.palette() + .color(QPalette.ColorRole.Base) + .name(QColor.NameFormat.HexRgb) ) - elif state == QValidator.Intermediate: + elif state == QValidator.State.Intermediate: color = "#ffd356" # Light orange else: color = "#f6989d" # Red @@ -1329,7 +1367,7 @@ def validate(self, text, pos): self.error = "" if self.allow_empty and not text.strip(): - return QValidator.Acceptable, text, pos + return QValidator.State.Acceptable, text, pos pattern_matches = False if type(self.pattern) is str: @@ -1358,9 +1396,9 @@ def validate(self, text, pos): elif self.is_executable and not os.access(text, os.X_OK): self.error = self.tr("The chosen file is not executable.") if self.error: - return QValidator.Intermediate, text, pos + return QValidator.State.Intermediate, text, pos else: - return QValidator.Acceptable, text, pos + return QValidator.State.Acceptable, text, pos class NonEmptyStringValidator(QValidator): @@ -1369,6 +1407,6 @@ def __init__(self, parent=None): def validate(self, text, pos): if not text.strip(): - return QValidator.Intermediate, text, pos + return QValidator.State.Intermediate, text, pos - return QValidator.Acceptable, text, pos + return QValidator.State.Acceptable, text, pos