def setup_init(self):
        """
        Se crea la interfaz grafica,
        se setea y se empaqueta todo.
        """

        from JAMediaObjects.JAMediaWidgets import WidgetsGstreamerAudioVisualizador
        from JAMediaObjects.JAMediaGstreamer.JAMediaAudio import JAMediaAudio

        from Widgets import ToolbarGrabarAudio

        # Widgets Base: - vbox - toolbars - panel
        basebox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.toolbar_salir = ToolbarSalir()
        self.toolbar = ToolbarGrabarAudio()
        hpanel = Gtk.HPaned()

        basebox.pack_start(self.toolbar_salir, False, True, 0)
        basebox.pack_start(self.toolbar, False, True, 0)
        basebox.pack_start(hpanel, True, True, 0)

        self.add(basebox)

        # Panel lado Izquierdo: vbox - pantalla - hbox_efectos_aplicados
        vbox_izq_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.pantalla = Visor()
        eventbox = Gtk.EventBox()
        eventbox.modify_bg(0, get_color("NEGRO"))

        self.hbox_efectos_en_pipe = Gtk.Box(
            orientation=Gtk.Orientation.HORIZONTAL)
        self.hbox_efectos_en_pipe.set_size_request(-1, get_pixels(0.5))

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.NEVER)

        scroll.add_with_viewport(eventbox)

        eventbox.add(self.hbox_efectos_en_pipe)

        vbox_izq_panel.pack_start(self.pantalla, True, True, 0)
        vbox_izq_panel.pack_start(scroll, False, False, 0)

        hpanel.pack1(vbox_izq_panel, resize=True, shrink=True)

        # Panel lado Derecho: eventbox - vbox - scroll
        # - balance_widget - widget_efectos
        self.box_config = Gtk.EventBox()
        self.box_config.set_size_request(get_pixels(5.0), -1)

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.widget_visualizadores_de_audio = WidgetsGstreamerAudioVisualizador()

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.NEVER)

        scroll.add_with_viewport(self.widget_visualizadores_de_audio)

        self.balance_widget = ToolbarBalanceConfig()
        vbox.pack_start(self.balance_widget, False, True, 0)
        vbox.pack_start(scroll, False, True, 0)

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(
            Gtk.PolicyType.NEVER,
            Gtk.PolicyType.AUTOMATIC)

        scroll.add_with_viewport(vbox)
        self.box_config.add(scroll)

        self.widget_efectos = WidgetsGstreamerEfectos()

        vbox.pack_start(self.widget_efectos, False, True, 0)

        hpanel.pack2(self.box_config, resize=False, shrink=False)

        self.show_all()
        self.realize()

        from gi.repository import GdkX11

        xid = self.pantalla.get_property('window').get_xid()
        self.jamediawebcam = JAMediaAudio(xid)

        self.controles_dinamicos = [
            self.toolbar_salir,
            self.box_config,
            ]

        map(self.ocultar, self.controles_dinamicos)

        self.jamediawebcam.connect('estado', self.set_estado)

        self.pantalla.connect("button_press_event", self.clicks_en_pantalla)

        self.toolbar.connect("rotar", self.set_rotacion)
        self.toolbar.connect("accion", self.set_accion)
        self.toolbar.connect('salir', self.confirmar_salir)

        self.balance_widget.connect('valor', self.set_balance)

        self.widget_efectos.connect("click_efecto", self.click_efecto)
        self.widget_efectos.connect('configurar_efecto',
            self.configurar_efecto)
        self.widget_visualizadores_de_audio.connect(
            "click_efecto", self.click_visualizador)
        #self.widget_visualizadores_de_audio.connect(
        #   'configurar_efecto', self.configurar_visualizador)

        self.toolbar_salir.connect('salir', self.emit_salir)
    def setup_init(self):
        """
        Se crea la interfaz grafica,
        se setea y se empaqueta todo.
        """

        from JAMediaObjects.JAMediaWidgets import WidgetsGstreamerAudioVisualizador
        from JAMediaObjects.JAMediaGstreamer.JAMediaAudio import JAMediaAudio

        from Widgets import ToolbarGrabarAudio

        # Widgets Base: - vbox - toolbars - panel
        basebox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.toolbar_salir = ToolbarSalir()
        self.toolbar = ToolbarGrabarAudio()
        hpanel = Gtk.HPaned()

        basebox.pack_start(self.toolbar_salir, False, True, 0)
        basebox.pack_start(self.toolbar, False, True, 0)
        basebox.pack_start(hpanel, True, True, 0)

        self.add(basebox)

        # Panel lado Izquierdo: vbox - pantalla - hbox_efectos_aplicados
        vbox_izq_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.pantalla = Visor()
        eventbox = Gtk.EventBox()
        eventbox.modify_bg(0, get_color("NEGRO"))

        self.hbox_efectos_en_pipe = Gtk.Box(
            orientation=Gtk.Orientation.HORIZONTAL)
        self.hbox_efectos_en_pipe.set_size_request(-1, get_pixels(0.5))

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)

        scroll.add_with_viewport(eventbox)

        eventbox.add(self.hbox_efectos_en_pipe)

        vbox_izq_panel.pack_start(self.pantalla, True, True, 0)
        vbox_izq_panel.pack_start(scroll, False, False, 0)

        hpanel.pack1(vbox_izq_panel, resize=True, shrink=True)

        # Panel lado Derecho: eventbox - vbox - scroll
        # - balance_widget - widget_efectos
        self.box_config = Gtk.EventBox()
        self.box_config.set_size_request(get_pixels(5.0), -1)

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.widget_visualizadores_de_audio = WidgetsGstreamerAudioVisualizador(
        )

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)

        scroll.add_with_viewport(self.widget_visualizadores_de_audio)

        self.balance_widget = ToolbarBalanceConfig()
        vbox.pack_start(self.balance_widget, False, True, 0)
        vbox.pack_start(scroll, False, True, 0)

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)

        scroll.add_with_viewport(vbox)
        self.box_config.add(scroll)

        self.widget_efectos = WidgetsGstreamerEfectos()

        vbox.pack_start(self.widget_efectos, False, True, 0)

        hpanel.pack2(self.box_config, resize=False, shrink=False)

        self.show_all()
        self.realize()

        from gi.repository import GdkX11

        xid = self.pantalla.get_property('window').get_xid()
        self.jamediawebcam = JAMediaAudio(xid)

        self.controles_dinamicos = [
            self.toolbar_salir,
            self.box_config,
        ]

        map(self.ocultar, self.controles_dinamicos)

        self.jamediawebcam.connect('estado', self.set_estado)

        self.pantalla.connect("button_press_event", self.clicks_en_pantalla)

        self.toolbar.connect("rotar", self.set_rotacion)
        self.toolbar.connect("accion", self.set_accion)
        self.toolbar.connect('salir', self.confirmar_salir)

        self.balance_widget.connect('valor', self.set_balance)

        self.widget_efectos.connect("click_efecto", self.click_efecto)
        self.widget_efectos.connect('configurar_efecto',
                                    self.configurar_efecto)
        self.widget_visualizadores_de_audio.connect("click_efecto",
                                                    self.click_visualizador)
        #self.widget_visualizadores_de_audio.connect(
        #   'configurar_efecto', self.configurar_visualizador)

        self.toolbar_salir.connect('salir', self.emit_salir)
class JAMediaAudioWidget(JAMediaVideoWidget):
    """
    Plug - Interfaz para Webcam con grabación de audio.
    """

    def __init__(self):
        """
        JAMediaAudioWidget: Gtk.Plug para embeber en otra aplicacion.
        """

        JAMediaVideoWidget.__init__(self)

        self.toolbar_salir = None
        self.toolbar = None
        self.pantalla = None
        self.balance_widget = None
        self.controles_dinamicos = []
        self.jamediawebcam = None
        self.box_config = None
        self.widget_efectos = None
        self.widget_visualizadores_de_audio = None
        self.hbox_efectos_en_pipe = None

        self.show_all()

    def setup_init(self):
        """
        Se crea la interfaz grafica,
        se setea y se empaqueta todo.
        """

        from JAMediaObjects.JAMediaWidgets import WidgetsGstreamerAudioVisualizador
        from JAMediaObjects.JAMediaGstreamer.JAMediaAudio import JAMediaAudio

        from Widgets import ToolbarGrabarAudio

        # Widgets Base: - vbox - toolbars - panel
        basebox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.toolbar_salir = ToolbarSalir()
        self.toolbar = ToolbarGrabarAudio()
        hpanel = Gtk.HPaned()

        basebox.pack_start(self.toolbar_salir, False, True, 0)
        basebox.pack_start(self.toolbar, False, True, 0)
        basebox.pack_start(hpanel, True, True, 0)

        self.add(basebox)

        # Panel lado Izquierdo: vbox - pantalla - hbox_efectos_aplicados
        vbox_izq_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.pantalla = Visor()
        eventbox = Gtk.EventBox()
        eventbox.modify_bg(0, get_color("NEGRO"))

        self.hbox_efectos_en_pipe = Gtk.Box(
            orientation=Gtk.Orientation.HORIZONTAL)
        self.hbox_efectos_en_pipe.set_size_request(-1, get_pixels(0.5))

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.NEVER)

        scroll.add_with_viewport(eventbox)

        eventbox.add(self.hbox_efectos_en_pipe)

        vbox_izq_panel.pack_start(self.pantalla, True, True, 0)
        vbox_izq_panel.pack_start(scroll, False, False, 0)

        hpanel.pack1(vbox_izq_panel, resize=True, shrink=True)

        # Panel lado Derecho: eventbox - vbox - scroll
        # - balance_widget - widget_efectos
        self.box_config = Gtk.EventBox()
        self.box_config.set_size_request(get_pixels(5.0), -1)

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.widget_visualizadores_de_audio = WidgetsGstreamerAudioVisualizador()

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.NEVER)

        scroll.add_with_viewport(self.widget_visualizadores_de_audio)

        self.balance_widget = ToolbarBalanceConfig()
        vbox.pack_start(self.balance_widget, False, True, 0)
        vbox.pack_start(scroll, False, True, 0)

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(
            Gtk.PolicyType.NEVER,
            Gtk.PolicyType.AUTOMATIC)

        scroll.add_with_viewport(vbox)
        self.box_config.add(scroll)

        self.widget_efectos = WidgetsGstreamerEfectos()

        vbox.pack_start(self.widget_efectos, False, True, 0)

        hpanel.pack2(self.box_config, resize=False, shrink=False)

        self.show_all()
        self.realize()

        from gi.repository import GdkX11

        xid = self.pantalla.get_property('window').get_xid()
        self.jamediawebcam = JAMediaAudio(xid)

        self.controles_dinamicos = [
            self.toolbar_salir,
            self.box_config,
            ]

        map(self.ocultar, self.controles_dinamicos)

        self.jamediawebcam.connect('estado', self.set_estado)

        self.pantalla.connect("button_press_event", self.clicks_en_pantalla)

        self.toolbar.connect("rotar", self.set_rotacion)
        self.toolbar.connect("accion", self.set_accion)
        self.toolbar.connect('salir', self.confirmar_salir)

        self.balance_widget.connect('valor', self.set_balance)

        self.widget_efectos.connect("click_efecto", self.click_efecto)
        self.widget_efectos.connect('configurar_efecto',
            self.configurar_efecto)
        self.widget_visualizadores_de_audio.connect(
            "click_efecto", self.click_visualizador)
        #self.widget_visualizadores_de_audio.connect(
        #   'configurar_efecto', self.configurar_visualizador)

        self.toolbar_salir.connect('salir', self.emit_salir)

    def set_accion(self, widget, senial):
        """
        Cuando se hace click en grabar o
        en configurar.
        """

        if senial == 'grabar':
            if self.jamediawebcam.estado != "GrabandoAudio":
                self.jamediawebcam.grabar()

            else:
                self.jamediawebcam.stop_grabar()

        elif senial == 'configurar':
            if self.box_config.get_visible():
                self.box_config.hide()

            else:
                self.box_config.show()
                GLib.idle_add(self.update_balance_toolbars)

        elif senial == 'Reset':
            self.reset()

    def cargar_visualizadores(self, efectos):
        """
        Agrega los widgets con efectos a la paleta de configuración.
        """

        self.widget_visualizadores_de_audio.cargar_efectos(efectos)

    #def configurar_visualizador(self, widget, nombre_efecto, propiedad, valor):
    #    """Configura un efecto en el pipe, si no está en eĺ, lo agrega."""

    #    self.jamediawebcam.configurar_visualizador(nombre_efecto, propiedad, valor)

    def click_visualizador(self, widget, nombre_efecto):

        if self.jamediawebcam.estado != "GrabandoAudio":
            self.jamediawebcam.set_visualizador(nombre_efecto)
        # FIXME: Agregar seleccionar visualizador actual

    def confirmar_salir(self, widget=None, senial=None):
        """
        Recibe salir y lo pasa a la toolbar de confirmación.
        """

        self.toolbar_salir.run("Menú Audio.")
class JAMediaAudioWidget(JAMediaVideoWidget):
    """
    Plug - Interfaz para Webcam con grabación de audio.
    """
    def __init__(self):
        """
        JAMediaAudioWidget: Gtk.Plug para embeber en otra aplicacion.
        """

        JAMediaVideoWidget.__init__(self)

        self.toolbar_salir = None
        self.toolbar = None
        self.pantalla = None
        self.balance_widget = None
        self.controles_dinamicos = []
        self.jamediawebcam = None
        self.box_config = None
        self.widget_efectos = None
        self.widget_visualizadores_de_audio = None
        self.hbox_efectos_en_pipe = None

        self.show_all()

    def setup_init(self):
        """
        Se crea la interfaz grafica,
        se setea y se empaqueta todo.
        """

        from JAMediaObjects.JAMediaWidgets import WidgetsGstreamerAudioVisualizador
        from JAMediaObjects.JAMediaGstreamer.JAMediaAudio import JAMediaAudio

        from Widgets import ToolbarGrabarAudio

        # Widgets Base: - vbox - toolbars - panel
        basebox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.toolbar_salir = ToolbarSalir()
        self.toolbar = ToolbarGrabarAudio()
        hpanel = Gtk.HPaned()

        basebox.pack_start(self.toolbar_salir, False, True, 0)
        basebox.pack_start(self.toolbar, False, True, 0)
        basebox.pack_start(hpanel, True, True, 0)

        self.add(basebox)

        # Panel lado Izquierdo: vbox - pantalla - hbox_efectos_aplicados
        vbox_izq_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.pantalla = Visor()
        eventbox = Gtk.EventBox()
        eventbox.modify_bg(0, get_color("NEGRO"))

        self.hbox_efectos_en_pipe = Gtk.Box(
            orientation=Gtk.Orientation.HORIZONTAL)
        self.hbox_efectos_en_pipe.set_size_request(-1, get_pixels(0.5))

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)

        scroll.add_with_viewport(eventbox)

        eventbox.add(self.hbox_efectos_en_pipe)

        vbox_izq_panel.pack_start(self.pantalla, True, True, 0)
        vbox_izq_panel.pack_start(scroll, False, False, 0)

        hpanel.pack1(vbox_izq_panel, resize=True, shrink=True)

        # Panel lado Derecho: eventbox - vbox - scroll
        # - balance_widget - widget_efectos
        self.box_config = Gtk.EventBox()
        self.box_config.set_size_request(get_pixels(5.0), -1)

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.widget_visualizadores_de_audio = WidgetsGstreamerAudioVisualizador(
        )

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)

        scroll.add_with_viewport(self.widget_visualizadores_de_audio)

        self.balance_widget = ToolbarBalanceConfig()
        vbox.pack_start(self.balance_widget, False, True, 0)
        vbox.pack_start(scroll, False, True, 0)

        scroll = Gtk.ScrolledWindow()

        scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)

        scroll.add_with_viewport(vbox)
        self.box_config.add(scroll)

        self.widget_efectos = WidgetsGstreamerEfectos()

        vbox.pack_start(self.widget_efectos, False, True, 0)

        hpanel.pack2(self.box_config, resize=False, shrink=False)

        self.show_all()
        self.realize()

        from gi.repository import GdkX11

        xid = self.pantalla.get_property('window').get_xid()
        self.jamediawebcam = JAMediaAudio(xid)

        self.controles_dinamicos = [
            self.toolbar_salir,
            self.box_config,
        ]

        map(self.ocultar, self.controles_dinamicos)

        self.jamediawebcam.connect('estado', self.set_estado)

        self.pantalla.connect("button_press_event", self.clicks_en_pantalla)

        self.toolbar.connect("rotar", self.set_rotacion)
        self.toolbar.connect("accion", self.set_accion)
        self.toolbar.connect('salir', self.confirmar_salir)

        self.balance_widget.connect('valor', self.set_balance)

        self.widget_efectos.connect("click_efecto", self.click_efecto)
        self.widget_efectos.connect('configurar_efecto',
                                    self.configurar_efecto)
        self.widget_visualizadores_de_audio.connect("click_efecto",
                                                    self.click_visualizador)
        #self.widget_visualizadores_de_audio.connect(
        #   'configurar_efecto', self.configurar_visualizador)

        self.toolbar_salir.connect('salir', self.emit_salir)

    def set_accion(self, widget, senial):
        """
        Cuando se hace click en grabar o
        en configurar.
        """

        if senial == 'grabar':
            if self.jamediawebcam.estado != "GrabandoAudio":
                self.jamediawebcam.grabar()

            else:
                self.jamediawebcam.stop_grabar()

        elif senial == 'configurar':
            if self.box_config.get_visible():
                self.box_config.hide()

            else:
                self.box_config.show()
                GLib.idle_add(self.update_balance_toolbars)

        elif senial == 'Reset':
            self.reset()

    def cargar_visualizadores(self, efectos):
        """
        Agrega los widgets con efectos a la paleta de configuración.
        """

        self.widget_visualizadores_de_audio.cargar_efectos(efectos)

    #def configurar_visualizador(self, widget, nombre_efecto, propiedad, valor):
    #    """Configura un efecto en el pipe, si no está en eĺ, lo agrega."""

    #    self.jamediawebcam.configurar_visualizador(nombre_efecto, propiedad, valor)

    def click_visualizador(self, widget, nombre_efecto):

        if self.jamediawebcam.estado != "GrabandoAudio":
            self.jamediawebcam.set_visualizador(nombre_efecto)
        # FIXME: Agregar seleccionar visualizador actual

    def confirmar_salir(self, widget=None, senial=None):
        """
        Recibe salir y lo pasa a la toolbar de confirmación.
        """

        self.toolbar_salir.run("Menú Audio.")