diff --git a/graphic_components/board.py b/graphic_components/board.py index d41c0a2..9de6b03 100644 --- a/graphic_components/board.py +++ b/graphic_components/board.py @@ -110,6 +110,7 @@ class GameBoard(BoxBoard): self.gamegrid.buttonClicked.connect(self.show_number_ring) self.numring.connect_button_signals(self.select_ring_number) + self.numring.keyPressed.connect(self.select_ring_number) self.gamegrid.setFocus(Qt.MouseFocusReason) diff --git a/graphic_components/buttons.py b/graphic_components/buttons.py index 0521053..874e553 100644 --- a/graphic_components/buttons.py +++ b/graphic_components/buttons.py @@ -152,7 +152,7 @@ class AnimBox(QGraphicsObject): super().hoverLeaveEvent(event) def mousePressEvent(self, event): - self.length = 0 + self.toggle_anim(False) self.buttonClicked.emit(self.text) diff --git a/graphic_components/sudoku_graphics.py b/graphic_components/sudoku_graphics.py index 5f4f564..ec8c413 100644 --- a/graphic_components/sudoku_graphics.py +++ b/graphic_components/sudoku_graphics.py @@ -127,6 +127,8 @@ class SudokuGrid(BaseSudokuItem): self.selection_pen.setWidth(self.selection_unit) self.selection_box = QRectF(0, 0, self.cell_width, self.cell_height) + self.setAcceptHoverEvents(True) + self.setAcceptedMouseButtons(Qt.LeftButton) self.setFlag(QGraphicsItem.ItemIsFocusable, True) self.set_disabled(False) @@ -193,7 +195,7 @@ class SudokuGrid(BaseSudokuItem): painter.drawRect(self.selection_box) def hoverMoveEvent(self, event): - if self.drawn: + if not (self.freeze and self.drawn): box_w = bound_value(0, int(event.pos().x()/self.cell_width), 8) box_h = bound_value(0, int(event.pos().y() / self.cell_height), 8) if box_w != self.mouse_w or box_h != self.mouse_h: @@ -242,8 +244,11 @@ class SudokuGrid(BaseSudokuItem): class NumberRing(BaseSudokuItem): + # TODO: Add functions to animated the ring appearing + # TODO: Adjust the positioning of each element # TODO: Make it transparent when mouse is out of range loseFocus = pyqtSignal() + keyPressed = pyqtSignal(str) def __init__(self, parent=None): super().__init__(parent=parent) @@ -352,6 +357,15 @@ class NumberRing(BaseSudokuItem): self.update() + def keyPressEvent(self, event): + txt = event.text() + if not txt == '' and txt in 'x123456789': + if txt == 'x': + txt = 'X' + print('keypress:', txt) + self.keyPressed.emit(txt) + self.clearFocus() + class PlayMenu(BaseSudokuItem): buttonClicked = pyqtSignal(str)