""" """ import importlib import logging from qgis.core import QgsProject # @UnresolvedImport from PyQt5 import QtWidgets from PyQt5 import uic from PyQt5.Qt import QIcon, QPixmap, Qt, QTableWidgetItem, QHeaderView from PyQt5.QtWidgets import QApplication from core.constants import MAIN, RSCDIR logger = logging.getLogger("mncheck") Ui_Main, _ = uic.loadUiType(MAIN / 'ui'/ 'dlg_main.ui') Ui_ChkFrame, _ = uic.loadUiType(MAIN / 'ui'/ 'checkframe.ui') SCHEMAS = ["mn1_rec", "mn2_rec", "mn3_pro", "mn3_exe", "mn3_rec"] class DlgMain(QtWidgets.QDialog): def __init__(self, iface, parent=None): super(DlgMain, self).__init__(parent) self.createWidgets() self.iface = iface self.schema_lib = None def createWidgets(self): """ set up the interface """ self.ui = Ui_Main() self.ui.setupUi(self) self.ui.btn_run.setIcon(QIcon(RSCDIR / "play.png")) self.ui.btn_run.clicked.connect(self.run) self.ui.btn_help.setIcon(QIcon(RSCDIR / "question.png")) self.ui.btn_help.clicked.connect(self.show_help) self.ui.btn_settings.setIcon(QIcon(RSCDIR / "settings.png")) self.ui.btn_settings.clicked.connect(self.show_settings) self.ui.tbl_layers.horizontalHeaderItem(1).setTextAlignment(Qt.AlignLeft) self.ui.cbb_schemas.addItem("Schéma MN v1 REC", 0) self.ui.cbb_schemas.addItem("Schéma MN v2 REC", 1) # self.ui.cbb_schemas.addItem("Schéma MN v3 PRO", 2) # self.ui.cbb_schemas.addItem("Schéma MN v3 EXE", 3) # self.ui.cbb_schemas.addItem("Schéma MN v3 REC", 4) self.ui.cbb_schemas.currentIndexChanged.connect(self.update_layers_list) self.update_layers_list() def clear_layers_table(self): while self.ui.tbl_layers.rowCount(): self.ui.tbl_layers.removeRow(0) def selected_validator(self): schema_lib_name = SCHEMAS[int(self.ui.cbb_schemas.itemData(self.ui.cbb_schemas.currentIndex()))] logger.info("Selected schema: %s", schema_lib_name) schema_lib = importlib.import_module("schemas." + schema_lib_name) return schema_lib.Validator def update_layers_list(self): validator = self.selected_validator() expected = [model.layername for model in validator.models] logger.info("Expected layers: %s", str(expected)) found = [layer.name().lower() for layer in QgsProject.instance().mapLayers().values()] logger.info("Found layers: %s", str(found)) self.ui.btn_run.setEnabled(True) self.clear_layers_table() for layername in expected: cur_row = self.ui.tbl_layers.rowCount() self.ui.tbl_layers.insertRow(cur_row) lbl_icon, lbl_layer, lbl_message = QTableWidgetItem(), QTableWidgetItem(), QTableWidgetItem() lbl_layer.setText(layername) if layername.lower() in found: lbl_icon.setIcon(QIcon(QPixmap(RSCDIR / "ok_16.png"))) else: lbl_icon.setIcon(QIcon(QPixmap(RSCDIR / "error_16.png"))) lbl_message.setText("La couche est introuvable") self.ui.btn_run.setEnabled(False) self.ui.tbl_layers.setItem(cur_row, 0, lbl_icon) self.ui.tbl_layers.setItem(cur_row, 1, lbl_layer) self.ui.tbl_layers.setItem(cur_row, 2, lbl_message) self.ui.tbl_layers.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed) self.ui.tbl_layers.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeToContents) self.ui.tbl_layers.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch) def run(self): QApplication.setOverrideCursor(Qt.WaitCursor) self.clear_layers_table() validator = self.selected_validator() if not validator: logger.info("Aucun schéma sélectionné - Opération annulée") return report = validator.submit(self.iface) logger.debug(report) for chk in report["checkpoints"]: cur_row = self.ui.tbl_layers.rowCount() self.ui.tbl_layers.insertRow(cur_row) lbl_icon, lbl_checkpoint = QTableWidgetItem(), QTableWidgetItem() lbl_checkpoint.setText(chk["name"]) lbl_icon.setIcon(QIcon(QPixmap(RSCDIR / ("ok_16.png" if chk["valid"] else "error_16.png")))) self.ui.tbl_layers.setItem(cur_row, 0, lbl_icon) self.ui.tbl_layers.setItem(cur_row, 1, lbl_checkpoint) if not chk["valid"]: self.ui.tbl_layers.setItem(cur_row, 2, QTableWidgetItem("Des erreurs ont été trouvées")) for type_err in report["errors"]: for err in report["errors"][type_err]["list"]: cur_row = self.ui.tbl_layers.rowCount() self.ui.tbl_layers.insertRow(cur_row) lbl_icon, lbl_field, lbl_err = QTableWidgetItem(), QTableWidgetItem(), QTableWidgetItem() lbl_field.setText(f"{err['layername']}.{err['field']}") lbl_err.setText(f"{type_err}: {err['message']}") # lbl_icon.setIcon(QIcon(QPixmap(RSCDIR / "error_16.png"))) # self.ui.tbl_layers.setItem(cur_row, 0, lbl_icon) self.ui.tbl_layers.setItem(cur_row, 1, lbl_field) self.ui.tbl_layers.setItem(cur_row, 2, lbl_err) QApplication.restoreOverrideCursor() def show_help(self): pass def show_settings(self): pass