diff options
author | Ignacio Rodríguez <ignaciorodriguez@sugarlabs.org> | 2013-05-05 21:06:05 (GMT) |
---|---|---|
committer | Ignacio Rodríguez <ignaciorodriguez@sugarlabs.org> | 2013-05-05 21:06:05 (GMT) |
commit | dbdd554d59727102799a22b111c3cd1801662a9b (patch) | |
tree | 08005bc87428715185bccbfbd51417dc031582b9 | |
parent | 471927a1ae63b7581f93e65bd4512c8125daad07 (diff) |
Vista de lista.
-rw-r--r-- | ListView.py | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/ListView.py b/ListView.py new file mode 100644 index 0000000..426a353 --- /dev/null +++ b/ListView.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# ListView.py +# Cristian García <cristian99garcia@gmail.com> +# Ignacio Rodríguez <nachoel01@gmail.com> + +from gi.repository import Gtk +import Globales as G +import os + +class ListView(Gtk.TreeView): + + def __init__(self): + super(ListView, self).__init__() + + self.modelo = Gtk.TreeStore(str, str) + + self.set_model(self.modelo) + + self.__construir_columnas() + self.__setear_path("/") + + self.connect("row-expanded", self.__expandir) + self.connect("row-collapsed", self.__colapsar) + + self.show_all() + + def __construir_columnas(self): + render1 = Gtk.CellRendererText() + render2 = Gtk.CellRendererText() + + columna1 = Gtk.TreeViewColumn('Archivo', render1, text=0) + columna2 = Gtk.TreeViewColumn('Direccion', render2, text=1) + + columna2.set_property('visible', False) + + self.append_column(columna1) + self.append_column(columna2) + + def __setear_path(self, path): + self.modelo.clear() + dir = os.path.basename(path) + iter = self.modelo.append(self.modelo.get_iter_first(), + [dir, + path]) + self.modelo.append(iter, ["Directorio", "Directorio"]) + + def __expandir(self, widget, iter, path): + direccion = self.modelo.get_value(iter, 1) + principal = self.modelo.iter_children(iter) + + try: + archivos = os.listdir(direccion) + except OSError: + valor = self.modelo.get_value(principal, 0) + self.modelo.append(iter, ["Denegado", + "Denegado"]) + if valor == "Directorio" or valor == "Denegado": + self.modelo.remove(principal) + return + + archivos.sort() + if len(archivos) == 0: + return + + ultimos = [] + directorios_ultimos = [] + + for archivo in archivos: + nuevo_path = os.path.join(direccion, archivo) + if os.path.isdir(nuevo_path): + if archivo.startswith("."): + directorios_ultimos.append([archivo, + nuevo_path]) + else: + iter_nuevo = self.modelo.append(iter, [archivo, + nuevo_path]) + self.modelo.append(iter_nuevo, ["Directorio", + "Directorio"]) + else: + ultimos.append(archivo) + + for directorio in directorios_ultimos: + iter_nuevo = self.modelo.append(iter, [directorio[0], + directorio[1]]) + self.modelo.append(iter_nuevo, ["Directorio", + "Directorio"]) + for archivo in ultimos: + nuevo_path = os.path.join(direccion, archivo) + self.modelo.append(iter, [archivo, + nuevo_path]) + + valor = self.modelo.get_value(principal, 1) + if valor == "Directorio" or valor == "Denegado": + self.modelo.remove(principal) + + + def __colapsar(self, treeview, iter, path): + + while self.modelo.iter_n_children(iter): + self.modelo.remove(self.modelo.iter_children(iter)) + + self.modelo.append(iter, ["Directorio", "Directorio"]) + +if __name__ == "__main__": + Scroll = Gtk.ScrolledWindow() + Scroll.add_with_viewport(ListView()) + Scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + + Ventana = Gtk.Window() + Ventana.connect("delete-event", lambda x, i: exit()) + Ventana.add(Scroll) + Ventana.show_all() + Gtk.main() |