Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2012-05-01 07:50:42 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-05-01 07:50:42 (GMT)
commit86a0f2454fa3a9b255cabdcd3f7ab362746925d0 (patch)
treec9e2a7783449785eaedbf97d721eb67c7d336b34
parente3dcaa8629a399628425d5485cecf9ea26bd2cd0 (diff)
Improve synchronization between abms and mapvies
Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r--activity.py45
-rw-r--r--mapnav.py3
-rw-r--r--questions.py8
-rw-r--r--resources.py4
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
diff --git a/mapnav.py b/mapnav.py
index efb4aec..8fd51e7 100644
--- a/mapnav.py
+++ b/mapnav.py
@@ -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