Changeset 4519


Ignore:
Timestamp:
07/09/08 18:13:51 (5 years ago)
Author:
erin_yueh
Message:

add undo, redo functions, all functions are workable (Erin Yueh)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py

    r4518 r4519  
    55import edje 
    66import random 
    7 import etk 
     7#import etk 
    88 
    99WINDOW_WIDTH = 455 
     
    1717    isOK = True 
    1818    puzzle = ee.data["puzzle"] 
    19     print 'checkRow',row,value 
     19    #print 'checkRow',row,value 
    2020    for j in xrange(9): 
    21         print puzzle[row][j] 
     21        #print puzzle[row][j] 
    2222        if(value == puzzle[row][j]): 
    2323            isOK = False 
     
    2727    isOK = True 
    2828    puzzle = ee.data["puzzle"] 
    29     print 'checkColumn',column,value 
     29    #print 'checkColumn',column,value 
    3030    for i in xrange(9): 
    31         print puzzle[i][column] 
     31        #print puzzle[i][column] 
    3232        if(value == puzzle[i][column]): 
    3333            isOK = False 
     
    3737    isOK = True 
    3838    puzzle = ee.data["puzzle"] 
    39     print 'checkGroup',group,value 
     39    #print 'checkGroup',group,value 
    4040    (group,r,c) = GROUP_ROWCOL[str(group)] 
    4141    for i in xrange (r,r+3): 
    4242        for j in xrange(c,c+3): 
    43             print puzzle[i][j] 
     43            #print puzzle[i][j] 
    4444            if(value == puzzle[i][j]): 
    4545                isOK = False 
     
    6060def analyze(button,value): 
    6161    isOK = True 
    62     puzzle = ee.data["puzzle"] 
    63     # button40 2 
     62    #puzzle = ee.data["puzzle"] 
    6463    addr = button[6:] 
    6564    print addr, value 
     
    6766    j = int(addr) % 9 
    6867    g = (i/3)*3 + (j/3) 
    69     print i,j,g 
     68    print i,j,g,addr,value 
    7069    if(checkRow(i,value) == False or checkColumn(j,value) == False or checkGroup(g,value) == False): 
    7170        return False 
     
    7675    print 'number_key_cb emission,source:',emission,source 
    7776     
    78     if(source == 'clear'): 
    79         puzzle_clone = ee.data["puzzle_clone"] 
    80         puzzle = ee.data["puzzle"] 
    81         for i in xrange (9): 
    82             for j in xrange(9): 
    83                 value = puzzle_clone[i][j] 
    84                  
    85                 print 'i,j,value,puzzle[i][j]',i,j,value,puzzle[i][j] 
    86                 puzzle[i][j] = value 
    87                 addr = j + i *9 
    88                 text_data = "button" + str(addr) 
    89                 text = ee.data[text_data]  
    90                 text.data["value"] = value 
    91                 text.text_set(str(value)) 
    92                 if(value>0): 
    93                     text.color_set(10,10,10,200) 
    94                 elif(value==0): 
    95                     text.color_set(0,255,255,255) 
     77    if(source == 'clear' or source == 'create'): 
     78        # init undo redo action track 
    9679        ee.data["undo_counter"] = 0 
     80        ee.data["redo_counter"] = 0 
    9781        ee.data["undo_track"] = [] 
    98         print 'clear all data!!' 
     82        ee.data["redo_track"] = [] 
     83        ee.data["clicking"] = None 
     84        if(source == 'clear'): 
     85            puzzle_clone = ee.data["puzzle_clone"] 
     86            puzzle = ee.data["puzzle"] 
     87            for i in xrange (9): 
     88                for j in xrange(9): 
     89                    value = puzzle_clone[i][j] 
     90                    #print 'i,j,value,puzzle[i][j]',i,j,value,puzzle_clone[i][j] 
     91                    puzzle[i][j] = value 
     92                    addr = j + i *9 
     93                    text_data = "button" + str(addr) 
     94                    text = ee.data[text_data]  
     95                    text.text_set(str(value)) 
     96                    if(value>0): 
     97                        text.color_set(10,10,10,200) 
     98                    elif(value==0): 
     99                        text.color_set(0,255,255,255) 
     100            print 'clear all data!!' 
     101        elif(source == 'create'): 
     102            print 'create new puzzle' 
     103            createNewPuzzle() 
    99104    elif(source =='undo'): 
    100105        print 'undo' 
     
    104109        undo_counter = ee.data["undo_counter"] 
    105110        (addr,value) = ee.data["undo_track"][undo_counter-1] 
    106         ee.data["undo_track"].pop() 
    107          
     111        redo = ee.data["undo_track"].pop() 
     112        ee.data["redo_track"].append(redo) 
     113        redo_counter = ee.data["redo_counter"] 
     114        ee.data["redo_counter"] = redo_counter+1 
    108115        i = int(addr) / 9 
    109116        j = int(addr) % 9 
     
    114121        text.color_set(100,255,0,255) 
    115122        ee.data["puzzle"][i][j] = original_value 
    116         text.data["value"] = original_value 
     123        #text.data["value"] = original_value 
    117124        if(undo_counter>0): 
    118125            ee.data["undo_counter"] = undo_counter-1 
    119126    elif(source == 'redo'): 
    120127        print 'redo' 
    121         print ee.data["undo_counter"], ee.data["undo_track"] 
     128        if(ee.data["redo_counter"] == 0): 
     129            return 
     130        print ee.data["redo_counter"], ee.data["redo_track"] 
     131        redo_counter = ee.data["redo_counter"] 
     132        (addr,value) = ee.data["redo_track"][redo_counter-1] 
     133        undo = ee.data["redo_track"].pop() 
     134        ee.data["undo_track"].append(undo) 
     135        undo_counter = ee.data["undo_counter"] 
     136        ee.data["undo_counter"] = undo_counter+1 
     137         
     138        i = int(addr) / 9 
     139        j = int(addr) % 9 
     140        text = ee.data["button"+str(addr)] 
     141        print i,j,value,text 
     142        text.text_set(str(value)) 
     143        text.color_set(255,255,0,255) 
     144        ee.data["puzzle"][i][j] = int(value) 
     145        #text.data["value"] = int(value) 
     146        if(redo_counter>0): 
     147            ee.data["redo_counter"] = redo_counter-1 
     148         
    122149    elif(source == 'solve'): 
    123150        print 'is solved?!' 
     
    126153        else: 
    127154            print 'YES' 
    128     elif(source == 'create'): 
    129         print 'create' 
    130         createNewPuzzle() 
    131         ee.data["undo_counter"] = 0 
    132         ee.data["undo_track"] = [] 
     155 
    133156    else:  
    134157        # fill in key number 
     
    136159            text = ee.data[ee.data["clicking"]] 
    137160            text.text_set(source) 
    138             text.data["value"] = int(source) 
    139161            button = ee.data["clicking"] 
    140             addr = button[6:] 
     162            #addr = button[6:] 
     163            addr = ee.data["clicking"][6:] 
    141164            i = int(addr) / 9 
    142165            j = int(addr) % 9 
     
    154177            ee.data["undo_counter"] = undo_counter +1 
    155178            step = (int(addr),int(source)) 
    156             track = ee.data["undo_track"] 
    157             track.append(step) 
    158             print 'counter:',ee.data["undo_counter"] 
    159             print 'track:',track 
     179            ee.data["undo_track"].append(step) 
     180            #print 'undo_counter:',ee.data["undo_counter"] 
     181            #print 'undo_track:',ee.data["undo_track"] 
    160182    return True 
    161183 
     
    192214     
    193215    puzzle = get_puzzle() 
    194     print 'puzzle',puzzle 
     216    print 'new puzzle',puzzle 
    195217    for i in xrange(9): 
    196218        for j in xrange(9): 
     
    201223            text_data = "button" + str(addr) 
    202224            text = ee.data[text_data]  
    203             text.data["value"] = value 
    204225            text.text_set(str(value)) 
    205226            if(value>0): 
     
    220241    ee.size_min_set(WINDOW_WIDTH,WINDOW_HEIGHT) 
    221242    canvas = ee.evas 
    222      
     243 
    223244    # create a background  
    224245    bg = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/background") 
     
    228249    ee.data["bg"] = bg 
    229250 
    230     # create puzzle and icons 
     251    # create number keyboard and action icons 
    231252    area = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/panel") 
    232253    area.signal_callback_add("mouse,clicked,*", "*", number_key_cb) 
     
    236257    area.data["area"] = area 
    237258 
    238     # create puzzle and icons 
     259    # create puzzle board 
    239260    board = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", group="pythonEFL-sudoku/board") 
    240261    board.signal_callback_add("mouse,clicked,*", "*", puzzle_key_cb) 
    241262    board.pos = (0, 0) 
    242263    board.show() 
    243      
     264 
     265    # retrieve one puzzle data 
    244266    puzzle = get_puzzle() 
    245     print 'puzzle',puzzle 
    246267    puzzle_clone = [] 
    247268    for i in xrange(9): 
     
    250271            row.append(puzzle[i][j]) 
    251272        puzzle_clone.append(row) 
    252     print 'puzzle_clone', puzzle_clone 
    253      
     273    print 'puzzle',puzzle, puzzle_clone 
    254274    ee.data["puzzle"] = puzzle 
    255275    ee.data["puzzle_clone"] = puzzle_clone 
    256      
     276    ee.data["clicking"] = None 
     277 
     278    # init redo undo track 
    257279    ee.data["undo_counter"] = 0 
     280    ee.data["redo_counter"] = 0 
    258281    ee.data["undo_track"] = [] 
     282    ee.data["redo_track"] = [] 
    259283     
    260284    element_w = 455 / 9 
     
    265289            x = 15 + (element_w * (i)) 
    266290            y = 15 + (element_h * (j)) 
    267              
    268291            value = puzzle[j][i] 
    269              
    270             display = str(value) 
    271292            addr = j *9 + i 
    272             print 'row,column,value,addr: ',i,j,value,addr 
    273             text = canvas.Text(text=display, font=("sans serif", 16), color=(0,255,255,255)) 
    274             #print i,j,x,y 
     293            #print 'row,column,value,addr: ',i,j,value,addr 
     294            text = canvas.Text(text=str(value), font=("sans serif", 16), color=(0,255,255,255)) 
    275295            if(value>0): 
     296                text.data["fixed"] = True 
    276297                text.color_set(10,10,10,200) 
     298            else: 
     299                text.data["fixed"] = False 
    277300            text.pos_set(x,y) 
    278301            text.show() 
    279             text.data["value"] = value 
    280             if(value>0): 
    281                 text.data["fixed"] = True 
    282             else: 
    283                 text.data["fixed"] = False 
    284302            text_data = "button" + str(addr) 
    285303            ee.data[text_data] = text 
Note: See TracChangeset for help on using the changeset viewer.