# 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 from gettext import gettext as _ # HACK: What else can we do? import sys import os sys.path.insert(0, os.path.join(os.environ['SUGAR_BUNDLE_PATH'], 'gaphas')) import gobject import gtk from sugar.activity import activity from sugar.graphics.toolbutton import ToolButton from model import MindMapModel from view import MindMapView from treeview import TreeView class MindMapActivity(activity.Activity): __gtype_name__ = 'MindMapActivity' def __init__(self, handle): activity.Activity.__init__(self, handle) toolbox = activity.ActivityToolbox(self) self.set_toolbox(toolbox) toolbox.show() self._edit_toolbar = EditToolbar() self._edit_toolbar.new_thought_button.connect('clicked', self.__new_thought_button_cb) toolbox.add_toolbar(_('Edit'), self._edit_toolbar) self._edit_toolbar.show() self._model = MindMapModel() pane = gtk.HPaned() self.set_canvas(pane) pane.show() self._tree_view = TreeView(self._model) pane.add1(self._tree_view) self._tree_view.show() self._view = MindMapView(model=self._model) pane.pack2(self._view) self._view.show() if handle.object_id is None: gobject.idle_add(self.__add_first_thought_cb) def __add_first_thought_cb(self): x, y, width, height = self._view.get_allocation() #TODO: place better the first thought thought_id = self._model.create_new_thought(name=_('Initial thought'), color='#8888FF', x=width / 2, y=height / 2) return False def __new_thought_button_cb(self, button): self._model.create_new_thought() def write_file(self, file_path): data = self._model.serialize() open(file_path, 'w').write(data) def read_file(self, file_path): data = open(file_path, 'r').read() self._model.unserialize(data) class EditToolbar(activity.EditToolbar): __gtype_name__ = 'MindMapEditToolbar' def __init__(self): activity.EditToolbar.__init__(self) separator = gtk.SeparatorToolItem() self.insert(separator, -1) separator.show() self.new_thought_button = ToolButton('list-add') self.new_thought_button.set_tooltip(_('New thought')) self.new_thought_button.props.accelerator = _('n') self.insert(self.new_thought_button, -1) self.new_thought_button.show()