dlg_main.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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 QIcon, QPixmap, Qt, QTableWidgetItem, QHeaderView
  9. from core.constants import MAIN, RSCDIR
  10. logger = logging.getLogger("mncheck")
  11. Ui_Main, _ = uic.loadUiType(MAIN / 'ui'/ 'dlg_main.ui')
  12. Ui_ChkFrame, _ = uic.loadUiType(MAIN / 'ui'/ 'checkframe.ui')
  13. SCHEMAS = ["mn1_rec", "mn2_rec", "mn3_pro", "mn3_exe", "mn3_rec"]
  14. class DlgMain(QtWidgets.QDialog):
  15. def __init__(self, iface, parent=None):
  16. super(DlgMain, self).__init__(parent)
  17. self.createWidgets()
  18. self.iface = iface
  19. self.schema_lib = None
  20. def createWidgets(self):
  21. """ set up the interface """
  22. self.ui = Ui_Main()
  23. self.ui.setupUi(self)
  24. self.ui.btn_run.setIcon(QIcon(RSCDIR / "play.png"))
  25. self.ui.btn_run.clicked.connect(self.run)
  26. self.ui.btn_help.setIcon(QIcon(RSCDIR / "question.png"))
  27. self.ui.btn_help.clicked.connect(self.show_help)
  28. self.ui.btn_settings.setIcon(QIcon(RSCDIR / "settings.png"))
  29. self.ui.btn_settings.clicked.connect(self.show_settings)
  30. self.ui.tbl_layers.horizontalHeaderItem(1).setTextAlignment(Qt.AlignLeft)
  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.update_layers_list()
  38. def clear_layers_table(self):
  39. while self.ui.tbl_layers.rowCount():
  40. self.ui.tbl_layers.removeRow(0)
  41. def selected_validator(self):
  42. schema_lib_name = SCHEMAS[int(self.ui.cbb_schemas.itemData(self.ui.cbb_schemas.currentIndex()))]
  43. logger.info("Selected schema: %s", schema_lib_name)
  44. schema_lib = importlib.import_module("schemas." + schema_lib_name)
  45. return schema_lib.Validator
  46. def update_layers_list(self):
  47. validator = self.selected_validator()
  48. expected = [model.layername for model in validator.models]
  49. logger.info("Expected layers: %s", str(expected))
  50. found = [layer.name().lower() for layer in QgsProject.instance().mapLayers().values()]
  51. logger.info("Found layers: %s", str(found))
  52. self.ui.btn_run.setEnabled(True)
  53. self.clear_layers_table()
  54. for layername in expected:
  55. cur_row = self.ui.tbl_layers.rowCount()
  56. self.ui.tbl_layers.insertRow(cur_row)
  57. lbl_icon, lbl_layer, lbl_message = QTableWidgetItem(), QTableWidgetItem(), QTableWidgetItem()
  58. lbl_layer.setText(layername)
  59. if layername.lower() in found:
  60. lbl_icon.setIcon(QIcon(QPixmap(RSCDIR / "ok_16.png")))
  61. else:
  62. lbl_icon.setIcon(QIcon(QPixmap(RSCDIR / "error_16.png")))
  63. lbl_message.setText("La couche est introuvable")
  64. self.ui.btn_run.setEnabled(False)
  65. self.ui.tbl_layers.setItem(cur_row, 0, lbl_icon)
  66. self.ui.tbl_layers.setItem(cur_row, 1, lbl_layer)
  67. self.ui.tbl_layers.setItem(cur_row, 2, lbl_message)
  68. self.ui.tbl_layers.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed)
  69. self.ui.tbl_layers.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeToContents)
  70. self.ui.tbl_layers.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch)
  71. def run(self):
  72. validator = self.selected_validator()
  73. if not validator:
  74. logger.info("Aucun schéma sélectionné - Opération annulée")
  75. return
  76. report = validator.submit(self.iface)
  77. logger.info(report)
  78. def show_help(self):
  79. pass
  80. def show_settings(self):
  81. pass