From 070882bcfecee3d17a909c4072da7b2f160d41d3 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Fri, 25 Dec 2009 12:22:35 +0000 Subject: Switch to new toolbar design --- (limited to 'Speak.activity/brain.py') diff --git a/Speak.activity/brain.py b/Speak.activity/brain.py index b53f030..6edfe94 100644 --- a/Speak.activity/brain.py +++ b/Speak.activity/brain.py @@ -8,12 +8,12 @@ # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # HablarConSara.activity 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 HablarConSara.activity. If not, see . @@ -24,7 +24,7 @@ from gettext import gettext as _ import logging logger = logging.getLogger('speak') -from port.widgets import ToolComboBox +from toolkit.combobox import ComboBox import bot.aiml import voice @@ -39,82 +39,58 @@ BOTS = { 'predicates': { 'name': 'Alice', 'master': 'the Sugar Community' } } } -DEFAULT = voice.defaultVoice() -if not BOTS.has_key(DEFAULT): - DEFAULT = voice.allVoices()[_('English')] - -class Toolbar(gtk.Toolbar): - def __init__(self, activity): - gtk.Toolbar.__init__(self) - self.activity = activity - self._kernels = {} - - self.voices = ToolComboBox() +_kernels = {} - for lang in sorted(BOTS.keys()): - self.voices.combo.append_item(lang, lang) - self.voices.combo.set_active(0) - self.voices.combo.connect('changed', self._changed_cb) - self.voices.show() +def get_default_voice(): + default_voice = voice.defaultVoice() + if default_voice.friendlyname not in BOTS: + return voice.allVoices()[_('English')] + else: + return default_voice - self.insert(self.voices, -1) - def _load_brain(self, voice, sorry=''): - def load_brain(old_cursor): - is_first_session = (len(self._kernels) == 0) +def get_voices(): + voices = ComboBox() + for lang in sorted(BOTS.keys()): + voices.append_item(voice.allVoices()[lang], lang) + return voices.get_model() - try: - brain = BOTS[voice] - logger.debug('Load bot: %s' % brain) - kernel = bot.aiml.Kernel() - kernel.loadBrain(brain['brain']) - for name, value in brain['predicates'].items(): - kernel.setBotPredicate(name, value) - self._kernels[voice] = kernel - finally: - self.activity.set_cursor(old_cursor) +def respond(voice, text): + return _kernels[voice].respond(text) - if is_first_session: - hello = _("Hello, I'am a robot \"%s\". Ask me any question.") \ - % BOTS[voice]['name'] - hello += ' ' + sorry - self.activity.face.say_notification(hello) - elif sorry: - self.activity.face.say_notification(sorry) - - old_cursor = self.activity.get_cursor() - self.activity.set_cursor(gtk.gdk.WATCH) - gobject.idle_add(load_brain, old_cursor) - def _changed_cb(self, combo): - voice = combo.props.value - self.activity.change_voice(voice, False) - if not self._kernels.has_key(voice): - self._load_brain(voice) +def load(activity, voice, sorry=None): + if voice in _kernels: + return False - def update_voice(self): - voice = self.activity.voice_combo.props.value.friendlyname - new_voice = BOTS.has_key(voice) and voice or DEFAULT.friendlyname + old_cursor = activity.get_cursor() + activity.set_cursor(gtk.gdk.WATCH) - if voice != new_voice: - self.activity.change_voice(new_voice, True) + def load_brain(): + is_first_session = (len(_kernels) == 0) try: - self.voices.combo.handler_block_by_func(self._changed_cb) - self.voices.combo.select(new_voice) + brain = BOTS[voice.friendlyname] + logger.debug('Load bot: %s' % brain) + + kernel = bot.aiml.Kernel() + kernel.loadBrain(brain['brain']) + for name, value in brain['predicates'].items(): + kernel.setBotPredicate(name, value) + _kernels[voice] = kernel finally: - self.voices.combo.handler_unblock_by_func(self._changed_cb) + activity.set_cursor(old_cursor) - sorry = _("Sorry, I can speak %s, let's speak %s instead.") \ - % (voice, new_voice) - - if not self._kernels.has_key(new_voice): - self._load_brain(new_voice, (voice != new_voice) and sorry or '') - elif voice != new_voice: - self.activity.face.say_notification(sorry) + if is_first_session: + hello = _("Hello, I'am a robot \"%s\". Ask me any question.") \ + % BOTS[voice.friendlyname]['name'] + if sorry: + hello += ' ' + sorry + activity.face.say_notification(hello) + elif sorry: + activity.face.say_notification(sorry) - def respond(self, text): - voice = self.voices.combo.props.value - return self._kernels[voice].respond(text) + gobject.idle_add(load_brain) + return True -- cgit v0.9.1