示例#1
0
    def __init__(self):
	
        Gtk.Table.__init__(self, 10, 30, False)

	# para los archivos mp3 - wav - ogg
	self.treeview = Gtk.TreeView()
	self.liststore = Gtk.ListStore(str)
	self.treeselection = self.treeview.get_selection()
	self.treeselection.set_mode(Gtk.SelectionMode.SINGLE)

	self.directorio_de_reproduccion = None # el directorio desde donde se cargaron los archivos
	self.indice_archivo_en_reproduccion = 0 # para mantener una lista de reproduccion con los archivos

	# La base de datos con las radios
	self.BasedeDatos = ManejodeBasedeDatos(mi_base)
	self.listaderadios = []

	# Reproductor helix
        self.reproductor = Reproductor(self)
	self.is_radio = False
        self.fuentededatosparareproducir = None

	self.directoriodeiconos = os.getcwd() + "/Iconos/"
	self.rosado = Gdk.Color(65000,13000,25000)
	self.celeste1 = Gdk.Color(0,33000,33000)

	# ******************** Interface Grafica *****************************
	# Zona Central.
	# Definicion de radios online
	viewportderadios = Gtk.ScrolledWindow()
	viewportderadios.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
	self.caja_radios = Gtk.VBox()

	self.cargar_radios()

	viewportderadios.add_with_viewport(self.caja_radios)
	self.attach(viewportderadios, 0, 8, 0, 29)

	# Barra vertical derecha para la lista de reproduccion
        self.viewportderecho = Gtk.ScrolledWindow()
        self.viewportderecho.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
        self.attach(self.viewportderecho, 8, 10, 0, 29)
	# Informacion adicional de la actividad
	self.viewportderecho.add_with_viewport(self.crear_barra_info())

	# Barra con controles de reproduccion
	# Zona inferior
        self.barradereproduccion = BarradeReproduccion()
	self.reproductor.asignacion_de_barra_de_reproduccion(self.barradereproduccion)
        self.attach(self.barradereproduccion, 0, 10, 29, 30)
        self.show_all()

	# Conexion de eventos de los controles de la barra de reproduccion con las
	# funciones de reproduccion del reproductor

        # Abre un selector de archivos
        self.barradereproduccion.botonabrir.connect("clicked", self.abrirdirectoriomp3)
	self.barradereproduccion.botonstop.connect("clicked", self.reproductor.stop)
	self.barradereproduccion.botonplay.connect("clicked", self.reproductor.pause)# moficar para un click en la lista
	self.barradereproduccion.botonatras.connect("clicked", self.tema_anterior)
	self.barradereproduccion.botonsiguiente.connect("clicked", self.siguiente_tema)
示例#2
0
class VistaReproductor(Gtk.Table):

    def __init__(self):
	
        Gtk.Table.__init__(self, 10, 30, False)

	# para los archivos mp3 - wav - ogg
	self.treeview = Gtk.TreeView()
	self.liststore = Gtk.ListStore(str)
	self.treeselection = self.treeview.get_selection()
	self.treeselection.set_mode(Gtk.SelectionMode.SINGLE)

	self.directorio_de_reproduccion = None # el directorio desde donde se cargaron los archivos
	self.indice_archivo_en_reproduccion = 0 # para mantener una lista de reproduccion con los archivos

	# La base de datos con las radios
	self.BasedeDatos = ManejodeBasedeDatos(mi_base)
	self.listaderadios = []

	# Reproductor helix
        self.reproductor = Reproductor(self)
	self.is_radio = False
        self.fuentededatosparareproducir = None

	self.directoriodeiconos = os.getcwd() + "/Iconos/"
	self.rosado = Gdk.Color(65000,13000,25000)
	self.celeste1 = Gdk.Color(0,33000,33000)

	# ******************** Interface Grafica *****************************
	# Zona Central.
	# Definicion de radios online
	viewportderadios = Gtk.ScrolledWindow()
	viewportderadios.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
	self.caja_radios = Gtk.VBox()

	self.cargar_radios()

	viewportderadios.add_with_viewport(self.caja_radios)
	self.attach(viewportderadios, 0, 8, 0, 29)

	# Barra vertical derecha para la lista de reproduccion
        self.viewportderecho = Gtk.ScrolledWindow()
        self.viewportderecho.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
        self.attach(self.viewportderecho, 8, 10, 0, 29)
	# Informacion adicional de la actividad
	self.viewportderecho.add_with_viewport(self.crear_barra_info())

	# Barra con controles de reproduccion
	# Zona inferior
        self.barradereproduccion = BarradeReproduccion()
	self.reproductor.asignacion_de_barra_de_reproduccion(self.barradereproduccion)
        self.attach(self.barradereproduccion, 0, 10, 29, 30)
        self.show_all()

	# Conexion de eventos de los controles de la barra de reproduccion con las
	# funciones de reproduccion del reproductor

        # Abre un selector de archivos
        self.barradereproduccion.botonabrir.connect("clicked", self.abrirdirectoriomp3)
	self.barradereproduccion.botonstop.connect("clicked", self.reproductor.stop)
	self.barradereproduccion.botonplay.connect("clicked", self.reproductor.pause)# moficar para un click en la lista
	self.barradereproduccion.botonatras.connect("clicked", self.tema_anterior)
	self.barradereproduccion.botonsiguiente.connect("clicked", self.siguiente_tema)






# ***************************************************************************
# ************************** FUNCIONES **************************************

    def cargar_radios(self):
	# se llama al iniciar la actividad y al agregar o eliminar una radio

        for child in self.caja_radios:
            self.caja_radios.remove(child)

	radios = self.BasedeDatos.CargarRadios() # Devuelve una lista de tuplas
	self.listaderadios = []

	for radio in radios:
		self.listaderadios.append(Radio(radio, self.directoriodeiconos))

	for radio in self.listaderadios:
		radio.connect("button_press_event", self.handler_click_Radio)
		self.caja_radios.pack_start(radio, True, True, 5)

    def handler_click_Radio(self, widget, event):
	# reacciona a los clicks sobre las radios
	boton = event.button
	pos = (event.x, event.y)
	tiempo = event.time

	if boton == 1:
		self.cargar_fuente_de_datos (widget, widget.direccionderadio, True)
		self.pintar_radios_no_seleccionadas(widget)
		print "Reproducir radio"
		return
	elif boton == 3:
		print "Abrir menu - popup"
		self.crear_menu_emergente_para_radios(widget, boton, pos, tiempo)
		return

    def crear_menu_emergente_para_radios(self, widget, boton, pos, tiempo):
	# un menu para agregar o eliminar radios de la base de datos
	menu = Gtk.Menu()

	# Items del menu
	agregar = Gtk.MenuItem("Agregar nueva Radio . . .")
	eliminar = Gtk.MenuItem("Eliminar de la lista")
	eliminar2 = Gtk.MenuItem("Eliminar definitivamente")

	# Agregar los items al menu
	menu.append(agregar)
	menu.append(eliminar)
	menu.append(eliminar2)

        # Se conectan las funciones de retrollamada a la senal "activate"
        agregar.connect_object("activate", self.construir_dialogo_agregar_radio, None)
        eliminar.connect_object("activate", self.destruirwidget, widget, widget)
        eliminar2.connect_object("activate", self.eliminar_radio, widget)

	menu.show_all()
	menu.popup(None, None, self.posicionar_menu, boton, tiempo, None)

    def posicionar_menu(self, widget, pos):
	# Establece la posicion del menu desplegable
	print "Posicionando menu desplegable"

    def construir_dialogo_agregar_radio(self, widget):
	# Crea un cuadro de dialogo para ingresar los datos de una nueva radio

	dialog = Gtk.Dialog("Agregar Radio", None, Gtk.DialogFlags.MODAL, None)

	etiqueta0 = Gtk.Label("No utilices tildes ni ñ en los datos.")
	dialog.vbox.pack_start(etiqueta0, True, True, 5)

	renglo1 = Gtk.HBox()
	etiqueta1 = Gtk.Label("Nombre de la Radio: ")
	texto1 = Gtk.Entry()
	renglo1.pack_start(etiqueta1, True, True, 5)
	renglo1.pack_start(texto1, True, True, 5)
	dialog.vbox.pack_start(renglo1, True, True, 5)

	renglo2 = Gtk.HBox()
	etiqueta2 = Gtk.Label("Direccion de Reproduccion: ")
	texto2 = Gtk.Entry()
	renglo2.pack_start(etiqueta2, True, True, 5)
	renglo2.pack_start(texto2, True, True, 5)
	dialog.vbox.pack_start(renglo2, True, True, 5)

	renglo3 = Gtk.HBox()
	etiqueta3 = Gtk.Label("Descripcion: ")
	texto3 = Gtk.Entry()
	renglo3.pack_start(etiqueta3, True, True, 5)
	renglo3.pack_start(texto3, True, True, 5)
	dialog.vbox.pack_start(renglo3, True, True, 5)

	renglo4 = Gtk.HBox()
	etiqueta4 = Gtk.Label("Pais de procedencia: ")
	texto4 = Gtk.Entry()
	renglo4.pack_start(etiqueta4, True, True, 5)
	renglo4.pack_start(texto4, True, True, 5)
	dialog.vbox.pack_start(renglo4, True, True, 5)

	dialog.add_button("Guardar", 1)
	dialog.add_button("Cancelar", 2)

	dialog.show_all()

        if dialog.run() == 1:
		# verificar y guardar

		if texto2.get_text() != "":
			radio = self.listaderadios[-1]
			id_de_radio = radio.id_en_base
			indice = int (id_de_radio + 1)

			nombre = texto1.get_text()

			dir_rep = texto2.get_text()

			detalles = texto3.get_text()

			pais = texto4.get_text()

			self.BasedeDatos.agregar_radio(indice, nombre, dir_rep, detalles, pais)
			self.cargar_radios()
		
	elif dialog.run() == 2:
		# sale automaticamente
		pass
        dialog.destroy()

    def eliminar_radio (self, widget):
	indice = widget.id_en_base
	self.BasedeDatos.eliminar_radio(indice)
	self.cargar_radios()

    def crear_barra_info(self):
	# Informacion
	self.barra_ceibal_radio_info = Gtk.VBox()
	imagen1 = Gtk.Image()
	imagen1.set_from_file(self.directoriodeiconos + "Flavio.png")

	etiquetadeinformacion1 = Gtk.Label("Ceibal Radio" + "\n" + "*****@*****.**" + "\n" + "http://sites.google.com/" + "\n" + "site/sugaractivities/home")
	etiquetadeinformacion1.modify_font(Pango.FontDescription("purisa 4"))
	etiquetadeinformacion1.set_justify(Gtk.Justification.CENTER)

	etiquetadeinformacion2 = Gtk.Label("http://drupal.ceibaljam.org/"  + "\n" + "*****@*****.**")
	etiquetadeinformacion2.modify_font(Pango.FontDescription("purisa 4"))
	etiquetadeinformacion2.set_justify(Gtk.Justification.CENTER)

	imagen2 = Gtk.Image()
	imagen2.set_from_file(self.directoriodeiconos + "ceibaljam.png")

	self.barra_ceibal_radio_info.pack_start(imagen2, True, True, 5)
	self.barra_ceibal_radio_info.pack_start(etiquetadeinformacion2, True, True, 5)
	self.barra_ceibal_radio_info.pack_start(imagen1, True, True, 5)
	self.barra_ceibal_radio_info.pack_start(etiquetadeinformacion1, True, True, 5)

	self.barra_ceibal_radio_info.show_all()
	return self.barra_ceibal_radio_info

    def pintar_radios_no_seleccionadas (self, widget):
	# Cambia los colores de los controles al hacerles click
	for radio in self.listaderadios:
		radio.pintame(self.celeste1)
	widget.pintame(self.rosado)


    def abrirdirectoriomp3(self,widget):
	# Abre un Filechooser para cargar un directorio con archivos mp3 - wav - ogg
	selectordedirectorio = Gtk.FileChooserDialog("Abrir directorio MP3", None, Gtk.FileChooserAction.OPEN, None)
	selectordedirectorio.set_current_folder_uri("file:///media")
	selectordedirectorio.set_select_multiple(True)

	# extras
	frame = Gtk.Frame()
	hbox = Gtk.HBox()
	frame.add(hbox)
	botonabrirdirectorio = Gtk.Button("Abrir")
	botonseleccionartodo = Gtk.Button("Seleccionar Todos")
	botonsalir = Gtk.Button("Salir")
	hbox.pack_end(botonsalir, False, False, 5)
	hbox.pack_end(botonseleccionartodo, False, False, 5)
	hbox.pack_end(botonabrirdirectorio, False, False, 5)
	selectordedirectorio.set_extra_widget(frame)

	botonsalir.connect("clicked",self.destruirwidget,selectordedirectorio)
	botonabrirdirectorio.connect("clicked",self.abrirdirectorio,selectordedirectorio)
	botonseleccionartodo.connect("clicked",self.seleccionartodo,selectordedirectorio)

	# filtro Musica
	filter = Gtk.FileFilter()
	filter.set_name("Musica")
	filter.add_mime_type("sound/mp3")
	filter.add_mime_type("sound/ogg")
	filter.add_mime_type("sound/wav")
	filter.add_pattern("*.mp3")
	filter.add_pattern("*.ogg")
	filter.add_pattern("*.wav")
	selectordedirectorio.add_filter(filter)
	selectordedirectorio.add_shortcut_folder_uri("file:///media/")

	selectordedirectorio.show_all()

    def seleccionartodo(self,widget,selectordedirectorio):
	selectordedirectorio.select_all()

    def abrirdirectorio(self,widget,selectordedirectorio):
	# Carga los mp3 del directorio seleccionado
        listadereproduccion = selectordedirectorio.get_filenames()
        self.cargardirectorio(listadereproduccion)
        self.destruirwidget(None, selectordedirectorio)

#****************
#****************

    def cargardirectorio(self, listadereproduccion):

	self.liststore = Gtk.ListStore(str)
        for archivo in listadereproduccion:
	    if os.path.isfile(archivo):
		nombre_de_archivo = os.path.basename(archivo)
		self.liststore.append([nombre_de_archivo])

	if len(self.liststore) > 0:
		for child in self.viewportderecho:
			self.viewportderecho.remove(child)

		# el directorio de reproduccion
		self.directorio_de_reproduccion = os.path.dirname(listadereproduccion[0])

		self.treeview = Gtk.TreeView()
		self.treeview.connect("row-activated", self.open_file)
		self.treeview.set_model(self.liststore)
		self.treeview.append_column(Gtk.TreeViewColumn('Mi música', Gtk.CellRendererText(), text=0))
		self.viewportderecho.add_with_viewport(self.treeview)

		self.viewportderecho.show_all()
		self.treeview.show_all()

		self.indice_archivo_en_reproduccion = 0
		self.open_file(self.treeview, self.indice_archivo_en_reproduccion, 0)
		self.treeselection = self.treeview.get_selection()
		self.treeselection.set_mode(Gtk.SelectionMode.SINGLE)
		self.treeselection.select_path(self.indice_archivo_en_reproduccion)

    def siguiente_tema(self, widget):
	if int(self.indice_archivo_en_reproduccion) + 1 < len(self.liststore) and self.is_radio == False:
		self.indice_archivo_en_reproduccion += 1
		self.open_file(self.treeview, self.indice_archivo_en_reproduccion, 0)
		self.treeselection = self.treeview.get_selection()
		self.treeselection.set_mode(Gtk.SelectionMode.SINGLE)
		self.treeselection.select_path(self.indice_archivo_en_reproduccion)

    def tema_anterior(self, widget):
	if int(self.indice_archivo_en_reproduccion) - 1 > -1 and self.is_radio == False:
		self.indice_archivo_en_reproduccion -= 1
		self.open_file(self.treeview, self.indice_archivo_en_reproduccion, 0)
		self.treeselection = self.treeview.get_selection()
		self.treeselection.set_mode(Gtk.SelectionMode.SINGLE)
		self.treeselection.select_path(self.indice_archivo_en_reproduccion)
	
    def open_file(self, treeview, path, column):
	# def callback(treeview, iter, path, user_data)
	# metodo de la interfase treeview

        model = treeview.get_model()
        iterador = model.get_iter(path)
        archivo = self.directorio_de_reproduccion + "/" + model.get_value(iterador, 0)
	self.cargar_fuente_de_datos(None, archivo, False)
	
	# El path es de tipo (1,) hay que sacar la coma y los parentesis para usarlo como indice entero
	indice1 = str(path)
	indice = ""
	for x in indice1:
		if x != "," and x != "(" and x != ")":
			indice += x
	#self.indice_archivo_en_reproduccion = path
	self.indice_archivo_en_reproduccion = int(indice)
	print "self.indice_archivo_en_reproduccion: ", self.indice_archivo_en_reproduccion

    def cargar_fuente_de_datos(self, widget, archivo, is_radio):
	# Se carga la fuente de datos que se va a reproducir
	self.is_radio = is_radio
	if is_radio == False:
		self.fuentededatosparareproducir = "file://" + archivo
	else:
		self.fuentededatosparareproducir = archivo
        
	self.reproductor.abrirfuentededatos(None, self.fuentededatosparareproducir, is_radio)

    def destruirwidget(self,widgetquedalasenal,widgetquesedestruira):
	# Elimina un widget (filechooser y radio eliminada por el menu contextual)
        widgetquesedestruira.destroy()
        return False
class VistaReproductor(gtk.Table):
    def __init__(self):

        gtk.Table.__init__(self, 10, 30, False)

        # para los archivos mp3 - wav - ogg
        self.treeview = gtk.TreeView()
        self.liststore = gtk.ListStore(str)
        self.treeselection = self.treeview.get_selection()
        self.treeselection.set_mode(gtk.SELECTION_SINGLE)

        self.directorio_de_reproduccion = None  # el directorio desde donde se cargaron los archivos
        self.indice_archivo_en_reproduccion = 0  # para mantener una lista de reproduccion con los archivos

        # La base de datos con las radios
        self.BasedeDatos = ManejodeBasedeDatos(mi_base)
        self.listaderadios = []

        # Reproductor helix
        self.reproductor = Reproductor(self)
        self.is_radio = False
        self.fuentededatosparareproducir = None

        self.directoriodeiconos = os.getcwd() + "/Iconos/"
        self.rosado = gtk.gdk.Color(65000, 13000, 25000, 1)
        self.celeste1 = gtk.gdk.Color(0, 33000, 33000, 1)

        # ******************** Interface Grafica *****************************
        # Zona Central.
        # Definicion de radios online
        viewportderadios = gtk.ScrolledWindow()
        viewportderadios.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.caja_radios = gtk.VBox()

        self.cargar_radios()

        viewportderadios.add_with_viewport(self.caja_radios)
        self.attach(viewportderadios, 0, 8, 0, 29)

        # Barra vertical derecha para la lista de reproduccion
        self.viewportderecho = gtk.ScrolledWindow()
        self.viewportderecho.set_policy(gtk.POLICY_AUTOMATIC,
                                        gtk.POLICY_AUTOMATIC)
        self.attach(self.viewportderecho, 8, 10, 0, 29)
        # Informacion adicional de la actividad
        self.viewportderecho.add_with_viewport(self.crear_barra_info())

        # Barra con controles de reproduccion
        # Zona inferior
        self.barradereproduccion = BarradeReproduccion()
        self.reproductor.asignacion_de_barra_de_reproduccion(
            self.barradereproduccion)
        self.attach(self.barradereproduccion, 0, 10, 29, 30)
        self.show_all()

        # Conexion de eventos de los controles de la barra de reproduccion con las
        # funciones de reproduccion del reproductor

        # Abre un selector de archivos
        self.barradereproduccion.botonabrir.connect("clicked",
                                                    self.abrirdirectoriomp3)
        self.barradereproduccion.botonstop.connect("clicked",
                                                   self.reproductor.stop)
        self.barradereproduccion.botonplay.connect(
            "clicked",
            self.reproductor.pause)  # moficar para un click en la lista
        self.barradereproduccion.botonatras.connect("clicked",
                                                    self.tema_anterior)
        self.barradereproduccion.botonsiguiente.connect(
            "clicked", self.siguiente_tema)

# ***************************************************************************
# ************************** FUNCIONES **************************************

    def cargar_radios(self):
        # se llama al iniciar la actividad y al agregar o eliminar una radio

        for child in self.caja_radios:
            self.caja_radios.remove(child)

        radios = self.BasedeDatos.CargarRadios(
        )  # Devuelve una lista de tuplas
        self.listaderadios = []

        for radio in radios:
            self.listaderadios.append(Radio(radio, self.directoriodeiconos))

        for radio in self.listaderadios:
            radio.connect("button_press_event", self.handler_click_Radio)
            self.caja_radios.pack_start(radio, True, True, 5)

    def handler_click_Radio(self, widget, event):
        # reacciona a los clicks sobre las radios
        boton = event.button
        pos = (event.x, event.y)
        tiempo = event.time

        if boton == 1:
            self.cargar_fuente_de_datos(widget, widget.direccionderadio, True)
            self.pintar_radios_no_seleccionadas(widget)
            print "Reproducir radio"
            return
        elif boton == 3:
            print "Abrir menu - popup"
            self.crear_menu_emergente_para_radios(widget, boton, pos, tiempo)
            return

    def crear_menu_emergente_para_radios(self, widget, boton, pos, tiempo):
        # un menu para agregar o eliminar radios de la base de datos
        menu = gtk.Menu()

        # Items del menu
        agregar = gtk.MenuItem("Agregar nueva Radio . . .")
        eliminar = gtk.MenuItem("Eliminar de la lista")
        eliminar2 = gtk.MenuItem("Eliminar definitivamente")

        # Agregar los items al menu
        menu.append(agregar)
        menu.append(eliminar)
        menu.append(eliminar2)

        # Se conectan las funciones de retrollamada a la senal "activate"
        agregar.connect_object("activate",
                               self.construir_dialogo_agregar_radio, None)
        eliminar.connect_object("activate", self.destruirwidget, widget,
                                widget)
        eliminar2.connect_object("activate", self.eliminar_radio, widget)

        menu.show_all()
        menu.popup(None, None, self.posicionar_menu, boton, tiempo, None)

    def posicionar_menu(self, widget, pos):
        # Establece la posicion del menu desplegable
        print "Posicionando menu desplegable"

    def construir_dialogo_agregar_radio(self, widget):
        # Crea un cuadro de dialogo para ingresar los datos de una nueva radio

        dialog = gtk.Dialog("Agregar Radio", None, gtk.DIALOG_MODAL, None)

        etiqueta0 = gtk.Label("No utilices tildes ni ñ en los datos.")
        dialog.vbox.pack_start(etiqueta0, True, True, 5)

        renglo1 = gtk.HBox()
        etiqueta1 = gtk.Label("Nombre de la Radio: ")
        texto1 = gtk.Entry()
        renglo1.pack_start(etiqueta1, True, True, 5)
        renglo1.pack_start(texto1, True, True, 5)
        dialog.vbox.pack_start(renglo1, True, True, 5)

        renglo2 = gtk.HBox()
        etiqueta2 = gtk.Label("Direccion de Reproduccion: ")
        texto2 = gtk.Entry()
        renglo2.pack_start(etiqueta2, True, True, 5)
        renglo2.pack_start(texto2, True, True, 5)
        dialog.vbox.pack_start(renglo2, True, True, 5)

        renglo3 = gtk.HBox()
        etiqueta3 = gtk.Label("Descripcion: ")
        texto3 = gtk.Entry()
        renglo3.pack_start(etiqueta3, True, True, 5)
        renglo3.pack_start(texto3, True, True, 5)
        dialog.vbox.pack_start(renglo3, True, True, 5)

        renglo4 = gtk.HBox()
        etiqueta4 = gtk.Label("Pais de procedencia: ")
        texto4 = gtk.Entry()
        renglo4.pack_start(etiqueta4, True, True, 5)
        renglo4.pack_start(texto4, True, True, 5)
        dialog.vbox.pack_start(renglo4, True, True, 5)

        dialog.add_button("Guardar", 1)
        dialog.add_button("Cancelar", 2)

        dialog.show_all()

        if dialog.run() == 1:
            # verificar y guardar

            if texto2.get_text() != "":
                radio = self.listaderadios[-1]
                id_de_radio = radio.id_en_base
                indice = int(id_de_radio + 1)

                nombre = texto1.get_text()

                dir_rep = texto2.get_text()

                detalles = texto3.get_text()

                pais = texto4.get_text()

                self.BasedeDatos.agregar_radio(indice, nombre, dir_rep,
                                               detalles, pais)
                self.cargar_radios()

        elif dialog.run() == 2:
            # sale automaticamente
            pass
        dialog.destroy()

    def eliminar_radio(self, widget):
        indice = widget.id_en_base
        self.BasedeDatos.eliminar_radio(indice)
        self.cargar_radios()

    def crear_barra_info(self):
        # Informacion
        self.barra_ceibal_radio_info = gtk.VBox()
        imagen1 = gtk.Image()
        imagen1.set_from_file(self.directoriodeiconos + "Flavio.png")

        etiquetadeinformacion1 = gtk.Label("Ceibal Radio" + "\n" +
                                           "*****@*****.**" + "\n" +
                                           "http://sites.google.com/" + "\n" +
                                           "site/sugaractivities/home")
        etiquetadeinformacion1.modify_font(pango.FontDescription("purisa 4"))
        etiquetadeinformacion1.set_justify(gtk.JUSTIFY_CENTER)

        etiquetadeinformacion2 = gtk.Label("http://drupal.ceibaljam.org/" +
                                           "\n" + "*****@*****.**")
        etiquetadeinformacion2.modify_font(pango.FontDescription("purisa 4"))
        etiquetadeinformacion2.set_justify(gtk.JUSTIFY_CENTER)

        imagen2 = gtk.Image()
        imagen2.set_from_file(self.directoriodeiconos + "ceibaljam.png")

        self.barra_ceibal_radio_info.pack_start(imagen2, True, True, 5)
        self.barra_ceibal_radio_info.pack_start(etiquetadeinformacion2, True,
                                                True, 5)
        self.barra_ceibal_radio_info.pack_start(imagen1, True, True, 5)
        self.barra_ceibal_radio_info.pack_start(etiquetadeinformacion1, True,
                                                True, 5)

        self.barra_ceibal_radio_info.show_all()
        return self.barra_ceibal_radio_info

    def pintar_radios_no_seleccionadas(self, widget):
        # Cambia los colores de los controles al hacerles click
        for radio in self.listaderadios:
            radio.pintame(self.celeste1)
        widget.pintame(self.rosado)

    def abrirdirectoriomp3(self, widget):
        # Abre un Filechooser para cargar un directorio con archivos mp3 - wav - ogg
        selectordedirectorio = gtk.FileChooserDialog(
            "Abrir directorio MP3", None, gtk.FILE_CHOOSER_ACTION_OPEN, None)
        selectordedirectorio.set_current_folder_uri("file:///media")
        selectordedirectorio.set_select_multiple(True)

        # extras
        frame = gtk.Frame()
        hbox = gtk.HBox()
        frame.add(hbox)
        botonabrirdirectorio = gtk.Button("Abrir")
        botonseleccionartodo = gtk.Button("Seleccionar Todos")
        botonsalir = gtk.Button("Salir")
        hbox.pack_end(botonsalir, False, False, 5)
        hbox.pack_end(botonseleccionartodo, False, False, 5)
        hbox.pack_end(botonabrirdirectorio, False, False, 5)
        selectordedirectorio.set_extra_widget(frame)

        botonsalir.connect("clicked", self.destruirwidget,
                           selectordedirectorio)
        botonabrirdirectorio.connect("clicked", self.abrirdirectorio,
                                     selectordedirectorio)
        botonseleccionartodo.connect("clicked", self.seleccionartodo,
                                     selectordedirectorio)

        # filtro Musica
        filter = gtk.FileFilter()
        filter.set_name("Musica")
        filter.add_mime_type("sound/mp3")
        filter.add_mime_type("sound/ogg")
        filter.add_mime_type("sound/wav")
        filter.add_pattern("*.mp3")
        filter.add_pattern("*.ogg")
        filter.add_pattern("*.wav")
        selectordedirectorio.add_filter(filter)
        selectordedirectorio.add_shortcut_folder_uri("file:///media/")

        selectordedirectorio.show_all()

    def seleccionartodo(self, widget, selectordedirectorio):
        selectordedirectorio.select_all()

    def abrirdirectorio(self, widget, selectordedirectorio):
        # Carga los mp3 del directorio seleccionado
        listadereproduccion = selectordedirectorio.get_filenames()
        self.cargardirectorio(listadereproduccion)
        self.destruirwidget(None, selectordedirectorio)

#****************
#****************

    def cargardirectorio(self, listadereproduccion):

        self.liststore = gtk.ListStore(str)
        for archivo in listadereproduccion:
            if os.path.isfile(archivo):
                nombre_de_archivo = os.path.basename(archivo)
                self.liststore.append([nombre_de_archivo])

        if len(self.liststore) > 0:
            for child in self.viewportderecho:
                self.viewportderecho.remove(child)

            # el directorio de reproduccion
            self.directorio_de_reproduccion = os.path.dirname(
                listadereproduccion[0])

            self.treeview = gtk.TreeView()
            self.treeview.connect("row-activated", self.open_file)
            self.treeview.set_model(self.liststore)
            self.treeview.append_column(
                gtk.TreeViewColumn('Mi música', gtk.CellRendererText(),
                                   text=0))
            self.viewportderecho.add_with_viewport(self.treeview)

            self.viewportderecho.show_all()
            self.treeview.show_all()

            self.indice_archivo_en_reproduccion = 0
            self.open_file(self.treeview, self.indice_archivo_en_reproduccion,
                           0)
            self.treeselection = self.treeview.get_selection()
            self.treeselection.set_mode(gtk.SELECTION_SINGLE)
            self.treeselection.select_path(self.indice_archivo_en_reproduccion)

    def siguiente_tema(self, widget):
        if int(self.indice_archivo_en_reproduccion) + 1 < len(
                self.liststore) and self.is_radio == False:
            self.indice_archivo_en_reproduccion += 1
            self.open_file(self.treeview, self.indice_archivo_en_reproduccion,
                           0)
            self.treeselection = self.treeview.get_selection()
            self.treeselection.set_mode(gtk.SELECTION_SINGLE)
            self.treeselection.select_path(self.indice_archivo_en_reproduccion)

    def tema_anterior(self, widget):
        if int(self.indice_archivo_en_reproduccion
               ) - 1 > -1 and self.is_radio == False:
            self.indice_archivo_en_reproduccion -= 1
            self.open_file(self.treeview, self.indice_archivo_en_reproduccion,
                           0)
            self.treeselection = self.treeview.get_selection()
            self.treeselection.set_mode(gtk.SELECTION_SINGLE)
            self.treeselection.select_path(self.indice_archivo_en_reproduccion)

    def open_file(self, treeview, path, column):
        # def callback(treeview, iter, path, user_data)
        # metodo de la interfase treeview

        model = treeview.get_model()
        iterador = model.get_iter(path)
        archivo = self.directorio_de_reproduccion + "/" + model.get_value(
            iterador, 0)
        self.cargar_fuente_de_datos(None, archivo, False)

        # El path es de tipo (1,) hay que sacar la coma y los parentesis para usarlo como indice entero
        indice1 = str(path)
        indice = ""
        for x in indice1:
            if x != "," and x != "(" and x != ")":
                indice += x
#self.indice_archivo_en_reproduccion = path
        self.indice_archivo_en_reproduccion = int(indice)
        print "self.indice_archivo_en_reproduccion: ", self.indice_archivo_en_reproduccion

    def cargar_fuente_de_datos(self, widget, archivo, is_radio):
        # Se carga la fuente de datos que se va a reproducir
        self.is_radio = is_radio
        if is_radio == False:
            self.fuentededatosparareproducir = "file://" + archivo
        else:
            self.fuentededatosparareproducir = archivo

        self.reproductor.abrirfuentededatos(None,
                                            self.fuentededatosparareproducir,
                                            is_radio)

    def destruirwidget(self, widgetquedalasenal, widgetquesedestruira):
        # Elimina un widget (filechooser y radio eliminada por el menu contextual)
        widgetquesedestruira.destroy()
        return False
    def __init__(self):

        gtk.Table.__init__(self, 10, 30, False)

        # para los archivos mp3 - wav - ogg
        self.treeview = gtk.TreeView()
        self.liststore = gtk.ListStore(str)
        self.treeselection = self.treeview.get_selection()
        self.treeselection.set_mode(gtk.SELECTION_SINGLE)

        self.directorio_de_reproduccion = None  # el directorio desde donde se cargaron los archivos
        self.indice_archivo_en_reproduccion = 0  # para mantener una lista de reproduccion con los archivos

        # La base de datos con las radios
        self.BasedeDatos = ManejodeBasedeDatos(mi_base)
        self.listaderadios = []

        # Reproductor helix
        self.reproductor = Reproductor(self)
        self.is_radio = False
        self.fuentededatosparareproducir = None

        self.directoriodeiconos = os.getcwd() + "/Iconos/"
        self.rosado = gtk.gdk.Color(65000, 13000, 25000, 1)
        self.celeste1 = gtk.gdk.Color(0, 33000, 33000, 1)

        # ******************** Interface Grafica *****************************
        # Zona Central.
        # Definicion de radios online
        viewportderadios = gtk.ScrolledWindow()
        viewportderadios.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.caja_radios = gtk.VBox()

        self.cargar_radios()

        viewportderadios.add_with_viewport(self.caja_radios)
        self.attach(viewportderadios, 0, 8, 0, 29)

        # Barra vertical derecha para la lista de reproduccion
        self.viewportderecho = gtk.ScrolledWindow()
        self.viewportderecho.set_policy(gtk.POLICY_AUTOMATIC,
                                        gtk.POLICY_AUTOMATIC)
        self.attach(self.viewportderecho, 8, 10, 0, 29)
        # Informacion adicional de la actividad
        self.viewportderecho.add_with_viewport(self.crear_barra_info())

        # Barra con controles de reproduccion
        # Zona inferior
        self.barradereproduccion = BarradeReproduccion()
        self.reproductor.asignacion_de_barra_de_reproduccion(
            self.barradereproduccion)
        self.attach(self.barradereproduccion, 0, 10, 29, 30)
        self.show_all()

        # Conexion de eventos de los controles de la barra de reproduccion con las
        # funciones de reproduccion del reproductor

        # Abre un selector de archivos
        self.barradereproduccion.botonabrir.connect("clicked",
                                                    self.abrirdirectoriomp3)
        self.barradereproduccion.botonstop.connect("clicked",
                                                   self.reproductor.stop)
        self.barradereproduccion.botonplay.connect(
            "clicked",
            self.reproductor.pause)  # moficar para un click en la lista
        self.barradereproduccion.botonatras.connect("clicked",
                                                    self.tema_anterior)
        self.barradereproduccion.botonsiguiente.connect(
            "clicked", self.siguiente_tema)
import pango

from sugar.activity import activity
from ManejodeBasedeDatos import ManejodeBasedeDatos

# Directorio para crear la base de datos
directorio_base = os.path.join(activity.get_activity_root(), 'data/')
mi_base = os.path.join(directorio_base + "Radios.db")

# Si el directorio no existe, crearlo
if not os.path.exists(directorio_base):
    os.mkdir(directorio_base)

# Si la base de datos no existe, crearla
if not os.path.exists(mi_base):
    BasedeDatos = ManejodeBasedeDatos(mi_base)
    BasedeDatos.CrearBasededatos()
    BasedeDatos.Llenar_Base()
    os.chmod(os.path.join(directorio_base, 'Radios.db'), 0660)


class VistaReproductor(gtk.Table):
    def __init__(self):

        gtk.Table.__init__(self, 10, 30, False)

        # para los archivos mp3 - wav - ogg
        self.treeview = gtk.TreeView()
        self.liststore = gtk.ListStore(str)
        self.treeselection = self.treeview.get_selection()
        self.treeselection.set_mode(gtk.SELECTION_SINGLE)