コード例 #1
0
class JAMedia(gtk.Window):
    def __init__(self):

        gtk.Window.__init__(self)

        self.set_sensitive(False)
        self.set_title("JAMedia")
        self.set_icon_from_file(
            os.path.join(BASE_PATH, "Iconos", "JAMedia.svg"))
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
        self.set_resizable(True)
        self.set_border_width(2)
        self.set_position(gtk.WIN_POS_CENTER)

        self.archivos = []
        self.grabador = False
        self.mouse_in_visor = False
        self.cursor_root = gtk.gdk.Cursor(gtk.gdk.BLANK_CURSOR)
        icono = os.path.join(BASE_PATH, "Iconos", "jamedia_cursor.svg")
        pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(icono, -1, 24)
        self.jamedia_cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default(),
                                             pixbuf, 0, 0)

        self.toolbar = Toolbar()
        self.toolbar_salir = ToolbarSalir()
        self.toolbar_accion = ToolbarAccion()
        self.add_stream = ToolbarAddStream()

        self.base_panel = BasePanel()

        vbox = gtk.VBox()
        vbox.pack_start(self.toolbar, False, False, 0)
        vbox.pack_start(self.toolbar_salir, False, False, 0)
        vbox.pack_start(self.toolbar_accion, False, False, 0)
        vbox.pack_start(self.add_stream, False, False, 0)
        vbox.pack_start(self.base_panel, True, True, 0)

        self.connect("realize", self.__realize)

        self.add(vbox)
        self.show_all()
        self.realize()

        # Controlador del mouse.
        #   http://www.pygtk.org/pygtk2reference/class-gdkdisplay.html
        self.mouse_listener = MouseSpeedDetector(self)
        self.mouse_listener.start()
        self.mouse_listener.new_handler(True)

        self.toolbar.connect("accion", self.__accion_toolbar)

        self.base_panel.connect("show-controls", self.__ocultar_controles)
        self.base_panel.connect("accion-list", self.__accion_list)
        self.base_panel.connect("menu_activo", self.__cancel_toolbars)
        self.base_panel.connect("add_stream", self.__run_add_stream)
        self.base_panel.connect("stop-record", self.__detener_grabacion)
        self.base_panel.connect("video", self.__set_video)

        self.toolbar_accion.connect("accion-stream", self.__accion_stream)
        self.toolbar_accion.connect("grabar", self.__grabar)
        self.toolbar_salir.connect("salir", self.__salir)

        self.add_stream.connect("add-stream", self.__add_stream)

        self.mouse_listener.connect("estado", self.__set_mouse)
        self.connect("hide", self.__hide_show)
        self.connect("show", self.__hide_show)
        self.connect("delete-event", self.__salir)

        self.resize(640, 480)

        gobject.idle_add(self.__setup_init)
        print "JAMedia process:", os.getpid()

    def __set_video(self, widget, valor):
        self.toolbar.configurar.set_sensitive(valor)

    def __realize(self, window):
        self.cursor_root = self.get_property("window").get_cursor()
        self.get_property("window").set_cursor(self.jamedia_cursor)

    def __add_stream(self, widget, tipo, nombre, url):
        add_stream(tipo, [nombre, url])
        if "Tv" in tipo or "TV" in tipo:
            indice = 3
        elif "Radio" in tipo:
            indice = 2
        else:
            return
        self.base_panel.derecha.lista.cargar_lista(None, indice)

    def __run_add_stream(self, widget, title):
        self.add_stream.set_accion(title)

    def __grabar(self, widget, uri):
        self.set_sensitive(False)
        self.__detener_grabacion()

        tipo = "video"
        label = self.base_panel.derecha.lista.toolbar.label.get_text()
        if label == "JAM-TV" or label == "TVs" or label == "WebCams":
            tipo = "video"
        else:
            tipo = "audio"

        hora = time.strftime("%H-%M-%S")
        fecha = str(datetime.date.today())
        archivo = "%s-%s" % (fecha, hora)
        archivo = os.path.join(get_my_files_directory(), archivo)

        self.grabador = JAMediaGrabador(uri, archivo, tipo)

        self.grabador.connect('update', self.__update_grabador)
        self.grabador.connect('endfile', self.__detener_grabacion)

        self.grabador.start()
        self.grabador.play()
        #_thread = threading.Thread(target=self.grabador.play)
        #_thread.start()

        self.set_sensitive(True)

    def __update_grabador(self, widget, datos):
        self.base_panel.izquierda.toolbar_record.set_info(datos)

    def __detener_grabacion(self, widget=None):
        if self.grabador:
            self.grabador.disconnect_by_func(self.__update_grabador)
            self.grabador.disconnect_by_func(self.__detener_grabacion)
            self.grabador.stop()
            self.grabador.terminate()
            del (self.grabador)
            self.grabador = False
        self.base_panel.izquierda.toolbar_record.stop()

    def __accion_stream(self, widget, accion, url):
        lista = self.base_panel.derecha.lista.toolbar.label.get_text()
        if accion == "Borrar":
            eliminar_streaming(url, lista)
            print "Streaming Eliminado:", url
        elif accion == "Copiar":
            modelo, _iter = self.base_panel.derecha.lista.lista.get_selection(
            ).get_selected()
            nombre = modelo.get_value(_iter, 1)
            add_stream(lista, [nombre, url])
        elif accion == "Mover":
            modelo, _iter = self.base_panel.derecha.lista.lista.get_selection(
            ).get_selected()
            nombre = modelo.get_value(_iter, 1)
            add_stream(lista, [nombre, url])
            eliminar_streaming(url, lista)
        else:
            print "accion_stream desconocido:", accion

    def __setup_init(self):
        self.__cancel_toolbars()
        self.toolbar.configurar.set_sensitive(False)
        self.base_panel.setup_init()
        if self.archivos:
            self.base_panel.set_nueva_lista(self.archivos)
            self.archivos = []
        self.set_sensitive(True)
        dialog = DialogoDescarga(parent=self, force=False)
        dialog.run()
        dialog.destroy()
        return False

    def __accion_toolbar(self, widget, accion):
        self.__cancel_toolbars()
        if accion == "salir":
            self.toolbar_salir.run("JAMedia")
        elif accion == "show-config":
            self.base_panel.derecha.show_config()
        else:
            print self.__accion_toolbar, accion

    def __hide_show(self, widget):
        """
        Controlador del mouse funcionará solo si JAMedia es Visible.
        """
        self.mouse_listener.new_handler(widget.get_visible())

    def __set_mouse(self, widget, estado):
        """
        Muestra u oculta el mouse de jamedia según su posición.
        """
        win = self.get_property("window")
        if self.mouse_in_visor:  # Solo cuando el mouse está sobre el Visor.
            if estado == "moviendose":
                if win.get_cursor() != self.jamedia_cursor:
                    win.set_cursor(self.jamedia_cursor)
                    return
            elif estado == "detenido":
                if win.get_cursor() != gtk.gdk.BLANK_CURSOR:
                    win.set_cursor(gtk.gdk.Cursor(gtk.gdk.BLANK_CURSOR))
                    return
            elif estado == "fuera":
                if win.get_cursor() != self.cursor_root:
                    win.set_cursor(self.cursor_root)
                    return
        else:
            if estado == "moviendose" or estado == "detenido":
                if win.get_cursor() != self.jamedia_cursor:
                    win.set_cursor(self.jamedia_cursor)
                    return
            elif estado == "fuera":
                if win.get_cursor() != self.cursor_root:
                    win.set_cursor(self.cursor_root)
                    return

    def __ocultar_controles(self, widget, datos):
        zona, ocultar = datos
        self.mouse_in_visor = zona
        if zona and ocultar:
            self.__cancel_toolbars()
            self.set_border_width(0)
            self.base_panel.set_border_width(0)
            self.toolbar.hide()
            self.base_panel.derecha.hide()
            self.base_panel.izquierda.toolbar_info.hide()
            self.base_panel.izquierda.progress.hide()
        elif not zona and ocultar:
            self.toolbar.show()
            self.set_border_width(2)
            self.base_panel.set_border_width(2)
            self.base_panel.derecha.show()
            self.base_panel.izquierda.toolbar_info.show()
            self.base_panel.izquierda.progress.show()
            #if not self.hbox_efectos_en_pipe.get_children():
            #    self.hbox_efectos_en_pipe.get_parent().get_parent(
            #        ).get_parent().hide()
        elif not zona and not ocultar:
            pass
        elif zona and not ocultar:
            pass

    def __salir(self, widget=None, senial=None):
        self.mouse_listener.new_handler(False)
        self.__detener_grabacion()
        self.base_panel.salir()
        gtk.main_quit()
        sys.exit(0)

    def __cancel_toolbars(self, widget=False):
        self.toolbar_salir.cancelar()
        self.toolbar_accion.cancelar()
        self.add_stream.cancelar()

    def __accion_list(self, widget, lista, accion, _iter):
        # borrar, copiar, mover, grabar, etc . . .
        self.toolbar_accion.set_accion(lista, accion, _iter)

    def set_archivos(self, archivos):
        self.archivos = archivos
コード例 #2
0
ファイル: JAMedia.py プロジェクト: fdanesse/JAMediaSuite
class JAMedia(gtk.Window):

    def __init__(self):

        gtk.Window.__init__(self)

        self.set_sensitive(False)
        self.set_title("JAMedia")
        self.set_icon_from_file(os.path.join(BASE_PATH,
            "Iconos", "JAMedia.svg"))
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
        self.set_resizable(True)
        self.set_border_width(2)
        self.set_position(gtk.WIN_POS_CENTER)

        self.archivos = []
        self.grabador = False
        self.mouse_in_visor = False
        self.cursor_root = gtk.gdk.Cursor(gtk.gdk.BLANK_CURSOR)
        icono = os.path.join(BASE_PATH, "Iconos", "jamedia_cursor.svg")
        pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(icono, -1, 24)
        self.jamedia_cursor = gtk.gdk.Cursor(
            gtk.gdk.display_get_default(), pixbuf, 0, 0)

        self.toolbar = Toolbar()
        self.toolbar_salir = ToolbarSalir()
        self.toolbar_accion = ToolbarAccion()
        self.add_stream = ToolbarAddStream()

        self.base_panel = BasePanel()

        vbox = gtk.VBox()
        vbox.pack_start(self.toolbar, False, False, 0)
        vbox.pack_start(self.toolbar_salir, False, False, 0)
        vbox.pack_start(self.toolbar_accion, False, False, 0)
        vbox.pack_start(self.add_stream, False, False, 0)
        vbox.pack_start(self.base_panel, True, True, 0)

        self.connect("realize", self.__realize)

        self.add(vbox)
        self.show_all()
        self.realize()

        # Controlador del mouse.
        #   http://www.pygtk.org/pygtk2reference/class-gdkdisplay.html
        self.mouse_listener = MouseSpeedDetector(self)
        self.mouse_listener.start()
        self.mouse_listener.new_handler(True)

        self.toolbar.connect("accion", self.__accion_toolbar)

        self.base_panel.connect("show-controls", self.__ocultar_controles)
        self.base_panel.connect("accion-list", self.__accion_list)
        self.base_panel.connect("menu_activo", self.__cancel_toolbars)
        self.base_panel.connect("add_stream", self.__run_add_stream)
        self.base_panel.connect("stop-record", self.__detener_grabacion)
        self.base_panel.connect("video", self.__set_video)

        self.toolbar_accion.connect("accion-stream", self.__accion_stream)
        self.toolbar_accion.connect("grabar", self.__grabar)
        self.toolbar_salir.connect("salir", self.__salir)

        self.add_stream.connect("add-stream", self.__add_stream)

        self.mouse_listener.connect("estado", self.__set_mouse)
        self.connect("hide", self.__hide_show)
        self.connect("show", self.__hide_show)
        self.connect("delete-event", self.__salir)

        self.resize(640, 480)

        gobject.idle_add(self.__setup_init)
        print "JAMedia process:", os.getpid()

    def __set_video(self, widget, valor):
        self.toolbar.configurar.set_sensitive(valor)

    def __realize(self, window):
        self.cursor_root = self.get_property("window").get_cursor()
        self.get_property("window").set_cursor(self.jamedia_cursor)

    def __add_stream(self, widget, tipo, nombre, url):
        add_stream(tipo, [nombre, url])
        if "Tv" in tipo or "TV" in tipo:
            indice = 3
        elif "Radio" in tipo:
            indice = 2
        else:
            return
        self.base_panel.derecha.lista.cargar_lista(None, indice)

    def __run_add_stream(self, widget, title):
        self.add_stream.set_accion(title)

    def __grabar(self, widget, uri):
        self.set_sensitive(False)
        self.__detener_grabacion()

        tipo = "video"
        label = self.base_panel.derecha.lista.toolbar.label.get_text()
        if label == "JAM-TV" or label == "TVs" or label == "WebCams":
            tipo = "video"
        else:
            tipo = "audio"

        hora = time.strftime("%H-%M-%S")
        fecha = str(datetime.date.today())
        archivo = "%s-%s" % (fecha, hora)
        archivo = os.path.join(get_my_files_directory(), archivo)

        self.grabador = JAMediaGrabador(uri, archivo, tipo)

        self.grabador.connect('update', self.__update_grabador)
        self.grabador.connect('endfile', self.__detener_grabacion)

        self.grabador.start()
        self.grabador.play()
        #_thread = threading.Thread(target=self.grabador.play)
        #_thread.start()

        self.set_sensitive(True)

    def __update_grabador(self, widget, datos):
        self.base_panel.izquierda.toolbar_record.set_info(datos)

    def __detener_grabacion(self, widget=None):
        if self.grabador:
            self.grabador.disconnect_by_func(self.__update_grabador)
            self.grabador.disconnect_by_func(self.__detener_grabacion)
            self.grabador.stop()
            self.grabador.terminate()
            del(self.grabador)
            self.grabador = False
        self.base_panel.izquierda.toolbar_record.stop()

    def __accion_stream(self, widget, accion, url):
        lista = self.base_panel.derecha.lista.toolbar.label.get_text()
        if accion == "Borrar":
            eliminar_streaming(url, lista)
            print "Streaming Eliminado:", url
        elif accion == "Copiar":
            modelo, _iter = self.base_panel.derecha.lista.lista.get_selection(
                ).get_selected()
            nombre = modelo.get_value(_iter, 1)
            add_stream(lista, [nombre, url])
        elif accion == "Mover":
            modelo, _iter = self.base_panel.derecha.lista.lista.get_selection(
                ).get_selected()
            nombre = modelo.get_value(_iter, 1)
            add_stream(lista, [nombre, url])
            eliminar_streaming(url, lista)
        else:
            print "accion_stream desconocido:", accion

    def __setup_init(self):
        self.__cancel_toolbars()
        self.toolbar.configurar.set_sensitive(False)
        self.base_panel.setup_init()
        if self.archivos:
            self.base_panel.set_nueva_lista(self.archivos)
            self.archivos = []
        self.set_sensitive(True)
        dialog = DialogoDescarga(parent=self, force=False)
        dialog.run()
        dialog.destroy()
        return False

    def __accion_toolbar(self, widget, accion):
        self.__cancel_toolbars()
        if accion == "salir":
            self.toolbar_salir.run("JAMedia")
        elif accion == "show-config":
            self.base_panel.derecha.show_config()
        else:
            print self.__accion_toolbar, accion

    def __hide_show(self, widget):
        """
        Controlador del mouse funcionará solo si JAMedia es Visible.
        """
        self.mouse_listener.new_handler(widget.get_visible())

    def __set_mouse(self, widget, estado):
        """
        Muestra u oculta el mouse de jamedia según su posición.
        """
        win = self.get_property("window")
        if self.mouse_in_visor:  # Solo cuando el mouse está sobre el Visor.
            if estado == "moviendose":
                if win.get_cursor() != self.jamedia_cursor:
                    win.set_cursor(self.jamedia_cursor)
                    return
            elif estado == "detenido":
                if win.get_cursor() != gtk.gdk.BLANK_CURSOR:
                    win.set_cursor(gtk.gdk.Cursor(gtk.gdk.BLANK_CURSOR))
                    return
            elif estado == "fuera":
                if win.get_cursor() != self.cursor_root:
                    win.set_cursor(self.cursor_root)
                    return
        else:
            if estado == "moviendose" or estado == "detenido":
                if win.get_cursor() != self.jamedia_cursor:
                    win.set_cursor(self.jamedia_cursor)
                    return
            elif estado == "fuera":
                if win.get_cursor() != self.cursor_root:
                    win.set_cursor(self.cursor_root)
                    return

    def __ocultar_controles(self, widget, datos):
        zona, ocultar = datos
        self.mouse_in_visor = zona
        if zona and ocultar:
            self.__cancel_toolbars()
            self.set_border_width(0)
            self.base_panel.set_border_width(0)
            self.toolbar.hide()
            self.base_panel.derecha.hide()
            self.base_panel.izquierda.toolbar_info.hide()
            self.base_panel.izquierda.progress.hide()
        elif not zona and ocultar:
            self.toolbar.show()
            self.set_border_width(2)
            self.base_panel.set_border_width(2)
            self.base_panel.derecha.show()
            self.base_panel.izquierda.toolbar_info.show()
            self.base_panel.izquierda.progress.show()
            #if not self.hbox_efectos_en_pipe.get_children():
            #    self.hbox_efectos_en_pipe.get_parent().get_parent(
            #        ).get_parent().hide()
        elif not zona and not ocultar:
            pass
        elif zona and not ocultar:
            pass

    def __salir(self, widget=None, senial=None):
        self.mouse_listener.new_handler(False)
        self.__detener_grabacion()
        self.base_panel.salir()
        gtk.main_quit()
        sys.exit(0)

    def __cancel_toolbars(self, widget=False):
        self.toolbar_salir.cancelar()
        self.toolbar_accion.cancelar()
        self.add_stream.cancelar()

    def __accion_list(self, widget, lista, accion, _iter):
        # borrar, copiar, mover, grabar, etc . . .
        self.toolbar_accion.set_accion(lista, accion, _iter)

    def set_archivos(self, archivos):
        self.archivos = archivos