diff options
Diffstat (limited to 'Crear_Usuario.py')
-rw-r--r-- | Crear_Usuario.py | 539 |
1 files changed, 539 insertions, 0 deletions
diff --git a/Crear_Usuario.py b/Crear_Usuario.py new file mode 100644 index 0000000..68026cc --- /dev/null +++ b/Crear_Usuario.py @@ -0,0 +1,539 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import pygame +import os +import gc +import sys +import gtk +import gobject + +from pygame.locals import * +import Globals as G +gc.enable() +import BiblioJAM +from BiblioJAM.JAMButton import JAMButton +from BiblioJAM.JAMLabel import JAMLabel +from BiblioJAM.JAMEntryText import JAMEntryText +from BiblioJAM.JAMBoardEntryText import JAMBoardEntryText +import BiblioJAM.JAMGlobals as JAMG + +class Crear_Usuario(gtk.Widget): + __gsignals__ = {"run":(gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)), + "back":(gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, [])} + def __init__(self): + gtk.Widget.__init__(self) + self.ventana = None + self.estado = False + self.fondo = None + self.reloj = None + self.frame = None + self.ventana_real = None + self.resolucionreal = None + self.VA = None + self.VH = None + self.load() + self.estado = "Intro" + + def run(self): + self.ventana.blit(self.fondo, (0,0)) + self.frame.draw(self.ventana) + pygame.display.update() + while self.estado == "Intro": + self.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.VA, self.VH) + self.frame.clear(self.ventana, self.fondo) + self.frame.update() + self.handle_event_Intro() + pygame.event.clear() + self.frame.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + + def emit_volver(self, button=None): + self.estado = None + self.emit("back") + + def handle_event_Intro(self): + for event in pygame.event.get(pygame.KEYDOWN): + tecla = event.key + if tecla == pygame.K_ESCAPE: + return self.run_dialog_intro(None) + + def load(self): + pygame.display.set_mode( (0,0), pygame.DOUBLEBUF | pygame.FULLSCREEN, 0) + A, B = G.RESOLUCION + self.ventana = pygame.Surface( (A, B), flags=HWSURFACE ) + self.ventana_real = pygame.display.get_surface() + C = pygame.display.Info().current_w + D = pygame.display.Info().current_h + self.resolucionreal = (C,D) + self.VA = float(C)/float(A) + self.VH = float(D)/float(B) + pygame.event.set_blocked([JOYAXISMOTION, JOYBALLMOTION, JOYHATMOTION, JOYBUTTONUP, JOYBUTTONDOWN, KEYUP, USEREVENT]) + pygame.event.set_allowed([MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, KEYDOWN, VIDEORESIZE, VIDEOEXPOSE, QUIT, ACTIVEEVENT]) + pygame.mouse.set_visible(True) + imagen = os.path.join(G.IMAGENES, "Login", "fondo.jpg") + self.fondo = pygame.transform.scale(pygame.image.load(imagen), G.RESOLUCION) + self.reloj = pygame.time.Clock() + self.frame = Frame(self) + self.frame.center(self.fondo.get_size()) + + def run_dialog_intro(self, button): + from BiblioJAM.JAMDialog import JAMDialog + dialog = JAMDialog(mensaje = "¿Abandonas el Juego?", + funcion_ok = self.ok_intro, funcion_cancel = self.cancel_intro) + fuente, tamanio = JAMG.get_Font_fawn() + dialog.set_font_from_file(fuente, tamanio = 40) + dialog.boton_aceptar.set_font_from_file(fuente, tamanio = 25) + dialog.boton_cancelar.set_font_from_file(fuente, tamanio = 25) + a,b,c = JAMG.get_estilo_papel_quemado() + dialog.set_colors_dialog(base = c, bordes = c) + dialog.set_colors_buttons(colorbas = a, colorbor = b, colorcara = c) + self.estado = "Dialog" + dialog.draw(self.ventana) + pygame.display.update() + while self.estado == "Dialog": + self.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.VA, self.VH) + dialog.clear(self.ventana, self.fondo) + dialog.update() + pygame.event.clear() + dialog.draw(self.ventana) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + + dialog.clear(self.ventana, self.fondo) + self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0)) + pygame.display.update() + + def ok_intro(self, button): + return self.emit_volver() + def cancel_intro(self, button): + self.estado = "Intro" + + def crear_usuario(self, usuario): + self.estado = None + self.emit("run", usuario) + +class Frame(pygame.sprite.OrderedUpdates): + def __init__(self, main): + pygame.sprite.OrderedUpdates.__init__(self) + imagen = os.path.join(G.IMAGENES, "Login", "fondo_selecciona.png") + imagen = pygame.transform.scale(pygame.image.load(imagen), (800, 570)) + fuente, tamanio = JAMG.get_Font_fawn() + imagen_teclado = os.path.join(G.IMAGENES, "icono_teclado.jpg") + + self.main = main + self.estado = None + + self.usuario = { + 'nombre':'', + 'edad':'', + 'escuela':'', + 'clase':'', + 'departamento':'', + 'personaje':'' } + + self.jacinto = JAMButton('',None) + imagenusuario = os.path.join(G.IMAGENES, "Login", "jacinto.png") + self.jacinto.set_imagen(origen = imagenusuario) + self.jacinto.connect(callback = self.select_personaje, sonido_select = None) + + self.jose = JAMButton('',None) + imagenusuario = os.path.join(G.IMAGENES, "Login", "jose.png") + self.jose.set_imagen(origen = imagenusuario) + self.jose.connect(callback = self.select_personaje, sonido_select = None) + + self.natalia = JAMButton('',None) + imagenusuario = os.path.join(G.IMAGENES, "Login", "natalia.png") + self.natalia.set_imagen(origen = imagenusuario) + self.natalia.connect(callback = self.select_personaje, sonido_select = None) + + self.personajes = [self.jacinto, self.jose, self.natalia] + for personaje in self.personajes: + personaje.set_tamanios(tamanio = (0,0), grosorbor = 1, detalle = 1, espesor = 1) + personaje.set_colores(colorbas = (255,255,255,255), + colorbor = (255,255,255,255), colorcara = (0,153,255,255)) + + self.entrys = [] + self.board = Board() + + self.fondo = pygame.sprite.Sprite() + self.fondo.image = (imagen) + self.fondo.rect = self.fondo.image.get_rect() + self.add(self.fondo) + imagen = G.get_Flecha() + salir = JAMButton("",None) + salir.set_imagen(origen = imagen, tamanio = (100,55)) + salir.set_colores(colorbas = JAMG.get_negro(), colorcara = JAMG.get_negro()) + salir.set_tamanios(tamanio = (0,0), grosorbor = 1, detalle = 1, espesor = 1) + salir.set_posicion(punto = (10,10)) + salir.connect(callback = main.run_dialog_intro) + self.add(salir) + + # Ingresar nombre + self.label_nombre = JAMLabel("Nombre:") + self.label_nombre.set_text(color = (255,255,255,255)) + self.label_nombre.set_font_from_file(fuente, tamanio = 30) + self.add(self.label_nombre) + self.entry_nombre = JAMButton("",None) + self.entrys.append(self.entry_nombre) + self.add(self.entry_nombre) + + # Ingresar Edad + self.label_edad = JAMLabel("Edad:") + self.label_edad.set_text(color = (255,255,255,255)) + self.label_edad.set_font_from_file(fuente, tamanio = 30) + self.add(self.label_edad) + self.entry_edad = JAMButton("",None) + self.entrys.append(self.entry_edad) + self.add(self.entry_edad) + + # Ingresar escuela + self.label_escuela = JAMLabel("Escuela:") + self.label_escuela.set_text(color = (255,255,255,255)) + self.label_escuela.set_font_from_file(fuente, tamanio = 30) + self.add(self.label_escuela) + self.entry_escuela = JAMButton("",None) + self.entrys.append(self.entry_escuela) + self.add(self.entry_escuela) + + # Ingresar Clase + self.label_clase = JAMLabel("Clase:") + self.label_clase.set_text(color = (255,255,255,255)) + self.label_clase.set_font_from_file(fuente, tamanio = 30) + self.add(self.label_clase) + self.entry_clase = JAMButton("",None) + self.entrys.append(self.entry_clase) + self.add(self.entry_clase) + + # Ingresar departamento + self.label_departamento = JAMLabel("Departamento:") + self.label_departamento.set_text(color = (255,255,255,255)) + self.label_departamento.set_font_from_file(fuente, tamanio = 30) + self.add(self.label_departamento) + self.entry_departamento = JAMButton("",None) + self.entrys.append(self.entry_departamento) + self.add(self.entry_departamento) + + for boton in self.entrys: + boton.set_alineacion_label("izquierda") + boton.set_imagen(origen = imagen_teclado) + boton.set_font_from_file(fuente, tamanio = 25) + boton.set_tamanios(tamanio = (300, 35), grosorbor = 1, detalle = 1, espesor = 1) + boton.connect(callback = None, sonido_select = None) + + self.label_derecho = JAMLabel("Selecciona un Personaje:") + self.label_derecho.set_text(color = (255,255,255,255)) + self.label_derecho.set_font_from_file(fuente, tamanio = 30) + self.add(self.label_derecho) + + self.boton_crear = JAMButton("Crear",None) + self.boton_crear.set_font_from_file(fuente, tamanio = 30) + self.boton_crear.set_tamanios(tamanio = (200,40), grosorbor = 1, detalle = 1, espesor = 1) + self.boton_crear.set_colores(colorbas = (0,153,255,255), colorbor = (0,153,255,255), colorcara = (255,255,255,255)) + self.boton_crear.connect(callback = self.crear_usuario, sonido_select = None) + + self.add(self.boton_crear) + + self.add(self.jacinto) + self.add(self.jose) + self.add(self.natalia) + + self.entry_nombre.connect(callback = self.enter_nombre) + self.entry_edad.connect(callback = self.enter_edad) + self.entry_escuela.connect(callback = self.enter_escuela) + self.entry_clase.connect(callback = self.enter_clase) + self.entry_departamento.connect(callback = self.enter_departamento) + + def center(self, fondo_size): + sep = 10 + w,h = fondo_size + x, y = (w/2 - self.fondo.rect.w/2, h/2 - self.fondo.rect.h/2) + self.fondo.rect.x, self.fondo.rect.y = (x, y) + + x += sep*2 + y += sep*2 + + self.label_nombre.set_posicion( (x,y) ) + y += self.label_nombre.get_tamanio()[1] + self.entry_nombre.set_posicion( (x,y) ) + y += sep*3 + self.entry_nombre.get_tamanio()[1] + + self.label_edad.set_posicion( (x,y) ) + y += self.label_edad.get_tamanio()[1] + self.entry_edad.set_posicion( (x,y) ) + y += sep*3 + self.entry_edad.get_tamanio()[1] + + self.label_escuela.set_posicion( (x,y) ) + y += self.label_escuela.get_tamanio()[1] + self.entry_escuela.set_posicion( (x,y) ) + y += sep*3 + self.entry_escuela.get_tamanio()[1] + + self.label_clase.set_posicion( (x,y) ) + y += self.label_clase.get_tamanio()[1] + self.entry_clase.set_posicion( (x,y) ) + y += sep*3 + self.entry_clase.get_tamanio()[1] + + self.label_departamento.set_posicion( (x,y) ) + y += self.label_departamento.get_tamanio()[1] + self.entry_departamento.set_posicion( (x,y) ) + + w,h = fondo_size + mitad = self.fondo.rect.w/2 + ww,hh = self.label_derecho.get_tamanio() + x = self.fondo.rect.x + mitad + mitad/2 - ww/2 + y = self.fondo.rect.y + sep + self.label_derecho.set_posicion( (x,y) ) + + ww,hh = self.jacinto.get_tamanio() + x = self.fondo.rect.x + mitad + mitad/2 - ww - sep + y = self.label_derecho.get_posicion()[1] + self.label_derecho.get_tamanio()[1] + sep + self.jacinto.set_posicion( (x,y) ) + + x = self.jacinto.get_posicion()[0] + self.jacinto.get_tamanio()[0] + sep + self.natalia.set_posicion( (x,y) ) + + ww,hh = self.jose.get_tamanio() + x = self.fondo.rect.x + mitad + mitad/2 - ww/2 + y = self.natalia.get_posicion()[1] + self.natalia.get_tamanio()[1] + sep + self.jose.set_posicion( (x,y) ) + + ww,hh = self.boton_crear.get_tamanio() + x = self.fondo.rect.x + mitad + mitad/2 - ww/2 + y = self.jose.get_posicion()[1] + self.jose.get_tamanio()[1] + sep*5 + self.boton_crear.set_posicion( (x,y) ) + + def crear_usuario(self, button): + if self.usuario['nombre'] and self.usuario['edad'] \ + and self.usuario['escuela'] and self.usuario['clase'] \ + and self.usuario['departamento'] and self.usuario['personaje']: + self.main.crear_usuario(self.usuario) + else: + print "Hay un campo sin llenar" + + def select_personaje(self, button): + self.usuario['personaje'] = button.etiqueta_unselect.imagen["origen"] + for personaje in self.personajes: + if not personaje == button: + personaje.set_colores(colorbas = (255,255,255,255), + colorbor = (255,255,255,255), colorcara = (0,153,255,255)) + else: + personaje.set_colores(colorbas = (0,153,255,255), + colorbor = (255,255,255,255), colorcara = (255,255,0,255)) + + def enter_nombre(self, button): + x,y = button.get_posicion() + w,h = button.get_tamanio() + self.board.set_posicion(punto= (x+w,y)) + self.board.callback_enter = self.add_nombre + self.board.text_buffer = button.get_text() + self.add(self.board) + self.run_board(button) + def add_nombre(self, textbuffer): + self.estado = None + if textbuffer: self.usuario['nombre'] = textbuffer + def enter_edad(self, button): + x,y = button.get_posicion() + w,h = button.get_tamanio() + self.board.set_posicion(punto= (x+w,y)) + self.board.callback_enter = self.add_edad + self.board.text_buffer = button.get_text() + self.add(self.board) + self.run_board(button) + def add_edad(self, textbuffer): + self.estado = None + if textbuffer: self.usuario['edad'] = textbuffer + def enter_escuela(self, button): + x,y = button.get_posicion() + w,h = button.get_tamanio() + self.board.set_posicion(punto= (x+w,y)) + self.board.callback_enter = self.add_escuela + self.board.text_buffer = button.get_text() + self.add(self.board) + self.run_board(button) + def add_escuela(self, textbuffer): + self.estado = None + if textbuffer: self.usuario['escuela'] = textbuffer + def enter_clase(self, button): + x,y = button.get_posicion() + w,h = button.get_tamanio() + self.board.set_posicion(punto= (x+w,y)) + self.board.callback_enter = self.add_clase + self.board.text_buffer = button.get_text() + self.add(self.board) + self.run_board(button) + def add_clase(self, textbuffer): + self.estado = None + if textbuffer: self.usuario['clase'] = textbuffer + def enter_departamento(self, button): + x,y = button.get_posicion() + w,h = button.get_tamanio() + self.board.set_posicion(punto= (x+w,y)) + self.board.callback_enter = self.add_departamento + self.board.text_buffer = button.get_text() + self.add(self.board) + self.run_board(button) + def add_departamento(self, textbuffer): + self.estado = None + if textbuffer: self.usuario['departamento'] = textbuffer + + def run_board(self, button): + self.estado = "board" + self.board.draw(self.main.ventana) + pygame.display.update() + while self.estado == "board": + self.main.reloj.tick(35) + while gtk.events_pending(): + gtk.main_iteration(False) + G.Traduce_posiciones(self.main.VA, self.main.VH) + self.clear(self.main.ventana, self.main.fondo) + self.board.update() + pygame.event.clear() + button.set_text( texto = self.board.text_buffer) + self.draw(self.main.ventana) + self.main.ventana_real.blit(pygame.transform.scale(self.main.ventana, self.main.resolucionreal), (0,0)) + pygame.display.update() + self.board.clear(self.main.ventana, self.main.fondo) + self.main.ventana_real.blit(pygame.transform.scale(self.main.ventana, self.main.resolucionreal), (0,0)) + pygame.display.update() + self.remove(self.board) + +class Board(pygame.sprite.OrderedUpdates): + def __init__(self): + pygame.sprite.OrderedUpdates.__init__(self) + self.fuente, tamanio = JAMG.get_Font_fawn() + + self.tamanio = None + self.base = None + self.text_buffer = "" + self.callback_enter = None + + self.letras, self.numeros, self.especiales = self.get_botones_letras() + botones = self.letras + self.numeros + self.especiales + self.set_normaliza_tamanios_botones(botones) + self.set_posicion() + + self.base = pygame.sprite.Sprite() + self.base.image = JAMG.get_Rectangulo_Transparente(self.tamanio) + self.base.rect = self.base.image.get_rect() + + self.add(self.base) + self.add(self.letras) + self.add(self.numeros) + self.add(self.especiales) + + def set_buffer(self, button): + if self.text_buffer == " ": self.text_buffer = "" + texto = button.get_text() + if texto and texto != "Ñ": self.text_buffer += texto # hay un error en Ñ + if self.text_buffer == " ": self.text_buffer = "" + + def set_back_space(self, button): + if self.text_buffer: + if len(self.text_buffer) > 1: + self.text_buffer = self.text_buffer[:-1] + else: + self.text_buffer = " " + + def set_enter(self, button): + if self.callback_enter: self.callback_enter(self.text_buffer) + + def get_botones_letras(self): + simbols = JAMG.get_letras_up() + botones_letras = [] + for letra in simbols: + boton = JAMButton(letra, None) + boton.set_font_from_file(self.fuente, tamanio = 20) + boton.set_tamanios(tamanio = (0,0), grosorbor = 1, detalle = 1, espesor = 1) + boton.set_colores(colorbas = (0,153,255,255), colorbor = (0,153,255,255), colorcara = (255,255,255,255)) + #boton.set_text(color = (0,153,255,255)) + boton.connect(callback = self.set_buffer, sonido_select = None) + botones_letras.append(boton) + + simbols = JAMG.get_numeros() + botones_numeros = [] + for letra in simbols: + boton = JAMButton(letra, None) + boton.set_font_from_file(self.fuente, tamanio = 20) + boton.set_tamanios(tamanio = (0,0), grosorbor = 1, detalle = 1, espesor = 1) + boton.set_colores(colorbas = (0,153,255,255), colorbor = (0,153,255,255), colorcara = (255,255,255,255)) + #boton.set_text(color = (0,153,255,255)) + boton.connect(callback = self.set_buffer, sonido_select = None) + botones_numeros.append(boton) + + botones_especiales = [] + for letra in ['', ' ', '']: + boton = JAMButton(letra, None) + #boton.set_font_from_file(self.fuente, tamanio = 20) + boton.set_tamanios(tamanio = (0,0), grosorbor = 1, detalle = 1, espesor = 1) + boton.set_colores(colorbas = (0,153,255,255), colorbor = (0,153,255,255), colorcara = (255,255,255,255)) + #boton.set_text(color = (0,153,255,255)) + boton.connect(callback = self.set_buffer, sonido_select = None) + botones_especiales.append(boton) + + imagen = os.path.join(G.IMAGENES, "back.png") + boton = botones_especiales[0] + boton.set_imagen(origen = imagen) + boton.connect(callback = self.set_back_space, sonido_select = None) + + imagen = os.path.join(G.IMAGENES, "enter.png") + boton = botones_especiales[2] + boton.set_imagen(origen = imagen) + boton.connect(callback = self.set_enter, sonido_select = None) + + return (botones_letras, botones_numeros, botones_especiales) + + def set_normaliza_tamanios_botones(self, botones): + ''' Normaliza los Tamaños de los botones. ''' + lado = 0 + for button in botones: + button.set_tamanios(tamanio = (0,0)) + if button.rect.w > lado: + lado = button.rect.w + if button.rect.h > lado: + lado = button.rect.h + for button in botones: + button.set_tamanios(tamanio = (lado,lado)) + + def set_posicion(self, punto = (0,0)): + if self.base: + self.base.rect.x, self.base.rect.y = punto + x, y = punto + for boton in self.numeros: + boton.set_posicion( (x,y) ) + x += boton.get_tamanio()[0] + x, y = punto + y += boton.get_tamanio()[1] + for boton in self.letras[:9]: + boton.set_posicion( (x,y) ) + x += boton.get_tamanio()[0] + x = punto[0] + y += boton.get_tamanio()[1] + for boton in self.letras[9:18]: + boton.set_posicion( (x,y) ) + x += boton.get_tamanio()[0] + x = punto[0] + y += boton.get_tamanio()[1] + for boton in self.letras[18:]: + boton.set_posicion( (x,y) ) + x += boton.get_tamanio()[0] + w = self.numeros[0].get_tamanio()[0]*len(self.numeros) + h = self.numeros[0].get_tamanio()[1]*4 + self.tamanio = (w,h) + + boton = self.numeros[-1] + x,y = boton.get_posicion() + w,h = boton.get_tamanio() + y += h + self.especiales[0].set_posicion( (x,y) ) + y += h + self.especiales[1].set_posicion( (x,y) ) + y += h + self.especiales[2].set_posicion( (x,y) ) + |