From 72f4071de7ddc739d4cef6c7e022f848996c1de5 Mon Sep 17 00:00:00 2001
From: Lucas Philippe <lucasphilippe@MacBook-Air-de-Lucas.local>
Date: Thu, 22 Feb 2024 11:48:25 +0100
Subject: [PATCH] =?UTF-8?q?Saisie=20caract=C3=A8re=20par=20caract=C3=A8re?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 TP4/src/model/Key.py              |  4 +++
 TP4/src/widgets/EditeurWindow.py  |  6 ++++-
 TP4/src/widgets/KeyboardWidget.py | 43 +++++++++++++++++++++++++++----
 3 files changed, 47 insertions(+), 6 deletions(-)

diff --git a/TP4/src/model/Key.py b/TP4/src/model/Key.py
index 7519fec..885b980 100644
--- a/TP4/src/model/Key.py
+++ b/TP4/src/model/Key.py
@@ -7,3 +7,7 @@ class Key:
         self.position = QPoint(self.x, self.y)
         self.symbol = symbol
         self.rect = QRect(self.x, self.y, width * (keyWidth + keySpacing) - keySpacing, keyHeight)
+
+
+    def isOver(self, point):
+        return self.rect.contains(point)
\ No newline at end of file
diff --git a/TP4/src/widgets/EditeurWindow.py b/TP4/src/widgets/EditeurWindow.py
index 093d6df..4920168 100644
--- a/TP4/src/widgets/EditeurWindow.py
+++ b/TP4/src/widgets/EditeurWindow.py
@@ -1,5 +1,6 @@
 from PyQt5.QtWidgets import QWidget, QLineEdit, QVBoxLayout
 from src.widgets.KeyboardWidget import KeyboardWidget
+from PySide6.QtCore import Slot
 
 class EditeurWindow(QWidget):
     def __init__(self):
@@ -14,4 +15,7 @@ class EditeurWindow(QWidget):
         layout = QVBoxLayout()
         layout.addWidget(line_edit)
         layout.addWidget(keyboard_widget)
-        self.setLayout(layout)
\ No newline at end of file
+        self.setLayout(layout)
+
+        # Connexion su dignal
+        keyboard_widget.newletter.connect(line_edit.insert)
diff --git a/TP4/src/widgets/KeyboardWidget.py b/TP4/src/widgets/KeyboardWidget.py
index 5c8d081..c89b24b 100644
--- a/TP4/src/widgets/KeyboardWidget.py
+++ b/TP4/src/widgets/KeyboardWidget.py
@@ -1,13 +1,17 @@
 import json
 
-from PyQt5.QtCore import Qt, QSize
-from PyQt5.QtGui import QPainter
+from PyQt5.QtCore import Qt, QSize, QPoint, pyqtSignal
+from PyQt5.QtGui import QPainter, QColor
 from PyQt5.QtWidgets import QWidget
 from documents.FileDefinition import LAYOUT_FILE
 from src.model.Key import Key
+from PySide6.QtCore import Signal
 
+DEFAULT_COLOR = QColor("white")
+OVER_COLOR = QColor("gray")
 
 class KeyboardWidget(QWidget):
+    newletter = pyqtSignal(str)
     def __init__(self):
         super().__init__()
         self.keys = []
@@ -18,8 +22,12 @@ class KeyboardWidget(QWidget):
         self.keyboardWidth = 0
         self.keyboardHeight = 0
 
+        self.mousePos = QPoint(0,0)
+        self.pressedKey = None
+
         # Initialiser le clavier
         self.loadLayoutJson()
+        self.setMouseTracking(True)
         self.update()
 
     def loadLayoutJson(self):
@@ -52,11 +60,36 @@ class KeyboardWidget(QWidget):
 
     def paintEvent(self, event):
         self.sizeHint()
-        painter = QPainter(self)
         for key in self.keys:
-            painter.drawRect(key.rect)
-            painter.drawText(key.rect, Qt.AlignCenter, key.symbol)
+            if key.isOver(self.mousePos):
+                self.paintKey(key, OVER_COLOR)
+            else:
+                self.paintKey(key, DEFAULT_COLOR)
 
     def sizeHint(self):
         return QSize(self.keyboardWidth, self.keyboardHeight)
 
+    def mouseMoveEvent(self, event):
+        self.mousePos = event.pos()
+        self.update()
+
+    def mousePressEvent(self, event):
+        for key in self.keys:
+            if key.isOver(self.mousePos):
+                self.pressedKey = key
+                return
+    def mouseReleaseEvent(self, event):
+        for key in self.keys:
+            if key.isOver(self.mousePos):
+                if key == self.pressedKey:
+                    self.pressedKey = None
+                    self.newletter.emit(key.symbol)
+                    return
+                else:
+                    return
+
+    def paintKey(self, key, color):
+        painter = QPainter(self)
+        painter.setBrush(color)
+        painter.drawRect(key.rect)
+        painter.drawText(key.rect, Qt.AlignCenter, key.symbol)
-- 
GitLab