Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/creator.py
diff options
context:
space:
mode:
Diffstat (limited to 'tutorius/creator.py')
-rw-r--r--tutorius/creator.py58
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()