Преглед на файлове

Zoom sur la couche ou feature au clic sur l'erreur

omassot преди 7 години
родител
ревизия
ea2ac0ea6d
променени са 3 файла, в които са добавени 50 реда и са изтрити 8 реда
  1. 8 0
      core/checking.py
  2. 0 1
      schemas/mn1_rec.py
  3. 42 7
      ui/dlg_main.py

+ 8 - 0
core/checking.py

@@ -78,6 +78,14 @@ class TestResult():
                           {"exc_info": "{}\n{}\n{}".format(typ.__name__, value, ''.join(traceback.format_tb(trace)))})
         self.errors.append(error)
 
+    def grouped_errors(self):
+        res = {}
+        for err in self.errors:
+            if not err.message in res:
+                res[err.message] = []
+            res[err.message].append(err)
+        return res
+
 class BaseChecker():
     
     def __init__(self):

+ 0 - 1
schemas/mn1_rec.py

@@ -293,7 +293,6 @@ class Mn1Checker(BaseChecker):
         """ Recherche de doublons """        
         
         tmp = []
-        logger.info(self.noeuds)
         for noeud in self.noeuds:
             if not noeud.NO_NOM:
                 continue

+ 42 - 7
ui/dlg_main.py

@@ -12,6 +12,7 @@ from PyQt5.QtGui import QIcon, QPixmap
 from PyQt5.QtWidgets import QApplication, QTreeWidgetItem
 
 from core.constants import MAIN, RSCDIR
+from core.mncheck import QgsModel
 
 
 logger = logging.getLogger("mncheck")
@@ -138,21 +139,55 @@ class DlgMain(QtWidgets.QDialog):
             self.ui.tree_report.addTopLevelItem(topitem)
             
             for err in result.errors:
-                treeitem = QTreeWidgetItem()
+                erritem = QTreeWidgetItem()
+                
+                
+                
+                msg = err.message
+                data = None
                 
-                treeitem.setText(1, err.message)
                 if "exc_info" in err.info:
-                    logger.debug("* %s\n%s", err.message, err.info["exc_info"])
-                    treeitem.setData(1, Qt.UserRole, err.info["exc_info"])
+                    data = err.info["exc_info"]
+                    logger.debug("%s", err.message, err.info["exc_info"])
                     
-                topitem.addChild(treeitem)
+                elif "model" in err.info:
+                    data = err.info["model"]
+                    msg = f"{data.layername} : {msg}"
+                    
+                elif "item" in err.info:
+                    data = err.info["item"]
+                    msg = f"{data} : {msg}"
+                
+                erritem.setText(1, msg)
+                erritem.setData(1, Qt.UserRole, data)
+                
+                topitem.addChild(erritem)
         
+    def tree_item_clicked(self, item, _):
         
+        data = item.data(1, Qt.UserRole)
         
-    def tree_item_clicked(self, item, col):
+        print(type(data), data)
         
-        data = item.data(1, Qt.UserRole)
+        if not data:
+            return
+        
+        if hasattr(data, "_feature"):
+            self.zoom_to_feature(data.layer, data._feature)
+            
+        elif hasattr(data, "layer"):
+            self.select_layer(data.layer)
+            
+        else:
+            logger.error(f"Data unknown: {data}")
+        
+    def select_layer(self, layer):
+        self.iface.setActiveLayer(layer)
         
+    def zoom_to_feature(self, layer, feature):
+        self.iface.setActiveLayer(layer)
+        self.iface.mapCanvas().zoomToFeatureExtent(feature.geometry().boundingBox())
+        layer.select(feature.id())
         
     def show_help(self):
         pass