cca
diff Interface.py @ 15:b9d58d90c534
Automated merge with ssh://kodomo.fbb.msu.ru/cca
author | is_rusinov |
---|---|
date | Sat, 04 Dec 2010 22:03:22 +0300 |
parents | 556e04a9a417 9d820c8401c0 |
children | 082f39cbee45 |
line diff
1.1 --- a/Interface.py Sat Dec 04 21:58:05 2010 +0300 1.2 +++ b/Interface.py Sat Dec 04 22:03:22 2010 +0300 1.3 @@ -1,15 +1,24 @@ 1.4 from Tkinter import * 1.5 1.6 +from State import * 1.7 +from Automata import * 1.8 + 1.9 + 1.10 class Handlers(object): 1.11 1.12 - def __init__(self, cell_size=5, delay=10, offset_x=0, offset_y=0):# cell_size is size of cell, including line width, if there is it 1.13 + def __init__(self, cell_size=5, line_width=1 ,delay=10, offset_x=0, offset_y=0):# cell_size is size of cell, including line width, if there is it 1.14 self.cell_size = cell_size 1.15 + self.line_width = line_width 1.16 self.delay = delay 1.17 self.offset_x = offset_x 1.18 self.offset_y = offset_y 1.19 self.after_id = 0 1.20 + self.mouse_x = 0 1.21 + self.mouse_y = 0 1.22 + self.mouse_zoom = 0 1.23 + self.zoom_divisor = 10 1.24 self.is_started = False 1.25 - 1.26 + self.keys = dict() 1.27 def start(self): 1.28 if not self.is_started: 1.29 self.is_started = True 1.30 @@ -33,7 +42,7 @@ 1.31 def help(): 1.32 pass 1.33 1.34 - def close_help_window 1.35 + def close_help_window(): 1.36 pass 1.37 1.38 def zoom_in(self, zoom_rate=1): 1.39 @@ -62,14 +71,14 @@ 1.40 elif position == 1 or position == 4 or position == 7: 1.41 automata.change_size(dx / 2, 3) 1.42 automata.change_size(dx - dx / 2, 1) 1.43 - else 1.44 + else: 1.45 automata.change_size(dx, 1) 1.46 if position == 0 or position == 1 or position == 2: 1.47 automata.change_size(dy, 0) 1.48 elif position == 3 or position == 4 or position == 5: 1.49 automata.change_size(dy / 2, 0) 1.50 automata.change_size(dy - dy / 2, 2) 1.51 - else 1.52 + else: 1.53 automata.change_size(dy, 2) 1.54 self.draw() 1.55 1.56 @@ -77,28 +86,70 @@ 1.57 pass 1.58 1.59 def press1(self, event):# drawer 1.60 - pass 1.61 + column = (event.x - self.offset_x) / (self.cell_size + self.line_width) 1.62 + row = (event.y - self.offset_y) / (self.cell_size + self.line_width) 1.63 + index = (automata.symbols[automata.field[row][column]] + 1) % len(automata.states) 1.64 + automata.field[row][column] = automata.states[index].symbol 1.65 + self.draw() 1.66 1.67 def motion1(self, event):# drawer 1.68 - pass 1.69 + column = (event.x - self.offset_x) / (self.cell_size + self.line_width) 1.70 + row = (event.y - self.offset_y) / (self.cell_size + self.line_width) 1.71 + index = (automata.symbols[automata.field[row][column]] + 1) % len(automata.states) 1.72 + automata.field[row][column] = automata.states[index].symbol 1.73 + self.draw() 1.74 1.75 def press3(self, event):# drawer 1.76 - pass 1.77 + column = (event.x - self.offset_x) / (self.cell_size + self.line_width) 1.78 + row = (event.y - self.offset_y) / (self.cell_size + self.line_width) 1.79 + index = (automata.symbols[automata.field[row][column]] + len(automata.states) - 1) % len(automata.states) 1.80 + automata.field[row][column] = automata.states[index].symbol 1.81 + self.draw() 1.82 1.83 def motion3(self, event):# drawer 1.84 - pass 1.85 + column = (event.x - self.offset_x) / (self.cell_size + self.line_width) 1.86 + row = (event.y - self.offset_y) / (self.cell_size + self.line_width) 1.87 + index = (automata.symbols[automata.field[row][column]] + len(automata.states) - 1) % len(automata.states) 1.88 + automata.field[row][column] = automata.states[index].symbol 1.89 + self.draw() 1.90 1.91 - def press_key1(self, event):# drawer+change_scale (B1+ctrl) 1.92 - pass 1.93 + def press1_key(self, event):# drawer 1.94 + if keys.has_key(event.char): 1.95 + column = (event.x - self.offset_x) / (self.cell_size + self.line_width) 1.96 + row = (event.y - self.offset_y) / (self.cell_size + self.line_width) 1.97 + automata.field[row][column] = automata.states[keys[event.char]].symbol 1.98 + self.draw() 1.99 1.100 - def motion_key1(self, event):# drawer+change_scale (B1+ctrl) 1.101 - pass 1.102 + def motion1_key(self, event):# drawer 1.103 + if keys.has_key(event.char): 1.104 + column = (event.x - self.offset_x) / (self.cell_size + self.line_width) 1.105 + row = (event.y - self.offset_y) / (self.cell_size + self.line_width) 1.106 + automata.field[row][column] = automata.states[keys[event.char]].symbol 1.107 + self.draw() 1.108 + 1.109 + def press1_ctrl(self, event):# change_scale (B1+ctrl) 1.110 + self.mouse_x = event.x 1.111 + self.mouse_y = event.y 1.112 + 1.113 + def motion1_ctrl(self, event):# change_scale (B1+ctrl) 1.114 + self.offset_x = event.x - self.mouse_x 1.115 + self.offset_y = event.y - self.mouse_y 1.116 + self.mouse_x = event.x 1.117 + self.mouse_y = event.y 1.118 + self.draw() 1.119 1.120 def press12(self, event):# zoom 1.121 - pass 1.122 + self.mouse_zoom = event.y 1.123 1.124 def motion12(self, event):# zoom 1.125 - pass 1.126 + delta = (event.y - self.mouse_zoom) / self.zoom_divisor 1.127 + self.cell_size = self.cell_size + delta 1.128 + if self.cell_size > 50: 1.129 + self.cell_size = 50 1.130 + if self.cell_size < 1: 1.131 + self.cell_size = 1 1.132 + self.mouse_zoom = event.y 1.133 + self.draw() 1.134 1.135 def automata_frame(self):# show automata_frame 1.136 automata_frame.pack(side="right", fill="y", expand="no", before=canvas) 1.137 @@ -136,7 +187,10 @@ 1.138 1.139 def change():# change chosen state 1.140 pass 1.141 - 1.142 + def show_size_window(self): 1.143 + size_window.deiconify() 1.144 + def hide_size_window(self): 1.145 + size_window.withdraw() 1.146 1.147 1.148 root = Tk()