Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorflavio <fdanesse@gmail.com>2013-04-28 16:37:13 (GMT)
committer flavio <fdanesse@gmail.com>2013-04-28 16:37:13 (GMT)
commit8866af919c781b80e7ddc076c285d363f9849f5d (patch)
treea99952fa28774e9244bb47aaa7ae604a98afa0ba
parent632fd146c57e0315d8f147f69f1511cea2af3f2e (diff)
Correcciones en Estructura_Proyecto
-rw-r--r--InfoNotebook.py186
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)