Example #1
0
    def opciones(self):
        menu = QTVarios.LCMenu(self.pantalla)

        menu.opcion(self.cambiaConfiguracion, _("Configuration"), Iconos.Opciones())
        menu.separador()

        menu1 = menu.submenu(_("Colors"), Iconos.Colores())
        menu1.opcion(self.editaColoresTablero, _("Main board"), Iconos.EditarColores())
        menu1.separador()
        menu1.opcion(self.cambiaColores, _("General"), Iconos.Vista())
        menu.separador()

        menu1 = menu.submenu(_("Sound"), Iconos.SoundTool())
        menu1.opcion(self.sonidos, _("Custom sounds"), Iconos.S_Play())
        menu.separador()
        menu.opcion(self.setPassword, _("Set password"), Iconos.Password())

        if self.configuracion.siMain:
            menu.separador()
            menu.opcion(self.usuarios, _("Users"), Iconos.Usuarios())
            menu.separador()

            menu1 = menu.submenu(_("User data folder"), Iconos.Carpeta())
            menu1.opcion(self.folder_change, _("Change the folder"), Iconos.FolderChange())
            if not Configuracion.isDefaultFolder():
                menu1.separador()
                menu1.opcion(self.folder_default, _("Set the default"), Iconos.Defecto())

        resp = menu.lanza()
        if resp:
            if isinstance(resp, tuple):
                resp[0](resp[1])
            else:
                resp()
Example #2
0
    def iniciaConUsuario(self, user):

        self.user = user

        self.web = "https://lucaschess.pythonanywhere.com"
        self.blog = "https://lucaschess.blogspot.com"

        self.liOpcionesInicio = [k_terminar, k_play, k_entrenamiento, k_competir,
                                 k_tools, k_opciones, k_informacion]  # Lo incluimos aqui porque sino no lo lee, en caso de aplazada

        self.configuracion = Configuracion.Configuracion(user)
        self.configuracion.start(self.version)
        VarGen.configuracion = self.configuracion
        AperturasStd.reset()

        VarGen.todasPiezas = Piezas.TodasPiezas()

        self.gestor = None
        self.teclaPanico = 32  # necesario

        self.siPrimeraVez = True
        self.siPresentacion = False  # si esta funcionando la presentacion

        self.posicionInicial = ControlPosicion.ControlPosicion()
        self.posicionInicial.posInicial()

        self.xrival = None
        self.xtutor = None  # creaTutor lo usa asi que hay que definirlo antes
        self.xanalyzer = None  # cuando se juega GestorEntMaq y el tutor danzando a toda maquina, se necesita otro diferente

        self.replay = None
        self.replayBeep = None

        self.liKibitzersActivas = []
Example #3
0
    def opciones(self):
        menu = QTVarios.LCMenu(self.pantalla)

        menu.opcion(self.cambiaConfiguracion, _("Configuration"), Iconos.Opciones())
        menu.separador()

        menu1 = menu.submenu(_("Colors"), Iconos.Colores())
        menu1.opcion(self.editaColoresTablero, _("Main board"), Iconos.EditarColores())
        menu1.separador()
        menu1.opcion(self.cambiaColoresPGN, _("PGN"), Iconos.Vista())
        menu.separador()

        menu1 = menu.submenu(_("Change board size"), Iconos.TamTablero())
        menu1.opcion(self.size_main, _("Main board"), Iconos.PuntoVerde())
        menu1.separador()
        menu2 = menu1.submenu(_("Tutor board"), Iconos.PuntoAzul())
        for txt, size in (   ( _("Large"), 64 ),
                             ( _("Medium"), 48 ),
                             ( _("Medium-small"), 32 ),
                             ( _("Small"), 24 ),
                             ( _("Very small"), 16 ) ):
            menu2.opcion( (self.size_tutor, size), txt, Iconos.PuntoNaranja())
            menu2.separador()

        menu.separador()
        menu1 = menu.submenu(_("Sound"), Iconos.SoundTool())
        menu1.opcion(self.sonidos, _("Custom sounds"), Iconos.S_Play())
        if self.configuracion.voice:
            menu1.separador()
            menu2 = menu1.submenu(_("Test voice"), Iconos.S_Microfono())
            menu2.opcion( (self.voice, "word"), _("Words"), Iconos.Words())
            menu2.opcion( (self.voice, "position"), _("Positions"), Iconos.Voyager())
            menu2.opcion( (self.voice, "pgn"), _("Games"), Iconos.InformacionPGN())
        menu1.separador()
        menu2 = menu1.submenu(_("Import voices"), Iconos.Importar())
        menu2.opcion( (self.voiceImport, "en_us"), _("English") + " US", Iconos.PuntoVerde() )
        menu2.opcion( (self.voiceImport, "es"), _("Spanish"), Iconos.PuntoRojo() )

        menu.separador()
        menu.opcion(self.favoritos, _("Training favorites"), Iconos.Corazon())

        if self.configuracion.siMain:
            menu.separador()
            menu.opcion(self.usuarios, _("Users"), Iconos.Usuarios())
            menu.separador()

            menu1 = menu.submenu(_("User data folder"), Iconos.Carpeta())
            menu1.opcion(self.folder_change, _("Change the folder"), Iconos.FolderChange())
            if not Configuracion.isDefaultFolder():
                menu1.separador()
                menu1.opcion(self.folder_default, _("Set the default"), Iconos.Defecto())

        resp = menu.lanza()
        if resp:
            if isinstance(resp, tuple):
                resp[0](resp[1])
            else:
                resp()
Example #4
0
def listaUsuarios():
    fichUsuarios = "%s/users.pkv" % Configuracion.activeFolder()
    try:
        f = open(fichUsuarios, "rb")
        s = f.read()
        f.close()
        v = cPickle.loads(s)
    except:
        v = None
    return v
Example #5
0
    def opciones(self):
        menu = QTVarios.LCMenu(self.pantalla)

        menu.opcion(self.cambiaConfiguracion, _("Configuration"),
                    Iconos.Opciones())
        menu.separador()

        menu1 = menu.submenu(_("Colors"), Iconos.Colores())
        menu1.opcion(self.editaColoresTablero, _("Main board"),
                     Iconos.EditarColores())
        menu1.separador()
        menu1.opcion(self.cambiaColoresPGN, _("PGN"), Iconos.Vista())
        menu.separador()

        menu1 = menu.submenu(_("Change board size"), Iconos.TamTablero())
        menu1.opcion(self.size_main, _("Main board"), Iconos.PuntoVerde())
        menu1.separador()
        menu2 = menu1.submenu(_("Tutor board"), Iconos.PuntoAzul())
        for txt, size in ((_("Large"), 64), (_("Medium"),
                                             48), (_("Medium-small"), 32),
                          (_("Small"), 24), (_("Very small"), 16)):
            menu2.opcion((self.size_tutor, size), txt, Iconos.PuntoNaranja())
            menu2.separador()

        menu.separador()
        menu1 = menu.submenu(_("Sound"), Iconos.SoundTool())
        menu1.opcion(self.sonidos, _("Custom sounds"), Iconos.S_Play())
        menu.separador()
        menu.opcion(self.favoritos, _("Training favorites"), Iconos.Corazon())

        menu.separador()
        menu.opcion(self.setPassword, _("Set password"), Iconos.Password())

        if self.configuracion.siMain:
            menu.separador()
            menu.opcion(self.usuarios, _("Users"), Iconos.Usuarios())
            menu.separador()

            menu1 = menu.submenu(_("User data folder"), Iconos.Carpeta())
            menu1.opcion(self.folder_change, _("Change the folder"),
                         Iconos.FolderChange())
            if not Configuracion.isDefaultFolder():
                menu1.separador()
                menu1.opcion(self.folder_default, _("Set the default"),
                             Iconos.Defecto())

        resp = menu.lanza()
        if resp:
            if isinstance(resp, tuple):
                resp[0](resp[1])
            else:
                resp()
Example #6
0
 def getRaw(self):
     db = Util.DicRaw(self.fdb)
     self.configuracion = Configuracion.Configuracion(db["USER"])
     self.configuracion.lee()
     self.configuracion.leeConfTableros()
     self.partida = Partida.Partida()
     txt = db["PARTIDA"]
     if txt:
         self.partida.recuperaDeTexto(txt)
     # posicion = ControlPosicion.ControlPosicion()
     # posicion.leeFen("rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 5")
     # self.partida = Partida.Partida(posicion)
     db.close()
Example #7
0
    def procesa(self, orden):
        key = orden.key
        if key == KIBRUN_CONFIGURACION:
            user = orden.dv["USER"]
            self.configuracion = Configuracion.Configuracion(user)
            self.configuracion.lee()
            self.configuracion.leeConfTableros()
            Code.configuracion = self.configuracion
            AperturasStd.reset()
            self.numkibitzer = orden.dv["NUMKIBITZER"]
            kibitzers = Kibitzers.Kibitzers()
            self.kibitzer = kibitzers.kibitzer(self.numkibitzer)
            prioridad = self.kibitzer.prioridad

            priorities = Priorities.priorities

            if prioridad != priorities.normal:
                self.prioridad = priorities.value(prioridad)
            else:
                self.prioridad = None

            self.titulo = self.kibitzer.name

            self.key_video = "Kibitzers%s" % self.kibitzer.huella
            self.dic_video = self.configuracion.restore_video(self.key_video)

            self.tipo = self.kibitzer.tipo
            self.position_before = self.kibitzer.position_before
            self.lanzaVentana()

        elif key == KIBRUN_FEN:
            self.fen, self.fenBase = orden.dv["FEN"].split("|")
            fen = self.fenBase if self.position_before else self.fen
            if self.tipo == KIB_THREATS:
                li = fen.split(" ")
                li[1] = "w" if li[1] == "b" else "b"
                li[3] = "-"  # Hay que tener cuidado con la captura al paso, stockfish crash.
                fen = " ".join(li)
            self.ventana.ponFen(fen)

        elif key == KIBRUN_STOP:
            self.ventana.stop()

        elif key == KIBRUN_CLOSE:
            self.ipc.close()
            self.ventana.finalizar()
            self.ventana.reject()
Example #8
0
def run(user, file_tournament, file_work):
    # sys.stderr = Util.Log("./bug.tournaments")

    app = QtWidgets.QApplication([])

    configuracion = Configuracion.Configuracion(user)
    configuracion.lee()
    configuracion.leeConfTableros()
    configuracion.releeTRA()
    Code.configuracion = configuracion
    AperturasStd.reset()
    Code.todasPiezas = Piezas.TodasPiezas()

    app.setStyle(QtWidgets.QStyleFactory.create(configuracion.x_style))
    QtWidgets.QApplication.setPalette(
        QtWidgets.QApplication.style().standardPalette())

    w = WTournamentRun.WTournamentRun(file_tournament, file_work)
    w.show()
    w.busca_trabajo()
Example #9
0
    def start_with_user(self, user):
        self.user = user

        self.li_opciones_inicio = [
            TB_QUIT,
            TB_PLAY,
            TB_TRAIN,
            TB_COMPETE,
            TB_TOOLS,
            TB_OPTIONS,
            TB_INFORMATION,
        ]  # Lo incluimos aqui porque sino no lo lee, en caso de aplazada

        self.configuracion = Configuracion.Configuracion(user)
        self.configuracion.start()
        Code.configuracion = self.configuracion
        Code.procesador = self
        AperturasStd.reset()

        # Tras crear configuraciĆ³n miramos si hay adjourns
        self.test_opcion_adjourns()

        Code.todasPiezas = Piezas.TodasPiezas()

        self.gestor = None

        self.siPrimeraVez = True
        self.siPresentacion = False  # si esta funcionando la presentacion

        self.posicionInicial = Position.Position()
        self.posicionInicial.set_pos_initial()

        self.xrival = None
        self.xtutor = None  # creaTutor lo usa asi que hay que definirlo antes
        self.xanalyzer = (
            None
        )  # cuando se juega GestorEntMaq y el tutor danzando a toda maquina, se necesita otro diferente

        self.replay = None
        self.replayBeep = None
Example #10
0
    def iniciaConUsuario(self, user):

        self.user = user

        self.web = "http://www-lucaschess.rhcloud.com"
        self.blog = "http://lucaschess.blogspot.com"

        self.liOpcionesInicio = [
            k_terminar, k_play, k_competicion, k_elo, k_entrenamiento, k_tools,
            k_opciones, k_informacion
        ]  # Lo incluimos aqui porque sino no lo lee, en caso de aplazada

        self.configuracion = Configuracion.Configuracion(user)
        self.configuracion.start(self.version)
        VarGen.configuracion = self.configuracion

        VarGen.todasPiezas = Piezas.TodasPiezas()

        self.gestor = None
        self.teclaPanico = 32  # necesario

        self.siPrimeraVez = True
        self.siPresentacion = False  # si esta funcionando la presentacion

        self.posicionInicial = ControlPosicion.ControlPosicion()
        self.posicionInicial.posInicial()

        self.xrival = None
        self.xtutor = None  # creaTutor lo usa asi que hay que definirlo antes

        self.replay = None
        self.replayBeep = None

        self.liKibitzersActivas = []

        self.liEngines = []
        self.xtutor = None
Example #11
0
 def __init__(self):
     self.fichero = "%s/users.pkx" % Configuracion.activeFolder()
     ant = "%sv" % self.fichero[:-1]
     if Util.existeFichero(ant):
         self.antversion(ant)
     self.lista = self.read()
Example #12
0
def run_gui(procesador):
    app = QtWidgets.QApplication([])

    # Usuarios
    list_users = Usuarios.Usuarios().list_users
    if list_users:
        user = pide_usuario(list_users)
        if user is None:
            return
        if user == list_users[0]:
            user = None
    else:
        user = None

    active_folder = Configuracion.active_folder()
    askfor_language = not os.path.isdir(active_folder) or not os.listdir(
        active_folder)

    procesador.start_with_user(user)
    configuracion = procesador.configuracion
    if user:
        if not configuracion.x_player:
            configuracion.x_player = user.name
            configuracion.graba()
        elif configuracion.x_player != user.name:
            for usu in list_users:
                if usu.number == user.number:
                    usu.name = configuracion.x_player
                    Usuarios.Usuarios().save_list(list_users)

    # Comprobamos el lenguaje
    if askfor_language and not configuracion.translator:
        if user:
            conf_main = Configuracion.Configuracion("")
            ori = conf_main.file_external_engines()
            conf_main.lee()
            conf_main.limpia(user.name)
            conf_main.set_folders()
            conf_main.graba()
            procesador.configuracion = conf_main

            Util.file_copy(ori, conf_main.file_external_engines())

        else:
            li = configuracion.list_translations()
            menu = QTVarios.LCMenuRondo(None)
            for k, name, porc, author in li:
                if porc != 100:
                    name += " (%d%%)" % porc
                menu.opcion(k, name)
            resp = menu.lanza()
            if resp:
                configuracion.translator = resp
                configuracion.graba()
                configuracion.releeTRA()

    # Estilo
    # https://github.com/gmarull/qtmodern/blob/master/qtmodern/styles.py
    # https://stackoverflow.com/questions/15035767/is-the-qt-5-dark-fusion-theme-available-for-windows
    # darkPalette.setColor(QPalette.Window, QColor(53, 53, 53))
    # darkPalette.setColor(QPalette.WindowText, QColor(180, 180, 180))
    # darkPalette.setColor(QPalette.Base, QColor(42, 42, 42))
    # darkPalette.setColor(QPalette.Text, QColor(180, 180, 180))
    # darkPalette.setColor(QPalette.AlternateBase, QColor(66, 66, 66))
    # darkPalette.setColor(QPalette.ToolTipBase, QColor(53, 53, 53))
    # darkPalette.setColor(QPalette.ToolTipText, QColor(180, 180, 180))
    # darkPalette.setColor(QPalette.Button, QColor(53, 53, 53))
    # darkPalette.setColor(QPalette.ButtonText, QColor(180, 180, 180))
    # darkPalette.setColor(QPalette.BrightText, QColor(180, 180, 180))
    # darkPalette.setColor(QPalette.Link, QColor(56, 252, 196))
    #
    # darkPalette.setColor(QPalette.Light, QColor(180, 180, 180))
    # darkPalette.setColor(QPalette.Midlight, QColor(90, 90, 90))
    # darkPalette.setColor(QPalette.Dark, QColor(35, 35, 35))
    # darkPalette.setColor(QPalette.Shadow, QColor(20, 20, 20))
    # darkPalette.setColor(QPalette.Highlight, QColor(42, 130, 218))
    # darkPalette.setColor(QPalette.HighlightedText, QColor(180, 180, 180))
    #
    # # disabled
    # darkPalette.setColor(QPalette.Disabled, QPalette.WindowText,
    #                      QColor(127, 127, 127))
    # darkPalette.setColor(QPalette.Disabled, QPalette.Text,
    #                      QColor(127, 127, 127))
    # darkPalette.setColor(QPalette.Disabled, QPalette.ButtonText,
    #                      QColor(127, 127, 127))
    # darkPalette.setColor(QPalette.Disabled, QPalette.Highlight,
    #                      QColor(80, 80, 80))
    # darkPalette.setColor(QPalette.Disabled, QPalette.HighlightedText,
    #                      QColor(127, 127, 127))
    # app.setStyle(QtWidgets.QStyleFactory.create(configuracion.x_style))

    if configuracion.palette:
        qpalette = QtGui.QPalette(QtGui.QPalette.Dark)
        palette = configuracion.palette

        for key, tp in (
            (QtGui.QPalette.Window, "Window"),
            (QtGui.QPalette.WindowText, "WindowText"),
            (QtGui.QPalette.Base, "Base"),
            (QtGui.QPalette.Text, "Text"),
            (QtGui.QPalette.AlternateBase, "AlternateBase"),
            (QtGui.QPalette.ToolTipBase, "ToolTipBase"),
            (QtGui.QPalette.ToolTipText, "ToolTipText"),
            (QtGui.QPalette.Button, "Button"),
            (QtGui.QPalette.ButtonText, "ButtonText"),
            (QtGui.QPalette.BrightText, "BrightText"),
            (QtGui.QPalette.Link, "Link"),
        ):
            qpalette.setColor(key, QtGui.QColor(palette[tp]))
    else:
        qpalette = QtWidgets.QApplication.style().standardPalette()

    app.setPalette(qpalette)

    app.setEffectEnabled(QtCore.Qt.UI_AnimateMenu)

    QtGui.QFontDatabase.addApplicationFont(
        Code.path_resource("IntFiles", "ChessAlpha2.ttf"))

    if configuracion.x_font_family:
        font = Controles.TipoLetra(configuracion.x_font_family)
        app.setFont(font)

    Code.gc = QTUtil.GarbageCollector()

    procesador.iniciar_gui()

    resp = app.exec_()

    return resp
Example #13
0
def lanzaGUI(procesador):
    """
    Lanzador del interfaz grafico de la aplicacion.
    """

    # Comprobamos el lenguaje
    app = QtGui.QApplication([])

    liUsuarios = Usuarios.listaUsuarios()
    if liUsuarios:
        usuario = pideUsuario(liUsuarios)
        if usuario is None:
            return
        user = str(usuario.numero) if usuario.numero else ""
    else:
        user = ""

    activeFolder = Configuracion.activeFolder()
    siPedirLenguaje = not os.path.isdir(activeFolder) or not os.listdir(
        activeFolder)
    procesador.iniciaConUsuario(user)
    configuracion = procesador.configuracion

    # Comprobamos el lenguaje
    if siPedirLenguaje and not configuracion.traductor:
        if user:
            confMain = Configuracion.Configuracion("")
            ori = confMain.ficheroMExternos
            confMain.lee()
            confMain.limpia(usuario.nombre)
            confMain.ponCarpetas(user)
            confMain.graba()
            procesador.configuracion = confMain

            Util.copiaFichero(ori, confMain.carpeta)

        else:
            li = configuracion.listaTraducciones()
            menu = QTVarios.LCMenu(None)

            nico = QTVarios.rondoPuntos()
            for k, nombre, porc in li:
                rotulo = nombre
                if porc != "100":
                    rotulo += " (%s%%)" % porc
                menu.opcion(k, nombre, nico.otro())
            resp = menu.lanza()
            if resp:
                configuracion.traductor = resp
                configuracion.graba()

    # Estilo
    global stylename
    styleName = configuracion.estilo
    app.setStyle(QtGui.QStyleFactory.create(styleName))
    app.setPalette(QtGui.QApplication.style().standardPalette())
    app.setEffectEnabled(QtCore.Qt.UI_AnimateMenu)

    if configuracion.familia:
        font = Controles.TipoLetra(configuracion.familia)
        app.setFont(font)

    VarGen.gc = QTUtil.GarbageCollector()

    # Lanzamos la pantalla
    procesador.iniciarGUI()

    resp = app.exec_()
    Voice.runVoice.close()

    return resp
Example #14
0
def guardaUsuarios(liUsuarios):
    fichUsuarios = "%s/users.pkv" % Configuracion.activeFolder()
    f = open(fichUsuarios, "wb")
    f.write(cPickle.dumps(liUsuarios))
    f.close()
Example #15
0
 def __init__(self):
     self.file = "%s/users.p64" % Configuracion.active_folder()
     self.list_users = self.read()
Example #16
0
def lanzaGUI(procesador):
    """
    Lanzador del interfaz grafico de la aplicacion.
    """

    # Comprobamos el lenguaje
    app = QtGui.QApplication([])

    liUsuarios = Usuarios.Usuarios().lista
    usuario = None
    if liUsuarios:
        usuario = pideUsuario(liUsuarios)
        if usuario is None:
            return
        user = str(usuario.numero) if usuario.numero else ""
    else:
        user = ""

    activeFolder = Configuracion.activeFolder()
    siPedirLenguaje = not os.path.isdir(activeFolder) or not os.listdir(
        activeFolder)
    procesador.iniciaConUsuario(user)
    configuracion = procesador.configuracion
    if usuario:
        if not configuracion.jugador:
            configuracion.jugador = usuario.nombre
            configuracion.graba()
        elif configuracion.jugador != usuario.nombre:
            for usu in liUsuarios:
                if usu.numero == usuario.numero:
                    usu.nombre = configuracion.jugador
                    Usuarios.Usuarios().guardaLista(liUsuarios)

    # Comprobamos el lenguaje
    if siPedirLenguaje and not configuracion.traductor:
        if user:
            confMain = Configuracion.Configuracion("")
            ori = confMain.ficheroMExternos
            confMain.lee()
            confMain.limpia(usuario.nombre)
            confMain.ponCarpetas(user)
            confMain.graba()
            procesador.configuracion = confMain

            Util.copiaFichero(ori, confMain.carpeta)

        else:
            li = configuracion.listaTraducciones()
            menu = QTVarios.LCMenu(None)

            nico = QTVarios.rondoPuntos()
            for k, nombre, porc, author in li:
                rotulo = nombre
                if porc != "100":
                    rotulo += " (%s%%)" % porc
                menu.opcion(k, nombre, nico.otro())
            resp = menu.lanza()
            if resp:
                configuracion.traductor = resp
                configuracion.graba()

    # Estilo
    app.setStyle(QtGui.QStyleFactory.create(configuracion.estilo))

    if configuracion.palette:
        qpalette = QtGui.QPalette()
        palette = configuracion.palette

        def cl(tipo):
            return QtGui.QColor(palette[tipo])

        qpalette.setColor(QtGui.QPalette.Window, cl("Window"))
        qpalette.setColor(QtGui.QPalette.WindowText, cl("WindowText"))

        qpalette.setColor(QtGui.QPalette.Base, cl("Base"))
        qpalette.setColor(QtGui.QPalette.Text, cl("Text"))
        qpalette.setColor(QtGui.QPalette.AlternateBase, cl("AlternateBase"))

        qpalette.setColor(QtGui.QPalette.ToolTipBase, cl("ToolTipBase"))
        qpalette.setColor(QtGui.QPalette.ToolTipText, cl("ToolTipText"))

        qpalette.setColor(QtGui.QPalette.Button, cl("Button"))
        qpalette.setColor(QtGui.QPalette.ButtonText, cl("ButtonText"))
        qpalette.setColor(QtGui.QPalette.BrightText, cl("BrightText"))

        qpalette.setColor(QtGui.QPalette.Link, cl("Link"))

    else:
        qpalette = QtGui.QApplication.style().standardPalette()

    app.setPalette(qpalette)

    app.setEffectEnabled(QtCore.Qt.UI_AnimateMenu)

    # QtGui.QFontDatabase.addApplicationFont('IntFiles/ChessAlpha2.ttf') # TODO

    if configuracion.familia:
        font = Controles.TipoLetra(configuracion.familia)
        app.setFont(font)

    VarGen.gc = QTUtil.GarbageCollector()

    # Lanzamos la pantalla
    procesador.iniciarGUI()

    resp = app.exec_()

    return resp
Example #17
0
def lanzaGUI(procesador):
    """
    Lanzador del interfaz grafico de la aplicacion.
    """

    # Comprobamos el lenguaje
    app = QtGui.QApplication([])

    liUsuarios = Usuarios.listaUsuarios()
    if liUsuarios:
        usuario = pideUsuario(liUsuarios)
        if usuario is None:
            return
        user = str(usuario.numero) if usuario.numero else ""
    else:
        user = ""

    activeFolder = Configuracion.activeFolder()
    siPedirLenguaje = not os.path.isdir(activeFolder) or not os.listdir(activeFolder)
    procesador.iniciaConUsuario(user)
    configuracion = procesador.configuracion

    # Comprobamos el lenguaje
    if siPedirLenguaje and not configuracion.traductor:
        if user:
            confMain = Configuracion.Configuracion("")
            ori = confMain.ficheroMExternos
            confMain.lee()
            confMain.limpia(usuario.nombre)
            confMain.ponCarpetas(user)
            confMain.graba()
            procesador.configuracion = confMain

            Util.copiaFichero(ori, confMain.carpeta)

        else:
            li = configuracion.listaTraducciones()
            menu = QTVarios.LCMenu(None)

            nico = QTVarios.rondoPuntos()
            for k, nombre, porc in li:
                rotulo = nombre
                if porc != "100":
                    rotulo += " (%s%%)"%porc
                menu.opcion(k, nombre, nico.otro())
            resp = menu.lanza()
            if resp:
                configuracion.traductor = resp
                configuracion.graba()

    # Estilo
    global stylename
    styleName = configuracion.estilo
    app.setStyle(QtGui.QStyleFactory.create(styleName))
    app.setPalette(QtGui.QApplication.style().standardPalette())
    app.setEffectEnabled(QtCore.Qt.UI_AnimateMenu)

    if configuracion.familia:
        font = Controles.TipoLetra(configuracion.familia)
        app.setFont(font)

    VarGen.gc = QTUtil.GarbageCollector()

    # Lanzamos la pantalla
    procesador.iniciarGUI()

    resp = app.exec_()
    Voice.runVoice.close()

    return resp