From 857aff7e1c1694a819c0dbc9b9103ef2206699e6 Mon Sep 17 00:00:00 2001 From: Simon Poirier Date: Sun, 15 Nov 2009 22:18:25 +0000 Subject: creator adt migration --- (limited to 'tutorius/viewer.py') diff --git a/tutorius/viewer.py b/tutorius/viewer.py index 272558e..56428e1 100644 --- a/tutorius/viewer.py +++ b/tutorius/viewer.py @@ -18,9 +18,7 @@ This module renders a widget containing a graphical representation of a tutorial and acts as a creator proxy as it has some editing functionality. """ -import sys - -import gtk, gtk.gdk +import gtk import cairo from math import pi as PI PI2 = PI/2 @@ -30,7 +28,6 @@ import rsvg from sugar.bundle import activitybundle from sugar.tutorius import addon from sugar.graphics import icon -from sugar.tutorius.filters import EventFilter from sugar.tutorius.actions import Action import os @@ -66,7 +63,7 @@ class Viewer(object): self.alloc = None self.click_pos = None self.drag_pos = None - self.selection = [] + self.selection = set() self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_size_request(400, 200) @@ -81,7 +78,7 @@ class Viewer(object): canvas = gtk.DrawingArea() vbox.add_with_viewport(canvas) canvas.set_app_paintable(True) - canvas.connect_after("expose-event", self.on_viewer_expose, tutorial._states) + canvas.connect_after("expose-event", self.on_viewer_expose, tutorial) canvas.add_events(gtk.gdk.BUTTON_PRESS_MASK \ |gtk.gdk.BUTTON_MOTION_MASK \ |gtk.gdk.BUTTON_RELEASE_MASK \ @@ -99,10 +96,13 @@ class Viewer(object): canvas.set_size_request(2048, 180) # FIXME def destroy(self): + """ + Destroy ui resources associated with this object. + """ self.win.destroy() - def _paint_state(self, ctx, states): + def _paint_state(self, ctx, tutorial): """ Paints a tutorius fsm state in a cairo context. Final context state will be shifted by the size of the graphics. @@ -111,17 +111,13 @@ class Viewer(object): block_max_height = self.alloc.height new_insert_point = None - cur_state = 'INIT' + state_name = tutorial.INIT # FIXME: get app when we have a model that supports it cur_app = 'Calculate' app_start = ctx.get_matrix() - try: - state = states[cur_state] - except KeyError: - state = None - while state: + while state_name: new_app = 'Calculate' if new_app != cur_app: ctx.save() @@ -132,16 +128,17 @@ class Viewer(object): ctx.translate(BLOCK_PADDING, 0) cur_app = new_app - action_list = state.get_action_list() + action_list = tutorial.get_action_dict(state_name).items() if action_list: - local_height = (block_max_height - BLOCK_PADDING)/len(action_list) - BLOCK_PADDING + local_height = (block_max_height - BLOCK_PADDING)\ + / len(action_list) - BLOCK_PADDING ctx.save() - for action in action_list: + for action_name, action in action_list: origin = tuple(ctx.get_matrix())[-2:] if self.click_pos and \ self.click_pos[0]-BLOCK_WIDTHorigin[0]: - self.selection.append(action) + self.selection.add((action_name, action)) self.render_action(ctx, block_width, local_height, action) ctx.translate(0, local_height+BLOCK_PADDING) @@ -150,7 +147,7 @@ class Viewer(object): # insertion cursor painting made from two opposed triangles # joined by a line. - if state.name == self._creator.get_insertion_point(): + if state_name == self._creator.get_insertion_point(): ctx.save() bp2 = BLOCK_PADDING/2 ctx.move_to(-bp2, 0) @@ -170,36 +167,34 @@ class Viewer(object): ctx.restore() - event_list = state.get_event_filter_list() + event_list = tutorial.get_transition_dict(state_name).items() if event_list: - local_height = (block_max_height - BLOCK_PADDING)/len(event_list) - BLOCK_PADDING + local_height = (block_max_height - BLOCK_PADDING)\ + /len(event_list) - BLOCK_PADDING ctx.save() - for event, next_state in event_list: + for transition_name, transition in event_list: origin = tuple(ctx.get_matrix())[-2:] if self.click_pos and \ self.click_pos[0]-BLOCK_WIDTHorigin[0]: - self.selection.append(event) - self.render_event(ctx, block_width, local_height, event) + self.selection.add((transition_name, transition)) + self.render_event(ctx, block_width, local_height, + event=transition[0]) ctx.translate(0, local_height+BLOCK_PADDING) ctx.restore() ctx.translate(BLOCK_WIDTH, 0) - # FIXME point to next state in state, as it would highlight - # the "happy path". - cur_state = event_list[0][1] - if (not new_insert_point) and self.click_pos: origin = tuple(ctx.get_matrix())[-2:] if self.click_pos[0]