Integrate scribbling mode

master
En Yi 2018-07-21 14:52:50 +08:00
parent f76a23ed80
commit 5530186d28
3 changed files with 28 additions and 11 deletions

View File

@ -45,6 +45,12 @@ class SudokuSystem:
if val == 0:
self.change_cell_status(row, col, EMPTY)
def toggle_scribble(self, row, col, val):
if val in self.scribbles[row, col]:
self.scribbles[row, col] = self.scribbles[row, col].replace(val, '')
else:
self.scribbles[row, col] += val
def get_cell_number(self, row, col):
return self.number_grid[row, col]

View File

@ -109,7 +109,7 @@ class GameBoard(BoxBoard):
self.show_playmenu(False)
self.gamegrid.buttonClicked.connect(self.show_number_ring)
self.numring.connect_button_signals(self.select_ring_number)
#self.numring.connect_button_signals(self.select_ring_number)
self.numring.keyPressed.connect(self.select_ring_number)
self.gamegrid.setFocus(Qt.MouseFocusReason)
@ -129,10 +129,14 @@ class GameBoard(BoxBoard):
self.numring.toggle_anim(True)
self.numring.scribbling = scribbling
def select_ring_number(self, val):
if val == 'X':
val = 0
self.gamegrid.replace_cell_number(int(val))
def select_ring_number(self, val, scribbling):
if scribbling:
if not val == 'X':
self.gamegrid.change_cell_scribbles(val)
else:
if val == 'X':
val = 0
self.gamegrid.replace_cell_number(int(val))
def game_refocus(self):
self.gamegrid.set_disabled(False)

View File

@ -173,6 +173,10 @@ class SudokuGrid(BaseSudokuItem):
#self.sudoku_grid.generate_test_board(difficulty) # Uncomment for testing
self.update()
def change_cell_scribbles(self, val):
self.sudoku_grid.toggle_scribble(self.mouse_h, self.mouse_w, val)
self.grid_painter.update()
def replace_cell_number(self, val):
self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val)
self.grid_painter.update()
@ -262,7 +266,7 @@ class NumberRing(BaseSudokuItem):
# TODO: Adjust the positioning of each element
# TODO: Make it transparent when mouse is out of range
loseFocus = pyqtSignal()
keyPressed = pyqtSignal(str)
keyPressed = pyqtSignal(str, bool)
def __init__(self, parent=None):
super().__init__(parent=parent)
@ -272,6 +276,8 @@ class NumberRing(BaseSudokuItem):
self.cell_height = 24
self.cell_buttons = []
for btn in self.cell_buttons:
btn.buttonClicked.connect(func)
for i in range(10):
if i == 0:
cell_string = 'X'
@ -279,6 +285,8 @@ class NumberRing(BaseSudokuItem):
cell_string = str(i)
btn = buttons.AnimBox(0, 0, self.cell_width,
self.cell_height, cell_string, parent=self)
btn.buttonClicked.connect(self.send_button_press)
#btn.buttonClicked.connect(self.close_menu)
self.cell_buttons.append(btn)
self.radius = 54
@ -322,10 +330,9 @@ class NumberRing(BaseSudokuItem):
def paint(self, painter, style, widget=None):
pass
def connect_button_signals(self, func):
for btn in self.cell_buttons:
btn.buttonClicked.connect(func)
btn.buttonClicked.connect(self.close_menu)
def send_button_press(self, val):
self.keyPressed.emit(val, self.scribbling)
self.close_menu()
def freeze_buttons(self, freeze):
for btn in self.cell_buttons:
@ -356,7 +363,7 @@ class NumberRing(BaseSudokuItem):
if txt:
print('keypress:', txt)
self.keyPressed.emit(txt)
self.keyPressed.emit(txt, self.scribbling)
if not self.scribbling:
self.clearFocus()