diff options
author | Gonzalo Odiard <godiard@gmail.com> | 2012-05-01 07:50:42 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@gmail.com> | 2012-05-01 07:50:42 (GMT) |
commit | 86a0f2454fa3a9b255cabdcd3f7ab362746925d0 (patch) | |
tree | c9e2a7783449785eaedbf97d721eb67c7d336b34 | |
parent | e3dcaa8629a399628425d5485cecf9ea26bd2cd0 (diff) |
Improve synchronization between abms and mapvies
Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r-- | activity.py | 45 | ||||
-rw-r--r-- | mapnav.py | 3 | ||||
-rw-r--r-- | questions.py | 8 | ||||
-rw-r--r-- | resources.py | 4 |
4 files changed, 32 insertions, 28 deletions
diff --git a/activity.py b/activity.py index a55692d..08bed6c 100644 --- a/activity.py +++ b/activity.py @@ -117,8 +117,6 @@ class IngeniumMachinaActivity(activity.Activity): self.prepare_questions_win = None self.edit_map_win = None self.edit_descriptions_win = None - self.views_connected = False - self.resources_maps_connected = False # init game self.activity_mode = PLAY_MODE @@ -140,19 +138,11 @@ class IngeniumMachinaActivity(activity.Activity): else: self.game_map = GameMap(self.model.data['map_data']) self.mapnav_game = MapNavView(self.game_map, self.model) - self.mapnav_game.view_mode = MapNavView.MODE_PLAY self.mapnav_game.show() self.mapnav_game.connect('resource-clicked', self.__resource_clicked_cb) self.mapnav_game.connect('question-clicked', self.__question_clicked_cb) - - # Try connect withthe edition map - if self.edit_map_win is not None and not self.views_connected: - logging.error('Connecting signal map-updated') - self.edit_map_win.nav_view.connect('map-updated', - self.mapnav_game.receive_update_wall_info) - self.views_connected = True return self.mapnav_game def __change_mode_cb(self, button): @@ -170,6 +160,7 @@ class IngeniumMachinaActivity(activity.Activity): else: self.activity_mode = PLAY_MODE self.main_notebook.set_current_page(0) + self.mapnav_game.clear_cache() self.update_buttons_state() def __add_cb(self, button): @@ -214,6 +205,8 @@ class IngeniumMachinaActivity(activity.Activity): self.prepare_questions_win = PrepareQuestionsWin(self) button.page = self.main_notebook.get_n_pages() self.main_notebook.append_page(self.prepare_questions_win) + self.prepare_questions_win.connect('question_updated', + self.__question_updated_cb) self.main_notebook.set_current_page(button.page) self.action = EDIT_QUESTIONS_ACTION @@ -223,33 +216,31 @@ class IngeniumMachinaActivity(activity.Activity): button.page = self.main_notebook.get_n_pages() self.main_notebook.append_page(self.collect_resources_win) # connect signal to know if the resources are updated - if self.edit_map_win is not None and \ - not self.resources_maps_connected: - logging.error('Connecting signal resource_updated') - self.collect_resources_win.connect('resource_updated', - self.edit_map_win.load_resources_and_questions) + self.collect_resources_win.connect('resource_updated', + self.__resources_updated_cb) self.main_notebook.set_current_page(button.page) self.action = EDIT_RESOURCES_ACTION + def __resources_updated_cb(self, origin): + logging.error('** Resources updated signal') + if self.edit_map_win is not None: + self.edit_map_win.load_resources_and_questions() + + def __question_updated_cb(self, origin): + logging.error('** Questions updated signal') + if self.edit_map_win is not None: + self.edit_map_win.load_resources_and_questions() + def __map_button_cb(self, button): if self.edit_map_win is None: self.edit_map_win = EditMapWin(self.model) button.page = self.main_notebook.get_n_pages() self.main_notebook.append_page(self.edit_map_win) - # connect signal to know if the resources are updated - if self.collect_resources_win is not None and \ - not self.resources_maps_connected: - logging.error('Connecting signal resource_updated') - self.collect_resources_win.connect('resource_updated', - self.edit_map_win.load_resources_and_questions) # Try connect with the playing map - if self.edit_descriptions_win is not None and not \ - self.views_connected: - logging.error('Connecting signal map-updated') - self.edit_map_win.nav_view.connect('map-updated', - self.mapnav_game.receive_update_wall_info) - self.views_connected = True + logging.error('Connecting signal map-updated') + self.edit_map_win.nav_view.connect('map-updated', + self.mapnav_game.receive_update_wall_info) self.main_notebook.set_current_page(button.page) self.action = EDIT_MAP_ACTION @@ -93,6 +93,9 @@ class MapNavView(gtk.DrawingArea): self.queue_draw_area(*rect) return True + def clear_cache(self): + self.cache_info = {} + def __key_press_event_cb(self, widget, event): keyname = gtk.gdk.keyval_name(event.keyval) if keyname not in ('Up', 'KP_Up', 'Down', 'KP_Down', 'Left', 'KP_Left', diff --git a/questions.py b/questions.py index 2170c90..bb60153 100644 --- a/questions.py +++ b/questions.py @@ -5,6 +5,8 @@ import os import shutil import cairo +from gobject import SIGNAL_RUN_FIRST + from gettext import gettext as _ from sugar.activity import activity @@ -137,6 +139,10 @@ class DrawReplyArea(gtk.DrawingArea): class PrepareQuestionsWin(gtk.HBox): + __gsignals__ = { + 'question_updated': (SIGNAL_RUN_FIRST, None, []) + } + def __init__(self, activity): gtk.HBox.__init__(self) self._activity = activity @@ -383,6 +389,7 @@ class PrepareQuestionsWin(gtk.HBox): self.quest_listview.get_selection()) self._modified_data = False self._selected_key = None + self.emit('question_updated') def add_question(self): if self._modified_data: @@ -397,3 +404,4 @@ class PrepareQuestionsWin(gtk.HBox): {'text':'', 'valid':False}]} self._display_question(question, display_empty_entries=True) + self.emit('question_updated') diff --git a/resources.py b/resources.py index 6019d07..878f0f1 100644 --- a/resources.py +++ b/resources.py @@ -269,7 +269,9 @@ class CollectResourcesWin(gtk.HBox): # show as self.show_as_icon_check.set_active(resource['show_as'] is not None) self._iconview.set_sensitive(self.show_as_icon_check.get_active()) - self._set_show_as_icon_label(self._get_image_name(resource['show_as'])) + if resource['show_as'] is not None: + self._set_show_as_icon_label( + self._get_image_name(resource['show_as'])) self._modified_data = False |