omega/app/ui/scene.py
2025-04-05 21:53:58 +02:00

79 lines
2.4 KiB
Python

from PySide6.QtWidgets import (
QGraphicsScene
)
from PySide6.QtGui import QBrush, QColor
from PySide6.QtCore import QTimer, QRectF, QSize
import random
from app.ui.key import KeyItem
class KeyboardScene(QGraphicsScene):
def __init__(self):
super().__init__()
self.keys = {}
self.letter_rows = [
"QWERTYUIOP",
"ASDFGHJKL",
"ZXCVBNM",
]
self.space_key = KeyItem("Space")
self.addItem(self.space_key)
self.timer = QTimer()
self.timer.timeout.connect(self.simulate_prediction)
self.timer.start(2000)
self.create_keys()
def create_keys(self):
for row in self.letter_rows:
for char in row:
key = KeyItem(char)
self.addItem(key)
self.keys[char] = key
def layout_keys(self, view_size: QSize):
view_width = view_size.width()
view_height = view_size.height()
padding = 10.0
spacing = 6.0
max_scale = 2.0
rows = self.letter_rows + [" "]
row_count = len(rows)
max_keys_in_row = max(len(row) for row in rows)
total_spacing_x = (max_keys_in_row - 1) * spacing
total_spacing_y = (row_count - 1) * spacing
available_width = view_width - 2 * padding - total_spacing_x
available_height = view_height - 2 * padding - total_spacing_y
key_width = available_width / max_keys_in_row
key_height = available_height / row_count
y = padding
for row in self.letter_rows:
x = padding
for char in row:
key = self.keys[char]
key.set_geometry(x, y, key_width, key_height)
x += key_width + spacing
y += key_height + spacing
# Space key layout
space_width = key_width * 7 + spacing * 6
self.space_key.set_geometry(padding, y, space_width, key_height)
self.setSceneRect(QRectF(0, 0, view_width, view_height))
def simulate_prediction(self):
most_likely = random.choice(list(self.keys.keys()))
print(f"[Prediction] Most likely: {most_likely}")
for char, key in self.keys.items():
if char == most_likely:
key.set_scale_factor(1.8)
key.setBrush(QBrush(QColor("orange")))
else:
key.set_scale_factor(1.0)
key.setBrush(QBrush(QColor("lightgray")))