pilas.actores.globoelegir

Package pilas :: Package actores :: Module globoelegir |
[hide private]
[frames] | no frames]

# Source Code for Module pilas.actores.globoelegir

     1  # -*- encoding: utf-8 -*-
     2  import pilas
     3  from pilas.actores.globo import Globo
     4
     5
     6 -class GloboElegir(Globo):
     7      """Representa un mensaje de globo (similar a las historietas), pero con opciones para elegir.
     8
     9          >>> mensaje = u"Mi color favorito es el..."
    10          >>> globo = pilas.actores.GloboElegir(mensaje, [u"rojo", u"verde", u"azul"], cuando_responde_color_favorito)
    11
    12      .. image:: images/actores/globo_elegir.png
    13
    14      El primer argumento es el mensaje a mostrar, el segundo una lista de opciones que se ofrecerán
    15      y por último una función de respuesta. Que podría ser codificada así:
    16
    17      .. code-block:: python
    18
    19          def cuando_responde_color_favorito(respuesta):
    20              print "Ha seleccionado la opcion: " + respuesta
    21
    22      """
    23
    24 -    def __init__(self, texto, opciones, funcion_a_invocar, x=0, y=0, dialogo=None):
    25          """Constructor del dialogo:
    26
    27          :param texto: Cadena de texto que se tiene que mostrar.
    28          :param opciones: Lista de opciones a mostrar.
    29          :param funcion_a_invocar: Referencia a la función que se tiene que ejecutar cuando responde el usuario.
    30          :param x: Posición horizontal.
    31          :param y: Posición vertical.
    32          :param dialogo: Instancia del manejador de dialogos, para crear mensajes enlazados.
    33          """
    34          self.dialogo = dialogo
    35          self.opciones = opciones
    36          self.funcion_a_invocar = funcion_a_invocar
    37
    38          self.lista_seleccion = pilas.interfaz.ListaSeleccion(opciones, self._cuando_selecciona_opcion, x, y)
    39          self.lista_seleccion.escala = 0.1
    40          self.lista_seleccion.escala = [1], 0.2
    41          self.lista_seleccion.z = 1
    42
    43          Globo.__init__(self, texto, x, y, dialogo=dialogo,
    44                         ancho_globo=self.lista_seleccion.ancho_opciones+24,
    45                         alto_globo=self.lista_seleccion.alto_opciones + (self.lista_seleccion.separacion_entre_opciones * len(self.opciones) * 2))
    46          self.z = 2
    47
    48 -    def colocar_origen_del_globo(self, x, y):
    49          """Cambia el punto de referencia del globo.
    50
    51          :param x: Punto de referencia horizontal.
    52          :param y: Punto de referencia vertical.
    53          """
    54          Globo.colocar_origen_del_globo(self, x, y)
    55
    56          self.lista_seleccion.centro = ("derecha", "abajo")
    57          self.lista_seleccion.x = x - (self.ancho_globo - self.lista_seleccion.ancho_opciones) + 12
    58          self.lista_seleccion.y = y + 35
    59
    60 -    def _obtener_area_para_el_texto(self, texto):
    61          ancho, alto = self.lienzo.obtener_area_de_texto(texto, tamano=14)
    62          opciones_ancho, opciones_alto = self.lienzo.obtener_area_para_lista_de_texto(self.opciones, tamano=14)
    63          return ancho + opciones_ancho, alto + opciones_alto
    64
    65 -    def _escribir_texto(self, texto):
    66          self.lienzo.escribir(texto, 12, 25, tamano=14)
    67
    68 -    def cuando_quieren_avanzar(self, *k):
    69          pass
    70
    71 -    def _cuando_selecciona_opcion(self, opcion):
    72          self.funcion_a_invocar(opcion)
    73          Globo.cuando_quieren_avanzar(self)
    74          self.lista_seleccion.eliminar()
    75