From 91fde43b21f79fd2a366242312d5f5763a18011b Mon Sep 17 00:00:00 2001
From: Lucas Philippe <lucasphilippe@MacBook-Air-de-Lucas.local>
Date: Thu, 18 Jan 2024 11:42:23 +0100
Subject: [PATCH] Etape 7 fonctionnelle

---
 TP1/MainNormal.py   | 13 ++++++++++++
 TP1/NormalCursor.py | 26 ++++++++++++++++++++++++
 TP1/NormalWidget.py | 48 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 87 insertions(+)
 create mode 100644 TP1/MainNormal.py
 create mode 100644 TP1/NormalCursor.py
 create mode 100644 TP1/NormalWidget.py

diff --git a/TP1/MainNormal.py b/TP1/MainNormal.py
new file mode 100644
index 0000000..73a04e5
--- /dev/null
+++ b/TP1/MainNormal.py
@@ -0,0 +1,13 @@
+from PyQt5.QtWidgets import QApplication, QMainWindow
+from NormalWidget import NormalWidget
+def main():
+    app = QApplication([])
+    window = QMainWindow()
+    window.resize(1024, 800)
+    normalWidget = NormalWidget()
+    window.setCentralWidget(normalWidget)
+    window.show()
+    app.exec_()
+
+if __name__ == "__main__":
+    main()
diff --git a/TP1/NormalCursor.py b/TP1/NormalCursor.py
new file mode 100644
index 0000000..a2339e2
--- /dev/null
+++ b/TP1/NormalCursor.py
@@ -0,0 +1,26 @@
+from PyQt5.QtGui import QColor
+
+class NormalCursor:
+    defaultCol=QColor("blue")
+
+    def __init__(self, targets):
+        self.x = 0
+        self.y = 0
+        self.targets = targets
+        self.closest = None
+    def move(self, x, y):
+        self.x = x
+        self.y = y
+        previous_closest = self.closest
+
+        for target in self.targets:
+            distance = ((self.x - target.x) ** 2 + (self.y - target.y) ** 2) ** 0.5  # cf. Theoreme de Pythagore
+
+            if distance < target.size/2:
+                self.closest = target
+                self.closest.highlighted = True
+
+        if previous_closest is not None:
+            distance = ((self.x - previous_closest.x) ** 2 + (self.y - previous_closest.y) ** 2) ** 0.5  # cf. Theoreme de Pythagore
+            if distance > previous_closest.size / 2:
+                previous_closest.highlighted = False
\ No newline at end of file
diff --git a/TP1/NormalWidget.py b/TP1/NormalWidget.py
new file mode 100644
index 0000000..9f34fb9
--- /dev/null
+++ b/TP1/NormalWidget.py
@@ -0,0 +1,48 @@
+import csv, random, time
+from PyQt5.QtGui import QPainter
+from PyQt5.QtWidgets import QWidget
+from Target import Target
+from TP1.NormalCursor import NormalCursor
+
+class NormalWidget(QWidget):
+    def __init__(self):
+        super().__init__()
+        self.targets = []
+        self.loadTargets()
+        self.cursor = NormalCursor(self.targets)
+        self.setMouseTracking(True)
+        self.start_time = None
+        self.selectRandomTarget()
+
+    def loadTargets(self):
+        with open('src_tp_bubble.csv', newline='') as csvfile:
+            reader = csv.reader(csvfile)
+            for row in reader:
+                if len(row) >= 3:
+                    x, y, size = map(int, row[:3])
+                    self.targets.append(Target(x,y,size))
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        for target in self.targets:
+            target.paint(painter)
+
+    def mouseMoveEvent(self, event):
+        self.cursor.move(event.x(), event.y())
+        self.update()
+
+    def selectRandomTarget(self):
+        if self.start_time == None:
+            self.start_time = time.time()
+        target = random.choice(self.targets)
+        target.toSelect = True
+        self.update()
+
+    def printTime(self):
+        print((time.time() - self.start_time)*1000)
+        self.start_time = None
+
+    def mousePressEvent(self, event):
+        if self.cursor.closest.click_cible():
+            self.printTime()
+            self.selectRandomTarget()
-- 
GitLab