r4519 - developers/erin_yueh/pythonEFL-sudoku/src
erin_yueh at docs.openmoko.org
erin_yueh at docs.openmoko.org
Wed Jul 9 18:13:52 CEST 2008
Author: erin_yueh
Date: 2008-07-09 18:13:51 +0200 (Wed, 09 Jul 2008)
New Revision: 4519
Modified:
developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py
Log:
add undo, redo functions, all functions are workable (Erin Yueh)
Modified: developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py 2008-07-09 07:33:06 UTC (rev 4518)
+++ developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py 2008-07-09 16:13:51 UTC (rev 4519)
@@ -4,7 +4,7 @@
import ecore
import edje
import random
-import etk
+#import etk
WINDOW_WIDTH = 455
WINDOW_HEIGHT = 640
@@ -16,9 +16,9 @@
def checkRow(row,value):
isOK = True
puzzle = ee.data["puzzle"]
- print 'checkRow',row,value
+ #print 'checkRow',row,value
for j in xrange(9):
- print puzzle[row][j]
+ #print puzzle[row][j]
if(value == puzzle[row][j]):
isOK = False
return isOK
@@ -26,9 +26,9 @@
def checkColumn(column,value):
isOK = True
puzzle = ee.data["puzzle"]
- print 'checkColumn',column,value
+ #print 'checkColumn',column,value
for i in xrange(9):
- print puzzle[i][column]
+ #print puzzle[i][column]
if(value == puzzle[i][column]):
isOK = False
return isOK
@@ -36,11 +36,11 @@
def checkGroup(group,value):
isOK = True
puzzle = ee.data["puzzle"]
- print 'checkGroup',group,value
+ #print 'checkGroup',group,value
(group,r,c) = GROUP_ROWCOL[str(group)]
for i in xrange (r,r+3):
for j in xrange(c,c+3):
- print puzzle[i][j]
+ #print puzzle[i][j]
if(value == puzzle[i][j]):
isOK = False
return isOK
@@ -59,14 +59,13 @@
def analyze(button,value):
isOK = True
- puzzle = ee.data["puzzle"]
- # button40 2
+ #puzzle = ee.data["puzzle"]
addr = button[6:]
print addr, value
i = int(addr) / 9
j = int(addr) % 9
g = (i/3)*3 + (j/3)
- print i,j,g
+ print i,j,g,addr,value
if(checkRow(i,value) == False or checkColumn(j,value) == False or checkGroup(g,value) == False):
return False
@@ -75,27 +74,33 @@
def number_key_cb(zoom_in, emission, source):
print 'number_key_cb emission,source:',emission,source
- if(source == 'clear'):
- puzzle_clone = ee.data["puzzle_clone"]
- puzzle = ee.data["puzzle"]
- for i in xrange (9):
- for j in xrange(9):
- value = puzzle_clone[i][j]
-
- print 'i,j,value,puzzle[i][j]',i,j,value,puzzle[i][j]
- puzzle[i][j] = value
- addr = j + i *9
- text_data = "button" + str(addr)
- text = ee.data[text_data]
- text.data["value"] = value
- text.text_set(str(value))
- if(value>0):
- text.color_set(10,10,10,200)
- elif(value==0):
- text.color_set(0,255,255,255)
+ if(source == 'clear' or source == 'create'):
+ # init undo redo action track
ee.data["undo_counter"] = 0
+ ee.data["redo_counter"] = 0
ee.data["undo_track"] = []
- print 'clear all data!!'
+ ee.data["redo_track"] = []
+ ee.data["clicking"] = None
+ if(source == 'clear'):
+ puzzle_clone = ee.data["puzzle_clone"]
+ puzzle = ee.data["puzzle"]
+ for i in xrange (9):
+ for j in xrange(9):
+ value = puzzle_clone[i][j]
+ #print 'i,j,value,puzzle[i][j]',i,j,value,puzzle_clone[i][j]
+ puzzle[i][j] = value
+ addr = j + i *9
+ text_data = "button" + str(addr)
+ text = ee.data[text_data]
+ text.text_set(str(value))
+ if(value>0):
+ text.color_set(10,10,10,200)
+ elif(value==0):
+ text.color_set(0,255,255,255)
+ print 'clear all data!!'
+ elif(source == 'create'):
+ print 'create new puzzle'
+ createNewPuzzle()
elif(source =='undo'):
print 'undo'
if(ee.data["undo_counter"] == 0):
@@ -103,8 +108,10 @@
print ee.data["undo_counter"], ee.data["undo_track"]
undo_counter = ee.data["undo_counter"]
(addr,value) = ee.data["undo_track"][undo_counter-1]
- ee.data["undo_track"].pop()
-
+ redo = ee.data["undo_track"].pop()
+ ee.data["redo_track"].append(redo)
+ redo_counter = ee.data["redo_counter"]
+ ee.data["redo_counter"] = redo_counter+1
i = int(addr) / 9
j = int(addr) % 9
original_value = ee.data["puzzle_clone"][i][j]
@@ -113,31 +120,47 @@
text.text_set(str(original_value))
text.color_set(100,255,0,255)
ee.data["puzzle"][i][j] = original_value
- text.data["value"] = original_value
+ #text.data["value"] = original_value
if(undo_counter>0):
ee.data["undo_counter"] = undo_counter-1
elif(source == 'redo'):
print 'redo'
- print ee.data["undo_counter"], ee.data["undo_track"]
+ if(ee.data["redo_counter"] == 0):
+ return
+ print ee.data["redo_counter"], ee.data["redo_track"]
+ redo_counter = ee.data["redo_counter"]
+ (addr,value) = ee.data["redo_track"][redo_counter-1]
+ undo = ee.data["redo_track"].pop()
+ ee.data["undo_track"].append(undo)
+ undo_counter = ee.data["undo_counter"]
+ ee.data["undo_counter"] = undo_counter+1
+
+ i = int(addr) / 9
+ j = int(addr) % 9
+ text = ee.data["button"+str(addr)]
+ print i,j,value,text
+ text.text_set(str(value))
+ text.color_set(255,255,0,255)
+ ee.data["puzzle"][i][j] = int(value)
+ #text.data["value"] = int(value)
+ if(redo_counter>0):
+ ee.data["redo_counter"] = redo_counter-1
+
elif(source == 'solve'):
print 'is solved?!'
if(solve() == False):
print 'NO'
else:
print 'YES'
- elif(source == 'create'):
- print 'create'
- createNewPuzzle()
- ee.data["undo_counter"] = 0
- ee.data["undo_track"] = []
+
else:
# fill in key number
if(ee.data["clicking"]):
text = ee.data[ee.data["clicking"]]
text.text_set(source)
- text.data["value"] = int(source)
button = ee.data["clicking"]
- addr = button[6:]
+ #addr = button[6:]
+ addr = ee.data["clicking"][6:]
i = int(addr) / 9
j = int(addr) % 9
print i,j,addr
@@ -153,10 +176,9 @@
undo_counter = ee.data["undo_counter"]
ee.data["undo_counter"] = undo_counter +1
step = (int(addr),int(source))
- track = ee.data["undo_track"]
- track.append(step)
- print 'counter:',ee.data["undo_counter"]
- print 'track:',track
+ ee.data["undo_track"].append(step)
+ #print 'undo_counter:',ee.data["undo_counter"]
+ #print 'undo_track:',ee.data["undo_track"]
return True
def puzzle_key_cb(zoom_in, emission, source):
@@ -191,7 +213,7 @@
def createNewPuzzle():
puzzle = get_puzzle()
- print 'puzzle',puzzle
+ print 'new puzzle',puzzle
for i in xrange(9):
for j in xrange(9):
ee.data["puzzle"][i][j] = puzzle[i][j]
@@ -200,7 +222,6 @@
addr = j + i *9
text_data = "button" + str(addr)
text = ee.data[text_data]
- text.data["value"] = value
text.text_set(str(value))
if(value>0):
text.color_set(10,10,10,200)
@@ -219,7 +240,7 @@
ee.title_set('sudoku')
ee.size_min_set(WINDOW_WIDTH,WINDOW_HEIGHT)
canvas = ee.evas
-
+
# create a background
bg = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/background")
bg.pos = (0, 0)
@@ -227,7 +248,7 @@
bg.show()
ee.data["bg"] = bg
- # create puzzle and icons
+ # create number keyboard and action icons
area = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/panel")
area.signal_callback_add("mouse,clicked,*", "*", number_key_cb)
area.pos = (0, 0)
@@ -235,27 +256,30 @@
area.show()
area.data["area"] = area
- # create puzzle and icons
+ # create puzzle board
board = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/board")
board.signal_callback_add("mouse,clicked,*", "*", puzzle_key_cb)
board.pos = (0, 0)
board.show()
-
+
+ # retrieve one puzzle data
puzzle = get_puzzle()
- print 'puzzle',puzzle
puzzle_clone = []
for i in xrange(9):
row = []
for j in xrange(9):
row.append(puzzle[i][j])
puzzle_clone.append(row)
- print 'puzzle_clone', puzzle_clone
-
+ print 'puzzle',puzzle, puzzle_clone
ee.data["puzzle"] = puzzle
ee.data["puzzle_clone"] = puzzle_clone
-
+ ee.data["clicking"] = None
+
+ # init redo undo track
ee.data["undo_counter"] = 0
+ ee.data["redo_counter"] = 0
ee.data["undo_track"] = []
+ ee.data["redo_track"] = []
element_w = 455 / 9
element_h = 455 / 9
@@ -264,23 +288,17 @@
for j in xrange(9):
x = 15 + (element_w * (i))
y = 15 + (element_h * (j))
-
value = puzzle[j][i]
-
- display = str(value)
addr = j *9 + i
- print 'row,column,value,addr: ',i,j,value,addr
- text = canvas.Text(text=display, font=("sans serif", 16), color=(0,255,255,255))
- #print i,j,x,y
+ #print 'row,column,value,addr: ',i,j,value,addr
+ text = canvas.Text(text=str(value), font=("sans serif", 16), color=(0,255,255,255))
if(value>0):
+ text.data["fixed"] = True
text.color_set(10,10,10,200)
+ else:
+ text.data["fixed"] = False
text.pos_set(x,y)
text.show()
- text.data["value"] = value
- if(value>0):
- text.data["fixed"] = True
- else:
- text.data["fixed"] = False
text_data = "button" + str(addr)
ee.data[text_data] = text
More information about the commitlog
mailing list