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 __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)
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)
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)