Example #1
0
 def _abrir(self, action):
     """
     Abre la ventana de la entrada de menú recibida.
     """
     import pclases, utils
     idventana = int(action.get_name().replace("V", ""))
     ventana = pclases.Ventana.get(idventana)
     clase = ventana.clase
     archivo = ventana.fichero
     if archivo.endswith('.py'):    
         # Al importar no hay que indicar extensión
         archivo = archivo[:archivo.rfind('.py')]
     if clase == 'gajim' and archivo == 'gajim':
         utils.escribir_barra_estado(self.wids['barra_estado'], "Iniciar: gajim...", self.logger, self.__usuario.usuario)
         self.abrir_gajim()
     elif clase == 'acerca_de' and archivo == 'acerca_de':
         utils.escribir_barra_estado(self.wids['barra_estado'], 'Abrir: "acerca de..."', self.logger, self.__usuario.usuario)
         self.acerca_de()
     elif 'usuario' in archivo:
         self.wids['ventana'].window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
         utils.escribir_barra_estado(self.wids['barra_estado'], "Cargar: %s.py" % archivo, self.logger, self.__usuario.usuario)
         exec "import %s" % archivo
         v = None 
         gobject.timeout_add(100, self.volver_a_cursor_original)
         if archivo == "usuarios": 
             v = usuarios.Usuarios(self.__usuario)
         elif archivo == "ventana_usuario":
             v = ventana_usuario.Usuarios(self.__usuario)
     else:
         try:
             self.wids['ventana'].window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
             utils.escribir_barra_estado(self.wids['barra_estado'], "Cargar: %s.py" % archivo, self.logger, self.__usuario.usuario)
             while gtk.events_pending(): gtk.main_iteration(False)
             try:
                 exec "reload(%s)" % archivo
             except NameError:
                 exec "import %s" % archivo
             v = None 
             gobject.timeout_add(100, self.volver_a_cursor_original)
             # Solo se permite una instancia de cada tipo de ventana. It's not a bug. It's a feature! (sí, ya :P)
             v = eval('%s.%s' % (archivo, clase))
             v(usuario = self.__usuario)
         except Exception, msg:
             self.logger.error("ventana.py::_abrir -> Excepción importando fichero ventana: %s" % msg)
             self.wids['ventana'].window.set_cursor(None)
             utils.escribir_barra_estado(self.wids['barra_estado'], "Error detectado. Iniciando informe por correo.", self.logger, self.__usuario.usuario)
             print "Se ha detectado un error"
             texto = ''
             for e in sys.exc_info():
                 texto += "%s\n" % e
             tb = sys.exc_info()[2]
             texto += "Línea %s\n" % tb.tb_lineno
             from menu import Metaf, enviar_correo
             info = Metaf() 
             import traceback
             traceback.print_tb(tb, file = info)
             texto += "%s\n" % info
             enviar_correo(texto, self.__usuario)
Example #2
0
 def abrir_gajim(self):
     """
     Calcado de menu.py. Sólo lleva las modificaciones necesarias para hacerlo funcionar desde aquí.
     """
     try:
         pwd = os.path.abspath(os.curdir)
         os.chdir(os.path.join('gajim-0.9.1', 'src'))
         sys.path.append('.')
         if os.name == 'posix':
             os.system("cd .. && ./launch.sh >/dev/null &")
         elif os.name == 'nt':
             os.startfile("gajim.pyw")
         else:
             utils.dialogo_info(titulo = "PLATAFORMA NO SOPORTADA",
                                texto = "La ayuda on-line solo funciona en arquitecturas con plataformas POSIX o NT\n(GNU/Linux, MS-Windows, *BSD...).",
                                padre = self.wids['ventana'])
     except:
         print "Se ha detectado un error. Volviendo a %s." % (pwd)
         if '.' in sys.path:
             sys.path.remove('.')
         os.chdir(pwd)
         texto = ''
         for e in sys.exc_info():
             texto += "%s\n" % e
         tb = sys.exc_info()[2]
         texto += "Línea %s\n" % tb.tb_lineno
         from menu import Metaf, enviar_correo
         info = Metaf() 
         import traceback
         traceback.print_tb(tb, file = info)
         texto += "%s\n" % info
         enviar_correo(texto, self.__usuario)
     else:
         if '.' in sys.path:
             sys.path.remove('.')
         os.chdir(pwd)