Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--patches/0002-sdxo-2438-Now-Read-activity-have-their-own-dedicated.patch155
1 files changed, 155 insertions, 0 deletions
diff --git a/patches/0002-sdxo-2438-Now-Read-activity-have-their-own-dedicated.patch b/patches/0002-sdxo-2438-Now-Read-activity-have-their-own-dedicated.patch
new file mode 100644
index 0000000..aec2dc0
--- /dev/null
+++ b/patches/0002-sdxo-2438-Now-Read-activity-have-their-own-dedicated.patch
@@ -0,0 +1,155 @@
+From e6805512b9699542a46746f64d8f91db021d42db Mon Sep 17 00:00:00 2001
+From: Ajay Garg <ajay@activitycentral.com>
+Date: Wed, 22 May 2013 11:09:03 +0530
+Subject: [PATCH] sdxo#2438: Now, "Read" activity have their own dedicated
+ "pitch" and "rate".
+Organization: Sugar Labs Foundation
+
+
+Signed-off-by: Ajay Garg <ajay@activitycentral.com>
+---
+ activity/activity.info | 2 +-
+ speechtoolbar.py | 87 ++++++++++++++++++++++++++++++++++++++++----------
+ 2 files changed, 71 insertions(+), 18 deletions(-)
+
+diff --git a/activity/activity.info b/activity/activity.info
+index e184681..378b489 100644
+--- a/activity/activity.info
++++ b/activity/activity.info
+@@ -4,7 +4,7 @@ bundle_id = org.laptop.sugar.ReadActivity
+ icon = activity-read
+ exec = sugar-activity readactivity.ReadActivity
+ show_launcher = no
+-activity_version = 108.1
++activity_version = 108.2
+ mime_types = application/pdf;image/vnd.djvu;image/x.djvu;image/tiff;application/epub+zip;text/plain;application/zip
+ license = GPLv2+
+ summary = Use this activity when you are ready to read! Remember to flip your computer around to feel like you are really holding a book!
+diff --git a/speechtoolbar.py b/speechtoolbar.py
+index 3ac3cb8..d8fbbbd 100644
+--- a/speechtoolbar.py
++++ b/speechtoolbar.py
+@@ -28,6 +28,12 @@ from sugar3.graphics.toolcombobox import ToolComboBox
+
+ import speech
+
++MIN_PITCH = -100
++MAX_PITCH = 100
++
++MIN_RATE = -100
++MAX_RATE = 100
++
+
+ class SpeechToolbar(Gtk.Toolbar):
+
+@@ -75,6 +81,58 @@ class SpeechToolbar(Gtk.Toolbar):
+ combotool.show()
+ speech.reset_buttons_cb = self.reset_buttons_cb
+
++ box = Gtk.VBox()
++ pitch_label = Gtk.Label(_('Pitch'))
++ box.pack_start(pitch_label, False, False, 0)
++ box.pack_start(Gtk.Label(' '), False, False, 0)
++ pitch_label.show()
++
++ self._adj_pitch = Gtk.Adjustment(value=speech.pitch,
++ lower=MIN_PITCH,
++ upper=MAX_PITCH)
++
++ hscale_pitch = Gtk.HScale()
++ hscale_pitch.set_adjustment(self._adj_pitch)
++ hscale_pitch.set_draw_value(False)
++
++ box.pack_start(hscale_pitch, False, False, 0)
++ hscale_pitch.show()
++
++ toolitem = ToolComboBox(box)
++ self.insert(toolitem, -1)
++ toolitem.show_all()
++
++ box = Gtk.VBox()
++ rate_label = Gtk.Label(_('Rate'))
++ box.pack_start(rate_label, False, False, 0)
++ box.pack_start(Gtk.Label(' '), False, False, 0)
++ rate_label.show()
++
++ self._adj_rate = Gtk.Adjustment(value=speech.rate,
++ lower=MIN_RATE,
++ upper=MAX_RATE)
++
++ hscale_rate = Gtk.HScale()
++ hscale_rate.set_adjustment(self._adj_rate)
++ hscale_rate.set_draw_value(False)
++
++ box.pack_start(hscale_rate, False, False, 0)
++ hscale_rate.show()
++ toolitem = ToolComboBox(box)
++ self.insert(toolitem, -1)
++ toolitem.show_all()
++
++ self._adj_pitch.connect('value_changed', self.__adj_pitch_changed_cb)
++ self._adj_rate.connect('value_changed', self.__adj_rate_changed_cb)
++
++ def __adj_pitch_changed_cb(self, adjustment):
++ speech.pitch = int(adjustment.get_value())
++ self.save_speech_parameters()
++
++ def __adj_rate_changed_cb(self, adjustment):
++ speech.rate = int(adjustment.get_value())
++ self.save_speech_parameters()
++
+ def compare_voices(self, a, b):
+ if a[0].lower() == b[0].lower():
+ return 0
+@@ -97,26 +155,11 @@ class SpeechToolbar(Gtk.Toolbar):
+ try:
+ speech_parameters = simplejson.load(f)
+ speech.voice = speech_parameters['voice']
++ speech.pitch = self._cnf_client.get_int('/desktop/sugar/read/pitch')
++ speech.rate = self._cnf_client.get_int('/desktop/sugar/read/rate')
+ finally:
+ f.close()
+
+- self._cnf_client.add_dir('/desktop/sugar/speech',
+- GConf.ClientPreloadType.PRELOAD_NONE)
+- speech.pitch = self._cnf_client.get_int('/desktop/sugar/speech/pitch')
+- speech.rate = self._cnf_client.get_int('/desktop/sugar/speech/rate')
+- self._cnf_client.notify_add('/desktop/sugar/speech/pitch', \
+- self.__conf_changed_cb, None)
+- self._cnf_client.notify_add('/desktop/sugar/speech/rate', \
+- self.__conf_changed_cb, None)
+-
+- def __conf_changed_cb(self, client, connection_id, entry, args):
+- key = entry.get_key()
+- value = client.get_int(key)
+- if key == '/desktop/sugar/speech/pitch':
+- speech.pitch = value
+- if key == '/desktop/sugar/speech/rate':
+- speech.rate = value
+-
+ def save_speech_parameters(self):
+ speech_parameters = {}
+ speech_parameters['voice'] = speech.voice
+@@ -125,9 +168,19 @@ class SpeechToolbar(Gtk.Toolbar):
+ f = open(data_file_name, 'w')
+ try:
+ simplejson.dump(speech_parameters, f)
++ self._cnf_client.set_int('/desktop/sugar/read/pitch', speech.pitch)
++ self._cnf_client.set_int('/desktop/sugar/read/rate', speech.rate)
+ finally:
+ f.close()
+
++ # Finally, reload the parameters, so that the effects are
++ # updated in real-time.
++ self.load_speech_parameters()
++
++ # Also the current speech need to restarted, for the
++ # effects to be updated.
++ self.stop_cb(None)
++
+ def reset_buttons_cb(self):
+ logging.error('reset buttons')
+ self.play_btn.set_icon_name('media-playback-start')
+--
+1.7.11.7
+