From a3cf21dcced998951be41cef43e8815545c00cb8 Mon Sep 17 00:00:00 2001 From: Simon Poirier Date: Wed, 21 Oct 2009 14:03:00 +0000 Subject: merge creator -- remove me --- diff --git a/addons/gtkwidgeteventfilter.py b/addons/gtkwidgeteventfilter.py index 6f8d797..5811744 100644 --- a/addons/gtkwidgeteventfilter.py +++ b/addons/gtkwidgeteventfilter.py @@ -14,7 +14,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA from sugar.tutorius.filters import EventFilter -from sugar.tutorius.properties import TUAMProperty, TStringProperty +from sugar.tutorius.properties import TUAMProperty, TGtkSignal from sugar.tutorius.gtkutils import find_widget class GtkWidgetEventFilter(EventFilter): diff --git a/data/icons/clock.svg b/data/icons/clock.svg index 8adb898..dc73bbb 100644 --- a/data/icons/clock.svg +++ b/data/icons/clock.svg @@ -1,6 +1,6 @@ - + @@ -266,4 +266,4 @@ - \ No newline at end of file + diff --git a/tutorius/core.py b/tutorius/core.py index 6030457..0f33052 100644 --- a/tutorius/core.py +++ b/tutorius/core.py @@ -515,8 +515,8 @@ class FiniteStateMachine(State): #TODO : Move this code inside the State itself - we're breaking # encap :P - for event, state in st._transitions: - if state == state_name: + for event in st._transitions: + if st._transitions[event] == state_name: del st._transitions[event] # Remove the state from the dictionary 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() diff --git a/tutorius/viewer.py b/tutorius/viewer.py index e0ae4a9..751e89a 100644 --- a/tutorius/viewer.py +++ b/tutorius/viewer.py @@ -179,7 +179,7 @@ class Viewer(object): if event_list: local_height = (block_max_height - BLOCK_PADDING)/len(event_list) - BLOCK_PADDING ctx.save() - for event in event_list: + for event, next_state in event_list: origin = tuple(ctx.get_matrix())[-2:] if self.click_pos and \ self.click_pos[0]-BLOCK_WIDTH