dlg_main.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. """
  2. """
  3. import importlib
  4. import logging
  5. from qgis.core import QgsProject # @UnresolvedImport
  6. from PyQt5 import QtWidgets
  7. from PyQt5 import uic
  8. from PyQt5.Qt import Qt
  9. from PyQt5.QtGui import QIcon, QPixmap
  10. from PyQt5.QtWidgets import QApplication, QTreeWidgetItem
  11. from core.constants import MAIN, RSCDIR
  12. logger = logging.getLogger("mncheck")
  13. Ui_Main, _ = uic.loadUiType(MAIN / 'ui'/ 'dlg_main.ui')
  14. SCHEMAS = ["mn1_rec", "mn2_rec", "mn3_pro", "mn3_exe", "mn3_rec"]
  15. class DlgMain(QtWidgets.QDialog):
  16. def __init__(self, iface, parent=None):
  17. super(DlgMain, self).__init__(parent)
  18. self.createWidgets()
  19. self.iface = iface
  20. self.schema_lib = None
  21. def createWidgets(self):
  22. """ set up the interface """
  23. self.ui = Ui_Main()
  24. self.ui.setupUi(self)
  25. self.ui.btn_run.setIcon(QIcon(RSCDIR / "play.png"))
  26. self.ui.btn_run.clicked.connect(self.run)
  27. self.ui.btn_help.setIcon(QIcon(RSCDIR / "question.png"))
  28. self.ui.btn_help.clicked.connect(self.show_help)
  29. self.ui.btn_settings.setIcon(QIcon(RSCDIR / "settings.png"))
  30. self.ui.btn_settings.clicked.connect(self.show_settings)
  31. self.ui.cbb_schemas.addItem("Schéma MN v1 REC", 0)
  32. self.ui.cbb_schemas.addItem("Schéma MN v2 REC", 1)
  33. # self.ui.cbb_schemas.addItem("Schéma MN v3 PRO", 2)
  34. # self.ui.cbb_schemas.addItem("Schéma MN v3 EXE", 3)
  35. # self.ui.cbb_schemas.addItem("Schéma MN v3 REC", 4)
  36. self.ui.cbb_schemas.currentIndexChanged.connect(self.update_layers_list)
  37. self.ui.tree_report.setColumnWidth(0, 35)
  38. self.update_layers_list()
  39. def selected_validator(self):
  40. schema_lib_name = SCHEMAS[int(self.ui.cbb_schemas.itemData(self.ui.cbb_schemas.currentIndex()))]
  41. logger.info("Selected schema: %s", schema_lib_name)
  42. schema_lib = importlib.import_module("schemas." + schema_lib_name)
  43. return schema_lib.Validator
  44. def update_layers_list(self):
  45. validator = self.selected_validator()
  46. expected = [model.layername for model in validator.models]
  47. logger.info("Expected layers: %s", str(expected))
  48. found = [layer.name().lower() for layer in QgsProject.instance().mapLayers().values()]
  49. logger.info("Found layers: %s", str(found))
  50. self.ui.btn_run.setEnabled(True)
  51. self.ui.tree_report.clear()
  52. for layername in expected:
  53. item = QTreeWidgetItem()
  54. if layername.lower() in found:
  55. item.setIcon(0, QIcon(QPixmap(RSCDIR / "ok_16.png")))
  56. item.setText(1, layername)
  57. else:
  58. item.setIcon(0, QIcon(QPixmap(RSCDIR / "error_16.png")))
  59. item.setText(1, f"{layername}: La couche est introuvable")
  60. self.ui.btn_run.setEnabled(False)
  61. self.ui.tree_report.addTopLevelItem(item)
  62. def run(self):
  63. QApplication.setOverrideCursor(Qt.WaitCursor)
  64. self.ui.tree_report.clear()
  65. validator = self.selected_validator()
  66. if not validator:
  67. logger.info("Aucun schéma sélectionné - Opération annulée")
  68. return
  69. try:
  70. self._run(validator)
  71. except:
  72. raise
  73. finally:
  74. QApplication.restoreOverrideCursor()
  75. def _run(self, validator):
  76. report = validator.submit(self.iface)
  77. logger.debug(f"Rapport d'exec: {report}")
  78. for type_err in report["errors"]:
  79. topitem = QTreeWidgetItem()
  80. topitem.setIcon(0, QIcon(QPixmap(RSCDIR / "error_16.png")))
  81. topitem.setText(1, "{} ({})".format(type_err, len(report["errors"][type_err]["list"])))
  82. self.ui.tree_report.addTopLevelItem(topitem)
  83. for err in report["errors"][type_err]["list"]:
  84. item = QTreeWidgetItem()
  85. item.setText(1, "{} {} : {}".format(err["layername"], err["field"], err["message"]))
  86. topitem.addChild(item)
  87. def show_help(self):
  88. pass
  89. def show_settings(self):
  90. pass