Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Garcia <cristian99garcia@gmail.com>2013-05-14 09:31:52 (GMT)
committer Cristian Garcia <cristian99garcia@gmail.com>2013-05-14 09:31:52 (GMT)
commit2b85bd641ccfbd801835541633188b0a6e63a83d (patch)
tree261d4d0ef5e9a4eacb853e9090ecb75ab9acc443
parentec068c67c694c773b8bfce70a31585eecab7f310 (diff)
Ahora podemos navegar desde la vista de iconosHEADmaster
-rw-r--r--IconView.py136
1 files changed, 106 insertions, 30 deletions
diff --git a/IconView.py b/IconView.py
index 97064c9..ccd02f7 100644
--- a/IconView.py
+++ b/IconView.py
@@ -19,53 +19,129 @@ class IconView(Gtk.IconView):
Gtk.IconView.__init__(self)
self.modelo = Gtk.ListStore(str, GdkPixbuf.Pixbuf, str)
+ self.direccion = G.USUARIO
self.set_model(self.modelo)
self.set_text_column(0)
self.set_pixbuf_column(1)
- self.__actualizar(G.USUARIO)
+ self.__actualizar(self.direccion)
+
+ self.connect('button-press-event', self.__click)
+ self.connect('key-press-event', self.__tecla_presionada)
def __actualizar(self, path):
- archivos = []
- carpetas = []
+ if os.path.isdir(path) or os.path.ismount(path):
+
+ self.direccion = path
+
+ archivos = []
+ carpetas = []
+
+ self.modelo.clear()
+ tema = Gtk.IconTheme.get_default()
+
+ contenido = os.listdir(path)
+ contenido.sort()
+ for archivo in contenido:
+ direccion = os.path.join(path, archivo)
+
+ if os.path.isfile(direccion):
+ archivos.append(archivo)
+
+ else:
+ carpetas.append(archivo)
+
+ carpetas.sort()
+ archivos.sort()
+
+ for carpeta in carpetas:
+ direccion = os.path.join(path, carpeta)
+
+ icono = tema.lookup_icon(Gtk.STOCK_DIRECTORY,
+ 256,
+ Gtk.IconLookupFlags.FORCE_SVG).get_filename()
+
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(icono, 55, 55)
+ self.modelo.insert(-1, [carpeta, pixbuf, direccion])
+
+ for archivo in archivos:
+ direccion = os.path.join(path, archivo)
+
+ icono = tema.lookup_icon(Gtk.STOCK_FILE,
+ 256,
+ Gtk.IconLookupFlags.FORCE_SVG).get_filename()
+
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(icono, 55, 55)
+ self.modelo.insert(-1, [archivo, pixbuf, direccion])
+
+ def __click(self, widget, event):
+ """Reacciona cuando se le hace clic, obteniendo con
+ que botón se le hizo clic y que debe hacer después"""
+
+ boton = event.button
+ posx = event.x
+ posy = event.y
+ tiempo = event.time
+
+ try:
+ path = widget.get_path_at_pos(int(posx), int(posy))
+
+ direccion = self.direccion
+ if list(direccion)[-1] != '/':
+ direccion += '/'
+
+ iter = self.modelo.get_iter(path)
+ direccion += self.modelo.get_value(iter, 0)
+
+ if event.type.value_name == "GDK_2BUTTON_PRESS" and boton == 1:
+ self.__actualizar(direccion)
+
+ except TypeError:
+
+ # Solo sucede cuando se le hace clic fuera de un iter,
+ # por eso lo dejo pasar
+
+ pass
+
+ def __tecla_presionada(self, widget, event):
+ tecla = event.keyval
+
+ direccion = self.direccion
- self.modelo.clear()
- tema = Gtk.IconTheme.get_default()
+ if direccion[-1] != '/':
+ direccion += '/'
- contenido = os.listdir(path)
- contenido.sort()
- for archivo in contenido:
- direccion = os.path.join(path, archivo)
+ if self.get_selected_items() and self.has_focus():
- if os.path.isfile(direccion):
- archivos.append(archivo)
-
- else:
- carpetas.append(archivo)
+ path = self.get_selected_items()[0]
+ iter = self.modelo.get_iter(path)
+ direccion += self.modelo.get_value(iter, 0)
- carpetas.sort()
- archivos.sort()
+ if tecla == 65288:
+ self.abrir_arriba()
- for carpeta in carpetas:
- direccion = os.path.join(path, carpeta)
+ elif tecla == 65293:
+ self.__actualizar(direccion)
- icono = tema.lookup_icon(Gtk.STOCK_DIRECTORY,
- 256,
- Gtk.IconLookupFlags.FORCE_SVG).get_filename()
+ def abrir_arriba(self, *args):
+
+ lista = self.direccion.split('/')
- pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(icono, 55, 55)
- self.modelo.insert(-1, [carpeta, pixbuf, direccion])
+ try:
+ self.direccion = '/'
+ numero = len(lista) - 1
+ while not bool(lista[numero]):
+ numero -= 1
- for archivo in archivos:
- direccion = os.path.join(path, archivo)
+ for directorio in lista[:numero]:
+ if directorio:
+ self.direccion = self.direccion + directorio + '/'
- icono = tema.lookup_icon(Gtk.STOCK_FILE,
- 256,
- Gtk.IconLookupFlags.FORCE_SVG).get_filename()
+ except IndexError:
+ self.direccion = '/'
- pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(icono, 55, 55)
- self.modelo.insert(-1, [archivo, pixbuf, direccion])
+ self.__actualizar(self.direccion)
if __name__ == "__main__":
Scroll = Gtk.ScrolledWindow()