Example #1
0
class JAMediaLector(Gtk.Plug):
    """
    JAMediaLector:
        Lector pdf y de archivos de texto.
            
        Implementado sobre:
            python 2.7.3 y Gtk 3
        
        Es un Gtk.Plug para embeber en cualquier contenedor
        dentro de otra aplicacion.
        
    Para ello, es necesario crear en la aplicacion donde
    será enbebido JAMediaLector, un socket:
        
    import JAMediaLector
    from JAMediaLector.JAMediaLector import JAMediaLector
        
        self.socket = Gtk.Socket()
        self.add(self.socket)
        self.jamedialector = JAMediaLector()
        socket.add_id(self.jamedialector.get_id()
        
    y luego proceder de la siguiente forma:
        
            GLib.idle_add(self.setup_init)
        
        def setup_init(self):
            self.jamedialector.setup_init()
            # self.jamediaplayer.pack_standar()
            # Esta última linea no debe ir cuando se embebe
            
    NOTA: Tambien se puede ejecutar JAMediaLector directamente
    mediante python JAMediaLector.py
    """
    
    __gsignals__ = {
    "salir":(GObject.SIGNAL_RUN_FIRST,
        GObject.TYPE_NONE, [])}
    
    def __init__(self):
        """
        JAMediaLector: Gtk.Plug para embeber en otra aplicación.
        """
        
        Gtk.Plug.__init__(self, 0L)
        
        self.toolbar_box = None
        
        self.toolbar = None
        self.toolbar_config = None
        self.toolballector = None
        self.toolbartray = None
        self.visor = None
        self.previewcontainer = None
        self.toolbarpaginas = None
        self.textview = None
        self.toolbar_salir = None
        
        self.controlespdf = None
        self.controlestexto = None
        self.controles_dinamicos = None
        
        self.documento = None
        self.npaginas = None
        self.indexpaginaactiva = None
        self.pagina = None
        
        self.show_all()
        
        self.connect("embedded", self.embed_event)
        
    def setup_init(self):
        """
        Se crea la interfaz grafica, se setea todo y
        se empaqueta todo.
        """
        
        ### Contenedor secundario para toda la interfaz.
        basebox = Gtk.Box(orientation = Gtk.Orientation.VERTICAL)
        
        ### Contenedor para todas las toolbars.
        self.toolbar_box = Gtk.Box(orientation = Gtk.Orientation.VERTICAL)
        
        ### Panel para lector y barra de navegación de páginas.
        hpanel = Gtk.HPaned()
        
        self.toolbar = Toolbar()
        self.toolbar_salir = ToolbarSalir()
        self.toolbar_config = ToolbarConfig()
        
        self.toolbarlector = ToolbarLector()
        self.toolbartry = ToolbarTry()
        
        ### Empaquetado de las tres toolbars superiores de la aplicacion.
        self.toolbar_box.pack_start(self.toolbar, False, False, 0)
        self.toolbar_box.pack_start(self.toolbar_salir, False, False, 0)
        self.toolbar_box.pack_start(self.toolbar_config, False, False, 0)
        
        self.visor = DrawingLector()
        
        self.previewcontainer = PreviewContainer()
        self.toolbarpaginas = ToolbarPaginas()
        
        self.textview = TextView()
        
        # Izquierda
        vbox = Gtk.Box(orientation = Gtk.Orientation.VERTICAL)
        
        scroll = Gtk.ScrolledWindow()
        
        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.AUTOMATIC)
            
        scroll.add_with_viewport(self.visor)
        
        vbox.pack_start(self.toolbarlector, False, False, 0)
        vbox.pack_start(scroll, True, True, 0)
        
        self.controlespdf = [self.toolbarlector, scroll]
        
        scroll = Gtk.ScrolledWindow()
        
        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.AUTOMATIC)
            
        scroll.add_with_viewport(self.textview)
        
        vbox.pack_start(scroll, True, True, 0)
        
        self.controlestexto = [scroll]
        
        hpanel.pack1(vbox, resize = True, shrink = True)
        
        ### Derecha
        self.derecha_vbox = Gtk.Box(orientation = Gtk.Orientation.VERTICAL)
        
        scroll = Gtk.ScrolledWindow()
        
        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.AUTOMATIC)
            
        scroll.add_with_viewport(self.previewcontainer)
        
        self.derecha_vbox.pack_start(self.toolbarpaginas, False, False, 0)
        self.derecha_vbox.pack_start(scroll, True, True, 0)
        
        self.controlespdf.append(self.derecha_vbox)
        
        hpanel.pack2(self.derecha_vbox, resize = False, shrink = False)
        
        basebox.pack_start(self.toolbar_box, False, False, 0)
        basebox.pack_start(hpanel, True, True, 0)
        basebox.pack_start(self.toolbartry, False, False, 0)
        
        self.controles_dinamicos = [
            self.toolbar_box,
            self.derecha_vbox,
            self.toolbartry]
        
        self.add(basebox)
        self.show_all()
        
        self.toolbar_salir.hide()
        self.toolbar.abrir.hide() # Solo cuando no esta embebido
        self.toolbar_config.hide()
        
        self.toolbarlector.connect('original', self.visor.original)
        self.toolbarlector.connect('alejar', self.visor.alejar)
        self.toolbarlector.connect('acercar', self.visor.acercar)
        #self.toolbarlector.connect('rotar_izquierda', self.visor.acercar)
        #self.toolbarlector.connect('rotar_derecha', self.visor.acercar)
        
        self.toolbarpaginas.connect('activar', self.activar)
        
        self.previewcontainer.connect('nueva_seleccion', self.nueva_pagina)
        
        self.visor.connect("button_press_event", self.clicks_en_pantalla)
        
        self.toolbar.connect('abrir', self.show_filechooser)
        self.toolbar.connect('config', self.mostrar_config)
        self.toolbar.connect('salir', self.confirmar_salir)
        self.toolbar_salir.connect('salir', self.emit_salir)
        
        map(self.ocultar, self.controlestexto)
        map(self.ocultar, self.controlespdf)
        
    def pack_standar(self):
        """
        Para empaquetar el botón abrir.
        """
        
        self.toolbar.abrir.show()
        
    def mostrar_config(self, widget):
        """
        Muestra u oculta las opciones de
        configuracion (toolbar_config).
        """
        
        map(self.ocultar, [self.toolbar_salir])
        
        if self.toolbar_config.get_visible():
            self.toolbar_config.hide()
            
        else:
            self.toolbar_config.show_all()
            
    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()
            screen = ventana.get_screen()
            w,h = ventana.get_size()
            ww, hh = (screen.get_width(), screen.get_height())
            
            if ww == w and hh == h:
                ventana.unfullscreen()
                
            else:
                ventana.fullscreen()
                
    def do_motion_notify_event(self, event):
        """
        Cuando se mueve el mouse sobre la ventana.
        """
        
        if self.toolbar_config.ocultar_controles:
            x, y = (int(event.x), int(event.y))
            rect = self.get_allocation()
            xx, yy, ww, hh = (rect.x, rect.y, rect.width, rect.height)
            
            arriba = range(0, self.toolbar_box.get_allocation().height)
            derecha = range(ww - self.derecha_vbox.get_allocation().width, ww)
            
            if y in arriba or x in derecha:
                map(self.mostrar, self.controles_dinamicos)
                
            else:
                map(self.ocultar, self.controles_dinamicos)
                #map(self.ocultar, [self.toolbar_config, self.toolbar_salir])
                
        else:
            map(self.mostrar, self.controles_dinamicos)
            
    def ocultar(self, objeto):
        """
        Esta funcion es llamada desde self.ocultar_controles()
        """
        
        if objeto.get_visible(): objeto.hide()
        
    def mostrar(self, objeto):
        """
        Esta funcion es llamada desde self.ocultar_controles()
        """
        
        if not objeto.get_visible(): objeto.show()
        
    def show_filechooser(self, widget):
        
        selector = Selector_de_Archivos(self)
        selector.connect('archivos-seleccionados', self.cargar_archivo)

    def cargar_archivo(self, widget, archivo):
        """
        Recibe un archivo desde el filechooser
        para abrir en el lector.
        """
        
        self.abrir( archivo)
    
    def limpiar(self):
        
        self.toolbartry.label.set_text("")
        self.documento = None
        self.previewcontainer.limpiar()
        self.load_pagina(None)
        self.textview.get_buffer().set_text("")
        map(self.ocultar, self.controlestexto)
        map(self.ocultar, self.controlespdf)
        
    def abrir(self, archivo):
        """
        Abre un Archivo.
        """
        
        descripcion = JAMF.describe_uri(archivo)
        if descripcion:
            if descripcion[2]:
                # Es un Archivo
                tipo = JAMF.describe_archivo(archivo)
                
                if 'pdf' in tipo:
                    self.toolbartry.label.set_text(archivo)
                    archivo = "file://%s" % (archivo)
                    
                    map(self.ocultar, self.controlestexto)
                    map(self.mostrar, self.controlespdf)
                    
                    self.documento = Poppler.Document.new_from_file(archivo, None)
                    self.npaginas = self.documento.get_n_pages()
                    #thread = threading.Thread( target=self.llenar_preview )
                    #thread.start()
                    self.previewcontainer.llenar(self.documento)
                    
                elif 'text' in tipo:
                    self.toolbartry.label.set_text(archivo)
                    
                    map(self.ocultar, self.controlespdf)
                    map(self.mostrar, self.controlestexto)
                    
                    arch = open(archivo, "r")
                    lineas = arch.readlines()
                    arch.close()
                    
                    texto = ""
                    for linea in lineas:
                        texto += linea
                    self.textview.get_buffer().set_text(texto)
                    
                else:
                    self.toolbartry.label.set_text("")
                    self.documento = None
                    self.previewcontainer.limpiar()
                    self.load_pagina(None)
                    self.textview.get_buffer().set_text("")
    
    #def llenar_preview(self):
    #    """ Thread para cargar las páginas en preview. """
    #    self.previewcontainer.llenar(self.documento)

    def nueva_pagina(self, widget, indice):
        """
        Cuando se selecciona una nueva pagina
        """
        
        self.load_pagina(indice)
        
    def load_pagina(self, indice):
        """
        Carga una página del Archivo pdf abierto actualmente.
        """
        
        if indice != None:
            self.indexpaginaactiva = indice
            self.pagina = self.documento.get_page(self.indexpaginaactiva)
            self.visor.set_pagina(self.pagina)
            self.toolbarpaginas.set_pagina(self.indexpaginaactiva+1, self.npaginas)
            
        else:
            self.indexpaginaactiva = None
            self.pagina = None
            self.visor.set_pagina(None)
            self.toolbarpaginas.set_pagina(None, None)
    
    def activar(self, widget, senial):
        """
        Cuando se pasa de pagina.
        """
        
        if senial == 'atras':
            if self.indexpaginaactiva > 0:
                self.previewcontainer.seleccionar(self.indexpaginaactiva-1)
                
            else:
                self.previewcontainer.seleccionar(self.npaginas-1)
                
        elif senial == 'siguiente':
            if self.indexpaginaactiva < self.npaginas-1:
                self.previewcontainer.seleccionar(self.indexpaginaactiva+1)
                
            else:
                self.previewcontainer.seleccionar(0)
    
    def embed_event(self, widget):
        """
        No hace nada por ahora.
        """
        
        print "JAMediaLector => OK"
    
    def confirmar_salir(self, widget = None, senial = None):
        """
        Recibe salir y lo pasa a la toolbar de confirmación.
        """
        
        map(self.ocultar, [self.toolbar_config])
        self.toolbar_salir.run("JAMediaLector")
        
    def emit_salir(self, widget = None, senial = None):
        """
        Emite salir para que cuando esta embebida, la
        aplicacion decida que hacer, si salir, o cerrar solo
        JAMediaLector.
        """
        
        self.emit('salir')
        
Example #2
0
class Ventana(Gtk.Window):
    """
    Ventana Principal de JAMexplorer.
    """

    __gtype_name__ = 'JAMediaExplorer'

    def __init__(self):

        super(Ventana, self).__init__()

        self.set_title("JAMediaExplorer")
        self.set_icon_from_file(
            os.path.join(ICONOS, "JAMediaExplorer.svg"))
        self.set_resizable(True)
        self.set_size_request(640, 480)
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_border_width(3)

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

        self.toolbar = Toolbar()
        self.toolbar_accion = ToolbarAccion()
        self.toolbar_salir = ToolbarSalir()
        self.navegador = Navegador()
        self.toolbar_try = ToolbarTry()

        switchbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        switchbox.pack_start(self.navegador, True, True, 0)

        vbox.pack_start(self.toolbar, False, True, 0)
        vbox.pack_start(self.toolbar_accion, False, True, 0)
        vbox.pack_start(self.toolbar_salir, False, True, 0)
        vbox.pack_start(switchbox, True, True, 0)
        vbox.pack_start(self.toolbar_try, False, True, 0)

        self.add(vbox)

        #self.socketimagenes = Gtk.Socket()
        #self.socketimagenes.show()
        #switchbox.pack_start(self.socketimagenes, True, True, 0)
        #self.jamimagenes = JAMImagenes()
        #self.socketimagenes.add_id(self.jamimagenes.get_id())

        #self.socketjamedia = Gtk.Socket()
        #self.socketjamedia.show()
        #switchbox.pack_start(self.socketjamedia, True, True, 0)
        #self.jamediaplayer = JAMediaPlayer()
        #self.socketjamedia.add_id(self.jamediaplayer.get_id())

        #self.socketjamedialector = Gtk.Socket()
        #self.socketjamedialector.show()
        #switchbox.pack_start(self.socketjamedialector, True, True, 0)
        #self.jamedialector = JAMediaLector()
        #self.socketjamedialector.add_id(self.jamedialector.get_id())

        #self.sockets = [
        #    self.socketimagenes,
        #    self.socketjamedia,
        #    self.socketjamedialector]

        self.objetos_no_visibles_en_switch = [
            self.toolbar,
            self.toolbar_accion,
            self.toolbar_salir,
            self.navegador,
            self.toolbar_try]

        self.show_all()
        self.realize()

        self.toolbar_accion.hide()
        self.toolbar_salir.hide()

        self.toolbar.connect('salir', self.__confirmar_salir)
        self.toolbar.connect('accion_ver', self.__set_accion)
        self.toolbar_accion.connect('borrar', self.__ejecutar_borrar)
        self.toolbar_salir.connect('salir', self.__salir)
        self.connect("delete-event", self.__salir)

        self.navegador.connect('info', self.__get_info)
        #self.navegador.connect('cargar', self.switch)
        self.navegador.connect('borrar', self.__set_borrar)

        #self.jamimagenes.connect('salir', self.get_explorador)
        #self.jamediaplayer.connect('salir', self.get_explorador)
        #self.jamedialector.connect('salir', self.get_explorador)

        #GLib.idle_add(self.setup_init)

    #def setup_init(self):

    #    self.jamediaplayer.setup_init()
    #    self.jamedialector.setup_init()
    #    map(self.ocultar, self.sockets)

    def __set_accion(self, widget, accion, valor):
        """
        Cuando se hace click en ver ocultos del menu.
        """

        self.get_toplevel().set_sensitive(False)
        self.navegador.notebookdirectorios.recargar(valor)
        self.get_toplevel().set_sensitive(True)

    def __ejecutar_borrar(self, widget, direccion, modelo, iter_):
        """
        Ejecuta borrar un archivo o directorio.
        """

        self.get_toplevel().set_sensitive(False)

        from JAMediaObjects.JAMFileSystem import borrar

        if borrar(direccion):
            modelo.remove(iter_)
            self.navegador.notebookdirectorios.copiando = False
            self.navegador.notebookdirectorios.cortando = False

        self.get_toplevel().set_sensitive(True)

    def __set_borrar(self, widget, direccion, modelo, iter_):
        """
        Setea borrar un archivo en toolbaraccion.
        """

        self.toolbar_salir.hide()
        self.toolbar_accion.set_accion(direccion, modelo, iter_)

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

        self.toolbar_accion.hide()
        self.toolbar_salir.run("JAMediaExplorer")

    def __ocultar(self, objeto):

        if objeto.get_visible():
            objeto.hide()

    def __mostrar(self, objeto):

        if not objeto.get_visible():
            objeto.show()

    def __get_items(self, directorio, tipo):

        if not os.path.exists(directorio) \
            or not os.path.isdir(directorio):
                return []

        items = []

        for archivo in os.listdir(directorio):
            from JAMediaObjects.JAMFileSystem import describe_archivo

            path = os.path.join(directorio, archivo)
            descripcion = describe_archivo(path)

            if tipo in descripcion and not 'iso' in descripcion:
                items.append([archivo, path])

        return items

    def __get_info(self, widget, path):
        """
        Recibe el path seleccionado en la estructura
        de directorios, obtiene información sobre el mismo
        y la pasa a infowidget para ser mostrada.
        """

        if not path:
            return

        if not os.path.exists(path):
            return

        from JAMediaObjects.JAMFileSystem import get_tamanio
        from JAMediaObjects.JAMFileSystem import describe_archivo
        from JAMediaObjects.JAMFileSystem import describe_uri
        from JAMediaObjects.JAMFileSystem import describe_acceso_uri

        self.toolbar_try.label.set_text(path)

        # FIXME: Falla si se movió y no se actualiza
        unidad, directorio, archivo, enlace = describe_uri(path)
        lectura, escritura, ejecucion = describe_acceso_uri(path)

        texto = ""
        typeinfo = ""

        if enlace:
            texto = "Enlace.\n"

        else:
            if directorio:
                texto = "Directorio.\n"

            elif archivo:
                texto = "Archivo.\n"
                texto += "Tipo:\n"

                for dato in describe_archivo(path).split(";"):
                    texto += "\t%s\n" % (dato.strip())
                    typeinfo += dato

                texto += "Tamaño:\n"
                texto += "\t%s bytes\n" % (get_tamanio(path))

        texto += "Permisos: \n"
        texto += "\tLactura: %s\n" % (lectura)
        texto += "\tEscritura: %s\n" % (escritura)
        texto += "\tEjecución: %s\n" % (ejecucion)

        self.navegador.infowidget.set_info(texto, typeinfo)

    def __salir(self, widget=None, senial=None):

        notebook = self.navegador.notebookdirectorios
        paginas = notebook.get_n_pages()

        for indice in range(paginas):
            pags = notebook.get_children()
            pags[indice].get_child().new_handle(False)

        import sys
        sys.exit(0)
        Gtk.main_quit()
Example #3
0
class JAMediaLector(Gtk.Plug):
    """
    JAMediaLector:
        Lector pdf y de archivos de texto.
            
        Implementado sobre:
            python 2.7.3 y Gtk 3
        
        Es un Gtk.Plug para embeber en cualquier contenedor
        dentro de otra aplicacion.
        
    Para ello, es necesario crear en la aplicacion donde
    será enbebido JAMediaLector, un socket:
        
    import JAMediaLector
    from JAMediaLector.JAMediaLector import JAMediaLector
        
        self.socket = Gtk.Socket()
        self.add(self.socket)
        self.jamedialector = JAMediaLector()
        socket.add_id(self.jamedialector.get_id()
        
    y luego proceder de la siguiente forma:
        
            GLib.idle_add(self.setup_init)
        
        def setup_init(self):
            self.jamedialector.setup_init()
            # self.jamediaplayer.pack_standar()
            # Esta última linea no debe ir cuando se embebe
            
    NOTA: Tambien se puede ejecutar JAMediaLector directamente
    mediante python JAMediaLector.py
    """

    __gsignals__ = {"salir": (GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, [])}

    def __init__(self):
        """
        JAMediaLector: Gtk.Plug para embeber en otra aplicación.
        """

        Gtk.Plug.__init__(self, 0L)

        self.toolbar_box = None

        self.toolbar = None
        self.toolbar_config = None
        self.toolballector = None
        self.toolbartray = None
        self.visor = None
        self.previewcontainer = None
        self.toolbarpaginas = None
        self.textview = None
        self.toolbar_salir = None

        self.controlespdf = None
        self.controlestexto = None
        self.controles_dinamicos = None

        self.documento = None
        self.npaginas = None
        self.indexpaginaactiva = None
        self.pagina = None

        self.show_all()

        self.connect("embedded", self.embed_event)

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

        ### Contenedor secundario para toda la interfaz.
        basebox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        ### Contenedor para todas las toolbars.
        self.toolbar_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        ### Panel para lector y barra de navegación de páginas.
        hpanel = Gtk.HPaned()

        self.toolbar = Toolbar()
        self.toolbar_salir = ToolbarSalir()
        self.toolbar_config = ToolbarConfig()

        self.toolbarlector = ToolbarLector()
        self.toolbartry = ToolbarTry()

        ### Empaquetado de las tres toolbars superiores de la aplicacion.
        self.toolbar_box.pack_start(self.toolbar, False, False, 0)
        self.toolbar_box.pack_start(self.toolbar_salir, False, False, 0)
        self.toolbar_box.pack_start(self.toolbar_config, False, False, 0)

        self.visor = DrawingLector()

        self.previewcontainer = PreviewContainer()
        self.toolbarpaginas = ToolbarPaginas()

        self.textview = TextView()

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

        scroll = Gtk.ScrolledWindow()

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

        scroll.add_with_viewport(self.visor)

        vbox.pack_start(self.toolbarlector, False, False, 0)
        vbox.pack_start(scroll, True, True, 0)

        self.controlespdf = [self.toolbarlector, scroll]

        scroll = Gtk.ScrolledWindow()

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

        scroll.add_with_viewport(self.textview)

        vbox.pack_start(scroll, True, True, 0)

        self.controlestexto = [scroll]

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

        ### Derecha
        self.derecha_vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        scroll = Gtk.ScrolledWindow()

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

        scroll.add_with_viewport(self.previewcontainer)

        self.derecha_vbox.pack_start(self.toolbarpaginas, False, False, 0)
        self.derecha_vbox.pack_start(scroll, True, True, 0)

        self.controlespdf.append(self.derecha_vbox)

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

        basebox.pack_start(self.toolbar_box, False, False, 0)
        basebox.pack_start(hpanel, True, True, 0)
        basebox.pack_start(self.toolbartry, False, False, 0)

        self.controles_dinamicos = [
            self.toolbar_box, self.derecha_vbox, self.toolbartry
        ]

        self.add(basebox)
        self.show_all()

        self.toolbar_salir.hide()
        self.toolbar.abrir.hide()  # Solo cuando no esta embebido
        self.toolbar_config.hide()

        self.toolbarlector.connect('original', self.visor.original)
        self.toolbarlector.connect('alejar', self.visor.alejar)
        self.toolbarlector.connect('acercar', self.visor.acercar)
        #self.toolbarlector.connect('rotar_izquierda', self.visor.acercar)
        #self.toolbarlector.connect('rotar_derecha', self.visor.acercar)

        self.toolbarpaginas.connect('activar', self.activar)

        self.previewcontainer.connect('nueva_seleccion', self.nueva_pagina)

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

        self.toolbar.connect('abrir', self.show_filechooser)
        self.toolbar.connect('config', self.mostrar_config)
        self.toolbar.connect('salir', self.confirmar_salir)
        self.toolbar_salir.connect('salir', self.emit_salir)

        map(self.ocultar, self.controlestexto)
        map(self.ocultar, self.controlespdf)

    def pack_standar(self):
        """
        Para empaquetar el botón abrir.
        """

        self.toolbar.abrir.show()

    def mostrar_config(self, widget):
        """
        Muestra u oculta las opciones de
        configuracion (toolbar_config).
        """

        map(self.ocultar, [self.toolbar_salir])

        if self.toolbar_config.get_visible():
            self.toolbar_config.hide()

        else:
            self.toolbar_config.show_all()

    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()
            screen = ventana.get_screen()
            w, h = ventana.get_size()
            ww, hh = (screen.get_width(), screen.get_height())

            if ww == w and hh == h:
                ventana.unfullscreen()

            else:
                ventana.fullscreen()

    def do_motion_notify_event(self, event):
        """
        Cuando se mueve el mouse sobre la ventana.
        """

        if self.toolbar_config.ocultar_controles:
            x, y = (int(event.x), int(event.y))
            rect = self.get_allocation()
            xx, yy, ww, hh = (rect.x, rect.y, rect.width, rect.height)

            arriba = range(0, self.toolbar_box.get_allocation().height)
            derecha = range(ww - self.derecha_vbox.get_allocation().width, ww)

            if y in arriba or x in derecha:
                map(self.mostrar, self.controles_dinamicos)

            else:
                map(self.ocultar, self.controles_dinamicos)
                #map(self.ocultar, [self.toolbar_config, self.toolbar_salir])

        else:
            map(self.mostrar, self.controles_dinamicos)

    def ocultar(self, objeto):
        """
        Esta funcion es llamada desde self.ocultar_controles()
        """

        if objeto.get_visible(): objeto.hide()

    def mostrar(self, objeto):
        """
        Esta funcion es llamada desde self.ocultar_controles()
        """

        if not objeto.get_visible(): objeto.show()

    def show_filechooser(self, widget):

        selector = Selector_de_Archivos(self)
        selector.connect('archivos-seleccionados', self.cargar_archivo)

    def cargar_archivo(self, widget, archivo):
        """
        Recibe un archivo desde el filechooser
        para abrir en el lector.
        """

        self.abrir(archivo)

    def limpiar(self):

        self.toolbartry.label.set_text("")
        self.documento = None
        self.previewcontainer.limpiar()
        self.load_pagina(None)
        self.textview.get_buffer().set_text("")
        map(self.ocultar, self.controlestexto)
        map(self.ocultar, self.controlespdf)

    def abrir(self, archivo):
        """
        Abre un Archivo.
        """

        descripcion = JAMF.describe_uri(archivo)
        if descripcion:
            if descripcion[2]:
                # Es un Archivo
                tipo = JAMF.describe_archivo(archivo)

                if 'pdf' in tipo:
                    self.toolbartry.label.set_text(archivo)
                    archivo = "file://%s" % (archivo)

                    map(self.ocultar, self.controlestexto)
                    map(self.mostrar, self.controlespdf)

                    self.documento = Poppler.Document.new_from_file(
                        archivo, None)
                    self.npaginas = self.documento.get_n_pages()
                    #thread = threading.Thread( target=self.llenar_preview )
                    #thread.start()
                    self.previewcontainer.llenar(self.documento)

                elif 'text' in tipo:
                    self.toolbartry.label.set_text(archivo)

                    map(self.ocultar, self.controlespdf)
                    map(self.mostrar, self.controlestexto)

                    arch = open(archivo, "r")
                    lineas = arch.readlines()
                    arch.close()

                    texto = ""
                    for linea in lineas:
                        texto += linea
                    self.textview.get_buffer().set_text(texto)

                else:
                    self.toolbartry.label.set_text("")
                    self.documento = None
                    self.previewcontainer.limpiar()
                    self.load_pagina(None)
                    self.textview.get_buffer().set_text("")

    #def llenar_preview(self):
    #    """ Thread para cargar las páginas en preview. """
    #    self.previewcontainer.llenar(self.documento)

    def nueva_pagina(self, widget, indice):
        """
        Cuando se selecciona una nueva pagina
        """

        self.load_pagina(indice)

    def load_pagina(self, indice):
        """
        Carga una página del Archivo pdf abierto actualmente.
        """

        if indice != None:
            self.indexpaginaactiva = indice
            self.pagina = self.documento.get_page(self.indexpaginaactiva)
            self.visor.set_pagina(self.pagina)
            self.toolbarpaginas.set_pagina(self.indexpaginaactiva + 1,
                                           self.npaginas)

        else:
            self.indexpaginaactiva = None
            self.pagina = None
            self.visor.set_pagina(None)
            self.toolbarpaginas.set_pagina(None, None)

    def activar(self, widget, senial):
        """
        Cuando se pasa de pagina.
        """

        if senial == 'atras':
            if self.indexpaginaactiva > 0:
                self.previewcontainer.seleccionar(self.indexpaginaactiva - 1)

            else:
                self.previewcontainer.seleccionar(self.npaginas - 1)

        elif senial == 'siguiente':
            if self.indexpaginaactiva < self.npaginas - 1:
                self.previewcontainer.seleccionar(self.indexpaginaactiva + 1)

            else:
                self.previewcontainer.seleccionar(0)

    def embed_event(self, widget):
        """
        No hace nada por ahora.
        """

        print "JAMediaLector => OK"

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

        map(self.ocultar, [self.toolbar_config])
        self.toolbar_salir.run("JAMediaLector")

    def emit_salir(self, widget=None, senial=None):
        """
        Emite salir para que cuando esta embebida, la
        aplicacion decida que hacer, si salir, o cerrar solo
        JAMediaLector.
        """

        self.emit('salir')