Browse Source

repare la mise en surbrillance des clones

olivier.massot 7 years ago
parent
commit
c30a82c39a
2 changed files with 31 additions and 21 deletions
  1. 20 14
      Viewer.py
  2. 11 7
      core.py

+ 20 - 14
Viewer.py

@@ -70,9 +70,13 @@ class GraphicsObject(QGraphicsItemGroup):
             self.addToGroup(anchor)
 
         effect = QGraphicsColorizeEffect()
+        effect.setColor(QColor(255, 255, 255))
+        effect.setStrength(0.35)
         effect.setEnabled(False)
         self.rect.setGraphicsEffect(effect)
 
+        self.setToolTip("[{}] '{}'".format(self.obj.type_, self.obj.name_))
+
         GraphicsObject.items.append(self)
 
     def setText(self):
@@ -166,12 +170,11 @@ class GraphicsCloneDepObject(GraphicsDepObject):
     def __init__(self, obj, childItem, parent=None):
         super(GraphicsCloneDepObject, self).__init__(obj, childItem, parent)
         self.bottom_anchor.setBrush(QColor("red"))
-        self.clone_of = next((item for item in GraphicsObject.items if item.obj == obj
-                                                            and type(item) is GraphicsDepObject
-                                                            or type(item) is GraphicsRefObject))
+        self.clone_of = next((item for item in GraphicsObject.items if item.obj is obj
+                                                                    and (type(item) is GraphicsDepObject or type(item) is GraphicsRefObject)))
 
     def html(self):
-        return super(GraphicsCloneDepObject, self).html() + "<br/>(!) Clône"
+        return "* Clone *<br/>" + super(GraphicsCloneDepObject, self).html()
 
     @property
     def deps(self):
@@ -216,12 +219,11 @@ class GraphicsCloneRefObject(GraphicsRefObject):
     def __init__(self, obj, childItem, parent=None):
         super(GraphicsCloneRefObject, self).__init__(obj, childItem, parent)
         self.top_anchor.setBrush(QColor("red"))
-        self.clone_of = next((item for item in GraphicsObject.items if item.obj == obj
-                                                                    and type(item) is GraphicsDepObject
-                                                                    or type(item) is GraphicsRefObject))
+        self.clone_of = next((item for item in GraphicsObject.items if item.obj is obj
+                                                                    and (type(item) is GraphicsDepObject or type(item) is GraphicsRefObject)))
 
     def html(self):
-        return super(GraphicsCloneRefObject, self).html() + "<br/>(!) Clône"
+        return "* Clone *<br/>" + super(GraphicsCloneRefObject, self).html()
 
     @property
     def refs(self):
@@ -232,9 +234,11 @@ class GraphicsCloneRefObject(GraphicsRefObject):
         pass
 
     def hoverEnterEvent(self, *args, **kwargs):
+        self.setShining(True)
         self.clone_of.setShining(True)
 
     def hoverLeaveEvent(self, *args, **kwargs):
+        self.setShining(False)
         self.clone_of.setShining(False)
 
 class GraphicsLink(QGraphicsLineItem):
@@ -361,6 +365,7 @@ class Viewer(QMainWindow):
         core.Analyse.run(source_dir)
 
         QApplication.restoreOverrideCursor()
+        QMessageBox.information(self, "Analyse", "Analyse terminée: {} objets chargés en mémoire".format(len(core.Analyse.objects)))
 
         if core.Analyse.duplicates():
             QMessageBox.warning(self, "Risque d'instabilités", "Attention! Des doublons ont été trouvés dans les noms des objets")
@@ -402,29 +407,30 @@ class Viewer(QMainWindow):
             for dep in go.obj.deps:
                 if dep not in [go.obj for go in GraphicsObject.items]:
                     gdep = GraphicsDepObject(dep, go)
+                    if dep.deps:
+                        _addDeps(gdep)
                 else:
                     gdep = GraphicsCloneDepObject(dep, go)
 
                 self._scene.addItem(gdep)
-
                 link = GraphicsLink(go, gdep)
                 self._scene.addItem(link)
-                if dep.deps:
-                    _addDeps(gdep)
+
         _addDeps(root)
 
         def _addRefs(go):
             for ref in go.obj.refs:
                 if ref not in [go.obj for go in GraphicsObject.items]:
                     gref = GraphicsRefObject(ref, go)
+                    if ref.refs:
+                        _addRefs(gref)
                 else:
                     gref = GraphicsCloneRefObject(ref, go)
-                self._scene.addItem(gref)
 
+                self._scene.addItem(gref)
                 link = GraphicsLink(gref, go)
                 self._scene.addItem(link)
-                if ref.refs:
-                    _addRefs(gref)
+
         _addRefs(root)
 
         for item in GraphicsObject.items:

+ 11 - 7
core.py

@@ -126,12 +126,12 @@ class Analyse():
         cls.duplicated_names = []
 
         sourcemap = {
+                    "tables": TableObject,
+                    "relations": RelationObject,
+                    "queries": QueryObject,
                     "forms": FormObject,
                     "reports": ReportObject,
-                    "relations": RelationObject,
                     "scripts": MacroObject,
-                    "queries": QueryObject,
-                    "tables": TableObject,
                     "modules": ModuleObject,
                      }
 
@@ -172,11 +172,15 @@ class Analyse():
             line = next(i for i in range(len(line_ends)) if line_ends[i] > match.start(1)) + 1
             quote = match.group(1).strip()
             objname = match.group(2)
-
             if len(cls.index[objname]) == 1:
                 obj = cls.index[objname][0]
             else:
-                print("!!! Duplicate")
+                # plusieurs objets portent le même nom
+                # si l'objet mentionné porte le même nom que le sujet, on part du principe qu'il se mentione lui-même
+                if objname == subject.name_:
+                    obj = subject
+                else:
+                    obj = cls.index[objname][0]
 
             subject.mentions.append(Mention(line, objname, quote, obj))
 
@@ -196,7 +200,7 @@ class Analyse():
             cls.report(index, total * 2)
 
             for mention in subject.mentions:
-                if not mention.obj in subject.deps:
+                if not mention.obj in subject.deps and not mention.obj is subject:
                     subject.deps.append(mention.obj)
 
         for index, subject in enumerate(cls.objects):
@@ -228,7 +232,7 @@ class Analyse():
 
     @classmethod
     def duplicates(cls):
-        return {k: v for k, v in cls.items() if len(v) > 1}
+        return {k: v for k, v in cls.index.items() if len(v) > 1}
 
 
 if __name__ == "__main__":