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