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)
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)
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)
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)
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()
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()
def set_texto_estado(self, texto): utils.escribir_barra_estado(self.barra_estado, texto)
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())