diff options
author | flavio <fdanesse@gmail.com> | 2013-04-28 16:37:13 (GMT) |
---|---|---|
committer | flavio <fdanesse@gmail.com> | 2013-04-28 16:37:13 (GMT) |
commit | 8866af919c781b80e7ddc076c285d363f9849f5d (patch) | |
tree | a99952fa28774e9244bb47aaa7ae604a98afa0ba | |
parent | 632fd146c57e0315d8f147f69f1511cea2af3f2e (diff) |
Correcciones en Estructura_Proyecto
-rw-r--r-- | InfoNotebook.py | 186 |
1 files changed, 119 insertions, 67 deletions
diff --git a/InfoNotebook.py b/InfoNotebook.py index dfbd8c1..6c21c37 100644 --- a/InfoNotebook.py +++ b/InfoNotebook.py @@ -20,10 +20,12 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +import os + import gi from gi.repository import Gtk +from gi.repository import Gdk from gi.repository import GObject -import os class InfoNotebook(Gtk.Notebook): """ @@ -60,6 +62,14 @@ class InfoNotebook(Gtk.Notebook): self.show_all() + def set_path_estructura(self, path): + """ + Setea estructura de directorios y + archivos del proyecto según path. + """ + + self.estructura_proyecto.set_path_estructura(path) + class Introspeccion(Gtk.TreeView): """ TreeView para la Introspección @@ -80,87 +90,129 @@ class Estructura_Proyecto(Gtk.TreeView): def __init__(self): Gtk.TreeView.__init__(self, - Gtk.TreeStore(GObject.TYPE_STRING, GObject.TYPE_STRING)) + Gtk.TreeStore( + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING)) + + self.set_property("enable-grid-lines", True) + self.set_property("rules-hint", True) + self.set_property("enable-tree-lines", True) - self.modelo = self.get_model() + self.add_events( + Gdk.EventMask.BUTTON_PRESS_MASK | + Gdk.EventMask.KEY_PRESS_MASK | + Gdk.EventMask.TOUCH_MASK) + self.__set_columnas() - + self.show_all() - + def set_path_estructura(self, path): """ - Construye la estructura de el proyecto + Carga la estructura de directorios y + archivos del proyecto. """ - - self.modelo.append(self.modelo.get_iter_first(), [path, path]) - self.modelo.append(self.modelo.get_iter_first(), ["(Vacio)", "(Vacio)"]) + + self.get_model().clear() + + if not path: return + + iter = self.get_model().get_iter_first() + + self.get_model().append( + iter, [Gtk.STOCK_DIRECTORY, + os.path.basename(path), path]) + + estructura = [] + estructura.append((path, None)) + + GObject.idle_add(self.__load_estructura, estructura) def __set_columnas(self): """ - Crea y agrega las columnas al TreeView + Crea y agrega las columnas al TreeView. """ - columna = Gtk.TreeViewColumn() + render = Gtk.CellRendererPixbuf() + columna = Gtk.TreeViewColumn('pixbuf', render, stock_id=0) + columna.set_property('resizable', False) + columna.set_property('visible', True) + columna.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + columna.pack_start(render, True) + self.append_column(columna) + render = Gtk.CellRendererText() - - direccion = Gtk.TreeViewColumn() - render2 = Gtk.CellRendererText() - + columna = Gtk.TreeViewColumn('text', render, text=1) + columna.set_property('resizable', False) + columna.set_property('visible', True) + columna.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + columna.pack_start(render, True) + self.append_column(columna) + + render = Gtk.CellRendererText() + columna = Gtk.TreeViewColumn('text', render, text=2) + columna.set_property('resizable', False) + columna.set_property('visible', False) + columna.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) columna.pack_start(render, True) - columna.add_attribute(render, 'text', 0) - - direccion.pack_start(render2, True) - direccion.add_attribute(render2, 'text', 1) - direccion.set_property("visible", False) - self.append_column(columna) - self.append_column(direccion) - - self.set_property("rules-hint", True) - self.set_property("enable-tree-lines", True) - self.connect("row-expanded", self.__get_archivos_directorio) - self.connect("row-collapsed", self.__limpiar_fila) - def __get_archivos_directorio(self, treeview, iter, path): + def __load_estructura(self, estructura): """ - Se ejecuta cuando se expande la columna, obtiene los archivos del directorio. + Función Recursiva que agrega directorios y + archivos al modelo, según "estructura". + + estructura es: + una lista de tuplas que contienen: + (directorio, path en el modelo donde debe agregarse). """ - - direccion = self.modelo.get_value(iter, 1) - principal = self.modelo.iter_children(iter) - - archivos = os.listdir(direccion) - archivos.sort() - - if len(archivos) == 0: + + if not estructura: + self.expand_all() return - - ultimos = [] - for archivo in archivos: - if archivo == "proyecto.json": - return - nuevo_path = os.path.join(direccion, archivo) - - if os.path.isdir(nuevo_path): - iter_nuevo = self.modelo.append(iter, [archivo, nuevo_path]) - self.modelo.append(iter_nuevo, ["(Vacio)", "(Vacio)"]) - else: - ultimos.append(archivo) - - for archivo in ultimos: - nuevo_path = os.path.join(direccion, archivo) - self.modelo.append(iter, [archivo, nuevo_path]) - - if self.modelo.get_value(principal, 0) == "(Vacio)" : - self.modelo.remove(principal) - - - def __limpiar_fila(self, treeview, iter, path): - """ - Limpia la fila y agrega un iter para poder expandir la misma luego - """ - - while self.modelo.iter_n_children(iter): - self.modelo.remove(self.modelo.iter_children(iter)) - - self.modelo.append(iter, ["(Vacio)", "(Vacio)"]) + + item = estructura[0] + directorio, path = item + estructura.remove(item) + + ### Establecer el iter donde debe agregarse el item + if path: + iter = self.get_model().get_iter(path) + + else: + iter = self.get_model().get_iter_first() + + ### Leer archivos y directorios en este nivel + archivos = [] + + for archivo in os.listdir(os.path.join(directorio)): + + if "proyecto.json" in archivo: continue + + direccion = os.path.join(directorio, archivo) + + ### Si es un directorio, se agrega y se guarda + ### en una lista para hacer recurrencia sobre esta función. + if os.path.isdir(direccion): + iteractual = self.get_model().append( + iter, [Gtk.STOCK_DIRECTORY, archivo, direccion]) + + ### Para Recursividad. + estructura.append( + (direccion, + self.get_model().get_path(iteractual)) ) + + ### Si es un archivo. + elif os.path.isfile(direccion): + archivos.append(direccion) + + ### Agregar todos los archivos en este nivel. + for x in archivos: + archivo = os.path.basename(x) + + self.get_model().append( + iter,[Gtk.STOCK_FILE, archivo, x]) + + ### Recursividad en la función. + self.__load_estructura(estructura) |