コード例 #1
0
    def __init__(self, path):

        Gtk.EventBox.__init__(self)

        self.path = path  # Directorio

        base_box = Gtk.VBox()

        self.intervalo = False
        self.actualizador = False

        self.toolbar = ToolbarImagen(path)
        self.visor = Visor()
        self.toolbar_config = ToolbarConfig()
        self.toolbartry = ToolbarTry()

        ### En panel
        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.AUTOMATIC)
        scroll.add_with_viewport(self.visor)

        panel = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL)
        panel.pack1(scroll, resize=True, shrink=False)

        self.listaiconview = ListaIconView(None)

        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(
            Gtk.PolicyType.NEVER,
            Gtk.PolicyType.AUTOMATIC)
        scroll.add_with_viewport(self.listaiconview)

        panel.pack2(scroll, resize=False, shrink=False)
        ###

        base_box.pack_start(self.toolbar, False, False, 0)
        base_box.pack_start(self.toolbar_config, False, False, 0)
        base_box.pack_start(panel, True, True, 0)
        base_box.pack_end(self.toolbartry, False, False, 0)

        self.add(base_box)

        self.connect("realize", self.__rescale)
        self.show_all()

        self.toolbar.connect('switch_to', self.__emit_switch)
        self.toolbar.connect('activar', self.__set_accion)
        self.toolbar.connect('salir', self.__salir)
        self.toolbar_config.connect('run', self.__set_presentacion)
        self.visor.connect('changed', self.__set_change_image)
        self.visor.connect('info', self.__set_info)

        self.toolbar_config.hide()
        self.toolbar.set_modo("nochanged")
        self.toolbar.set_modo("edit")

        self.connect("motion-notify-event",
            self.__do_motion_notify_event)

        self.visor.add_events(
            Gdk.EventMask.BUTTON_PRESS_MASK |
            Gdk.EventMask.BUTTON_RELEASE_MASK
        )

        self.visor.connect("button_press_event", self.__clicks_en_pantalla)
        self.listaiconview.connect("selected", self.__show_imagen)
        self.listaiconview.connect("button-press-event",
            self.__click_derecho_en_lista)
コード例 #2
0
    def __init__(self, path):

        Gtk.EventBox.__init__(self)

        self.path = path  # Directorio

        base_box = Gtk.VBox()

        self.intervalo = False
        self.actualizador = False

        self.toolbar = ToolbarImagen(path)
        self.visor = Visor()
        self.toolbar_config = ToolbarConfig()
        self.toolbartry = ToolbarTry()

        ### En panel
        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
        scroll.add_with_viewport(self.visor)

        panel = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL)
        panel.pack1(scroll, resize=True, shrink=False)

        self.listaiconview = ListaIconView(None)

        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
        scroll.add_with_viewport(self.listaiconview)

        panel.pack2(scroll, resize=False, shrink=False)
        ###

        base_box.pack_start(self.toolbar, False, False, 0)
        base_box.pack_start(self.toolbar_config, False, False, 0)
        base_box.pack_start(panel, True, True, 0)
        base_box.pack_end(self.toolbartry, False, False, 0)

        self.add(base_box)

        self.connect("realize", self.__rescale)
        self.show_all()

        self.toolbar.connect('switch_to', self.__emit_switch)
        self.toolbar.connect('activar', self.__set_accion)
        self.toolbar.connect('salir', self.__salir)
        self.toolbar_config.connect('run', self.__set_presentacion)
        self.visor.connect('changed', self.__set_change_image)
        self.visor.connect('info', self.__set_info)

        self.toolbar_config.hide()
        self.toolbar.set_modo("nochanged")
        self.toolbar.set_modo("edit")

        self.connect("motion-notify-event", self.__do_motion_notify_event)

        self.visor.add_events(Gdk.EventMask.BUTTON_PRESS_MASK
                              | Gdk.EventMask.BUTTON_RELEASE_MASK)

        self.visor.connect("button_press_event", self.__clicks_en_pantalla)
        self.listaiconview.connect("selected", self.__show_imagen)
        self.listaiconview.connect("button-press-event",
                                   self.__click_derecho_en_lista)
コード例 #3
0
class VisorImagenes (Gtk.EventBox):

    __gtype_name__ = 'JAMediaImagenesVisorImagenes'

    __gsignals__ = {
    'salir': (GObject.SIGNAL_RUN_LAST,
        GObject.TYPE_NONE, []),
    'switch_to': (GObject.SIGNAL_RUN_LAST,
        GObject.TYPE_NONE, (GObject.TYPE_STRING,))}

    def __init__(self, path):

        Gtk.EventBox.__init__(self)

        self.path = path  # Directorio

        base_box = Gtk.VBox()

        self.intervalo = False
        self.actualizador = False

        self.toolbar = ToolbarImagen(path)
        self.visor = Visor()
        self.toolbar_config = ToolbarConfig()
        self.toolbartry = ToolbarTry()

        ### En panel
        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(
            Gtk.PolicyType.AUTOMATIC,
            Gtk.PolicyType.AUTOMATIC)
        scroll.add_with_viewport(self.visor)

        panel = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL)
        panel.pack1(scroll, resize=True, shrink=False)

        self.listaiconview = ListaIconView(None)

        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(
            Gtk.PolicyType.NEVER,
            Gtk.PolicyType.AUTOMATIC)
        scroll.add_with_viewport(self.listaiconview)

        panel.pack2(scroll, resize=False, shrink=False)
        ###

        base_box.pack_start(self.toolbar, False, False, 0)
        base_box.pack_start(self.toolbar_config, False, False, 0)
        base_box.pack_start(panel, True, True, 0)
        base_box.pack_end(self.toolbartry, False, False, 0)

        self.add(base_box)

        self.connect("realize", self.__rescale)
        self.show_all()

        self.toolbar.connect('switch_to', self.__emit_switch)
        self.toolbar.connect('activar', self.__set_accion)
        self.toolbar.connect('salir', self.__salir)
        self.toolbar_config.connect('run', self.__set_presentacion)
        self.visor.connect('changed', self.__set_change_image)
        self.visor.connect('info', self.__set_info)

        self.toolbar_config.hide()
        self.toolbar.set_modo("nochanged")
        self.toolbar.set_modo("edit")

        self.connect("motion-notify-event",
            self.__do_motion_notify_event)

        self.visor.add_events(
            Gdk.EventMask.BUTTON_PRESS_MASK |
            Gdk.EventMask.BUTTON_RELEASE_MASK
        )

        self.visor.connect("button_press_event", self.__clicks_en_pantalla)
        self.listaiconview.connect("selected", self.__show_imagen)
        self.listaiconview.connect("button-press-event",
            self.__click_derecho_en_lista)

    def __rescale(self, widget):

        #rect = self.get_toplevel().get_allocation()
        self.listaiconview.set_size_request(-1, -1)
        self.listaiconview.hide()

    def __clicks_en_pantalla(self, widget, event):

        pass
        # FIXME: El visor es fullscreen, pero esta funcionalidad puede ser
        # insteresante cuando la aplicación está embebida en otra.
        """
        if event.type.value_name == "GDK_2BUTTON_PRESS":

            self.get_toplevel().set_sensitive(False)

            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:
                GLib.idle_add(ventana.unfullscreen)

            else:
                GLib.idle_add(ventana.fullscreen)

            self.get_toplevel().set_sensitive(True)
        """

    def __click_derecho_en_lista(self, widget, event):
        """
        Esto es para abrir un menu de opciones cuando
        el usuario hace click derecho sobre un elemento en
        la lista de imágenes, permitiendo copiar, mover y
        borrar el archivo o simplemente quitarlo
        de la lista.
        """

        boton = event.button
        pos = (event.x, event.y)
        tiempo = event.time

        if boton == 1:
            return

        elif boton == 3:

            path = widget.get_path_at_pos(
                int(pos[0]), int(pos[1]))
            #iter = widget.get_model().get_iter(path)

            from Widgets import MenuList

            menu = MenuList(
                widget, boton, pos,
                tiempo, path, widget.get_model(),
                self.path)

            menu.connect('accion', self.__set_menu_accion)
            menu.popup(None, None, None, None, boton, tiempo)

        elif boton == 2:
            return

    def __set_menu_accion(self, widget, widget_item, accion, iter, file_path):

        if accion == "Quitar":
            widget_item.get_model().remove(iter)

        elif accion == "Borrar":
            from JAMediaObjects.JAMFileSystem import borrar
            widget_item.get_model().remove(iter)

            borrar(file_path)

        elif accion == "Copiar":
            from Globales import get_imagenes_directory
            from JAMediaObjects.JAMFileSystem import copiar

            copiar(file_path, get_imagenes_directory())

        elif accion == "Mover":
            from Globales import get_imagenes_directory
            from JAMediaObjects.JAMFileSystem import mover
            widget_item.get_model().remove(iter)

            mover(file_path, get_imagenes_directory())

    def __do_motion_notify_event(self, widget, event):
        """
        Cuando se mueve el mouse sobre la ventana se
        muestran u ocultan las toolbars.
        """

        if self.toolbar_config.get_visible():
            return

        rect = self.toolbar.get_allocation()
        arriba = range(0, rect.height)

        root_rect = self.get_toplevel().get_allocation()
        rect = self.toolbartry.get_allocation()
        abajo = range(root_rect.height - rect.height, root_rect.height)
        x, y = self.get_toplevel().get_pointer()

        rect = self.listaiconview.get_allocation()
        derecha = range(root_rect.width - rect.width, root_rect.width)

        if y in arriba or y in abajo or x in derecha:
            if not self.toolbar.get_visible():
                self.toolbar.show()

            if not self.toolbartry.get_visible():
                self.toolbartry.show()

            if not self.listaiconview.get_visible():
                self.listaiconview.show()

            return

        else:
            if self.toolbar.get_visible():
                self.toolbar.hide()

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

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

            return

    def __set_presentacion(self, widget=None, intervalo=False):
        """
        Lanza el modo diapositivas.
        """

        if self.actualizador:
            GLib.source_remove(self.actualizador)
            self.actualizador = False

        if intervalo:
            self.intervalo = intervalo
            self.toolbar.set_modo("player")

        self.toolbar.set_playing()
        self.actualizador = GLib.timeout_add(
            self.intervalo, self.__handle_presentacion)

    def __stop_presentacion(self):

        if self.actualizador:
            GLib.source_remove(self.actualizador)
            self.actualizador = False

        self.toolbar.set_paused()

    def __handle_presentacion(self):
        """
        Cuando está en modo Diapositivas.
        """

        self.listaiconview.seleccionar_siguiente()
        return True

    def __set_accion(self, widget, accion):

        self.get_toplevel().set_sensitive(False)

        if accion == "Configurar Presentación":

            self.__stop_presentacion()

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

            else:
                self.toolbar_config.show()

        elif accion == "Reproducir":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            if self.actualizador:
                self.__stop_presentacion()

            else:
                self.__set_presentacion()

        elif accion == "Anterior":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.__stop_presentacion()
            self.listaiconview.seleccionar_anterior()

        elif accion == "Siguiente":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.__stop_presentacion()
            self.listaiconview.seleccionar_siguiente()

        elif accion == "Detener":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.__stop_presentacion()

        elif accion == "Rotar Izquierda":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.rotar(-1)

        elif accion == "Rotar Derecha":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.rotar(1)

        elif accion == "Acercar":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.zoom(1)

        elif accion == "Alejar":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.zoom(-1)

        elif accion == "Centrar en Pantalla":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.center_image()

        elif accion == "Navegar Imágenes":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.__stop_presentacion()

            if self.toolbar.modo != "edit":
                self.toolbar.set_modo("edit")

            elif self.toolbar.modo == "edit":
                self.toolbar.set_modo("player")

        elif accion == "Guardar":
            self.visor.guardar()

        self.get_toplevel().set_sensitive(True)

    def __set_change_image(self, widget, valor):
        """
        Cuando el usuario rota la imagen, puede guardarla.
        """

        if valor:
            self.toolbar.set_modo("changed")

        else:
            self.toolbar.set_modo("nochanged")

    def __emit_switch(self, widget, path):

        self.__stop_presentacion()
        self.emit("switch_to", path)

    def __salir(self, widget):

        self.__stop_presentacion()
        self.emit("salir")

    def run(self):

        self.listaiconview.load_previews(self.path)

    def __show_imagen(self, widget, imagen):

        self.visor.load(imagen)

        '''
        while Gtk.events_pending():
            Gtk.main_iteration()
        '''
        self.queue_draw()

    def __set_info(self, widget, info):

        self.toolbartry.set_info(info)
コード例 #4
0
class VisorImagenes(Gtk.EventBox):

    __gtype_name__ = 'JAMediaImagenesVisorImagenes'

    __gsignals__ = {
        'salir': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, []),
        'switch_to':
        (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_STRING, ))
    }

    def __init__(self, path):

        Gtk.EventBox.__init__(self)

        self.path = path  # Directorio

        base_box = Gtk.VBox()

        self.intervalo = False
        self.actualizador = False

        self.toolbar = ToolbarImagen(path)
        self.visor = Visor()
        self.toolbar_config = ToolbarConfig()
        self.toolbartry = ToolbarTry()

        ### En panel
        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
        scroll.add_with_viewport(self.visor)

        panel = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL)
        panel.pack1(scroll, resize=True, shrink=False)

        self.listaiconview = ListaIconView(None)

        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
        scroll.add_with_viewport(self.listaiconview)

        panel.pack2(scroll, resize=False, shrink=False)
        ###

        base_box.pack_start(self.toolbar, False, False, 0)
        base_box.pack_start(self.toolbar_config, False, False, 0)
        base_box.pack_start(panel, True, True, 0)
        base_box.pack_end(self.toolbartry, False, False, 0)

        self.add(base_box)

        self.connect("realize", self.__rescale)
        self.show_all()

        self.toolbar.connect('switch_to', self.__emit_switch)
        self.toolbar.connect('activar', self.__set_accion)
        self.toolbar.connect('salir', self.__salir)
        self.toolbar_config.connect('run', self.__set_presentacion)
        self.visor.connect('changed', self.__set_change_image)
        self.visor.connect('info', self.__set_info)

        self.toolbar_config.hide()
        self.toolbar.set_modo("nochanged")
        self.toolbar.set_modo("edit")

        self.connect("motion-notify-event", self.__do_motion_notify_event)

        self.visor.add_events(Gdk.EventMask.BUTTON_PRESS_MASK
                              | Gdk.EventMask.BUTTON_RELEASE_MASK)

        self.visor.connect("button_press_event", self.__clicks_en_pantalla)
        self.listaiconview.connect("selected", self.__show_imagen)
        self.listaiconview.connect("button-press-event",
                                   self.__click_derecho_en_lista)

    def __rescale(self, widget):

        #rect = self.get_toplevel().get_allocation()
        self.listaiconview.set_size_request(-1, -1)
        self.listaiconview.hide()

    def __clicks_en_pantalla(self, widget, event):

        pass
        # FIXME: El visor es fullscreen, pero esta funcionalidad puede ser
        # insteresante cuando la aplicación está embebida en otra.
        """
        if event.type.value_name == "GDK_2BUTTON_PRESS":

            self.get_toplevel().set_sensitive(False)

            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:
                GLib.idle_add(ventana.unfullscreen)

            else:
                GLib.idle_add(ventana.fullscreen)

            self.get_toplevel().set_sensitive(True)
        """

    def __click_derecho_en_lista(self, widget, event):
        """
        Esto es para abrir un menu de opciones cuando
        el usuario hace click derecho sobre un elemento en
        la lista de imágenes, permitiendo copiar, mover y
        borrar el archivo o simplemente quitarlo
        de la lista.
        """

        boton = event.button
        pos = (event.x, event.y)
        tiempo = event.time

        if boton == 1:
            return

        elif boton == 3:

            path = widget.get_path_at_pos(int(pos[0]), int(pos[1]))
            #iter = widget.get_model().get_iter(path)

            from Widgets import MenuList

            menu = MenuList(widget, boton, pos, tiempo, path,
                            widget.get_model(), self.path)

            menu.connect('accion', self.__set_menu_accion)
            menu.popup(None, None, None, None, boton, tiempo)

        elif boton == 2:
            return

    def __set_menu_accion(self, widget, widget_item, accion, iter, file_path):

        if accion == "Quitar":
            widget_item.get_model().remove(iter)

        elif accion == "Borrar":
            from JAMediaObjects.JAMFileSystem import borrar
            widget_item.get_model().remove(iter)

            borrar(file_path)

        elif accion == "Copiar":
            from Globales import get_imagenes_directory
            from JAMediaObjects.JAMFileSystem import copiar

            copiar(file_path, get_imagenes_directory())

        elif accion == "Mover":
            from Globales import get_imagenes_directory
            from JAMediaObjects.JAMFileSystem import mover
            widget_item.get_model().remove(iter)

            mover(file_path, get_imagenes_directory())

    def __do_motion_notify_event(self, widget, event):
        """
        Cuando se mueve el mouse sobre la ventana se
        muestran u ocultan las toolbars.
        """

        if self.toolbar_config.get_visible():
            return

        rect = self.toolbar.get_allocation()
        arriba = range(0, rect.height)

        root_rect = self.get_toplevel().get_allocation()
        rect = self.toolbartry.get_allocation()
        abajo = range(root_rect.height - rect.height, root_rect.height)
        x, y = self.get_toplevel().get_pointer()

        rect = self.listaiconview.get_allocation()
        derecha = range(root_rect.width - rect.width, root_rect.width)

        if y in arriba or y in abajo or x in derecha:
            if not self.toolbar.get_visible():
                self.toolbar.show()

            if not self.toolbartry.get_visible():
                self.toolbartry.show()

            if not self.listaiconview.get_visible():
                self.listaiconview.show()

            return

        else:
            if self.toolbar.get_visible():
                self.toolbar.hide()

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

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

            return

    def __set_presentacion(self, widget=None, intervalo=False):
        """
        Lanza el modo diapositivas.
        """

        if self.actualizador:
            GLib.source_remove(self.actualizador)
            self.actualizador = False

        if intervalo:
            self.intervalo = intervalo
            self.toolbar.set_modo("player")

        self.toolbar.set_playing()
        self.actualizador = GLib.timeout_add(self.intervalo,
                                             self.__handle_presentacion)

    def __stop_presentacion(self):

        if self.actualizador:
            GLib.source_remove(self.actualizador)
            self.actualizador = False

        self.toolbar.set_paused()

    def __handle_presentacion(self):
        """
        Cuando está en modo Diapositivas.
        """

        self.listaiconview.seleccionar_siguiente()
        return True

    def __set_accion(self, widget, accion):

        self.get_toplevel().set_sensitive(False)

        if accion == "Configurar Presentación":

            self.__stop_presentacion()

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

            else:
                self.toolbar_config.show()

        elif accion == "Reproducir":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            if self.actualizador:
                self.__stop_presentacion()

            else:
                self.__set_presentacion()

        elif accion == "Anterior":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.__stop_presentacion()
            self.listaiconview.seleccionar_anterior()

        elif accion == "Siguiente":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.__stop_presentacion()
            self.listaiconview.seleccionar_siguiente()

        elif accion == "Detener":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.__stop_presentacion()

        elif accion == "Rotar Izquierda":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.rotar(-1)

        elif accion == "Rotar Derecha":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.rotar(1)

        elif accion == "Acercar":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.zoom(1)

        elif accion == "Alejar":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.zoom(-1)

        elif accion == "Centrar en Pantalla":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.visor.center_image()

        elif accion == "Navegar Imágenes":
            if self.toolbar_config.get_visible():
                self.toolbar_config.hide()

            self.__stop_presentacion()

            if self.toolbar.modo != "edit":
                self.toolbar.set_modo("edit")

            elif self.toolbar.modo == "edit":
                self.toolbar.set_modo("player")

        elif accion == "Guardar":
            self.visor.guardar()

        self.get_toplevel().set_sensitive(True)

    def __set_change_image(self, widget, valor):
        """
        Cuando el usuario rota la imagen, puede guardarla.
        """

        if valor:
            self.toolbar.set_modo("changed")

        else:
            self.toolbar.set_modo("nochanged")

    def __emit_switch(self, widget, path):

        self.__stop_presentacion()
        self.emit("switch_to", path)

    def __salir(self, widget):

        self.__stop_presentacion()
        self.emit("salir")

    def run(self):

        self.listaiconview.load_previews(self.path)

    def __show_imagen(self, widget, imagen):

        self.visor.load(imagen)
        '''
        while Gtk.events_pending():
            Gtk.main_iteration()
        '''
        self.queue_draw()

    def __set_info(self, widget, info):

        self.toolbartry.set_info(info)