Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgnacio 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)
commitdbdd554d59727102799a22b111c3cd1801662a9b (patch)
tree08005bc87428715185bccbfbd51417dc031582b9
parent471927a1ae63b7581f93e65bd4512c8125daad07 (diff)
Vista de lista.
-rw-r--r--ListView.py114
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()