Beispiel #1
0
class GameImage(gtk.DrawingArea):
    def __init__(self):

        gtk.DrawingArea.__init__(self)

        self.modify_bg(gtk.STATE_NORMAL, COLORES["text"])
        self.add_events(gtk.gdk.BUTTON_PRESS_MASK)

        self.imagenplayer = False
        self.path = False

        self.show_all()

    def stop(self):
        if self.imagenplayer:
            self.imagenplayer.stop()
            del (self.imagenplayer)
            self.imagenplayer = False

    def load(self, topic):
        self.stop()
        self.path = os.path.abspath("Imagenes/juego1.png")
        self.imagenplayer = ImagePlayer(self)
        self.imagenplayer.load(self.path)
        return False
class GameImage(gtk.DrawingArea):

    def __init__(self):

        gtk.DrawingArea.__init__(self)

        self.modify_bg(gtk.STATE_NORMAL, COLORES["text"])
        self.add_events(gtk.gdk.BUTTON_PRESS_MASK)

        self.imagenplayer = False
        self.path = False

        self.show_all()

    def stop(self):
        if self.imagenplayer:
            self.imagenplayer.stop()
            del(self.imagenplayer)
            self.imagenplayer = False

    def load(self, topic):
        self.stop()
        self.path = os.path.abspath("Imagenes/juego1.png")
        self.imagenplayer = ImagePlayer(self)
        self.imagenplayer.load(self.path)
        return False
Beispiel #3
0
 def __jamediaimagenes_run(self):
     """
     Cambia a modo visor de imágenes.
     """
     if PR:
         print "__jamediaimagenes_run"
     self.imageplayer = ImagePlayer(self.pantalla)
     self.playerlist.set_mime_types(["image/*"])
Beispiel #4
0
 def __run(self):
     self.player = ImagePlayer(self.pantalla)
     dirpath = os.path.join(BASE_PATH, "Imagenes")
     elementos = []
     for path in sorted(os.listdir(dirpath)):
         elementos.append([path, os.path.join(dirpath, path)])
     self.playerlist.lista.agregar_items(elementos)
     dialog = Dialog(parent=self.get_toplevel(),
         text="Presiona Escape Cuando Desees Salir")
     dialog.run()
     return False
Beispiel #5
0
    def __run_secuencia(self, widget=None, offset=1):
        self.stop()
        self.index_select += offset
        self.path = self.slides[self.index_select % len(self.slides)]
        self.imagenplayer = ImagePlayer(self.drawing)
        self.imagenplayer.load(self.path)
        self.label.set_text("Slide %i of %i" % (
            self.index_select % len(self.slides) + 1, len(self.slides)))

        #self.left.hide()
        #self.right.hide()
        return True
Beispiel #6
0
 def __realize(self, widget):
     tipo = describe_archivo(self.archivo)
     if "image" in tipo:
         self.player = ImagePlayer(self)
     elif 'video' in tipo or 'application/ogg':
         self.player = JAMediaReproductor(self.get_property('window').xid)
     gobject.idle_add(self.player.load, self.archivo)
Beispiel #7
0
    def __run_secuencia(self, widget=None, offset=1):
        self.stop()
        self.path = os.path.join(
            self.topic, "Imagenes",
            "%s.png" % self.vocabulario[self.index_select][0])
        self.imagenplayer = ImagePlayer(self.drawing)
        self.imagenplayer.load(self.path)
        self.label.set_text(self.vocabulario[self.index_select][1])
        if self.index_select < len(self.vocabulario) - 1:
            self.index_select += offset
        else:
            self.index_select = 0

        self.left.hide()
        self.right.hide()
        return True
Beispiel #8
0
 def __jamediaimagenes_run(self):
     """
     Cambia a modo visor de imágenes.
     """
     if PR:
         print "__jamediaimagenes_run"
     self.imageplayer = ImagePlayer(self.pantalla)
     self.playerlist.set_mime_types(["image/*"])
Beispiel #9
0
class OjosCompuestos(Gtk.HPaned):

    def __init__(self, pantalla):

        GObject.GObject.__init__(self)

        print "Corriendo Ojos Compuestos . . ."

        self.override_background_color(Gtk.StateType.NORMAL, color_parser("#ffffff"))

        self.player = False
        self.pantalla = pantalla
        self.playerlist = PlayerList()

        self.pack1(self.pantalla, resize=True, shrink=True)
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.playerlist.connect("nueva-seleccion", self.__play_item)

        self.connect("realize", self.__load_imagenes)
        self.show_all()

    def __load_imagenes(self, widget):
        GLib.idle_add(self.__run)

    def __run(self):
        self.player = ImagePlayer(self.pantalla)
        dirpath = os.path.join(BASE_PATH, "Imagenes")
        elementos = []
        for path in sorted(os.listdir(dirpath)):
            elementos.append([path, os.path.join(dirpath, path)])
        self.playerlist.lista.agregar_items(elementos)
        dialog = Dialog(parent=self.get_toplevel(),
            text="Presiona Escape Cuando Desees Salir")
        dialog.run()
        return False

    def __play_item(self, widget, path):
        if path:
            self.player.load(path)

    def salir(self):
        self.player.stop()
Beispiel #10
0
class OjosCompuestos(gtk.HPaned):

    def __init__(self, pantalla):

        gtk.HPaned.__init__(self)

        print "Corriendo Ojos Compuestos . . ."

        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#ffffff"))

        self.player = False
        self.pantalla = pantalla
        self.playerlist = PlayerList()

        self.pack1(self.pantalla, resize=True, shrink=True)
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.playerlist.connect("nueva-seleccion", self.__play_item)

        self.connect("realize", self.__load_imagenes)
        self.show_all()

    def __load_imagenes(self, widget):
        gobject.idle_add(self.__run)

    def __run(self):
        self.player = ImagePlayer(self.pantalla)
        dirpath = os.path.join(BASE_PATH, "Imagenes")
        elementos = []
        for path in sorted(os.listdir(dirpath)):
            elementos.append([path, os.path.join(dirpath, path)])
        self.playerlist.lista.agregar_items(elementos)
        dialog = Dialog(parent=self.get_toplevel(),
            text="Presiona Escape Cuando Desees Salir")
        dialog.run()
        return False

    def __play_item(self, widget, path):
        if path:
            self.player.load(path)

    def salir(self):
        self.player.stop()
Beispiel #11
0
 def __run(self):
     self.player = ImagePlayer(self.pantalla)
     dirpath = os.path.join(BASE_PATH, "Imagenes")
     elementos = []
     for path in sorted(os.listdir(dirpath)):
         elementos.append([path, os.path.join(dirpath, path)])
     self.playerlist.lista.agregar_items(elementos)
     dialog = Dialog(parent=self.get_toplevel(),
         text="Presiona Escape Cuando Desees Salir")
     dialog.run()
     return False
    def __run_secuencia(self, widget=None, offset=1):
        self.stop()
        self.index_select += offset
        self.path = self.slides[self.index_select % len(self.slides)]
        self.imagenplayer = ImagePlayer(self.drawing)
        self.imagenplayer.load(self.path)
        self.label.set_text("Slide %i of %i" % (
            self.index_select % len(self.slides) + 1, len(self.slides)))

        #self.left.hide()
        #self.right.hide()
        return True
Beispiel #13
0
    def __load(self, index):
        """
        Carga una nueva palabra del Vocabulario
        """
        path = os.path.join(self.topic, "Imagenes",
            "%s.png" % self.vocabulario[index][0])
        if self.imagenplayer:
            self.imagenplayer.stop()
            del(self.imagenplayer)
            self.imagenplayer = False
        self.imagenplayer = ImagePlayer(self.flashcard.drawing)
        self.imagenplayer.load(path)
        #self.cabecera.question_label.modify_fg(gtk.STATE_NORMAL, COLORES["rojo"])
        pregunta = self.vocabulario[index][2] if len(self.vocabulario[index]) > 2 else ""
        if pregunta == "":
            pregunta = "What is this?"
        self.cabecera.question_label.set_markup("<b>"+pregunta+"</b>")

        if self.click_event:
            self.flashcard.disconnect(self.click_event)
            self.click_event = None
        self.click_event = self.flashcard.connect("button-press-event", self.repetir_pregunta, pregunta)
        gobject.idle_add(self.__activar, pregunta)
        return False
    def __run_secuencia(self, widget=None, offset=1):
        self.stop()
        self.path = os.path.join(self.topic, "Imagenes",
            "%s.png" % self.vocabulario[self.index_select][0])
        self.imagenplayer = ImagePlayer(self.drawing)
        self.imagenplayer.load(self.path)
        self.label.set_text(
            self.vocabulario[self.index_select][1])
        if self.index_select < len(self.vocabulario) - 1:
            self.index_select += offset
        else:
            self.index_select = 0

        self.left.hide()
        self.right.hide()
        return True
class HelpSlideShow(gtk.EventBox):

    def __init__(self):

        gtk.EventBox.__init__(self)

        self.modify_bg(gtk.STATE_NORMAL, COLORES["toolbar"])
        #self.set_border_width(20)

        self.slides = []
        self.index_select = 0
        self.imagenplayer = False
        self.control = False

        self.drawing = gtk.DrawingArea()
        eventcontainer = gtk.EventBox()
        eventcontainer.modify_bg(gtk.STATE_NORMAL, COLORES["toolbar"])
        self.label = gtk.Label("Text")
        self.label.set_property("justify", gtk.JUSTIFY_CENTER)
        self.drawing.modify_bg(gtk.STATE_NORMAL, COLORES["toolbar"])
        self.label.modify_bg(gtk.STATE_NORMAL, COLORES["toolbar"])
        self.label.modify_fg(gtk.STATE_NORMAL, COLORES["window"])
        #self.label.modify_font(pango.FontDescription("DejaVu Sans 16"))
        eventcontainer.add(self.label)

        hbox = gtk.HBox()
        self.left = gtk.Button()
        self.left.unset_flags(gtk.CAN_FOCUS)
        self.left.set_relief(gtk.RELIEF_NONE)
        imagen = gtk.Image()
        imagen.set_from_file("Imagenes/flecha_izquierda.png")
        self.left.set_border_width(0)
        self.left.add(imagen)
        self.left.connect("clicked", self.go_left)
        hbox.pack_start(self.left)

        hbox.add(eventcontainer)

        self.right = gtk.Button()
        self.right.set_relief(gtk.RELIEF_NONE)
        self.right.unset_flags(gtk.CAN_FOCUS)
        imagen = gtk.Image()
        imagen.set_from_file("Imagenes/flecha_derecha.png")
        self.right.set_border_width(0)
        self.right.add(imagen)
        self.right.connect("clicked", self.go_right)
        hbox.pack_end(self.right)

        tabla = gtk.Table(rows=8, columns=1, homogeneous=True)
        tabla.attach(self.drawing, 0, 1, 0, 7, ypadding=5)
        tabla.attach(hbox, 0, 1, 7, 8)

        align = gtk.Alignment(0.5, 0.5, 0.7, 0.95)
        align.add(tabla)

        self.add(align)

    def go_right(self, widget):
        self.__run_secuencia()
        self.left.show()
        self.right.show()

    def go_left(self, widget):
        self.__run_secuencia(offset=-1)
        self.left.show()
        self.right.show()

    def __run_secuencia(self, widget=None, offset=1):
        self.stop()
        self.index_select += offset
        self.path = self.slides[self.index_select % len(self.slides)]
        self.imagenplayer = ImagePlayer(self.drawing)
        self.imagenplayer.load(self.path)
        self.label.set_text("Slide %i of %i" % (
            self.index_select % len(self.slides) + 1, len(self.slides)))

        #self.left.hide()
        #self.right.hide()
        return True

    def toggle(self):
        if self.control:
            gobject.source_remove(self.control)
            self.control = False
            self.modify_bg(gtk.STATE_NORMAL, COLORES['rojo'])
            self.left.show()
            self.right.show()
        else:
            self.modify_bg(gtk.STATE_NORMAL, COLORES['window'])
            self.play()
            self.left.hide()
            self.right.hide()

    def reset(self):
        self.modify_bg(gtk.STATE_NORMAL, COLORES['window'])
        self.play()

    def stop(self):
        if self.imagenplayer:
            self.imagenplayer.stop()
            del(self.imagenplayer)
            self.imagenplayer = False

    def play(self):
        if not self.control:
            self.control = gobject.timeout_add(10000, self.__run_secuencia)

    def load(self):
        self.stop()
        self.slides = sorted(glob("Imagenes/tv_slides/slide*.png"))
        self.index_select = -1
        self.__run_secuencia()
        #self.play()
        return False
Beispiel #16
0
class HelpSlideShow(gtk.EventBox):

    def __init__(self):

        gtk.EventBox.__init__(self)

        self.modify_bg(gtk.STATE_NORMAL, COLORES["toolbar"])
        #self.set_border_width(20)

        self.slides = []
        self.index_select = 0
        self.imagenplayer = False
        self.control = False

        self.drawing = gtk.DrawingArea()
        eventcontainer = gtk.EventBox()
        eventcontainer.modify_bg(gtk.STATE_NORMAL, COLORES["toolbar"])
        self.label = gtk.Label("Text")
        self.label.set_property("justify", gtk.JUSTIFY_CENTER)
        self.drawing.modify_bg(gtk.STATE_NORMAL, COLORES["toolbar"])
        self.label.modify_bg(gtk.STATE_NORMAL, COLORES["toolbar"])
        self.label.modify_fg(gtk.STATE_NORMAL, COLORES["window"])
        #self.label.modify_font(pango.FontDescription("DejaVu Sans 16"))
        eventcontainer.add(self.label)

        hbox = gtk.HBox()
        self.left = gtk.Button()
        self.left.unset_flags(gtk.CAN_FOCUS)
        self.left.set_relief(gtk.RELIEF_NONE)
        imagen = gtk.Image()
        imagen.set_from_file("Imagenes/flecha_izquierda.png")
        self.left.set_border_width(0)
        self.left.add(imagen)
        self.left.connect("clicked", self.go_left)
        hbox.pack_start(self.left)

        hbox.add(eventcontainer)

        self.right = gtk.Button()
        self.right.set_relief(gtk.RELIEF_NONE)
        self.right.unset_flags(gtk.CAN_FOCUS)
        imagen = gtk.Image()
        imagen.set_from_file("Imagenes/flecha_derecha.png")
        self.right.set_border_width(0)
        self.right.add(imagen)
        self.right.connect("clicked", self.go_right)
        hbox.pack_end(self.right)

        tabla = gtk.Table(rows=8, columns=1, homogeneous=True)
        tabla.attach(self.drawing, 0, 1, 0, 7, ypadding=5)
        tabla.attach(hbox, 0, 1, 7, 8)

        align = gtk.Alignment(0.5, 0.5, 0.7, 0.95)
        align.add(tabla)

        self.add(align)

    def go_right(self, widget):
        self.__run_secuencia()
        self.left.show()
        self.right.show()

    def go_left(self, widget):
        self.__run_secuencia(offset=-1)
        self.left.show()
        self.right.show()

    def __run_secuencia(self, widget=None, offset=1):
        self.stop()
        self.index_select += offset
        self.path = self.slides[self.index_select % len(self.slides)]
        self.imagenplayer = ImagePlayer(self.drawing)
        self.imagenplayer.load(self.path)
        self.label.set_text("Slide %i of %i" % (
            self.index_select % len(self.slides) + 1, len(self.slides)))

        #self.left.hide()
        #self.right.hide()
        return True

    def toggle(self):
        if self.control:
            gobject.source_remove(self.control)
            self.control = False
            self.modify_bg(gtk.STATE_NORMAL, COLORES['rojo'])
            self.left.show()
            self.right.show()
        else:
            self.modify_bg(gtk.STATE_NORMAL, COLORES['window'])
            self.play()
            self.left.hide()
            self.right.hide()

    def reset(self):
        self.modify_bg(gtk.STATE_NORMAL, COLORES['window'])
        self.play()

    def stop(self):
        if self.imagenplayer:
            self.imagenplayer.stop()
            del(self.imagenplayer)
            self.imagenplayer = False

    def play(self):
        if not self.control:
            self.control = gobject.timeout_add(10000, self.__run_secuencia)

    def load(self):
        self.stop()
        self.slides = sorted(glob("Imagenes/slides/slide*.png"))
        self.index_select = -1
        self.__run_secuencia()
        #self.play()
        return False
Beispiel #17
0
class FlashCardView(gtk.EventBox):

    __gsignals__ = {
    "video": (gobject.SIGNAL_RUN_FIRST,
        gobject.TYPE_NONE, (gobject.TYPE_STRING, ))}

    def __init__(self):

        gtk.EventBox.__init__(self)

        self.modify_bg(gtk.STATE_NORMAL, COLORES["contenido"])
        self.set_border_width(4)

        self.user = False
        self.topic = False
        self.vocabulario = []
        self.imagenplayer = False
        self.index_select = 0
        self.click_event = True

        tabla = gtk.Table(rows=11, columns=5, homogeneous=True)
        tabla.set_property("column-spacing", 5)
        tabla.set_property("row-spacing", 5)
        tabla.set_border_width(4)

        self.cabecera = Cabecera()
        self.flashcard = FlashCard()

        tabla.attach(self.cabecera, 0, 5, 0, 2)
        tabla.attach(self.flashcard, 0, 3, 2, 11)

        self.derecha = Derecha()
        tabla.attach(self.derecha, 3, 5, 2, 10)
        self.statuslabel = gtk.Label("Flashcard 0 of 0")
        tabla.attach(self.statuslabel, 3, 5, 10, 11)

        self.add(tabla)
        self.show_all()

        self.derecha.connect("siguiente", self.__siguiente)
        self.derecha.connect("show_answer", self.__show_answer)

    def __show_answer(self, widget):
        index = self.index_select
        respuesta = self.vocabulario[index][3] if len(self.vocabulario[index]) > 3 else \
                    self.vocabulario[index][1]
        self.derecha.label.set_text(
            self.vocabulario[index][1].replace(" ", "\n"))
        self.cabecera.question_label.set_markup("<b>"+respuesta+"</b>")
        if self.click_event:
            self.flashcard.disconnect(self.click_event)
            self.click_event = None
        self.click_event = self.flashcard.connect("button-press-event", self.repetir_respuesta, respuesta)
        #self.cabecera.question_label.modify_fg(gtk.STATE_NORMAL, COLORES["rojo"])
        gobject.idle_add(self.__show_phrase, respuesta)

    def __show_phrase(self, respuesta):
        decir_demorado(170, 50, 0, "en-gb", respuesta)
        self.cabecera.question_label.modify_fg(gtk.STATE_NORMAL, COLORES["window"])
        self.cabecera.question_label.set_markup(respuesta)
        if not self.click_event:
            self.click_event = self.flashcard.connect("button-press-event", self.repetir_respuesta, respuesta)

    def __siguiente(self, widget, respuesta):
        """
        Continúa con siguiente palabra del vocabulario cargado.
        """
        r = 0
        if respuesta == 1:
            r = 5
        elif respuesta == 2:
            r = 3
        elif respuesta == 3:
            r = 0
        guardar(self.user, self.topic,
            self.vocabulario[self.index_select][0], r)
        if self.index_select < len(self.vocabulario) - 1:
            self.index_select += 1
            gobject.timeout_add(500, self.__load, self.index_select)
        else:
            dialog = Dialog("Congratulations!", self.get_toplevel(),
                ("OK", gtk.RESPONSE_ACCEPT),
                "Memorization task completed for today.")
            dialog.run()
            dialog.destroy()
            self.emit("video", self.topic)

    def __load(self, index):
        """
        Carga una nueva palabra del Vocabulario
        """
        path = os.path.join(self.topic, "Imagenes",
            "%s.png" % self.vocabulario[index][0])
        if self.imagenplayer:
            self.imagenplayer.stop()
            del(self.imagenplayer)
            self.imagenplayer = False
        self.imagenplayer = ImagePlayer(self.flashcard.drawing)
        self.imagenplayer.load(path)
        #self.cabecera.question_label.modify_fg(gtk.STATE_NORMAL, COLORES["rojo"])
        pregunta = self.vocabulario[index][2] if len(self.vocabulario[index]) > 2 else ""
        if pregunta == "":
            pregunta = "What is this?"
        self.cabecera.question_label.set_markup("<b>"+pregunta+"</b>")

        if self.click_event:
            self.flashcard.disconnect(self.click_event)
            self.click_event = None
        self.click_event = self.flashcard.connect("button-press-event", self.repetir_pregunta, pregunta)
        gobject.idle_add(self.__activar, pregunta)
        return False

    def repetir_pregunta(self, widget, event, pregunta):
        if self.click_event:
            self.flashcard.disconnect(self.click_event)
            self.click_event = None
        self.click_event = None
        self.cabecera.question_label.set_markup("<b>"+pregunta+"</b>")
        gobject.idle_add(self.__activar, pregunta)

    def repetir_respuesta(self, widget, event, respuesta):
        if self.click_event:
            self.flashcard.disconnect(self.click_event)
            self.click_event = None
        self.click_event = None
        self.cabecera.question_label.set_markup("<b>"+respuesta+"</b>")
        gobject.idle_add(self.__show_phrase, respuesta)

    def __activar(self, pregunta):
        decir_demorado(170, 50, 0, "en", pregunta)
        if not self.click_event:
            self.click_event = self.flashcard.connect("button-press-event", self.repetir_pregunta, pregunta)
        self.derecha.activar()
        self.cabecera.question_label.modify_fg(gtk.STATE_NORMAL, COLORES["window"])
        self.cabecera.question_label.set_markup(pregunta)
        self.statuslabel.set_text("Flashcard %i of %i" % (
            self.index_select + 1, len(self.vocabulario)))
        return False

    def stop(self):
        """
        Desactiva la vista de FlashCards.
        """
        self.hide()
        if self.imagenplayer:
            self.imagenplayer.stop()
            del(self.imagenplayer)
            self.imagenplayer = False

    def run(self, data):
        """
        Carga Vocabulario, pone widgets a estado inicial y
        carga primera palabra.
        """
        topic, _dict = data
        self.user = _dict
        parser = SafeConfigParser()
        metadata = os.path.join(topic, "topic.ini")
        parser.read(metadata)

        self.cabecera.titulo.set_text("Topic: " + parser.get('topic', 'title'))

        self.derecha.run()
        vocabulario = get_vocabulario(topic, _dict)
        if len(vocabulario) > 14:
            vocabulario = vocabulario[:15]
        self.show()
        if vocabulario:
            self.vocabulario = vocabulario
            self.topic = topic
            self.index_select = 0
            gobject.timeout_add(500, self.__load, self.index_select)
        else:
            self.topic = topic
            dialog = Dialog("Come back tomorrow!", self.get_toplevel(),
                ("OK", gtk.RESPONSE_ACCEPT),
                "You've memorized all flashcards for today.")
            dialog.run()
            dialog.destroy()
            self.emit("video", self.topic)
Beispiel #18
0
 def load(self, topic):
     self.stop()
     self.path = os.path.abspath("Imagenes/juego1.png")
     self.imagenplayer = ImagePlayer(self)
     self.imagenplayer.load(self.path)
     return False
Beispiel #19
0
class FlashCardsPreview(gtk.EventBox):
    def __init__(self):

        gtk.EventBox.__init__(self)

        self.modify_bg(gtk.STATE_NORMAL, COLORES["window"])
        #self.set_border_width(20)

        self.vocabulario = []
        self.index_select = 0
        self.imagenplayer = False
        self.path = False
        self.control = False
        self.topic = False

        self.drawing = gtk.DrawingArea()
        eventcontainer = gtk.EventBox()
        eventcontainer.modify_bg(gtk.STATE_NORMAL, COLORES["window"])
        self.label = gtk.Label("Text")
        self.label.set_property("justify", gtk.JUSTIFY_CENTER)
        self.drawing.modify_bg(gtk.STATE_NORMAL, COLORES["window"])
        self.label.modify_bg(gtk.STATE_NORMAL, COLORES["window"])
        self.label.modify_fg(gtk.STATE_NORMAL, COLORES["text"])
        self.label.modify_font(pango.FontDescription("DejaVu Sans 20"))
        eventcontainer.add(self.label)
        eventcontainer.connect("button-press-event", self.utter)

        hbox = gtk.HBox()
        self.left = gtk.Button()
        self.left.set_relief(gtk.RELIEF_NONE)
        imagen = gtk.Image()
        imagen.set_from_file("Imagenes/flecha_izquierda.png")
        self.left.modify_bg(gtk.STATE_NORMAL, COLORES["rojo"])
        self.left.add(imagen)
        self.left.connect("clicked", self.go_left)
        hbox.pack_start(self.left)

        hbox.add(eventcontainer)

        self.right = gtk.Button()
        self.right.set_relief(gtk.RELIEF_NONE)
        imagen = gtk.Image()
        imagen.set_from_file("Imagenes/flecha_derecha.png")
        self.right.modify_bg(gtk.STATE_NORMAL, COLORES["rojo"])
        self.right.add(imagen)
        self.right.connect("clicked", self.go_right)
        hbox.pack_end(self.right)

        tabla = gtk.Table(rows=8, columns=1, homogeneous=True)
        tabla.attach(self.drawing, 0, 1, 0, 7, ypadding=5)
        tabla.attach(hbox, 0, 1, 7, 8)

        align = gtk.Alignment(0.5, 0.5, 0.7, 0.95)
        align.add(tabla)

        self.add(align)

    def utter(self, widget, event):
        palabra = self.label.get_text()
        #self.label.modify_fg(gtk.STATE_NORMAL, COLORES["rojo"])
        self.label.set_markup("<b>" + palabra + "</b>")
        gobject.idle_add(self.utter2, palabra)
        return True

    def utter2(self, palabra):
        decir_demorado(170, 50, 0, "en-gb", palabra)
        self.label.set_markup(palabra)
        #self.label.modify_fg(gtk.STATE_NORMAL, COLORES["text"])

    def go_right(self, widget):
        self.__run_secuencia()
        self.left.show()
        self.right.show()

    def go_left(self, widget):
        self.__run_secuencia(-1)
        self.left.show()
        self.right.show()

    def __run_secuencia(self, widget=None, offset=1):
        self.stop()
        self.path = os.path.join(
            self.topic, "Imagenes",
            "%s.png" % self.vocabulario[self.index_select][0])
        self.imagenplayer = ImagePlayer(self.drawing)
        self.imagenplayer.load(self.path)
        self.label.set_text(self.vocabulario[self.index_select][1])
        if self.index_select < len(self.vocabulario) - 1:
            self.index_select += offset
        else:
            self.index_select = 0

        self.left.hide()
        self.right.hide()
        return True

    def toggle(self):
        if self.control:
            gobject.source_remove(self.control)
            self.control = False
            self.modify_bg(gtk.STATE_NORMAL, COLORES['rojo'])
            self.left.show()
            self.right.show()
        else:
            self.modify_bg(gtk.STATE_NORMAL, COLORES['window'])
            self.play()
            self.left.hide()
            self.right.hide()

    def reset(self):
        self.modify_bg(gtk.STATE_NORMAL, COLORES['window'])
        self.play()

    def stop(self):
        if self.imagenplayer:
            self.imagenplayer.stop()
            del (self.imagenplayer)
            self.imagenplayer = False

    def play(self):
        if not self.control:
            self.control = gobject.timeout_add(4000, self.__run_secuencia)

    def load(self, topic):
        self.stop()
        self.topic = topic
        self.vocabulario = get_flashcards_previews(self.topic)
        self.index_select = 0
        self.__run_secuencia()
        self.play()
        return False
Beispiel #20
0
class BasePanel(gtk.HPaned):
    """
    izquierda:
        visor
        barra con efectos de video que se aplican

    derecha:
        Configuración de cámara y formato de salida ==> self.camara_setting
        balance y efectos de video ==> self.video_widgets_config
        efectos de audio ==> self.audio_widgets_config
    """

    __gsignals__ = {
    "accion-list": (gobject.SIGNAL_RUN_LAST,
        gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,
        gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
    "in-run": (gobject.SIGNAL_RUN_LAST,
        gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN, )),
    "cancel-toolbars": (gobject.SIGNAL_RUN_LAST,
        gobject.TYPE_NONE, ()),
    "pendientes": (gobject.SIGNAL_RUN_LAST,
        gobject.TYPE_NONE, (gobject.TYPE_STRING, ))}

    def __init__(self):

        gtk.HPaned.__init__(self)

        self.modify_bg(0, get_colors("toolbars"))

        self.control = True
        self.jamediawebcam = False
        self.player = False
        self.imageplayer = False

        self.pantalla = Visor()
        self.info_label = Info_Label()
        self.efectos_en_pipe = Efectos_en_Pipe()
        self.progressplayer = ProgressPlayer()
        self.jamediaconvert = WidgetConvert()

        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
        scroll.add_with_viewport(self.efectos_en_pipe)
        scroll.get_child().modify_bg(0, get_colors("drawingplayer"))

        vbox = gtk.VBox()
        vbox.pack_start(self.info_label, False, False, 0)
        vbox.pack_start(self.pantalla, True, True, 0)
        vbox.pack_start(self.jamediaconvert, True, True, 0)
        vbox.pack_start(scroll, False, False, 0)
        vbox.pack_start(self.progressplayer, False, False, 0)
        self.pack1(vbox, resize=True, shrink=True)

        # Area Derecha del Panel
        self.box_config = gtk.EventBox()
        self.box_config.modify_bg(0, get_colors("window"))
        self.vbox_config = gtk.VBox()

        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        scroll.add_with_viewport(self.vbox_config)
        scroll.get_child().modify_bg(0, get_colors("window"))
        self.box_config.add(scroll)

        self.camara_setting = CamaraConfig()
        self.video_out_setting = Video_out_Config()
        self.rafagas_setting = Rafagas_Config()
        self.balance_config_widget = ToolbarConfig()
        self.playerlist = PlayerList()
        self.player_control = PlayerControls()
        self.widget_efectos = False  # WidgetsGstreamerEfectos()

        self.vbox_config.pack_start(self.camara_setting, False, False, 0)
        self.vbox_config.pack_start(self.video_out_setting, False, False, 0)
        self.vbox_config.pack_start(self.rafagas_setting, False, False, 0)
        self.vbox_config.pack_start(self.balance_config_widget, False, False, 0)
        #self.derecha_vbox.pack_start(self.widget_efectos, True, True, 0)

        self.vbox_config.pack_start(self.playerlist, True, True, 0)
        self.vbox_config.pack_end(self.player_control, False, True, 0)
        self.pack2(self.box_config, resize=False, shrink=False)
        self.show_all()

        self.pantalla.connect("button_press_event", self.__clicks_en_pantalla)
        self.balance_config_widget.connect('valor', self.__set_balance)
        self.camara_setting.connect("set_camara", self.__set_camara)
        self.video_out_setting.connect("set_video_out", self.__set_video_out)
        self.player_control.connect("accion-controls", self.__accion_player)
        self.playerlist.connect("nueva-seleccion", self.__play_item)
        self.playerlist.connect("accion", self.__re_emit_accion_list)
        self.progressplayer.connect("seek", self.__user_set_progress)
        self.progressplayer.connect("volumen", self.__set_volumen)
        self.jamediaconvert.connect("accion-list", self.__re_emit_accion_list)
        self.jamediaconvert.connect("in-run", self.__jamediaconvert_in_run)
        self.jamediaconvert.connect("pendientes", self.__jamediaconvert_info)

        self.control = False

    def __jamediaconvert_info(self, widget, info):
        self.emit("pendientes", info)

    def __jamediaconvert_in_run(self, widget, valor):
        self.emit("in-run", valor)

    def __re_emit_accion_list(self, widget, lista, accion, _iter):
        self.emit("accion-list", lista, accion, _iter)

    def __set_volumen(self, widget, valor):
        """
        REPRODUCTOR:
            Cuando el usuario cambia el volumen.
        """

        if self.player:
            self.player.set_volumen(valor)

        self.emit("cancel-toolbars")

    def __user_set_progress(self, widget=None, valor=None):
        """
        REPRODUCTOR:
            Recibe la posicion en la barra de progreso cuando
            el usuario la desplaza y hace "seek" sobre el reproductor.
        """

        if self.player:
            self.player.set_position(valor)

        self.emit("cancel-toolbars")

    def __accion_player(self, widget, senial):
        """
        REPRODUCTOR:
            Acciones sobre pistas en lista de reproducción.
        """

        if senial == "atras":
            self.playerlist.seleccionar_anterior()

        elif senial == "siguiente":
            self.playerlist.seleccionar_siguiente()

        elif senial == "stop":
            if self.player:
                self.player.stop()

        elif senial == "pausa-play":
            if self.player:
                self.player.pause_play()

        self.emit("cancel-toolbars")

    def __play_item(self, widget, path):
        """
        REPRODUCTOR y VISOR de IMAGENES:
        """

        if self.player:
            volumen = 1.0

            volumen = float("{:.1f}".format(
                self.progressplayer.volumen.get_value() * 10))

            try:
                self.player.disconnect_by_func(self.__endfile)
                self.player.disconnect_by_func(self.__cambioestadoreproductor)
                self.player.disconnect_by_func(self.__update_progress)
                #self.player.disconnect_by_func(self.__set_video)
            except:
                pass

            self.player.stop()
            del(self.player)

            xid = self.pantalla.get_property('window').xid
            self.player = JAMediaReproductor(xid)

            self.player.connect("endfile", self.__endfile)
            self.player.connect("estado", self.__cambioestadoreproductor)
            self.player.connect("newposicion", self.__update_progress)
            #self.player.connect("video", self.__set_video)

            if path:
                self.player.load(path)

            self.player.set_volumen(volumen)
            self.progressplayer.volumen.set_value(volumen / 10)

        elif self.imageplayer:
            self.imageplayer.load(path)

        else:
            print self.__play_item, path

    def __endfile(self, widget=None, senial=None):
        """
        REPRODUCTOR:
            Recibe la señal de fin de archivo desde el reproductor
            y llama a seleccionar_siguiente en la lista de reproduccion.
        """
        self.player_control.set_paused()
        gobject.idle_add(self.playerlist.seleccionar_siguiente)

    def __cambioestadoreproductor(self, widget=None, valor=None):
        """
        REPRODUCTOR:
            Recibe los cambios de estado del reproductor (paused y playing)
            y actualiza la imagen del boton play en la toolbar de reproduccion.
        """

        if "playing" in valor:
            self.player_control.set_playing()

        elif "paused" in valor or "None" in valor:
            self.player_control.set_paused()

        else:
            print "Estado del Reproductor desconocido:", valor

    def __update_progress(self, objetoemisor, valor):
        """
        REPRODUCTOR:
            Recibe el progreso de la reproduccion desde el reproductor
            y actualiza la barra de progreso.
        """
        self.progressplayer.set_progress(float(valor))

    def __set_efecto(self, widget, efecto, propiedad=None, valor=None):
        """
        Agrega o configura efectos en la cámara de video o fotografía.
        """

        if self.control:
            return

        if propiedad == True:
            self.efectos_en_pipe.add_efecto(efecto)
            self.__re_init_video_web_cam()

        elif propiedad == False:
            self.efectos_en_pipe.remover_efecto(efecto)
            self.__re_init_video_web_cam()

        else:
            self.jamediawebcam.set_efecto(efecto, propiedad, valor)

        self.emit("cancel-toolbars")

    def __cargar_efectos(self, efectos):
        """
        Agrega los widgets con efectos a la paleta de configuración.
        """
        self.widget_efectos.cargar_efectos(efectos)
        return False

    def __clicks_en_pantalla(self, widget, event):
        """
        Hace fullscreen y unfullscreen sobre la
        ventana principal cuando el usuario hace
        doble click en el visor.
        """

        if event.type.value_name == "GDK_2BUTTON_PRESS":
            ventana = self.get_toplevel()
            ventana.set_sensitive(False)
            screen = ventana.get_screen()
            w, h = ventana.get_size()
            ww, hh = (screen.get_width(), screen.get_height())

            ventana.toolbar_salir.hide()
            color = get_colors("toolbars")

            if ww == w and hh == h:
                ventana.set_border_width(4)
                color = get_colors("toolbars")
                gobject.idle_add(ventana.unfullscreen)

            else:
                ventana.set_border_width(0)
                color = get_colors("drawingplayer")
                gobject.idle_add(ventana.fullscreen)

            ventana.modify_bg(0, color)
            ventana.toolbar.modify_bg(0, color)
            ventana.toolbar.toolbar_principal.modify_bg(0, color)
            ventana.toolbar.toolbar_video.modify_bg(0, color)
            ventana.toolbar.toolbar_fotografia.modify_bg(0, color)
            ventana.toolbar.toolbar_jamedia.modify_bg(0, color)
            ventana.toolbar.toolbar_jamediaimagenes.modify_bg(0, color)
            ventana.set_sensitive(True)

        self.emit("cancel-toolbars")

    def __set_balance(self, widget, valor, tipo):
        """
        Setea valores en Balance de Video. valor es % float
        """
        if tipo == "saturacion":
            self.jamediawebcam.set_balance(saturacion=valor)

        elif tipo == "contraste":
            self.jamediawebcam.set_balance(contraste=valor)

        elif tipo == "brillo":
            self.jamediawebcam.set_balance(brillo=valor)

        elif tipo == "hue":
            self.jamediawebcam.set_balance(hue=valor)

        elif tipo == "gamma":
            self.jamediawebcam.set_balance(gamma=valor)

        self.emit("cancel-toolbars")

    def __jamediaconvert_run(self):
        """
        Cambia a modo Conversor y Extractor.
        """
        if PR:
            print "__jamediaconvert_run"
        self.pantalla.hide()
        self.box_config.hide()
        self.jamediaconvert.show()
        self.emit("in-run", False)

    def __jamediaimagenes_run(self):
        """
        Cambia a modo visor de imágenes.
        """
        if PR:
            print "__jamediaimagenes_run"
        self.imageplayer = ImagePlayer(self.pantalla)
        self.playerlist.set_mime_types(["image/*"])

    def __jamedia_run(self):
        """
        Cambia a modo reproductor.
        """
        if PR:
            print "__jamedia_run"
        xid = self.pantalla.get_property('window').xid
        self.player = JAMediaReproductor(xid)

        self.playerlist.set_mime_types(["audio/*", "video/*"])
        self.progressplayer.show()

    def __camara_menu_run(self):
        """
        Cambia a modo Cámara básica del menú.
        """
        if PR:
            print "__camara_menu_run"
        self.control = True
        device = self.camara_setting.device
        xid = self.pantalla.get_property('window').xid
        self.jamediawebcam = JAMediaWebCamMenu(xid, device=device)
        self.jamediawebcam.play()
        self.control = False

    def __camara_video_run(self):
        """
        Cambia modo Cámara de video.
        """
        if PR:
            print "__camara_video_run"
        self.control = True
        device = self.camara_setting.device
        salida = self.video_out_setting.formato
        xid = self.pantalla.get_property('window').xid
        self.jamediawebcam = JAMediaWebCamVideo(xid, device=device,
            formato=salida, efectos=[])

        self.jamediawebcam.connect("update", self.__update_record)
        self.jamediawebcam.connect("stop-rafaga", self.__recibe_stop_rafaga)
        self.jamediawebcam.connect("endfile", self.__control_grabacion_end)

        if "Escritorio" in device:
            self.get_toplevel().toolbar.permitir_filmar(True)

        else:
            if "/dev/video" in device:
                self.get_toplevel().toolbar.permitir_filmar(True)

            else:
                self.get_toplevel().toolbar.permitir_filmar(False)

        self.jamediawebcam.play()
        self.control = False

    def __control_grabacion_end(self, widget):
        self.mode_change("video")

    def __camara_foto_run(self):
        """
        Cambia a modo Cámara de Fotografía.
        """
        if PR:
            print "__camara_foto_run"
        self.control = True
        device = self.camara_setting.device
        salida = self.video_out_setting.formato
        xid = self.pantalla.get_property('window').xid
        self.jamediawebcam = JAMediaWebCamVideo(xid, device=device,
            formato=salida, efectos=[])

        self.jamediawebcam.connect("update", self.__update_record)
        self.jamediawebcam.connect("stop-rafaga", self.__recibe_stop_rafaga)
        gobject.idle_add(self.jamediawebcam.play)
        self.control = False

    def __recibe_stop_rafaga(self, widget):
        """
        Cuando la camara dejará de fotografiar.
        """
        self.info_label.set_text("")
        self.info_label.hide()
        gobject.timeout_add(500, self.__resensitive_foto)

    def __resensitive_foto(self):
        toolbar = self.get_toplevel().toolbar
        toolbar.toolbar_fotografia.set_estado("Stop")
        return False

    def __update_balance_toolbars(self, config):
        """
        Actualiza las toolbars de balance en video.
        """
        self.balance_config_widget.set_balance(
            brillo=config.get('brillo', False),
            contraste=config.get('contraste', False),
            saturacion=config.get('saturacion', False),
            hue=config.get('hue', False),
            gamma=config.get('gamma', False))

    def __set_video_out(self, widget, tipo, formato):
        """
        Setea la salida de video para camara de filmación y fotografía.
        """
        self.jamediawebcam.set_formato(formato)
        self.emit("cancel-toolbars")

    def __set_camara(self, widget, tipo, device):
        """
        Setea la entrada de video para camara de filmación y fotografía.
        Si la entrada de video es la red lan, deshabilita el volcado a la
        red y la grabación.
        """

        if "Escritorio" in device:
            self.video_out_setting.set_sensitive(True)
            self.get_toplevel().toolbar.permitir_filmar(True)

        else:
            if "/dev/video" in device:
                self.video_out_setting.set_sensitive(True)
                self.get_toplevel().toolbar.permitir_filmar(True)

            else:
                #FIXME: Anular Grabación para cámara Remota:
                self.video_out_setting.set_sensitive(False)
                self.get_toplevel().toolbar.permitir_filmar(False)

        self.__re_init_video_web_cam(device=device)
        self.emit("cancel-toolbars")

    def __re_init_video_web_cam(self, device=False, salida=False):
        """
        Cuando se agregan o quitan efectos o se cambia la fuente de video,
        se crea un nuevo objeto gstreamer que mantiene las configuraciones
        realizadas hasta el momento.
        """

        if PR:
            print "__re_init_video_web_cam", device, salida

        rot = 0
        config = {}

        if self.jamediawebcam:
            rot = self.jamediawebcam.get_rotacion()
            config = self.jamediawebcam.get_config()

        efectos = self.efectos_en_pipe.get_efectos()

        if not device:
            device = self.camara_setting.device

        if not salida:
            salida = self.video_out_setting.formato

        if self.jamediawebcam:
            try:
                self.jamediawebcam.disconnect_by_func(self.__update_record)
                self.jamediawebcam.disconnect_by_func(self.__recibe_stop_rafaga)
                self.jamediawebcam.disconnect_by_func(
                    self.__control_grabacion_end)
            except:
                pass
            self.jamediawebcam.stop()
            del(self.jamediawebcam)
            self.jamediawebcam = False

        time.sleep(3)

        xid = self.pantalla.get_property('window').xid
        self.jamediawebcam = JAMediaWebCamVideo(xid, device=device,
            formato=salida, efectos=efectos)

        self.jamediawebcam.connect("update", self.__update_record)
        self.jamediawebcam.connect("stop-rafaga", self.__recibe_stop_rafaga)
        self.jamediawebcam.connect("endfile", self.__control_grabacion_end)
        self.jamediawebcam.play()
        self.__re_config(rot, config, efectos)

    def __re_config(self, rot, config, efectos):
        if PR:
            print "__re_config", rot, config, efectos

        self.jamediawebcam.set_balance(
            brillo=config.get("brillo", False),
            contraste=config.get("contraste", False),
            saturacion=config.get("saturacion", False),
            hue=config.get("hue", False),
            gamma=config.get("gamma", False))

        if rot:
            self.jamediawebcam.set_rotacion(rot)

        for efecto in efectos:
            self.widget_efectos.reemit_config_efecto(efecto)

        self.__update_balance_toolbars(config)
        return False

    def __update_record(self, widget, info):
        self.info_label.show()
        self.info_label.set_text(info)

    def __re_sensitive(self):
        self.get_toplevel().toolbar.set_sensitive(True)
        return False

    def update_accions(self, accion, uri):
        """
        Cuando se quita un archivo de su lugar a través de la lista,
        se detienen los reproductores y se quita la tarea de ese
        archivo en el conversor.
        """
        if accion in ["Quitar", "Borrar", "Mover"]:
            if self.player:
                self.player.stop()

            if self.imageplayer:
                self.imageplayer.stop()

            self.jamediaconvert.quitar(uri)

    def mode_change(self, tipo):
        """
        Cambia el modo de la aplicación.
        """

        if PR:
            print "Mode_Change:", tipo

        self.get_toplevel().toolbar.set_sensitive(False)
        self.jamediaconvert.reset()
        self.jamediaconvert.hide()
        self.pantalla.show()

        if self.jamediawebcam:
            try:
                self.jamediawebcam.disconnect_by_func(self.__update_record)
                self.jamediawebcam.disconnect_by_func(
                    self.__recibe_stop_rafaga)
                self.jamediawebcam.disconnect_by_func(
                    self.__control_grabacion_end)
            except:
                pass

            self.jamediawebcam.stop()
            del(self.jamediawebcam)
            self.jamediawebcam = False

        if self.player:
            try:
                self.player.disconnect_by_func(self.__endfile)
                self.player.disconnect_by_func(self.__cambioestadoreproductor)
                self.player.disconnect_by_func(self.__update_progress)
                #self.player.disconnect_by_func(self.__set_video)
            except:
                pass

            self.player.stop()
            del(self.player)
            self.player = False

        if self.imageplayer:
            self.imageplayer.stop()
            del(self.imageplayer)
            self.imageplayer = False

        if self.widget_efectos:
            self.widget_efectos.clear()

        self.info_label.set_text("")
        self.info_label.hide()
        self.efectos_en_pipe.clear()
        self.playerlist.limpiar()
        self.progressplayer.hide()

        if tipo == "menu":
            #self.__camara_menu_run()
            pass

        elif tipo == "video":
            self.__camara_video_run()

        elif tipo == "foto":
            self.__camara_foto_run()

        elif tipo == "jamedia":
            self.__jamedia_run()

        elif tipo == "jamediaimagenes":
            self.__jamediaimagenes_run()

        elif tipo == "converter":
            self.__jamediaconvert_run()

        else:
            print "BasePanel Nuevo Modo:", tipo

        gobject.timeout_add(1000, self.__re_sensitive)

    def set_accion(self, modo, accion):
        """
        Le pasa a la camara las ordenes seleccionadas por el
        usuario en la toolbar correspondiente de la aplicacion.
        """

        self.emit("cancel-toolbars")

        if accion == "Izquierda" or accion == "Derecha":
            if self.jamediawebcam:
                self.jamediawebcam.rotar(accion)

            elif self.player:
                self.player.rotar(accion)

            elif self.imageplayer:
                self.imageplayer.rotar(accion)

            else:
                print "Accion sin definir:", self.set_accion, modo, accion

        elif accion == "Stop":
            if modo == "video":
                self.get_toplevel().toolbar.set_sensitive(False)
                self.__re_init_video_web_cam()
                self.info_label.set_text("")
                self.info_label.hide()
                gobject.timeout_add(1000, self.__re_sensitive)

            elif modo == "foto":
                self.get_toplevel().toolbar.set_sensitive(False)
                self.__re_init_video_web_cam()
                self.info_label.set_text("")
                self.info_label.hide()
                gobject.timeout_add(300, self.__re_sensitive)

            elif modo == "jamediaconverter":
                self.jamediaconvert.tareas_pendientes = []
                # FIXME: Considerar detener la conversíon en progreso

            else:
                print "Accion sin definir:", self.set_accion, modo, accion

        elif accion == "Filmar":  # and modo == "video":
            self.get_toplevel().toolbar.set_sensitive(False)
            hora = time.strftime("%H-%M-%S")
            fecha = str(datetime.date.today())
            archivo = "JV_%s_%s" % (fecha, hora)
            archivo = os.path.join(get_video_directory(), archivo)
            self.jamediawebcam.filmar(archivo)
            gobject.timeout_add(1000, self.__re_sensitive)

        elif accion == "Fotografiar":
            self.get_toplevel().toolbar.set_sensitive(False)
            rafaga = self.rafagas_setting.get_rafaga()
            self.jamediawebcam.fotografiar(get_imagenes_directory(), rafaga)
            gobject.timeout_add(300, self.__re_sensitive)

        # FIXME: Desactivadas por ahora
        #elif accion == "Centrar" or accion == "Acercar" or accion == "Alejar":
        #    self.imageplayer.set_zoom(accion)

        else:
            print "Accion sin definir:", self.set_accion, modo, accion

    def config_show(self, tipo):
        """
        Muestra u oculta los widgets de configuración.
        """

        if tipo:
            if self.box_config.get_visible():
                self.box_config.hide()

            else:
                self.box_config.show()

        else:
            self.box_config.hide()
            return

        video_widgets = [
            self.camara_setting,
            self.video_out_setting,
            self.balance_config_widget,
            self.widget_efectos]

        foto_widgets = [
            self.camara_setting,
            #self.video_out_setting,
            self.rafagas_setting,
            self.balance_config_widget,
            self.widget_efectos]

        jamedia_widgets = [
            #self.camara_setting,
            #self.video_out_setting,
            #self.rafagas_setting,
            #self.balance_config_widget,
            #self.widget_efectos,
            self.playerlist,
            self.player_control]

        jamediaimagenes_widgets = [
            #self.camara_setting,
            #self.video_out_setting,
            #self.rafagas_setting,
            #self.balance_config_widget,
            #self.widget_efectos,
            self.playerlist,
            #self.player_control,
            ]

        map(ocultar, video_widgets)
        map(ocultar, foto_widgets)
        map(ocultar, jamedia_widgets)
        map(ocultar, jamediaimagenes_widgets)

        if tipo == "camara":
            map(mostrar, video_widgets)
            self.camara_setting.label_ip.set_text(get_ip())

        elif tipo == "foto":
            map(mostrar, foto_widgets)
            self.camara_setting.label_ip.set_text(get_ip())

        elif tipo == "jamedia":
            map(mostrar, jamedia_widgets)

        elif tipo == "jamediaimagenes":
            map(mostrar, jamediaimagenes_widgets)

        else:
            print self.config_show, "Falta definir:", tipo

        if self.jamediawebcam:
            self.__update_balance_toolbars(self.jamediawebcam.get_config())

        self.emit("cancel-toolbars")

    def pack_efectos(self):
        """
        Empaqueta los widgets de efectos gstreamer.
        """
        self.widget_efectos = WidgetsGstreamerVideoEfectos()
        self.vbox_config.pack_start(self.widget_efectos, False, False, 0)

        gobject.idle_add(self.__cargar_efectos,
            list(get_jamedia_video_efectos()))

        self.widget_efectos.connect("click_efecto", self.__set_efecto)
        self.widget_efectos.connect("configurar_efecto", self.__set_efecto)

    def salir(self):
        if self.jamediawebcam:
            try:
                self.jamediawebcam.disconnect_by_func(self.__update_record)
                self.jamediawebcam.disconnect_by_func(
                    self.__recibe_stop_rafaga)
                self.jamediawebcam.disconnect_by_func(
                    self.__control_grabacion_end)
            except:
                pass

            self.jamediawebcam.stop()
            del(self.jamediawebcam)
            self.jamediawebcam = False

        if self.player:
            try:
                self.player.disconnect_by_func(self.__endfile)
                self.player.disconnect_by_func(self.__cambioestadoreproductor)
                self.player.disconnect_by_func(self.__update_progress)
                #self.player.disconnect_by_func(self.__set_video)
            except:
                pass

            self.player.stop()
            del(self.player)
            self.player = False

        if self.imageplayer:
            self.imageplayer.stop()
            del(self.imageplayer)
            self.imageplayer = False

        self.jamediaconvert.reset()
 def load(self, topic):
     self.stop()
     self.path = os.path.abspath("Imagenes/juego1.png")
     self.imagenplayer = ImagePlayer(self)
     self.imagenplayer.load(self.path)
     return False
Beispiel #22
0
class BasePanel(gtk.HPaned):
    """
    izquierda:
        visor
        barra con efectos de video que se aplican

    derecha:
        Configuración de cámara y formato de salida ==> self.camara_setting
        balance y efectos de video ==> self.video_widgets_config
        efectos de audio ==> self.audio_widgets_config
    """

    __gsignals__ = {
        "accion-list":
        (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
         (gobject.TYPE_PYOBJECT, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
        "in-run":
        (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN, )),
        "cancel-toolbars": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
        "pendientes":
        (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, ))
    }

    def __init__(self):

        gtk.HPaned.__init__(self)

        self.modify_bg(0, get_colors("toolbars"))

        self.control = True
        self.jamediawebcam = False
        self.player = False
        self.imageplayer = False

        self.pantalla = Visor()
        self.info_label = Info_Label()
        self.efectos_en_pipe = Efectos_en_Pipe()
        self.progressplayer = ProgressPlayer()
        self.jamediaconvert = WidgetConvert()

        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
        scroll.add_with_viewport(self.efectos_en_pipe)
        scroll.get_child().modify_bg(0, get_colors("drawingplayer"))

        vbox = gtk.VBox()
        vbox.pack_start(self.info_label, False, False, 0)
        vbox.pack_start(self.pantalla, True, True, 0)
        vbox.pack_start(self.jamediaconvert, True, True, 0)
        vbox.pack_start(scroll, False, False, 0)
        vbox.pack_start(self.progressplayer, False, False, 0)
        self.pack1(vbox, resize=True, shrink=True)

        # Area Derecha del Panel
        self.box_config = gtk.EventBox()
        self.box_config.modify_bg(0, get_colors("window"))
        self.vbox_config = gtk.VBox()

        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        scroll.add_with_viewport(self.vbox_config)
        scroll.get_child().modify_bg(0, get_colors("window"))
        self.box_config.add(scroll)

        self.camara_setting = CamaraConfig()
        self.video_out_setting = Video_out_Config()
        self.rafagas_setting = Rafagas_Config()
        self.balance_config_widget = ToolbarConfig()
        self.playerlist = PlayerList()
        self.player_control = PlayerControls()
        self.widget_efectos = False  # WidgetsGstreamerEfectos()

        self.vbox_config.pack_start(self.camara_setting, False, False, 0)
        self.vbox_config.pack_start(self.video_out_setting, False, False, 0)
        self.vbox_config.pack_start(self.rafagas_setting, False, False, 0)
        self.vbox_config.pack_start(self.balance_config_widget, False, False,
                                    0)
        #self.derecha_vbox.pack_start(self.widget_efectos, True, True, 0)

        self.vbox_config.pack_start(self.playerlist, True, True, 0)
        self.vbox_config.pack_end(self.player_control, False, True, 0)
        self.pack2(self.box_config, resize=False, shrink=False)
        self.show_all()

        self.pantalla.connect("button_press_event", self.__clicks_en_pantalla)
        self.balance_config_widget.connect('valor', self.__set_balance)
        self.camara_setting.connect("set_camara", self.__set_camara)
        self.video_out_setting.connect("set_video_out", self.__set_video_out)
        self.player_control.connect("accion-controls", self.__accion_player)
        self.playerlist.connect("nueva-seleccion", self.__play_item)
        self.playerlist.connect("accion", self.__re_emit_accion_list)
        self.progressplayer.connect("seek", self.__user_set_progress)
        self.progressplayer.connect("volumen", self.__set_volumen)
        self.jamediaconvert.connect("accion-list", self.__re_emit_accion_list)
        self.jamediaconvert.connect("in-run", self.__jamediaconvert_in_run)
        self.jamediaconvert.connect("pendientes", self.__jamediaconvert_info)

        self.control = False

    def __jamediaconvert_info(self, widget, info):
        self.emit("pendientes", info)

    def __jamediaconvert_in_run(self, widget, valor):
        self.emit("in-run", valor)

    def __re_emit_accion_list(self, widget, lista, accion, _iter):
        self.emit("accion-list", lista, accion, _iter)

    def __set_volumen(self, widget, valor):
        """
        REPRODUCTOR:
            Cuando el usuario cambia el volumen.
        """

        if self.player:
            self.player.set_volumen(valor)

        self.emit("cancel-toolbars")

    def __user_set_progress(self, widget=None, valor=None):
        """
        REPRODUCTOR:
            Recibe la posicion en la barra de progreso cuando
            el usuario la desplaza y hace "seek" sobre el reproductor.
        """

        if self.player:
            self.player.set_position(valor)

        self.emit("cancel-toolbars")

    def __accion_player(self, widget, senial):
        """
        REPRODUCTOR:
            Acciones sobre pistas en lista de reproducción.
        """

        if senial == "atras":
            self.playerlist.seleccionar_anterior()

        elif senial == "siguiente":
            self.playerlist.seleccionar_siguiente()

        elif senial == "stop":
            if self.player:
                self.player.stop()

        elif senial == "pausa-play":
            if self.player:
                self.player.pause_play()

        self.emit("cancel-toolbars")

    def __play_item(self, widget, path):
        """
        REPRODUCTOR y VISOR de IMAGENES:
        """

        if self.player:
            volumen = 1.0

            volumen = float("{:.1f}".format(
                self.progressplayer.volumen.get_value() * 10))

            try:
                self.player.disconnect_by_func(self.__endfile)
                self.player.disconnect_by_func(self.__cambioestadoreproductor)
                self.player.disconnect_by_func(self.__update_progress)
                #self.player.disconnect_by_func(self.__set_video)
            except:
                pass

            self.player.stop()
            del (self.player)

            xid = self.pantalla.get_property('window').xid
            self.player = JAMediaReproductor(xid)

            self.player.connect("endfile", self.__endfile)
            self.player.connect("estado", self.__cambioestadoreproductor)
            self.player.connect("newposicion", self.__update_progress)
            #self.player.connect("video", self.__set_video)

            if path:
                self.player.load(path)

            self.player.set_volumen(volumen)
            self.progressplayer.volumen.set_value(volumen / 10)

        elif self.imageplayer:
            self.imageplayer.load(path)

        else:
            print self.__play_item, path

    def __endfile(self, widget=None, senial=None):
        """
        REPRODUCTOR:
            Recibe la señal de fin de archivo desde el reproductor
            y llama a seleccionar_siguiente en la lista de reproduccion.
        """
        self.player_control.set_paused()
        gobject.idle_add(self.playerlist.seleccionar_siguiente)

    def __cambioestadoreproductor(self, widget=None, valor=None):
        """
        REPRODUCTOR:
            Recibe los cambios de estado del reproductor (paused y playing)
            y actualiza la imagen del boton play en la toolbar de reproduccion.
        """

        if "playing" in valor:
            self.player_control.set_playing()

        elif "paused" in valor or "None" in valor:
            self.player_control.set_paused()

        else:
            print "Estado del Reproductor desconocido:", valor

    def __update_progress(self, objetoemisor, valor):
        """
        REPRODUCTOR:
            Recibe el progreso de la reproduccion desde el reproductor
            y actualiza la barra de progreso.
        """
        self.progressplayer.set_progress(float(valor))

    def __set_efecto(self, widget, efecto, propiedad=None, valor=None):
        """
        Agrega o configura efectos en la cámara de video o fotografía.
        """

        if self.control:
            return

        if propiedad == True:
            self.efectos_en_pipe.add_efecto(efecto)
            self.__re_init_video_web_cam()

        elif propiedad == False:
            self.efectos_en_pipe.remover_efecto(efecto)
            self.__re_init_video_web_cam()

        else:
            self.jamediawebcam.set_efecto(efecto, propiedad, valor)

        self.emit("cancel-toolbars")

    def __cargar_efectos(self, efectos):
        """
        Agrega los widgets con efectos a la paleta de configuración.
        """
        self.widget_efectos.cargar_efectos(efectos)
        return False

    def __clicks_en_pantalla(self, widget, event):
        """
        Hace fullscreen y unfullscreen sobre la
        ventana principal cuando el usuario hace
        doble click en el visor.
        """

        if event.type.value_name == "GDK_2BUTTON_PRESS":
            ventana = self.get_toplevel()
            ventana.set_sensitive(False)
            screen = ventana.get_screen()
            w, h = ventana.get_size()
            ww, hh = (screen.get_width(), screen.get_height())

            ventana.toolbar_salir.hide()
            color = get_colors("toolbars")

            if ww == w and hh == h:
                ventana.set_border_width(4)
                color = get_colors("toolbars")
                gobject.idle_add(ventana.unfullscreen)

            else:
                ventana.set_border_width(0)
                color = get_colors("drawingplayer")
                gobject.idle_add(ventana.fullscreen)

            ventana.modify_bg(0, color)
            ventana.toolbar.modify_bg(0, color)
            ventana.toolbar.toolbar_principal.modify_bg(0, color)
            ventana.toolbar.toolbar_video.modify_bg(0, color)
            ventana.toolbar.toolbar_fotografia.modify_bg(0, color)
            ventana.toolbar.toolbar_jamedia.modify_bg(0, color)
            ventana.toolbar.toolbar_jamediaimagenes.modify_bg(0, color)
            ventana.set_sensitive(True)

        self.emit("cancel-toolbars")

    def __set_balance(self, widget, valor, tipo):
        """
        Setea valores en Balance de Video. valor es % float
        """
        if tipo == "saturacion":
            self.jamediawebcam.set_balance(saturacion=valor)

        elif tipo == "contraste":
            self.jamediawebcam.set_balance(contraste=valor)

        elif tipo == "brillo":
            self.jamediawebcam.set_balance(brillo=valor)

        elif tipo == "hue":
            self.jamediawebcam.set_balance(hue=valor)

        elif tipo == "gamma":
            self.jamediawebcam.set_balance(gamma=valor)

        self.emit("cancel-toolbars")

    def __jamediaconvert_run(self):
        """
        Cambia a modo Conversor y Extractor.
        """
        if PR:
            print "__jamediaconvert_run"
        self.pantalla.hide()
        self.box_config.hide()
        self.jamediaconvert.show()
        self.emit("in-run", False)

    def __jamediaimagenes_run(self):
        """
        Cambia a modo visor de imágenes.
        """
        if PR:
            print "__jamediaimagenes_run"
        self.imageplayer = ImagePlayer(self.pantalla)
        self.playerlist.set_mime_types(["image/*"])

    def __jamedia_run(self):
        """
        Cambia a modo reproductor.
        """
        if PR:
            print "__jamedia_run"
        xid = self.pantalla.get_property('window').xid
        self.player = JAMediaReproductor(xid)

        self.playerlist.set_mime_types(["audio/*", "video/*"])
        self.progressplayer.show()

    def __camara_menu_run(self):
        """
        Cambia a modo Cámara básica del menú.
        """
        if PR:
            print "__camara_menu_run"
        self.control = True
        device = self.camara_setting.device
        xid = self.pantalla.get_property('window').xid
        self.jamediawebcam = JAMediaWebCamMenu(xid, device=device)
        self.jamediawebcam.play()
        self.control = False

    def __camara_video_run(self):
        """
        Cambia modo Cámara de video.
        """
        if PR:
            print "__camara_video_run"
        self.control = True
        device = self.camara_setting.device
        salida = self.video_out_setting.formato
        xid = self.pantalla.get_property('window').xid
        self.jamediawebcam = JAMediaWebCamVideo(xid,
                                                device=device,
                                                formato=salida,
                                                efectos=[])

        self.jamediawebcam.connect("update", self.__update_record)
        self.jamediawebcam.connect("stop-rafaga", self.__recibe_stop_rafaga)
        self.jamediawebcam.connect("endfile", self.__control_grabacion_end)

        if "Escritorio" in device:
            self.get_toplevel().toolbar.permitir_filmar(True)

        else:
            if "/dev/video" in device:
                self.get_toplevel().toolbar.permitir_filmar(True)

            else:
                self.get_toplevel().toolbar.permitir_filmar(False)

        self.jamediawebcam.play()
        self.control = False

    def __control_grabacion_end(self, widget):
        self.mode_change("video")

    def __camara_foto_run(self):
        """
        Cambia a modo Cámara de Fotografía.
        """
        if PR:
            print "__camara_foto_run"
        self.control = True
        device = self.camara_setting.device
        salida = self.video_out_setting.formato
        xid = self.pantalla.get_property('window').xid
        self.jamediawebcam = JAMediaWebCamVideo(xid,
                                                device=device,
                                                formato=salida,
                                                efectos=[])

        self.jamediawebcam.connect("update", self.__update_record)
        self.jamediawebcam.connect("stop-rafaga", self.__recibe_stop_rafaga)
        gobject.idle_add(self.jamediawebcam.play)
        self.control = False

    def __recibe_stop_rafaga(self, widget):
        """
        Cuando la camara dejará de fotografiar.
        """
        self.info_label.set_text("")
        self.info_label.hide()
        gobject.timeout_add(500, self.__resensitive_foto)

    def __resensitive_foto(self):
        toolbar = self.get_toplevel().toolbar
        toolbar.toolbar_fotografia.set_estado("Stop")
        return False

    def __update_balance_toolbars(self, config):
        """
        Actualiza las toolbars de balance en video.
        """
        self.balance_config_widget.set_balance(
            brillo=config.get('brillo', False),
            contraste=config.get('contraste', False),
            saturacion=config.get('saturacion', False),
            hue=config.get('hue', False),
            gamma=config.get('gamma', False))

    def __set_video_out(self, widget, tipo, formato):
        """
        Setea la salida de video para camara de filmación y fotografía.
        """
        self.jamediawebcam.set_formato(formato)
        self.emit("cancel-toolbars")

    def __set_camara(self, widget, tipo, device):
        """
        Setea la entrada de video para camara de filmación y fotografía.
        Si la entrada de video es la red lan, deshabilita el volcado a la
        red y la grabación.
        """

        if "Escritorio" in device:
            self.video_out_setting.set_sensitive(True)
            self.get_toplevel().toolbar.permitir_filmar(True)

        else:
            if "/dev/video" in device:
                self.video_out_setting.set_sensitive(True)
                self.get_toplevel().toolbar.permitir_filmar(True)

            else:
                #FIXME: Anular Grabación para cámara Remota:
                self.video_out_setting.set_sensitive(False)
                self.get_toplevel().toolbar.permitir_filmar(False)

        self.__re_init_video_web_cam(device=device)
        self.emit("cancel-toolbars")

    def __re_init_video_web_cam(self, device=False, salida=False):
        """
        Cuando se agregan o quitan efectos o se cambia la fuente de video,
        se crea un nuevo objeto gstreamer que mantiene las configuraciones
        realizadas hasta el momento.
        """

        if PR:
            print "__re_init_video_web_cam", device, salida

        rot = 0
        config = {}

        if self.jamediawebcam:
            rot = self.jamediawebcam.get_rotacion()
            config = self.jamediawebcam.get_config()

        efectos = self.efectos_en_pipe.get_efectos()

        if not device:
            device = self.camara_setting.device

        if not salida:
            salida = self.video_out_setting.formato

        if self.jamediawebcam:
            try:
                self.jamediawebcam.disconnect_by_func(self.__update_record)
                self.jamediawebcam.disconnect_by_func(
                    self.__recibe_stop_rafaga)
                self.jamediawebcam.disconnect_by_func(
                    self.__control_grabacion_end)
            except:
                pass
            self.jamediawebcam.stop()
            del (self.jamediawebcam)
            self.jamediawebcam = False

        time.sleep(3)

        xid = self.pantalla.get_property('window').xid
        self.jamediawebcam = JAMediaWebCamVideo(xid,
                                                device=device,
                                                formato=salida,
                                                efectos=efectos)

        self.jamediawebcam.connect("update", self.__update_record)
        self.jamediawebcam.connect("stop-rafaga", self.__recibe_stop_rafaga)
        self.jamediawebcam.connect("endfile", self.__control_grabacion_end)
        self.jamediawebcam.play()
        self.__re_config(rot, config, efectos)

    def __re_config(self, rot, config, efectos):
        if PR:
            print "__re_config", rot, config, efectos

        self.jamediawebcam.set_balance(
            brillo=config.get("brillo", False),
            contraste=config.get("contraste", False),
            saturacion=config.get("saturacion", False),
            hue=config.get("hue", False),
            gamma=config.get("gamma", False))

        if rot:
            self.jamediawebcam.set_rotacion(rot)

        for efecto in efectos:
            self.widget_efectos.reemit_config_efecto(efecto)

        self.__update_balance_toolbars(config)
        return False

    def __update_record(self, widget, info):
        self.info_label.show()
        self.info_label.set_text(info)

    def __re_sensitive(self):
        self.get_toplevel().toolbar.set_sensitive(True)
        return False

    def update_accions(self, accion, uri):
        """
        Cuando se quita un archivo de su lugar a través de la lista,
        se detienen los reproductores y se quita la tarea de ese
        archivo en el conversor.
        """
        if accion in ["Quitar", "Borrar", "Mover"]:
            if self.player:
                self.player.stop()

            if self.imageplayer:
                self.imageplayer.stop()

            self.jamediaconvert.quitar(uri)

    def mode_change(self, tipo):
        """
        Cambia el modo de la aplicación.
        """

        if PR:
            print "Mode_Change:", tipo

        self.get_toplevel().toolbar.set_sensitive(False)
        self.jamediaconvert.reset()
        self.jamediaconvert.hide()
        self.pantalla.show()

        if self.jamediawebcam:
            try:
                self.jamediawebcam.disconnect_by_func(self.__update_record)
                self.jamediawebcam.disconnect_by_func(
                    self.__recibe_stop_rafaga)
                self.jamediawebcam.disconnect_by_func(
                    self.__control_grabacion_end)
            except:
                pass

            self.jamediawebcam.stop()
            del (self.jamediawebcam)
            self.jamediawebcam = False

        if self.player:
            try:
                self.player.disconnect_by_func(self.__endfile)
                self.player.disconnect_by_func(self.__cambioestadoreproductor)
                self.player.disconnect_by_func(self.__update_progress)
                #self.player.disconnect_by_func(self.__set_video)
            except:
                pass

            self.player.stop()
            del (self.player)
            self.player = False

        if self.imageplayer:
            self.imageplayer.stop()
            del (self.imageplayer)
            self.imageplayer = False

        if self.widget_efectos:
            self.widget_efectos.clear()

        self.info_label.set_text("")
        self.info_label.hide()
        self.efectos_en_pipe.clear()
        self.playerlist.limpiar()
        self.progressplayer.hide()

        if tipo == "menu":
            self.__camara_menu_run()

        elif tipo == "video":
            self.__camara_video_run()

        elif tipo == "foto":
            self.__camara_foto_run()

        elif tipo == "jamedia":
            self.__jamedia_run()

        elif tipo == "jamediaimagenes":
            self.__jamediaimagenes_run()

        elif tipo == "converter":
            self.__jamediaconvert_run()

        else:
            print "BasePanel Nuevo Modo:", tipo

        gobject.timeout_add(1000, self.__re_sensitive)

    def set_accion(self, modo, accion):
        """
        Le pasa a la camara las ordenes seleccionadas por el
        usuario en la toolbar correspondiente de la aplicacion.
        """

        self.emit("cancel-toolbars")

        if accion == "Izquierda" or accion == "Derecha":
            if self.jamediawebcam:
                self.jamediawebcam.rotar(accion)

            elif self.player:
                self.player.rotar(accion)

            elif self.imageplayer:
                self.imageplayer.rotar(accion)

            else:
                print "Accion sin definir:", self.set_accion, modo, accion

        elif accion == "Stop":
            if modo == "video":
                self.get_toplevel().toolbar.set_sensitive(False)
                self.__re_init_video_web_cam()
                self.info_label.set_text("")
                self.info_label.hide()
                gobject.timeout_add(1000, self.__re_sensitive)

            elif modo == "foto":
                self.get_toplevel().toolbar.set_sensitive(False)
                self.__re_init_video_web_cam()
                self.info_label.set_text("")
                self.info_label.hide()
                gobject.timeout_add(300, self.__re_sensitive)

            elif modo == "jamediaconverter":
                self.jamediaconvert.tareas_pendientes = []
                # FIXME: Considerar detener la conversíon en progreso

            else:
                print "Accion sin definir:", self.set_accion, modo, accion

        elif accion == "Filmar":  # and modo == "video":
            self.get_toplevel().toolbar.set_sensitive(False)
            hora = time.strftime("%H-%M-%S")
            fecha = str(datetime.date.today())
            archivo = "JV_%s_%s" % (fecha, hora)
            archivo = os.path.join(get_video_directory(), archivo)
            self.jamediawebcam.filmar(archivo)
            gobject.timeout_add(1000, self.__re_sensitive)

        elif accion == "Fotografiar":
            self.get_toplevel().toolbar.set_sensitive(False)
            rafaga = self.rafagas_setting.get_rafaga()
            self.jamediawebcam.fotografiar(get_imagenes_directory(), rafaga)
            gobject.timeout_add(300, self.__re_sensitive)

        # FIXME: Desactivadas por ahora
        #elif accion == "Centrar" or accion == "Acercar" or accion == "Alejar":
        #    self.imageplayer.set_zoom(accion)

        else:
            print "Accion sin definir:", self.set_accion, modo, accion

    def config_show(self, tipo):
        """
        Muestra u oculta los widgets de configuración.
        """

        if tipo:
            if self.box_config.get_visible():
                self.box_config.hide()

            else:
                self.box_config.show()

        else:
            self.box_config.hide()
            return

        video_widgets = [
            self.camara_setting, self.video_out_setting,
            self.balance_config_widget, self.widget_efectos
        ]

        foto_widgets = [
            self.camara_setting,
            #self.video_out_setting,
            self.rafagas_setting,
            self.balance_config_widget,
            self.widget_efectos
        ]

        jamedia_widgets = [
            #self.camara_setting,
            #self.video_out_setting,
            #self.rafagas_setting,
            #self.balance_config_widget,
            #self.widget_efectos,
            self.playerlist,
            self.player_control
        ]

        jamediaimagenes_widgets = [
            #self.camara_setting,
            #self.video_out_setting,
            #self.rafagas_setting,
            #self.balance_config_widget,
            #self.widget_efectos,
            self.playerlist,
            #self.player_control,
        ]

        map(ocultar, video_widgets)
        map(ocultar, foto_widgets)
        map(ocultar, jamedia_widgets)
        map(ocultar, jamediaimagenes_widgets)

        if tipo == "camara":
            map(mostrar, video_widgets)
            self.camara_setting.label_ip.set_text(get_ip())

        elif tipo == "foto":
            map(mostrar, foto_widgets)
            self.camara_setting.label_ip.set_text(get_ip())

        elif tipo == "jamedia":
            map(mostrar, jamedia_widgets)

        elif tipo == "jamediaimagenes":
            map(mostrar, jamediaimagenes_widgets)

        else:
            print self.config_show, "Falta definir:", tipo

        if self.jamediawebcam:
            self.__update_balance_toolbars(self.jamediawebcam.get_config())

        self.emit("cancel-toolbars")

    def pack_efectos(self):
        """
        Empaqueta los widgets de efectos gstreamer.
        """
        self.widget_efectos = WidgetsGstreamerVideoEfectos()
        self.vbox_config.pack_start(self.widget_efectos, False, False, 0)

        gobject.idle_add(self.__cargar_efectos,
                         list(get_jamedia_video_efectos()))

        self.widget_efectos.connect("click_efecto", self.__set_efecto)
        self.widget_efectos.connect("configurar_efecto", self.__set_efecto)

    def salir(self):
        if self.jamediawebcam:
            try:
                self.jamediawebcam.disconnect_by_func(self.__update_record)
                self.jamediawebcam.disconnect_by_func(
                    self.__recibe_stop_rafaga)
                self.jamediawebcam.disconnect_by_func(
                    self.__control_grabacion_end)
            except:
                pass

            self.jamediawebcam.stop()
            del (self.jamediawebcam)
            self.jamediawebcam = False

        if self.player:
            try:
                self.player.disconnect_by_func(self.__endfile)
                self.player.disconnect_by_func(self.__cambioestadoreproductor)
                self.player.disconnect_by_func(self.__update_progress)
                #self.player.disconnect_by_func(self.__set_video)
            except:
                pass

            self.player.stop()
            del (self.player)
            self.player = False

        if self.imageplayer:
            self.imageplayer.stop()
            del (self.imageplayer)
            self.imageplayer = False

        self.jamediaconvert.reset()
class FlashCardsPreview(gtk.EventBox):

    def __init__(self):

        gtk.EventBox.__init__(self)

        self.modify_bg(gtk.STATE_NORMAL, COLORES["window"])
        #self.set_border_width(20)

        self.vocabulario = []
        self.index_select = 0
        self.imagenplayer = False
        self.path = False
        self.control = False
        self.topic = False

        self.drawing = gtk.DrawingArea()
        eventcontainer = gtk.EventBox()
        eventcontainer.modify_bg(gtk.STATE_NORMAL, COLORES["window"])
        self.label = gtk.Label("Text")
        self.label.set_property("justify", gtk.JUSTIFY_CENTER)
        self.drawing.modify_bg(gtk.STATE_NORMAL, COLORES["window"])
        self.label.modify_bg(gtk.STATE_NORMAL, COLORES["window"])
        self.label.modify_fg(gtk.STATE_NORMAL, COLORES["text"])
        self.label.modify_font(pango.FontDescription("DejaVu Sans 20"))
        eventcontainer.add(self.label)
        eventcontainer.connect("button-press-event", self.utter)

        hbox = gtk.HBox()
        self.left = gtk.Button()
        self.left.set_relief(gtk.RELIEF_NONE)
        imagen = gtk.Image()
        imagen.set_from_file("Imagenes/flecha_izquierda.png")
        self.left.modify_bg(gtk.STATE_NORMAL, COLORES["rojo"])
        self.left.add(imagen)
        self.left.connect("clicked", self.go_left)
        hbox.pack_start(self.left)

        hbox.add(eventcontainer)

        self.right = gtk.Button()
        self.right.set_relief(gtk.RELIEF_NONE)
        imagen = gtk.Image()
        imagen.set_from_file("Imagenes/flecha_derecha.png")
        self.right.modify_bg(gtk.STATE_NORMAL, COLORES["rojo"])
        self.right.add(imagen)
        self.right.connect("clicked", self.go_right)
        hbox.pack_end(self.right)

        tabla = gtk.Table(rows=8, columns=1, homogeneous=True)
        tabla.attach(self.drawing, 0, 1, 0, 7, ypadding=5)
        tabla.attach(hbox, 0, 1, 7, 8)

        align = gtk.Alignment(0.5, 0.5, 0.7, 0.95)
        align.add(tabla)

        self.add(align)

    def utter(self, widget, event):
        palabra = self.label.get_text()
        #self.label.modify_fg(gtk.STATE_NORMAL, COLORES["rojo"])
        self.label.set_markup("<b>"+palabra+"</b>")
        gobject.idle_add(self.utter2, palabra)
        return True

    def utter2(self, palabra):
        decir_demorado(170, 50, 0, "en-gb", palabra)
        self.label.set_markup(palabra)
        #self.label.modify_fg(gtk.STATE_NORMAL, COLORES["text"])

    def go_right(self, widget):
        self.__run_secuencia()
        self.left.show()
        self.right.show()

    def go_left(self, widget):
        self.__run_secuencia(-1)
        self.left.show()
        self.right.show()

    def __run_secuencia(self, widget=None, offset=1):
        self.stop()
        self.path = os.path.join(self.topic, "Imagenes",
            "%s.png" % self.vocabulario[self.index_select][0])
        self.imagenplayer = ImagePlayer(self.drawing)
        self.imagenplayer.load(self.path)
        self.label.set_text(
            self.vocabulario[self.index_select][1])
        if self.index_select < len(self.vocabulario) - 1:
            self.index_select += offset
        else:
            self.index_select = 0

        self.left.hide()
        self.right.hide()
        return True

    def toggle(self):
        if self.control:
            gobject.source_remove(self.control)
            self.control = False
            self.modify_bg(gtk.STATE_NORMAL, COLORES['rojo'])
            self.left.show()
            self.right.show()
        else:
            self.modify_bg(gtk.STATE_NORMAL, COLORES['window'])
            self.play()
            self.left.hide()
            self.right.hide()

    def reset(self):
        self.modify_bg(gtk.STATE_NORMAL, COLORES['window'])
        self.play()

    def stop(self):
        if self.imagenplayer:
            self.imagenplayer.stop()
            del(self.imagenplayer)
            self.imagenplayer = False

    def play(self):
        if not self.control:
            self.control = gobject.timeout_add(4000, self.__run_secuencia)

    def load(self, topic):
        self.stop()
        self.topic = topic
        self.vocabulario = get_flashcards_previews(self.topic)
        self.index_select = 0
        self.__run_secuencia()
        self.play()
        return False