Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/creator.py
diff options
context:
space:
mode:
authorSimon Poirier <simpoir@gmail.com>2009-10-24 21:25:46 (GMT)
committer Simon Poirier <simpoir@gmail.com>2009-10-24 21:25:46 (GMT)
commita0368054cc38c46c343499aebe38050d69df2cd3 (patch)
treea3e17167086aa4f1cff17aad58f55a29e5fdb200 /tutorius/creator.py
parenta6e312c9f0e1bd690963191bb5331eaabb06b431 (diff)
merge creator
Conflicts: tutorius/core.py
Diffstat (limited to 'tutorius/creator.py')
-rw-r--r--tutorius/creator.py45
1 files changed, 26 insertions, 19 deletions
diff --git a/tutorius/creator.py b/tutorius/creator.py
index d8f3d98..b322b69 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,16 @@ class Creator(object):
self._overview.win.move(0, gtk.gdk.screen_height()- \
self._overview.win.get_allocation().height)
+ self._transitions = dict()
+
+ def _update_next_state(self, state, event, next_state):
+ 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 +131,7 @@ 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])
continue
return False
@@ -141,9 +150,8 @@ 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])
self.set_insertion_point(next_state.name)
self._tutorial.remove_state(state.name)
self._tutorial.remove_state(next_state.name)
@@ -153,20 +161,17 @@ 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])
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._update_next_state(state, ev_list[0][0], next_state.get_event_filter_list()[0][1])
+ for ev, next_state in ev_list:
+ state.add_event_filter(ev, next_state)
- self.set_insertion_point(ev_list[0].get_next_state())
+ self.set_insertion_point(ev_list[0][1])
return True
state = next_state
@@ -285,18 +290,20 @@ 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._update_next_state(self._state, event, new_state.name)
+ 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._update_next_state(self._state, event, str(self._state_counter))
+ 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()