Exemple #1
0
 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()
     )
Exemple #3
0
 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)
Exemple #4
0
  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)
Exemple #5
0
 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)
Exemple #6
0
  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)   
Exemple #8
0
##

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)
Exemple #9
0
 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)
Exemple #10
0
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)
Exemple #11
0
    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)
Exemple #12
0
 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)