Exemple #1
0
 def mostrar_item_seleccionado(self, icon_view, model):
     selected = icon_view.get_selected_items()
     if len(selected) == 0: return
     i = selected[0][0]
     descripcion_icono_seleccionado = model[i][0]
     descripcion_icono_seleccionado = descripcion_icono_seleccionado.replace('\n', ' ')
     utils.escribir_barra_estado(self.statusbar, descripcion_icono_seleccionado, self.logger, self.usuario.usuario)
Exemple #2
0
 def abrir_ventana(self, archivo, clase):
     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.statusbar,
                                     "Iniciar: gajim...",
                                     self.logger,
                                     self.usuario.usuario)
         abrir_gajim()
     elif clase == 'acerca_de' and archivo == 'acerca_de':
         utils.escribir_barra_estado(self.statusbar,
                                     'Abrir: "acerca de..."',
                                     self.logger,
                                     self.usuario.usuario)
         self.acerca_de()
     elif 'usuario' in archivo:
         utils.escribir_barra_estado(self.statusbar,
                                     "Cargando: %s.py" % archivo,
                                     self.logger,
                                     self.usuario.usuario)
         self.abrir_ventana_usuario(archivo)
     elif "pruebas_periodicas" in clase:
         utils.escribir_barra_estado(self.statusbar,
                                     "Pruebas de coherencia de datos",
                                     self.logger,
                                     self.usuario.usuario)
         self.abrir_pruebas_coherencia()
     else:
         utils.escribir_barra_estado(self.statusbar,
                                     "Cargando: %s.py" % archivo,
                                     self.logger,
                                     self.usuario.usuario)
         self.abrir_ventana_modulo_python(archivo, clase)
Exemple #3
0
 def __init__(self, user=None, passwd=None, fconfig=None):
     """
     user: Usuario. Si es None se solicitará en la ventana de
     autentificación.
     passwd: Contraseña. Si es None, se solicitaré en la ventana de
     autentificación.
     Si user y passwd son distintos a None, no se mostrará la ventana de
     autentificación a no ser que sean incorrectos.
     """
     self.fconfig = fconfig
     from formularios import gestor_mensajes, autenticacion
     login = autenticacion.Autenticacion(user, passwd)
     if not login.loginvalido():
         sys.exit(1)
     self.logger = login.logger
     pclases.logged_user = self.usuario = login.loginvalido()
     # Informes de error por correo:
     install_bug_hook(self.usuario)
     # Continúo con el gestor de mensajes y resto de ventana menú.
     if pclases.VERBOSE:
         myprint("Cargando gestor de mensajes...")
     self.__gm = gestor_mensajes.GestorMensajes(self.usuario)
     # DONE: Dividir la ventana en expansores con los módulos del programa
     # (categorías) y dentro de ellos un IconView con los iconos de cada
     # ventana. Poner también en lo alto del VBox el icono de la aplicación.
     # (Ya va siendo hora de un poquito de eyecandy).
     if pclases.VERBOSE:
         myprint("Cargando menú principal...")
     self.construir_ventana()
     utils.escribir_barra_estado(self.statusbar,
                                 "Menú iniciado",
                                 self.logger,
                                 self.usuario.usuario)
Exemple #4
0
 def __init__(self, user = None, passwd = None):
     """
     user: Usuario. Si es None se solicitará en la ventana de 
     autentificación.
     passwd: Contraseña. Si es None, se solicitaré en la ventana de 
     autentificación.
     Si user y passwd son distintos a None, no se mostrará la ventana de 
     autentificación a no ser que sean incorrectos.
     """
     import gestor_mensajes, autenticacion
     login = autenticacion.Autenticacion(user, passwd)
     pclases = import_pclases()
     if pclases.VERBOSE:
         print "Cargando gestor de mensajes..."
     self.logger = login.logger
     if not login.loginvalido():
         sys.exit(1)
     self.usuario = login.loginvalido()
     self.__gm = gestor_mensajes.GestorMensajes(self.usuario)
     config = ConfigConexion()
     if config.get_kiosco():
         os.system("openbox --replace &")
     self.construir_ventana()
     utils.escribir_barra_estado(self.statusbar, 
                                 "Menú iniciado", 
                                 self.logger, 
                                 self.usuario.usuario)
Exemple #5
0
 def abrir_ventana_modulo_python(self, archivo, clase):
     try:
         self.ventana.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
         while gtk.events_pending(): gtk.main_iteration(False)
         # HACK: Debe haber una forma mejor de hacerlo. De momento me
         #       aprovecho de que el mainloop no va a atender al
         #       timeout aunque se cumpla el tiempo, ya que está
         #       ocupado en abrir la ventana, con lo que el cursor
         #       sale del "busy" justo cuando debe, al abrirse la
         #       ventana.
         v = None
         gobject.timeout_add(5000, self.volver_a_cursor_original)
         # NOTA: OJO: TODO: Usuario harcoded. Cambiar en cuanto sea
         #                  posible.
         if ((self.get_usuario().usuario == "geotextil" or
              self.get_usuario().usuario == "fibra" or
              self.get_usuario().nivel >= 3)
             and "partes_de_fabricacion" in archivo
             and self.get_usuario().usuario != "cemento"):
             exec "import %s" % archivo
             v = eval('%s.%s' % (archivo, clase))
             try:
                 v(permisos = "rx", usuario = self.get_usuario())
             except TypeError:   # La ventana no soporta el modelo
                                 # antiguo de permisos.
                 v(usuario = self.get_usuario())
             #v.wids['ventana'].set_icon_from_filename(icowindow)
         else:
             try:
                 #raise NotImplementedError, \
                 #        "Lanzador multiproceso en desarrollo..."
                 self.lanzar_ventana(archivo, clase)
             except Exception, e:
                 myprint(e)
                 sys.stderr.write(`e`)
                 self._lanzar_ventana(archivo, clase)
     except:
         self.ventana.window.set_cursor(None)
         utils.escribir_barra_estado(self.statusbar,
             "Error detectado. Iniciando informe por correo.",
             self.logger,
             self.usuario.usuario)
         self.enviar_correo_error_ventana()
Exemple #6
0
 def on_select(self, icon_view, model=None):
     selected = icon_view.get_selected_items()
     if len(selected) == 0: return
     i = selected[0][0]
     category = model[i][0]
     if self.current_frame is not None:
         self.content_box.remove(self.current_frame)
         self.current_frame.destroy()
         self.current_frame = None
     if category != "Favoritos":
         modulo = pclases.Modulo.select(
             pclases.Modulo.q.nombre == category)[0]
     else:
         modulo = "Favoritos"
     self.current_frame = self.create_frame(modulo)
     utils.escribir_barra_estado(self.statusbar, category, self.logger,
                                 self.usuario.usuario)
     self.content_box.pack_end(self.current_frame, fill=True, expand=True)
     self.ventana.show_all()
Exemple #7
0
 def set_texto_estado(self, texto):
     utils.escribir_barra_estado(self.barra_estado, texto)
Exemple #8
0
 def abrir(self, iview, path, model):
     clase = model[path][3]
     archivo = model[path][2]
     pclases = import_pclases()
     pclases.Estadistica.incrementar(self.usuario, archivo)
     if archivo.endswith('.py'):    
         # Al importar no hay que indicar extensión
         archivo = archivo[:archivo.rfind('.py')]
     if clase == 'acerca_de' and archivo == 'acerca_de':
         utils.escribir_barra_estado(self.statusbar, 'Abrir: "acerca de..."', self.logger, self.usuario.usuario)
         self.acerca_de()
     elif clase == "web":
         utils.escribir_barra_estado(self.statusbar, "Abrir navegador web", 
                                     self.logger, 
                                     self.usuario.usuario)
         # TODO: Mirar si hay alguna instancia ejecutándose y matarla, que 
         # el usuario es propenso a cambiar de ventana sin querer, y como 
         # esté en modo kiosco no hay manera de devolver el foco con el 
         # ratón al que ya está abierto.
         os.system(archivo + " &")
     elif clase == "extapp": # Aplicación externa
         utils.escribir_barra_estado(self.statusbar, "Abrir %s" % archivo, 
                                     self.logger, 
                                     self.usuario.usuario)
         os.system(archivo + " &")
     elif 'usuario' in archivo:
         self.ventana.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
         utils.escribir_barra_estado(self.statusbar, "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.get_usuario())
         elif archivo == "ventana_usuario":
             v = ventana_usuario.Usuarios(self.get_usuario())
     else:
         try:
             self.ventana.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
             utils.escribir_barra_estado(self.statusbar, "Cargar: %s.py" % archivo, self.logger, self.usuario.usuario)
             while gtk.events_pending(): gtk.main_iteration(False)
             try:
                 exec "reload(%s)" % archivo
                 # PLAN: Esto no funciona como esperaba debido a que aunque 
                 # se cierre la ventana, hay referncias por ahí rulando y 
                 # el reload no recompila y vuelve a cargar el módulo.
                 # Ver: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/160164 o 
                 # http://aspn.activestate.com/ASPN/Mail/Message/python-list/907876 
                 # y usar cuando lo tenga suficientemente testeado.
             except NameError:
                 exec "import %s" % archivo
             # HACK: Debe haber una forma mejor de hacerlo. De momento me 
             #       aprovecho de que el mainloop no va a atender al 
             #       timeout aunque se cumpla el tiempo, ya que está 
             #       ocupado en abrir la ventana, con lo que el cursor sale 
             #       del "busy" justo cuando debe, al abrirse la ventana.
             v = None 
             gobject.timeout_add(100, self.volver_a_cursor_original)
             v = eval('%s.%s' % (archivo, clase))
             v(usuario = self.get_usuario())
             # Podría incluso guardar los objetos ventana que se van 
             # abriendo para controlar... no sé, algo, contar las ventanas 
             # abiertas o algo.
         except:
             self.ventana.window.set_cursor(None)
             utils.escribir_barra_estado(self.statusbar, "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
             info = MetaF() 
             traceback.print_tb(tb, file = info)
             texto += "%s\n" % info
             enviar_correo(texto, self.get_usuario())