# Copyright (C) 2009, Tomeu Vizoso # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import logging import gobject import gtk import cjson from sugar import dispatch class MindMapModel(gtk.TreeStore): def __init__(self): gtk.TreeStore.__init__(self, int, str, long, long, str) self._next_thought_id = 0 self._thoughts_by_id = {} self._thoughts = [] def create_new_thought(self, name='', x=0, y=0, color=''): thought_id = self._next_thought_id self.append(None, (thought_id, name, x, y, color)) self._next_thought_id += 1 return thought_id def serialize(self): thoughts = [] for row in self: logging.debug('serialize %r' % row[0]) thought_dict = {} thought_dict['id'] = row[0] thought_dict['name'] = row[1] thought_dict['x'] = row[2] thought_dict['y'] = row[3] thought_dict['color'] = row[4] thoughts.append(thought_dict) return cjson.encode({'thoughts': thoughts}) def unserialize(self, data): thoughts = cjson.decode(data)['thoughts'] for thought_dict in thoughts: self._next_thought_id = max(self._next_thought_id + 1, thought_dict['id'] + 1) self.append(None, (thought_dict['id'], thought_dict.get('name', None), thought_dict.get('x', None), thought_dict.get('y', None), thought_dict.get('color', None))) def find_by_id(self, thought_id, rows=None): if rows is None: rows = self for row in rows: if row[0] == thought_id: return row self.find_by_id(thought_id, row.iterchildren())