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

        from Widgets import ToolbarFotografia
        from Widgets import ToolbarRafagas

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

        self.toolbar_salir = ToolbarSalir()
        self.toolbar = ToolbarFotografia()
        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.balance_widget = ToolbarBalanceConfig()

        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()
        self.toolbar_rafagas = ToolbarRafagas()

        vbox.pack_start(self.balance_widget, False, True, 0)
        vbox.pack_start(self.toolbar_rafagas, False, True, 0)
        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 = JAMediaWebCam(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.toolbar_rafagas.connect('run_rafaga', self.set_rafaga)

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

        from Widgets import ToolbarFotografia
        from Widgets import ToolbarRafagas

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

        self.toolbar_salir = ToolbarSalir()
        self.toolbar = ToolbarFotografia()
        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.balance_widget = ToolbarBalanceConfig()

        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()
        self.toolbar_rafagas = ToolbarRafagas()

        vbox.pack_start(self.balance_widget, False, True, 0)
        vbox.pack_start(self.toolbar_rafagas, False, True, 0)
        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 = JAMediaWebCam(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.toolbar_rafagas.connect('run_rafaga', self.set_rafaga)

        self.toolbar_salir.connect('salir', self.emit_salir)
class JAMediaFotografiaWidget(JAMediaVideoWidget):
    """
    Plug - Interfaz para Webcam con cámara fotográfica.
    """

    def __init__(self):

        JAMediaVideoWidget.__init__(self)

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

        from Widgets import ToolbarFotografia
        from Widgets import ToolbarRafagas

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

        self.toolbar_salir = ToolbarSalir()
        self.toolbar = ToolbarFotografia()
        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.balance_widget = ToolbarBalanceConfig()

        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()
        self.toolbar_rafagas = ToolbarRafagas()

        vbox.pack_start(self.balance_widget, False, True, 0)
        vbox.pack_start(self.toolbar_rafagas, False, True, 0)
        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 = JAMediaWebCam(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.toolbar_rafagas.connect('run_rafaga', self.set_rafaga)

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

    def set_rafaga(self, widget, valor):
        """
        Cuando se hace click en play de la toolbar
        de ráfagas se setea y comienza a fotografiar.
        """

        self.jamediawebcam.set_rafaga(valor)

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

        if senial == 'fotografiar':
            if self.jamediawebcam.estado != "Fotografiando":
                self.jamediawebcam.fotografiar()

            else:
                # Solo puede estar en estado Fotografiando
                # si hay ráfagas en proceso.
                self.jamediawebcam.stop_rafagas()

        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 confirmar_salir(self, widget=None, senial=None):
        """
        Recibe salir y lo pasa a la toolbar de confirmación.
        """

        self.toolbar_salir.run("Menú Fotografía.")
class JAMediaFotografiaWidget(JAMediaVideoWidget):
    """
    Plug - Interfaz para Webcam con cámara fotográfica.
    """
    def __init__(self):

        JAMediaVideoWidget.__init__(self)

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

        from Widgets import ToolbarFotografia
        from Widgets import ToolbarRafagas

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

        self.toolbar_salir = ToolbarSalir()
        self.toolbar = ToolbarFotografia()
        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.balance_widget = ToolbarBalanceConfig()

        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()
        self.toolbar_rafagas = ToolbarRafagas()

        vbox.pack_start(self.balance_widget, False, True, 0)
        vbox.pack_start(self.toolbar_rafagas, False, True, 0)
        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 = JAMediaWebCam(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.toolbar_rafagas.connect('run_rafaga', self.set_rafaga)

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

    def set_rafaga(self, widget, valor):
        """
        Cuando se hace click en play de la toolbar
        de ráfagas se setea y comienza a fotografiar.
        """

        self.jamediawebcam.set_rafaga(valor)

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

        if senial == 'fotografiar':
            if self.jamediawebcam.estado != "Fotografiando":
                self.jamediawebcam.fotografiar()

            else:
                # Solo puede estar en estado Fotografiando
                # si hay ráfagas en proceso.
                self.jamediawebcam.stop_rafagas()

        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 confirmar_salir(self, widget=None, senial=None):
        """
        Recibe salir y lo pasa a la toolbar de confirmación.
        """

        self.toolbar_salir.run("Menú Fotografía.")