From a0bba546567491579a2cbcc48a367c0aef7de34c Mon Sep 17 00:00:00 2001 From: Muflone Date: Wed, 1 Jul 2009 19:56:07 +0000 Subject: [PATCH] --- PreferencesWindow.py | 136 ++++++++++++++ Settings.py | 88 +++++++++ alsalogo.png | Bin 0 -> 2638 bytes palogo.png | Bin 0 -> 6259 bytes preferences.glade | 423 +++++++++++++++++++++++++++++++++++++++++++ pygtkutils.py | 42 +++++ testing.wav | Bin 0 -> 91718 bytes 7 files changed, 689 insertions(+) create mode 100644 PreferencesWindow.py create mode 100644 Settings.py create mode 100644 alsalogo.png create mode 100644 palogo.png create mode 100644 preferences.glade create mode 100644 pygtkutils.py create mode 100644 testing.wav diff --git a/PreferencesWindow.py b/PreferencesWindow.py new file mode 100644 index 0000000..9cdb178 --- /dev/null +++ b/PreferencesWindow.py @@ -0,0 +1,136 @@ +import gtk +import Settings +import SubprocessWrapper +import os.path +from gettext import gettext as _ +from DialogSimpleMessages import ShowDialogError +from pygtkutils import * + +def showPreferencesWindow(gladeFile, iconLogo): + prefsWindow = PreferencesWindow(gladeFile, iconLogo) + +class PreferencesWindow(object): + def __init__(self, gladeFile, iconLogo): + self.gladeFile = gladeFile + self.loadControls() + self.dlgPrefs.set_icon_from_file(iconLogo) + signals = { + 'on_cboPlayer_changed': self.on_cboPlayer_changed, + 'on_btnPlayerTest_clicked': self.on_btnPlayerTest_clicked, + 'on_chkCustomWelcome_toggled': self.on_chkCustomWelcome_toggled, + 'on_btnOk_clicked': self.on_btnOk_clicked + } + self.gladeFile.signal_autoconnect(signals) + # Load settings + self.cboPlayer.set_active(Settings.get('PlayMethod')) + self.txtPlayerCommand.set_text(Settings.get('PlayCommand')) + self.chkPlayWelcome.set_active(Settings.get('PlayWelcomeText') == True) + self.chkCustomWelcome.set_active(Settings.get('UseCustomWelcome') == True) + self.txtWelcomeText.set_text(Settings.get('WelcomeText')) + self.chkSaveVoice.set_active(Settings.get('SaveVoiceSettings') == True) + self.chkSaveSize.set_active(Settings.get('SaveWindowSize') == True) + self.chkSingleRecord.set_active(Settings.get('SingleRecord') == True) + self.chkWordWrap.set_active(Settings.get('WordWrap') == True) + self.chkLoadVariants.set_active(Settings.get('LoadVariants') == True) + # Before to use the window property the realize method must be called + self.dlgPrefs.realize() + # Change WM buttons making the window only movable with the closing button + self.dlgPrefs.window.set_functions(gtk.gdk.FUNC_CLOSE | gtk.gdk.FUNC_MOVE) + self.dlgPrefs.run() + self.dlgPrefs.destroy() + + def loadControls(self): + def separator_filter(model, iter, data=None): + return model.get_value(iter, 2) + gw = self.gladeFile.get_widget + self.dlgPrefs = gw('dlgPreferences') + self.cboPlayer = gw('cboPlayer') + self.lblPlayerCommand = gw('lblPlayerCommand') + self.txtPlayerCommand = gw('txtPlayerCommand') + self.btnPlayerTest = gw('btnPlayerTest') + self.chkPlayWelcome = gw('chkPlayWelcome') + self.chkCustomWelcome = gw('chkCustomWelcome') + self.lblCustomWelcome = gw('lblCustomWelcome') + self.txtWelcomeText = gw('txtWelcomeText') + self.chkSaveVoice = gw('chkSaveVoice') + self.chkSaveSize = gw('chkSaveSize') + self.chkSingleRecord = gw('chkRecordSingleTrack') + self.chkWordWrap = gw('chkWordWrap') + self.chkLoadVariants = gw('chkLoadVariants') + self.btnOk = gw('btnOk') + # Prepare model for players combo + listStore = gtk.ListStore(gtk.gdk.Pixbuf, str, bool) + self.cboPlayer.set_model(listStore) + # First is image + cell = gtk.CellRendererPixbuf() + self.cboPlayer.pack_start(cell, False) + self.cboPlayer.add_attribute(cell, 'pixbuf', 0) + # Second is text + cell = gtk.CellRendererText() + self.cboPlayer.pack_start(cell, False) + self.cboPlayer.add_attribute(cell, 'text', 1) + self.cboPlayer.set_row_separator_func(separator_filter) + # Load icons and text for methods + listStore.append([Pixbuf_load_file( + os.path.join(os.path.dirname(__file__), 'alsalogo.png'), (24, 24)), + _('ALSA - Advanced Linux Sound Architecture'), False]) + listStore.append([Pixbuf_load_file( + os.path.join(os.path.dirname(__file__), 'palogo.png'), (24, 24)), + _('PulseAudio sound server'), False]) + listStore.append([None, '_', True]) + listStore.append([None, _('Custom sound application'), False]) + # Change testing button caption + Button_change_stock_description(self.btnPlayerTest, _('_Test'), True) + + def on_chkCustomWelcome_toggled(self, widget, data=None): + self.lblCustomWelcome.set_sensitive(self.chkCustomWelcome.get_active()) + self.txtWelcomeText.set_sensitive(self.chkCustomWelcome.get_active()) + + def on_btnOk_clicked(self, widget, data=None): + "Apply settings" + Settings.set('PlayMethod', self.cboPlayer.get_active()) + Settings.set('PlayCommand', self.txtPlayerCommand.get_text()) + Settings.set('PlayWelcomeText', self.chkPlayWelcome.get_active()) + Settings.set('UseCustomWelcome', self.chkCustomWelcome.get_active()) + Settings.set('WelcomeText', self.txtWelcomeText.get_text()) + Settings.set('SaveVoiceSettings', self.chkSaveVoice.get_active()) + Settings.set('SaveWindowSize', self.chkSaveSize.get_active()) + Settings.set('SingleRecord', self.chkSingleRecord.get_active()) + Settings.set('WordWrap', self.chkWordWrap.get_active()) + Settings.set('LoadVariants', self.chkLoadVariants.get_active()) + + def on_cboPlayer_changed(self, widget, data=None): + "Enable and disable controls if custom command is not set" + active = self.cboPlayer.get_active() + text = self.txtPlayerCommand.get_text() + self.lblPlayerCommand.set_sensitive(active == 3) + self.txtPlayerCommand.set_sensitive(active == 3) + self.btnOk.set_sensitive((active != 3) or bool(text)) + self.btnPlayerTest.set_sensitive((active != 3) or bool(text)) + + def on_btnPlayerTest_clicked(self, widget, data=None): + "Test selected player with testing.wav" + # Set waiting cursor + Window_change_cursor(self.dlgPrefs.window, gtk.gdk.WATCH, True) + players = ('aplay', 'paplay', '', self.txtPlayerCommand.get_text()) + filename = os.path.join(os.path.dirname(__file__), 'testing.wav') + test = SubprocessWrapper.Popen(['cat', filename], + stdout=SubprocessWrapper.PIPE) + play = None + try: + # Try to play with pipe + play = SubprocessWrapper.Popen(players[self.cboPlayer.get_active()], + stdin=test.stdout, + stdout=SubprocessWrapper.PIPE, + stderr=SubprocessWrapper.PIPE) + play.communicate() + except OSError, (errno, strerror): + # Error during communicate" + ShowDialogError(title=_('Audio testing'), showOk=True, + text=_('There was an error during the test for the audio player.\n' + 'Error %s: %s' % (errno, strerror))) + # Terminate test if it's still running, follows a broken pipe error + if test.poll() is None: + test.terminate() + # Restore default cursor + Window_change_cursor(self.dlgPrefs.window, None, False) diff --git a/Settings.py b/Settings.py new file mode 100644 index 0000000..097b4cf --- /dev/null +++ b/Settings.py @@ -0,0 +1,88 @@ +import ConfigParser +import os +from gettext import gettext as _ + +config = None +confdir = os.path.join(os.path.expanduser('~/.gespeaker')) +conffile = os.path.join(confdir, 'settings.conf') +__sectionSettings = 'settings' +__sectionWindowSize = 'window size' +__sectionVoiceSetting = 'voice settings' +__defSettings = None + +if not os.path.exists(confdir): + os.mkdir(confdir) + +def load(filename=conffile): + "Load settings from the configuration file" + global config + config = ConfigParser.RawConfigParser() + loadDefaults() + if os.path.exists(filename): + config.read(filename) + # Settings lookup is made upon __defSettings + for setting in __defSettings.keys(): + # Add section if doesn't exist + if not config.has_section(__defSettings[setting][2]): + config.add_section(__defSettings[setting][2]) + if not config.has_option(__defSettings[setting][2], setting): + config.set(__defSettings[setting][2], setting, str(__defSettings[setting][1])) + +def loadDefaults(): + global __defSettings + strbool = lambda value: value == 'True' + __defSettings = { + 'PlayMethod': [int, 0, __sectionSettings], + 'PlayCommand': [str, 'aplay', __sectionSettings], + 'PlayWelcomeText': [strbool, True, __sectionSettings], + 'UseCustomWelcome': [strbool, False, __sectionSettings], + 'WelcomeText': [str, _('Welcome in Gespeaker'), __sectionSettings], + 'SaveVoiceSettings': [strbool, True, __sectionSettings], + 'SaveWindowSize': [strbool, False, __sectionSettings], + 'SingleRecord': [strbool, True, __sectionSettings], + 'WordWrap': [strbool, False, __sectionSettings], + 'LoadVariants': [strbool, True, __sectionSettings], + 'MainWindowWidth': [int, 440, __sectionWindowSize], + 'MainWindowHeight': [int, 470, __sectionWindowSize], + 'SettingsExpander': [strbool, True, __sectionWindowSize], + 'VoiceVolume': [int, 100, __sectionVoiceSetting], + 'VoicePitch': [int, 50, __sectionVoiceSetting], + 'VoiceSpeed': [int, 170, __sectionVoiceSetting], + 'VoiceDelay': [int, 10, __sectionVoiceSetting], + 'VoiceTypeMale': [strbool, True, __sectionVoiceSetting], + 'VoiceLanguage': [int, -1, __sectionVoiceSetting] + } + +def save(filename=conffile, clearDefaults=False): + "Save settings into the configuration file" + file = open(filename, mode='w') + if clearDefaults: + for setting in __defSettings.keys(): + if config.has_option(__defSettings[setting][2], setting): + if get(setting) == __defSettings[setting][1]: + config.remove_option(__defSettings[setting][2], setting) + config.write(file) + file.close + +def get(setting): + "Returns a specified setting from the configuration or default values" + if config.has_option(__defSettings[setting][2], setting): + return __defSettings[setting][0](config.get(__defSettings[setting][2], setting)) + elif __defSettings.has_key(setting): + return __defSettings[setting][1] + else: + print 'unknown setting: %s' % setting + +def default(setting): + "Returns the default value for a specified setting" + if __defSettings.has_key(setting): + return __defSettings[setting][1] + +def set(setting, value): + "Sets a specific setting to the value." + #" If it's the default then delete it" + #if __defSettings.has_key(setting) and value == __defSettings[setting][1]: + # config.remove_option(__defSettings[setting][2], setting) + #else: + #print __defSettings[setting][2], setting, str(value) + config.set(__defSettings[setting][2], setting, str(value)) diff --git a/alsalogo.png b/alsalogo.png new file mode 100644 index 0000000000000000000000000000000000000000..2f43667d9fea52d32de341252e45e391a46ada80 GIT binary patch literal 2638 zcmV-U3bFNxP)Px#V^B;~MUZ5h0|Nvc92`PLLv?y}rm&{Q#>CRn)YjJ2-rnAL;#2d9Y_EG010qNS#tmY3ljhU3ljkV znw%H_000McNliru*#;69BL>12>QVpz026dYSad^gZEa<4bO2;>V?bwabuMpmXVMTU zWB>pOI7vi7RCwCWoDG+%ED(TKP&Zu=KR`k@?EnADcLuGj(8}8PI_KmgL~5e7d#exQkW-Se`Gam8rzHiFkb&R^K>Rk3K9s(6n9-_6&Je`ersAb9(S z4k=K%mgN9Kuz03#%Sp@C5gB!5Hzi125B0{{pxxd%!Z z;y~H`m6StVSOjpNcEdZTbPEVWE@0hX3R}z(;D?_K#j^og&JlPk)ZJf;p0&oo2+}_% zNM}s}O0rKF0q&sEA|19j76nndbW36K%NK32zj7@yF%tm|tmr)HKFY(BXr@cBTjoc~TzB3xdFb_+8~ z=)`S)ctZtM;n=#eS_Po~rr81Q@a2q< z#gy823QBshMNo!$*$%(CcF8-P1+YbPS_Z!ePj$(B?=q2=af%5@Q%aTNjM+ThRj=Yy zmu0}p@on<{{BXI+mx=Z$<{`CxSn=Ig|*`cnPR}BvA7udc`zsbMp3T;x`0W2!k|5Q9fpH zqd#JOXy<|siHK`&M&}W2fWc`u07!%^VBA7P@&eK99xaB&deIx=Tz!}-LtH-C+j*^# zK)3LsBklh+$ELe(2Z9)0_9)1(e}Dk>BATKv4TAQci%1kl82>mO|8RgrUR($o8X2b; zPCJKeb0Y8*`{OdgP$Zxsil7A;68Aqp*VcaULr3|AKoVm|#lxPDP6<#BOANxBB4%b4 zYzY&2_&MAI^gxhY2&^IbNC2T#PYIf)0Y&WQ8I;e^=n8?%Tnb_*3YZXp;YM~!Ac~Oy zHXNe8CTMu-B+A1n_n~63{3jGC`g2F)Nh!Wj0BE4tqI}%S|qU?SVl+QUK0&JC&Njv~&9+v?FLmVP#+psxiSR#C3K&tKu;-6z5CctB# zXhLv=u+jLx#b5ByDl~1A&6Efu!5v`b*e${FLIB!sCj{6J7zl`oToWV+E1^CU-2aNn zpG&s8BKV~dH5d@i1hCG55`~pFng@fW8L6;|oTY}@6z(FjV5cJIWuqY$# ztum;CB6*P@OYaE=1PC9HvH9V6COATb0Oj{_L>&f%AVD7NCCu9aARPKI0;XUnw2u>l z9&;52BntI!(qD(fkst|eGXQLr%B0|A5t z9w0z72p!s-VxkE5va3T7A%=k=BPUk`8VZ9#K#CHP3IV_(gbqzkc|nKE#JcK32;37G zI}-F$0t?^h5JACB$QMqzQO)h#tK9V)!P6o?Wc zBj^CM(_X0nmw-VHT`kp#Gqv)mS9f9<32^!_e+uRUi`euD%ca0-ont(d=YZe=aC`~t zHq%@^)ynO1Ke@t!^8$e;06`E545fU}F(VqbM}lIXn8=<1aQuSnNX*=z8TSiId!`W~ zOWX5eyJwHs*31J}nZw6+~tIc;C3VcOGLyD)S<328ytpz0ePz7Sd5; zD9fJNJLk`I(yDLEWC6B^82j+(qwd=xPhu*JPC<=n%MV`imH1`_XZ<5x4@ z+)Jcnu@Z(*{;1P-?x8%{M>;uYV!2X^BZ`$to)?4U(#DQ+hkYhN70Vy@l+Jym7kX)@ zcJ+6PS0pLbQxOmo@r;GpB73H>cGXK;(NDzA-mb){GirzejU+H|RnUwRY*M=I&K*eerx@VPPwa=NsSamhb9( zVeyP5t7gwvVXh6a^?7U=S+)dZH#{h&d{6|5c5~J_XB5b z^XH8Pb!B~jz$$FIS^1d+QsxyT5_w7dG$=#|EBb*}}6t8+e{+1J87A;JLOfJlnT{=Nq^1jOPZP wbKSzTzFT<{9 literal 0 HcmV?d00001 diff --git a/palogo.png b/palogo.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8041484959fda9e1d19f74af5739ed4a70dce9 GIT binary patch literal 6259 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 + + + + + 5 + Preferences + False + center-on-parent + dialog + False + + + True + vertical + + + True + 2 + vertical + + + True + 0 + 0 + 6 + <b>Audio player</b> + True + + + False + False + 0 + + + + + True + 9 + + + True + 0 + 0.30000001192092896 + 40 + multimedia-player + + + False + False + 0 + + + + + True + vertical + + + True + + + + False + False + 0 + + + + + True + 2 + 8 + + + True + False + 0 + Co_mmand: + True + txtPlayerCommand + + + False + 0 + + + + + True + False + True + + + + + 1 + + + + + gtk-apply + True + True + True + True + + + + 2 + + + + + 2 + 1 + + + + + 1 + + + + + 1 + + + + + True + 0 + <b>Welcome message</b> + True + + + False + False + 5 + 2 + + + + + True + 12 + + + True + vertical + + + Speak _welcome text on program start + True + True + False + True + True + True + + + 0 + + + + + _Use custom welcome message + True + True + False + True + True + + + + 1 + + + + + True + 2 + 6 + + + True + False + Custom mess_age: + True + txtWelcomeText + + + False + 0 + + + + + True + False + True + + + + 1 + + + + + 2 + + + + + + + 3 + + + + + True + 0 + <b>Saving preferences</b> + True + + + False + False + 5 + 4 + + + + + True + 12 + + + True + vertical + + + _Save voice settings automatically + True + True + False + True + True + True + + + 0 + + + + + Save main window s_ize + True + True + False + True + True + + + 1 + + + + + + + 5 + + + + + True + 0 + <b>Recording</b> + True + + + False + False + 5 + 6 + + + + + True + 12 + + + True + vertical + + + Single track _record + True + True + False + True + True + True + + + 0 + + + + + + + 7 + + + + + True + 0 + <b>Other settings</b> + True + + + False + False + 5 + 8 + + + + + True + 12 + + + True + vertical + + + Enable te_xt wrapping + True + True + False + True + True + + + 0 + + + + + Load voice _variants + True + True + False + True + True + + + 1 + + + + + + + 9 + + + + + False + 1 + + + + + True + end + + + gtk-cancel + True + True + True + True + + + False + False + 0 + + + + + gtk-ok + True + True + True + True + + + + False + False + 1 + + + + + False + end + 0 + + + + + + diff --git a/pygtkutils.py b/pygtkutils.py new file mode 100644 index 0000000..8f213cf --- /dev/null +++ b/pygtkutils.py @@ -0,0 +1,42 @@ +import gtk + +def TextBuffer_get_text(buffer): + "Return the whole text on the TextBuffer" + return buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter()) + +def Radio_get_active(group): + "Return the currently active radio button on the group" + for button in group: + if button.get_active(): + return button + +def Pixbuf_load_file(filename, size=None): + "Load an image file with the desired size if requested" + if size and len(size) == 2: + return gtk.gdk.pixbuf_new_from_file_at_size(filename, size[0], size[1]) + else: + return gtk.gdk.pixbuf_new_from_file(filename) + +def Window_change_cursor(window, cursor, refresh=False): + "Change a window's cursor and optionally forces the refresh" + window.set_cursor(cursor and gtk.gdk.Cursor(cursor) or None) + if refresh: + gtk.gdk.flush() + +def Button_change_stock_description(button, caption, use_underline=None): + "Change stock button description" + alignment = button.get_children()[0] + box = alignment.get_children()[0] + first, second = box.get_children() + # Find label + if type(first) is gtk.Label: + label = first + elif type(second) is gtk.Label: + label = second + else: + label = None + if label: + label.set_text(caption) + # Set use_underline + if use_underline is not None: + label.set_use_underline(use_underline) diff --git a/testing.wav b/testing.wav new file mode 100644 index 0000000000000000000000000000000000000000..3dfc6d73386c9bde9a3668aba8def808b75eb0f9 GIT binary patch literal 91718 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 XpvD3<7O1g6jRk5fP-B7rKMVXHT%O1K literal 0 HcmV?d00001