From c14688d67a82b7ec7746beda90da915c98600a3d Mon Sep 17 00:00:00 2001 From: erick Date: Sat, 05 Dec 2009 21:03:59 +0000 Subject: Merge branch 'frame_integration' into revamped_dragndrop Conflicts: tutorius/actions.py --- (limited to 'src/extensions/tutoriusremote.py') diff --git a/src/extensions/tutoriusremote.py b/src/extensions/tutoriusremote.py new file mode 100755 index 0000000..d795141 --- /dev/null +++ b/src/extensions/tutoriusremote.py @@ -0,0 +1,134 @@ +# Copyright (C) 2009, Tutorius.org +# Copyright (C) 2009, Simon Poirier +# +# +# 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 +""" +This modules regroups the UI elements that drives the tutorial and tutorial +creator from the Sugar frame. +""" + +import gtk + +from gettext import gettext as _ +import gconf +import dbus + +import logging + +from sugar.graphics.tray import TrayIcon +from sugar.graphics.palette import Palette +from sugar.graphics.xocolor import XoColor +from sugar.graphics.combobox import ComboBox + +from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.model.shell import get_model + +from sugar.tutorius.creator import default_creator + +from sugar.tutorius.vault import Vault + +_ICON_NAME = 'tutortool' + +LOGGER = logging.getLogger('remote') + +class TutoriusRemote(TrayIcon): + def __init__(self): + client = gconf.client_get_default() + self._color = XoColor(client.get_string('/desktop/sugar/user/color')) + + super(TutoriusRemote, self).__init__(icon_name=_ICON_NAME, + xo_color=self._color) + + self.set_palette_invoker(FrameWidgetInvoker(self)) + + self.palette = TPalette(_('Tutorius')) + self.palette.set_group_id('frame') + + +class TPalette(Palette): + def __init__(self, primary_text): + super(TPalette, self).__init__(primary_text) + + self._creator_item = gtk.MenuItem(_('Create a tutorial')) + self._creator_item.connect('activate', self._toggle_creator) + self._creator_item.show() + + self._tut_list_item = gtk.MenuItem(_('Show tutorials')) + self._tut_list_item.connect('activate', self._list_tutorials) + self._tut_list_item.show() + + self.menu.append(self._creator_item) + self.menu.append(self._tut_list_item) + + self.set_content(None) + + def _toggle_creator(self, widget): + creator = default_creator() + + if creator.is_authoring == False: + # Replace the start creator label by stop creator + self._creator_item.props.label = _("Stop authoring") + creator.start_authoring(tutorial=None) + + else: + # Attempt to close the creator - this will popup a confirmation + # dialog if the user has unsaved changes + creator.cleanup_cb() + + # If the creator was not actually closed - (in case cancel + # is implemented one day) + if creator.is_authoring == True: + return + # Switch back to start creator entry + self._creator_item.props.label = _("Create a tutorial") + + def _list_tutorials(self, widget): + dlg = gtk.Dialog('Run a tutorial', + None, + gtk.DIALOG_MODAL, + (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT, + gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT)) + dlg.vbox.pack_start(gtk.Label(_('Which tutorial do you want to run?\n'))) + + activity = get_model().get_active_activity() + + act_name = activity.get_activity_name() + tutorial_dict = Vault.list_available_tutorials(act_name) + + # Build the combo box + combo = ComboBox() + for (tuto_name, tuto_guid) in tutorial_dict.items(): + combo.append_item(tuto_name, tuto_guid) + dlg.vbox.pack_end(combo) + dlg.show_all() + + result = dlg.run() + dlg.destroy() + + if result == gtk.RESPONSE_ACCEPT: + row = combo.get_active_item() + if row: + guid = row[0] + name = row[1] + LOGGER.debug("TPalette :: Got message to launch tutorial %s with guid %s"%(str(name), str(guid))) + + from sugar.tutorius.service import ServiceProxy + service = ServiceProxy() + + service.launch(guid) + +def setup(tray): + tray.add_device(TutoriusRemote()) -- cgit v0.9.1