Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/ListView.py
blob: 6600e887cac0b9cbd3a409d9e103a03e832964a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/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.set_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 set_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, ["Vacio",
                                  "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, ["Acceso Denegado",
                                      "Acceso Denegado"])
            if valor == "Vacio" or valor == "Acceso 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, ["Vacio",
                                                    "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, ["Vacio",
                                            "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, 0)
        if valor == "Vacio" or valor == "Acceso 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, ["Vacio",
                                "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()