Äīźóģåķņ āē’ņ čē źżųą ļīčńźīāīé ģąųčķū. Ąäšåń īščćčķąėüķīćī äīźóģåķņą : http://kodomo.cmm.msu.su/trac/cca/changeset/69
Äąņą čēģåķåķč’: Unknown
Äąņą čķäåźńčšīāąķč’: Sun Apr 10 00:59:09 2016
Źīäčšīāźą: UTF-8
Changeset 69:ac96d7c2c7c4 ? Cyclyc Cell Automata

Changeset 69:ac96d7c2c7c4


Ignore:
Timestamp:
12/11/10 22:32:04 (5 years ago)
Author:
is_rusinov
Branch:
default
Message:

+ clean_field and random_fill (fix #13); correct critical mistake with changing of dicts while state_list changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Interface.py

    r66 r69 š
    11import mathš
    š2import randomš
    23import tkColorChooserš
    34from Tkinter import *š
    ? ? š
    145146                                try:š
    146147                                        index = (automata.symbols[automata.field[row][col]] + num_states + order) % num_statesš
    147š                                        if self.char != None and self.keys.has_key(self.char):š
    š148                                        if self.char != None and self.char in self.keys:š
    148149                                                index = self.keys[self.char]š
    149150                                        automata.field[row][col] = automata.states[index].symbolš
    ? ? š
    158159                if self.col1 >= 0 and self.row1 >= 0:š
    159160                        self.new_state([(self.row1, self.col1)])š
    160š                š
    š161        š
    161162        def motion1(self, event):# drawerš
    162163                col = (event.x - self.offset_x * (self.cell_size + self.line_width)) / (self.cell_size + self.line_width)š
    ? ? š
    224225                        index = selectedš
    225226                        state = automata.states[index]š
    226š                        print stateš
    227227                        del automata.states[index]š
    228228                        automata.states.insert(0, state)š
    229229                        self.selected_state = 0š
    š230                        self.refresh_dicts()š
    230231                        self.refresh_list()š
    231232        š
    ? ? š
    235236                        index = selectedš
    236237                        state = automata.states[index]š
    237š                        print stateš
    238238                        del automata.states[index]š
    239239                        automata.states.append(state)š
    240240                        self.selected_state = len(automata.states) - 1š
    š241                        self.refresh_dicts()š
    241242                        self.refresh_list()š
    242243        š
    ? ? š
    247248                        if index > 0:š
    248249                                state = automata.states[index]š
    249š                                print stateš
    250250                                del automata.states[index]š
    251251                                automata.states.insert(index - 1, state)š
    252252                                self.selected_state = index - 1š
    š253                                self.refresh_dicts()š
    253254                                self.refresh_list()š
    254255        š
    ? ? š
    259260                        if index < state_list.size() - 1:š
    260261                                state = automata.states[index]š
    261š                                print stateš
    262262                                del automata.states[index]š
    263263                                automata.states.insert(index + 1, state)š
    264264                                self.selected_state = index + 1š
    š265                                self.refresh_dicts()š
    265266                                self.refresh_list()š
    266267        š
    267268        def delete_state(self):# delete choosen stateš
    268269                selected = self.selected_stateš
    269š                if selected != None:š
    š270                if selected != None and len(automata.states) != 1:š
    270271                        index = selectedš
    271š                        print automata.states[index]š
    272š                        del automata.symbols[automata.states[index].symbol]š
    273š                        for key in self.keys.keys():š
    274š                                if self.keys[key] == index:š
    275š                                        del self.keys[key]š
    276š                        del automata.st_sym[automata.states[index].symbol]š
    š272                        symbol = automata.states[index].symbolš
    277273                        del automata.states[index]š
    š274                        self.refresh_dicts()š
    278275                        if index in automata.states:š
    279276                                self.selected_state = indexš
    280š                        elif len(automata.states):š
    š277                        else:š
    281278                                self.selected_state = len(automata.states) - 1š
    282š                        else:š
    283š                                self.selected_state = Noneš
    284279                        self.refresh_list()š
    285280                        self.select_item(self.selected_state)š
    š281                        self.draw_changed_state(symbol, automata.states[0].symbol)š
    š282                else:š
    š283                        error.config(text="Operation is refused")š
    š284                        error.after(2000, self.clear_error)š
    286285        š
    287286        def add(self):# add new stateš
    ? ? š
    296295                if self.keys.has_key(key):š
    297296                        error.config(text="State with such key has already existed")š
    š297                        error.after(2000, self.clear_error)š
    298298                        state_key.focus()š
    299299                elif len(key) != 1:š
    300300                        error.config(text="Bad key for state")š
    š301                        error.after(2000, self.clear_error)š
    301302                        state_key.focus()š
    302303                elif automata.symbols.has_key(symbol):š
    303304                        error.config(text="State with such symbol has already existed")š
    š305                        error.after(2000, self.clear_error)š
    304306                        state_symbol.focus()š
    305307                elif len(symbol) != 1:š
    306308                        error.config(text="Bad symbol for state")š
    š309                        error.after(2000, self.clear_error)š
    307310                        state_symbol.focus()š
    308311                else:š
    309š                        state = State(name, symbol, color, nums)š
    š312                        state = State(name, symbol, color, key, nums)š
    310313                        automata.states.append(state)š
    311314                        automata.symbols[symbol] = len(automata.states) - 1š
    ? ? š
    331334                        if self.keys.has_key(key) and self.keys[key] != index:š
    332335                                error.config(text="State with such key has already existed")š
    š336                                error.after(2000, self.clear_error)š
    333337                                state_key.focus()š
    334338                        elif len(key) != 1:š
    335339                                error.config(text="Bad key for state")š
    š340                                error.after(2000, self.clear_error)š
    336341                                state_key.focus()š
    337342                        elif automata.symbols.has_key(symbol)  and automata.symbols[symbol] != index:š
    338343                                error.config(text="State with such symbol has already existed")š
    š344                                error.after(2000, self.clear_error)š
    339345                                state_symbol.focus()š
    340346                        elif len(symbol) != 1:š
    341347                                error.config(text="Bad symbol for state")š
    š348                                error.after(2000, self.clear_error)š
    342349                                state_symbol.focus()š
    343350                        else:š
    344š                                state = State(name, symbol, color, nums)š
    345š                                del automata.symbols[automata.states[index].symbol]š
    346š                                automata.symbols[symbol] = indexš
    347š                                del automata.st_sym[automata.states[index].symbol]š
    348š                                automata.st_sym[symbol] = stateš
    349š                                self.keys[key] = indexš
    350š                                error.config(text="")š
    š351                                state = State(name, symbol, color, key, nums)š
    š352                                self.draw_changed_state(automata.states[index].symbol, symbol)š
    351353                                automata.states[index] = stateš
    š354                                self.refresh_dicts()š
    352355                                self.refresh_list()š
    š356        š
    š357        def draw_changed_state(self, symbol_old, symbol_new):š
    š358                cells = []š
    š359                for row in range(automata.height):š
    š360                        for col in range(automata.width):š
    š361                                if automata.field[row][col] == symbol_old:š
    š362                                        automata.field[row][col] = symbol_newš
    š363                                        cells.append((row, col))š
    š364                š
    š365                self.draw_cell(cells)š
    353366        š
    354367        def show_size_window(self):š
    ? ? š
    398411                if len(selected):š
    399412                        self.select_item(self.selected_state)š
    š413        š
    400414        def choose_color(self, event):š
    401415                state_color.config(bg=tkColorChooser.askcolor()[1])š
    š416        š
    š417        def clear_error(self):š
    š418                error.config(text="")š
    š419        š
    š420        def clean_field(self):š
    š421                symbol = automata.states[0].symbolš
    š422                cells = []š
    š423                for row in range(automata.height):š
    š424                        for col in range(automata.width):š
    š425                                if automata.field[row][col] != symbol:š
    š426                                        automata.field[row][col] = symbolš
    š427                                        cells.append((row, col))š
    š428                self.draw_cell(cells)š
    š429        š
    š430        def fill_randomly(self):š
    š431                cells = []š
    š432                for row in range(automata.height):š
    š433                        for col in range(automata.width):š
    š434                                automata.field[row][col] = automata.states[random.randint(0, len(automata.states) - 1)].symbolš
    š435                                cells.append((row, col))š
    š436                self.draw_cell(cells)š
    š437        š
    š438        def refresh_dicts(self):š
    š439                automata.symbols = {}š
    š440                automata.st_sym = {}š
    š441                self.keys = {}š
    š442                for index, state in enumerate(automata.states):š
    š443                        automata.symbols[state.symbol] = indexš
    š444                        automata.st_sym[state.symbol] = stateš
    š445                        self.keys[state.key] = indexš
    š446        š
    402447š
    403448š
    ? ? š
    600645menu_action.add_command(label="Zoom Out", command=handlers.zoom_out)š
    601646menu_action.add_separator()š
    602šmenu_action.add_command(label="Clean field")š
    603šmenu_action.add_command(label="Fill randomly")š
    š647menu_action.add_command(label="Clean field", command=handlers.clean_field)š
    š648menu_action.add_command(label="Fill randomly", command=handlers.fill_randomly)š
    604649menu_action.add_separator()š
    605650menu_action.add_command(label="Change size",command=handlers.show_size_window)š
Note: See TracChangeset for help on using the changeset viewer.