diff options
author | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-01-25 18:24:47 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-01-25 18:29:23 (GMT) |
commit | 817df3a10741ac4f984762a353f18b9eaeea2370 (patch) | |
tree | f092e6716b47436592e3c31fa0f159b646a9898c /view.py | |
parent | 7fc1f05973a16f9852d6c25d4f2484384747e00a (diff) |
Move to gaphas
Diffstat (limited to 'view.py')
-rw-r--r-- | view.py | 42 |
1 files changed, 29 insertions, 13 deletions
@@ -19,14 +19,14 @@ from gettext import gettext as _ import gobject import gtk +from gaphas import GtkView, Canvas, state # We'd rather not depend on sugar in this class from sugar.graphics import style -from canvas import Canvas from thoughtview import ThoughtView -class MindMapView(Canvas): +class MindMapView(GtkView): __gtype_name__ = 'MindMapView' @@ -36,16 +36,29 @@ class MindMapView(Canvas): self._row_deleted_sid = None self._selected_thought = None - Canvas.__init__(self) + GtkView.__init__(self) - self.dragging_started.connect(self.__dragging_started_cb) - self.dragging_finished.connect(self.__dragging_finished_cb) + self.canvas = Canvas() - self.connect('button-release-event', self.__button_release_event_cb) + #self.dragging_started.connect(self.__dragging_started_cb) + #self.dragging_finished.connect(self.__dragging_finished_cb) + + #self.connect('button-release-event', self.__button_release_event_cb) if model is not None: self.model = model + state.observers.add(self.__state_changed_cb) + + def __state_changed_cb(self, event): + func, args, dict_ = event + if len(args) > 1 and isinstance(args[1], ThoughtView): + thought_view = args[1] + x, y = thought_view.get_position() + row = self.model.find_by_id(thought_view.id) + if row[2] != x or row[3] != y: + self.model.set(row.iter, 2, x, 3, y) + def __dragging_started_cb(self, **kwargs): x, y = kwargs['position'] logging.debug('__dragging_started_cb %r %r' % (x, y)) @@ -98,7 +111,8 @@ class MindMapView(Canvas): self._row_deleted_sid = \ self._model.connect('row-deleted', self.__row_deleted_cb) - self.remove_all_elements() + for item in self.canvas.get_all_items(): + self.canvas.remove(item) self._populate_from_model(self._model) def _populate_from_model(self, rows): @@ -113,19 +127,21 @@ class MindMapView(Canvas): model = property(get_model, set_model) def __row_changed_cb(self, model, path, iter): - logging.debug('__row_changed_cb %r' % path) + #logging.debug('__row_changed_cb %r' % path) row = model[iter] thought_view = self._get_thought_by_id(row[0]) if thought_view is None: thought_view = ThoughtView(row[0], row[1], row[2], row[3], row[4]) - self.add_element(thought_view) + self.canvas.add(thought_view) else: thought_view.name = row[1] + thought_view.set_position(row[2], row[3]) thought_view.x = row[2] thought_view.y = row[3] thought_view.color = row[4] - thought_view.invalidate() + + self.canvas.request_update(thought_view) def __row_deleted_cb(self, model, path): logging.debug('__row_deleted_cb %r' % path) @@ -135,8 +151,8 @@ class MindMapView(Canvas): self.remove_element(thought_view) def _get_thought_by_id(self, thought_id): - for thought_view in self.get_elements(): - if thought_view.id == thought_id: - return thought_view + for item in self.canvas.get_all_items(): + if isinstance(item, ThoughtView) and item.id == thought_id: + return item return None |