From 1a06d9b42268145425ef0bfd95b78f1367859bc4 Mon Sep 17 00:00:00 2001
From: Lucas Philippe <lucasphilippe@MacBook-Air-de-Lucas.local>
Date: Thu, 22 Feb 2024 11:04:59 +0100
Subject: [PATCH] =?UTF-8?q?Debut=20TP4,=20fin=20d'=C3=A9tape=20de=20la=20f?=
 =?UTF-8?q?en=C3=AAtre=20principale=20et=20le=20chargement=20du=20layout?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 TP4/documents/FileDefinition.py   |  5 ++++
 TP4/documents/__init__.py         |  0
 TP4/documents/layout.json         | 39 +++++++++++++++++++++++++++++++
 TP4/src/Main.py                   | 14 +++++++++++
 TP4/src/__init__.py               |  0
 TP4/src/model/Key.py              |  9 +++++++
 TP4/src/model/__init__.py         |  0
 TP4/src/widgets/EditeurWindow.py  | 17 ++++++++++++++
 TP4/src/widgets/KeyboardWidget.py | 38 ++++++++++++++++++++++++++++++
 TP4/src/widgets/__init__.py       |  0
 10 files changed, 122 insertions(+)
 create mode 100644 TP4/documents/FileDefinition.py
 create mode 100644 TP4/documents/__init__.py
 create mode 100644 TP4/documents/layout.json
 create mode 100644 TP4/src/Main.py
 create mode 100644 TP4/src/__init__.py
 create mode 100644 TP4/src/model/Key.py
 create mode 100644 TP4/src/model/__init__.py
 create mode 100644 TP4/src/widgets/EditeurWindow.py
 create mode 100644 TP4/src/widgets/KeyboardWidget.py
 create mode 100644 TP4/src/widgets/__init__.py

diff --git a/TP4/documents/FileDefinition.py b/TP4/documents/FileDefinition.py
new file mode 100644
index 0000000..75e5ee6
--- /dev/null
+++ b/TP4/documents/FileDefinition.py
@@ -0,0 +1,5 @@
+import os
+
+DATA_DIR = os.path.dirname(os.path.abspath(__file__))
+
+LAYOUT_FILE = os.path.join(DATA_DIR, 'layout.json')
diff --git a/TP4/documents/__init__.py b/TP4/documents/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/TP4/documents/layout.json b/TP4/documents/layout.json
new file mode 100644
index 0000000..46a7693
--- /dev/null
+++ b/TP4/documents/layout.json
@@ -0,0 +1,39 @@
+{
+    "keyWidth": 50,
+    "keyHeight": 20,
+    "keySpacing": 3,
+    "nbReco": 4,
+    "keys" : [
+        { "symbol": "a", "x" : 0, "y" : 1, "width": 1 },
+        { "symbol": "z", "x" : 1, "y" : 1, "width": 1 },
+        { "symbol": "e", "x" : 2, "y" : 1, "width": 1 },
+        { "symbol": "r", "x" : 3, "y" : 1, "width": 1 },
+        { "symbol": "t", "x" : 4, "y" : 1, "width": 1 },
+        { "symbol": "y", "x" : 5, "y" : 1, "width": 1 },
+        { "symbol": "u", "x" : 6, "y" : 1, "width": 1 },
+        { "symbol": "i", "x" : 7, "y" : 1, "width": 1 },
+        { "symbol": "o", "x" : 8, "y" : 1, "width": 1 },
+        { "symbol": "p", "x" : 9, "y" : 1, "width": 1 },
+        { "symbol": "q", "x" : 1, "y" : 2, "width": 1 },
+        { "symbol": "s", "x" : 0, "y" : 2, "width": 1 },
+        { "symbol": "d", "x" : 2, "y" : 2, "width": 1 },
+        { "symbol": "f", "x" : 3, "y" : 2, "width": 1 },
+        { "symbol": "g", "x" : 4, "y" : 2, "width": 1 },
+        { "symbol": "h", "x" : 5, "y" : 2, "width": 1 },
+        { "symbol": "j", "x" : 6, "y" : 2, "width": 1 },
+        { "symbol": "k", "x" : 7, "y" : 2, "width": 1 },
+        { "symbol": "l", "x" : 8, "y" : 2, "width": 1 },
+        { "symbol": "m", "x" : 9, "y" : 2, "width": 1 },
+        { "symbol": "q", "x" : 1, "y" : 2, "width": 1 },
+        { "symbol": "⇧", "x" : 0, "y" : 3, "width": 2 },
+        { "symbol": "w", "x" : 2, "y" : 3, "width": 1 },
+        { "symbol": "x", "x" : 3, "y" : 3, "width": 1 },
+        { "symbol": "c", "x" : 4, "y" : 3, "width": 1 },
+        { "symbol": "v", "x" : 5, "y" : 3, "width": 1 },
+        { "symbol": "b", "x" : 6, "y" : 3, "width": 1 },
+        { "symbol": "n", "x" : 7, "y" : 3, "width": 1 },
+        { "symbol": "⇦", "x" : 8, "y" : 3, "width": 2 },
+        { "symbol": " ", "x" : 0, "y" : 4, "width": 8 },
+        { "symbol": "↵", "x" : 8, "y" : 4, "width": 2 }
+    ]
+}
\ No newline at end of file
diff --git a/TP4/src/Main.py b/TP4/src/Main.py
new file mode 100644
index 0000000..f574433
--- /dev/null
+++ b/TP4/src/Main.py
@@ -0,0 +1,14 @@
+import sys
+from PyQt5.QtWidgets import QApplication
+from src.widgets.EditeurWindow import EditeurWindow
+
+def main():
+    app = QApplication(sys.argv)
+    window = EditeurWindow()
+    window.resize(1024, 800)
+    window.show()
+    sys.exit(app.exec_())
+
+
+if __name__ == '__main__':
+    main()
\ No newline at end of file
diff --git a/TP4/src/__init__.py b/TP4/src/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/TP4/src/model/Key.py b/TP4/src/model/Key.py
new file mode 100644
index 0000000..7519fec
--- /dev/null
+++ b/TP4/src/model/Key.py
@@ -0,0 +1,9 @@
+from PyQt5.QtCore import QRect, QPoint, QSize
+
+class Key:
+    def __init__(self, x, y, keyWidth, keyHeight, keySpacing, width, symbol):
+        self.x = x * (keyWidth + keySpacing)
+        self.y = y * (keyHeight + keySpacing)
+        self.position = QPoint(self.x, self.y)
+        self.symbol = symbol
+        self.rect = QRect(self.x, self.y, width * (keyWidth + keySpacing) - keySpacing, keyHeight)
diff --git a/TP4/src/model/__init__.py b/TP4/src/model/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/TP4/src/widgets/EditeurWindow.py b/TP4/src/widgets/EditeurWindow.py
new file mode 100644
index 0000000..093d6df
--- /dev/null
+++ b/TP4/src/widgets/EditeurWindow.py
@@ -0,0 +1,17 @@
+from PyQt5.QtWidgets import QWidget, QLineEdit, QVBoxLayout
+from src.widgets.KeyboardWidget import KeyboardWidget
+
+class EditeurWindow(QWidget):
+    def __init__(self):
+        super().__init__()
+        self.setWindowTitle('Editeur')
+
+        # Création des widgets
+        line_edit = QLineEdit(self)
+        keyboard_widget = KeyboardWidget()
+
+        # Création du layout et ajout des widgets
+        layout = QVBoxLayout()
+        layout.addWidget(line_edit)
+        layout.addWidget(keyboard_widget)
+        self.setLayout(layout)
\ No newline at end of file
diff --git a/TP4/src/widgets/KeyboardWidget.py b/TP4/src/widgets/KeyboardWidget.py
new file mode 100644
index 0000000..660ca76
--- /dev/null
+++ b/TP4/src/widgets/KeyboardWidget.py
@@ -0,0 +1,38 @@
+import json
+
+from PyQt5.QtWidgets import QWidget
+from documents.FileDefinition import LAYOUT_FILE
+from src.model.Key import Key
+
+
+class KeyboardWidget(QWidget):
+    def __init__(self):
+        super().__init__()
+        self.keys = []
+        self.keyWidth = None
+        self.keyHeight = None
+        self.keySpacing = None
+
+        # Initialiser le clavier
+        self.loadLayoutJson()
+        self.update()
+
+    def loadLayoutJson(self):
+        # Chargement du fichier JSON contenant les paramètres du clavier
+        with open(LAYOUT_FILE, "r") as f:
+            layout_clavier = json.load(f)
+
+        # Accéder aux paramètres
+
+        self.keyWidth = layout_clavier['keyWidth']
+        self.keyHeight = layout_clavier['keyHeight']
+        self.keySpacing = layout_clavier['keySpacing']
+
+        # Créer la clé de chaque touche
+        for keyData in layout_clavier['keys']:
+            self.keys.append(self.createKey(keyData))
+
+    def createKey(self, keyData):
+        return Key(keyData['x'], keyData['y'], self.keyWidth, self.keyHeight, self.keySpacing, keyData['width'], keyData['symbol'])
+
+
diff --git a/TP4/src/widgets/__init__.py b/TP4/src/widgets/__init__.py
new file mode 100644
index 0000000..e69de29
-- 
GitLab