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 = handlepaths.getPath('data', '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\n' 'Error %s: %s') % (errno, strerror), icon=handlepaths.get_app_logo())
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 = handlepaths.getPath('data', '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\n' 'Error %s: %s') % (errno, strerror), icon=handlepaths.get_app_logo() )
def on_imgmenuEditPreferences_activate(self, widget, data=None): "Show preferences dialog" prefsUI = handlepaths.getPath('ui', 'preferences.glade') gladePrefs = gtk.glade.XML(fname=prefsUI, domain=handlepaths.APP_NAME) PreferencesWindow.showPreferencesWindow(gladePrefs, self.espeak) self.loadSettings(False)
def __init__(self): print 'starting %s' % handlepaths.APP_NAME self.espeak = EspeakFrontend() # Create temporary filename self.tempFilename = tempfile.mkstemp(prefix=handlepaths.APP_NAME)[1] self.timeoutCheck = None self.recordToFile = None self.recordToFileRequested = False self.variants = ((), ()) gladeUI = handlepaths.getPath('ui', 'gespeaker.glade') print 'loading interface from %s' % gladeUI self.gladeFile = gtk.glade.XML(fname=gladeUI, domain=handlepaths.APP_NAME) # Proxy maps self.proxy = { 'text.set': self.set_text, 'text.cut': self.on_imgmenuEditCut_activate, 'text.copy': self.on_imgmenuEditCopy_activate, 'text.paste': self.on_imgmenuEditPaste_activate, 'ui.new': self.on_imgmenuFileNew_activate, 'ui.open': self.on_imgmenuFileOpen_activate, 'ui.save': self.on_imgmenuFileSaveAs_activate, 'ui.record': self.on_imgmenuFileRec_activate, 'ui.unrecord': self.disable_record, 'ui.reset': self.on_imgmenuEditResetSettings_activate, 'ui.quit': self.on_imgmenuFileQuit_activate, 'ui.set_size': self.set_size, 'ui.set_position': self.set_position, 'ui.set_window': self.set_window, 'espeak.play': self.on_imgmenuEditPlay_activate, 'espeak.stop': self.on_imgmenuEditStop_activate, 'espeak.pause': self.on_imgmenuEditPause_activate, 'espeak.is_playing': self.checkIfPlaying, } # Signals handler signals = { 'on_imgmenuFileQuit_activate': self.on_imgmenuFileQuit_activate, 'on_imgmenuEditPlay_activate': self.on_imgmenuEditPlay_activate, 'on_imgmenuFileNew_activate': self.on_imgmenuFileNew_activate, 'on_imgmenuFileOpen_activate': self.on_imgmenuFileOpen_activate, 'on_imgmenuFileSaveAs_activate': self.on_imgmenuFileSaveAs_activate, 'on_imgmenuEditStop_activate': self.on_imgmenuEditStop_activate, 'on_btnPlayStop_toggled': self.on_btnPlayStop_toggled, 'on_btnPause_toggled': self.on_btnPause_toggled, 'on_tlbRecord_toggled': self.on_tlbRecord_toggled, 'on_imgmenuEditPause_activate': self.on_imgmenuEditPause_activate, 'on_imgmenuFileRec_activate': self.on_imgmenuFileRec_activate, 'on_imgmenuEditResetSettings_activate': self.on_imgmenuEditResetSettings_activate, 'on_imgmenuEditCut_activate': self.on_imgmenuEditCut_activate, 'on_imgmenuEditCopy_activate': self.on_imgmenuEditCopy_activate, 'on_imgmenuEditPaste_activate': self.on_imgmenuEditPaste_activate, 'on_imgmenuHelpAbout_activate': self.on_imgmenuHelpAbout_activate, 'on_imgmenuEditPreferences_activate': self.on_imgmenuEditPreferences_activate, 'on_radioVoice_toggled': self.on_radioVoice_toggled, 'on_cboLanguages_changed': self.on_cboLanguages_changed } self.gladeFile.signal_autoconnect(signals) # Set clipboard display = gtk.gdk.display_manager_get().get_default_display() self.clipboard = gtk.Clipboard(display, "CLIPBOARD") # Load window and controls self.loadControls() self.loadSettings(True)
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.tvwLanguages = gw('tvwLanguages') self.chooserLanguagePath = gw('chooserLanguagePath') self.btnRefresh = gw('btnRefresh') self.btnOk = gw('btnOk') self.imgExecutableMbrola = gw('imgExecutableMbrola') self.lblExecutableMbrolaStatus = gw('lblExecutableMbrolaStatus') self.lblLanguagesDetected = gw('lblLanguagesDetected') # 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( handlepaths.getPath('icons', 'alsalogo.png'), (24, 24)), _('ALSA - Advanced Linux Sound Architecture'), False]) listStore.append([Pixbuf_load_file( handlepaths.getPath('icons', '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) # Create model and sorted model for mbrola languages self.modelMbrola = gtk.ListStore(gtk.gdk.Pixbuf, str, str, str) #self.tvwLanguages.set_model(self.modelMbrola) sortedModel = gtk.TreeModelSort(self.modelMbrola) sortedModel.set_sort_column_id(1, gtk.SORT_ASCENDING) self.tvwLanguages.set_model(sortedModel) # Create columns for tvwLanguages COL_LANG_IMG, COL_LANG_LANG, COL_LANG_RES, COL_LANG_STATUS = range(4) cell = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn('') column.pack_start(cell) column.set_attributes(cell, pixbuf=COL_LANG_IMG) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Language'), cell, text=COL_LANG_LANG) column.set_sort_column_id(COL_LANG_LANG) column.set_resizable(True) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Resource'), cell, text=COL_LANG_RES) column.set_sort_column_id(COL_LANG_RES) column.set_resizable(True) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Status'), cell, text=COL_LANG_STATUS) column.set_sort_column_id(COL_LANG_STATUS) column.set_resizable(True) self.tvwLanguages.append_column(column) # Order by Language column #column = self.tvwLanguages.get_column(COL_LANG_LANG) #column.set_sort_column_id(COL_LANG_LANG) #column.set_sort_order(gtk.SORT_ASCENDING) #column.set_sort_indicator(True) # Plugins self.tvwPlugins = gw('tvwPlugins') self.btnPluginInfo = gw('btnPluginInfo') self.btnPluginConfigure = gw('btnPluginConfigure') Button_change_stock_description(self.btnPluginInfo, _('_About plugin'), True) Button_change_stock_description(self.btnPluginConfigure, _('_Configure plugin'), True) # Create model for plugins list self.modelPlugins = gtk.ListStore( bool, # active gtk.gdk.Pixbuf, # icon str, # name str # markup ) sortedModel = gtk.TreeModelSort(self.modelPlugins) sortedModel.set_sort_column_id(COL_NAME, gtk.SORT_ASCENDING) self.tvwPlugins.set_model(sortedModel) cell = gtk.CellRendererToggle() cell.connect('toggled', self.on_pluginenable_toggle) column = gtk.TreeViewColumn(None, cell, active=COL_ACTIVE) self.tvwPlugins.append_column(column) cell = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn(None, cell, pixbuf=COL_ICON) self.tvwPlugins.append_column(column) cell = gtk.CellRendererText() cell.set_property('ellipsize', pango.ELLIPSIZE_END) column = gtk.TreeViewColumn(None, cell, markup=COL_MARKUP) column.set_resizable(True) self.tvwPlugins.append_column(column)
## import os import sys import gettext import pkgutil import imp import gtk.glade import gespeakerUI import handlepaths import Settings import plugins if __name__ == '__main__': for module in (gettext, gtk.glade): module.bindtextdomain(handlepaths.APP_NAME, handlepaths.getPath('locale')) module.textdomain(handlepaths.APP_NAME) # Load user settings plugins.loadPluginsSettings() Settings.load() print 'loading available plugins...' plugins_path = [handlepaths.getPath('plugins')] for loader, name, isPkg in pkgutil.iter_modules(plugins_path): file, pathname, description = imp.find_module(name, plugins_path) imp.load_module(name, file, pathname, description) main = gespeakerUI.gespeakerUI() plugins.signal_proxy('load') plugins.signal_proxy('on_uiready', argc=1, args=main)
def render_icon(self): filename = self.icon.replace('$icons', handlepaths.getPath('icons')) if not filename or not os.path.exists(filename): filename = handlepaths.getPath('icons', 'generic-plugin.png') return gtk.gdk.pixbuf_new_from_file_at_size(filename, ICON_WIDTH, ICON_HEIGHT)
import os import sys import gettext import pkgutil import imp import gtk.glade import gespeakerUI import handlepaths import Settings import plugins if __name__ == '__main__': for module in (gettext, gtk.glade): module.bindtextdomain(handlepaths.APP_NAME, handlepaths.getPath('locale')) module.textdomain(handlepaths.APP_NAME) # Load user settings plugins.loadPluginsSettings() Settings.load() print 'loading available plugins...' plugins_path = [handlepaths.getPath('plugins')] for loader, name, isPkg in pkgutil.iter_modules(plugins_path): file, pathname, description = imp.find_module(name, plugins_path) imp.load_module(name, file, pathname, description) main = gespeakerUI.gespeakerUI() plugins.signal_proxy('load') plugins.signal_proxy('on_uiready', argc=1, args=main)
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.tvwLanguages = gw('tvwLanguages') self.chooserLanguagePath = gw('chooserLanguagePath') self.btnRefresh = gw('btnRefresh') self.btnOk = gw('btnOk') self.imgExecutableMbrola = gw('imgExecutableMbrola') self.lblExecutableMbrolaStatus = gw('lblExecutableMbrolaStatus') self.lblLanguagesDetected = gw('lblLanguagesDetected') # 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(handlepaths.getPath('icons', 'alsalogo.png'), (24, 24)), _('ALSA - Advanced Linux Sound Architecture'), False ]) listStore.append([ Pixbuf_load_file(handlepaths.getPath('icons', '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) # Create model and sorted model for mbrola languages self.modelMbrola = gtk.ListStore(gtk.gdk.Pixbuf, str, str, str) #self.tvwLanguages.set_model(self.modelMbrola) sortedModel = gtk.TreeModelSort(self.modelMbrola) sortedModel.set_sort_column_id(1, gtk.SORT_ASCENDING) self.tvwLanguages.set_model(sortedModel) # Create columns for tvwLanguages COL_LANG_IMG, COL_LANG_LANG, COL_LANG_RES, COL_LANG_STATUS = range(4) cell = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn('') column.pack_start(cell) column.set_attributes(cell, pixbuf=COL_LANG_IMG) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Language'), cell, text=COL_LANG_LANG) column.set_sort_column_id(COL_LANG_LANG) column.set_resizable(True) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Resource'), cell, text=COL_LANG_RES) column.set_sort_column_id(COL_LANG_RES) column.set_resizable(True) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Status'), cell, text=COL_LANG_STATUS) column.set_sort_column_id(COL_LANG_STATUS) column.set_resizable(True) self.tvwLanguages.append_column(column) # Order by Language column #column = self.tvwLanguages.get_column(COL_LANG_LANG) #column.set_sort_column_id(COL_LANG_LANG) #column.set_sort_order(gtk.SORT_ASCENDING) #column.set_sort_indicator(True) # Plugins self.tvwPlugins = gw('tvwPlugins') self.btnPluginInfo = gw('btnPluginInfo') self.btnPluginConfigure = gw('btnPluginConfigure') Button_change_stock_description(self.btnPluginInfo, _('_About plugin'), True) Button_change_stock_description(self.btnPluginConfigure, _('_Configure plugin'), True) # Create model for plugins list self.modelPlugins = gtk.ListStore( bool, # active gtk.gdk.Pixbuf, # icon str, # name str # markup ) sortedModel = gtk.TreeModelSort(self.modelPlugins) sortedModel.set_sort_column_id(COL_NAME, gtk.SORT_ASCENDING) self.tvwPlugins.set_model(sortedModel) cell = gtk.CellRendererToggle() cell.connect('toggled', self.on_pluginenable_toggle) column = gtk.TreeViewColumn(None, cell, active=COL_ACTIVE) self.tvwPlugins.append_column(column) cell = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn(None, cell, pixbuf=COL_ICON) self.tvwPlugins.append_column(column) cell = gtk.CellRendererText() cell.set_property('ellipsize', pango.ELLIPSIZE_END) column = gtk.TreeViewColumn(None, cell, markup=COL_MARKUP) column.set_resizable(True) self.tvwPlugins.append_column(column)