Ejemplo n.º 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')
        
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
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')
Ejemplo n.º 5
0
    def setup_init(self):
        """Se crea la interfaz grafica, se setea todo y
        se empaqueta todo."""

        basebox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        hpanel = Gtk.HPaned()
        self.toolbar = Toolbar()
        self.toolbar_config = ToolbarConfig()
        self.toolbarlector = ToolbarLector()
        self.toolbartry = ToolbarTry()
        self.visor = Drawing()
        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
        ev_box = Gtk.EventBox()  # Para poder pintarlo
        ev_box.modify_bg(0, Gdk.Color(65000, 65000, 65000))
        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)
        vbox.pack_start(self.toolbarpaginas, False, False, 0)
        vbox.pack_start(scroll, True, True, 0)
        ev_box.add(vbox)

        self.controlespdf.append(ev_box)

        hpanel.pack2(ev_box, resize=False, shrink=False)

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

        self.controles_dinamicos = [
            self.toolbar, self.toolbarlector, ev_box, self.toolbartry
        ]

        self.add(basebox)
        self.show_all()

        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("ocultar_controles", self.ocultar_controles)
        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.emit_salir)

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