diff options
Diffstat (limited to 'tutorius/creator.py')
-rw-r--r-- | tutorius/creator.py | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/tutorius/creator.py b/tutorius/creator.py index d8f3d98..d5595e1 100644 --- a/tutorius/creator.py +++ b/tutorius/creator.py @@ -34,7 +34,7 @@ from sugar.tutorius import overlayer, gtkutils, actions, bundler, properties, ad from sugar.tutorius import filters, __path__ from sugar.tutorius.services import ObjectStore from sugar.tutorius.linear_creator import LinearCreator -from sugar.tutorius.core import Tutorial +from sugar.tutorius.core import Tutorial, FiniteStateMachine, State from sugar.tutorius import viewer class Creator(object): @@ -97,6 +97,17 @@ class Creator(object): self._overview.win.move(0, gtk.gdk.screen_height()- \ self._overview.win.get_allocation().height) + self._transitions = dict() + + def set_next_state(self, state, event, next_state): + # FIXME HACK + self._transitions[event] = next_state + + evts = state.get_event_filter_list() + state.clear_event_filters() + for evt, next_state in evts: + state.add_event_filter(evt, self._transitions[evt]) + def delete_action(self, action): """ Removes the first instance of specified action from the tutorial. @@ -121,8 +132,8 @@ class Creator(object): ev_list = state.get_event_filter_list() if ev_list: - state = self._tutorial.get_state_by_name( - ev_list[0].get_next_state()) + state = self._tutorial.get_state_by_name(ev_list[0][1]) + #ev_list[0].get_next_state()) continue return False @@ -141,9 +152,9 @@ class Creator(object): state = self._tutorial.get_state_by_name("INIT") ev_list = state.get_event_filter_list() - if state == self._state: - next_state = self._tutorial.get_state_by_name( - ev_list[0].get_next_state()) + if state is self._state: + next_state = self._tutorial.get_state_by_name(ev_list[0][1]) + #ev_list[0].get_next_state()) self.set_insertion_point(next_state.name) self._tutorial.remove_state(state.name) self._tutorial.remove_state(next_state.name) @@ -153,20 +164,23 @@ class Creator(object): # loop to repair links from deleted state while ev_list: - next_state = self._tutorial.get_state_by_name( - ev_list[0].get_next_state()) + next_state = self._tutorial.get_state_by_name(ev_list[0][1]) + #ev_list[0].get_next_state()) if next_state is self._state: # the tutorial will flush the event filters. We'll need to # clear and re-add them. - ev_list = copy.copy(ev_list) self._tutorial.remove_state(self._state.name) state.clear_event_filters() - ev_list[0].set_next_state( - next_state.get_event_filter_list()[0].get_next_state()) - for ev in ev_list: - state.add_event_filter(ev) - - self.set_insertion_point(ev_list[0].get_next_state()) + # FIXME HACK START + self.set_next_state(state, ev_list[0][0], next_state.get_event_filter_list()[0][1]) + #ev_list[0].set_next_state( + # next_state.get_event_filter_list()[0].get_next_state()) + # FIXME HACK END + for ev, next_state in ev_list: + state.add_event_filter(ev, next_state) + + self.set_insertion_point(ev_list[0][1]) + #self.set_insertion_point(ev_list[0].get_next_state()) return True state = next_state @@ -285,18 +299,22 @@ class Creator(object): new_state = State(name=str(self._state_counter)) self._state_counter += 1 self._state.clear_event_filters() - for evt_filt in event_filters: - new_state.add_event_filter(evt_filt) - event.set_next_state(new_state.name) + for evt_filt, next_state in event_filters: + new_state.add_event_filter(evt_filt, next_state) + self.set_next_state(self._state, event, new_state.name) + next_state = new_state.name + #event.set_next_state(new_state.name) # blocks are shifted, full redraw is necessary self._overview.win.queue_draw() else: # append empty event only if edit not inserting between events - event.set_next_state(str(self._state_counter)) + self.set_next_state(self._state, event, str(self._state_counter)) + next_state = str(self._state_counter) + #event.set_next_state(str(self._state_counter)) new_state = State(name=str(self._state_counter)) self._state_counter += 1 - self._state.add_event_filter(event) + self._state.add_event_filter(event, next_state) self._tutorial.add_state(new_state) self._overview.win.queue_draw() |