File: treeview2.tcl

package info (click to toggle)
blt 3.0~1%2B08570046%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 45,556 kB
  • sloc: ansic: 278,852; tcl: 96,434; sh: 3,410; makefile: 2,026; cpp: 374
file content (160 lines) | stat: -rw-r--r-- 4,160 bytes parent folder | download
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!../src/bltwish

set count 0
package require BLT

set spinner [image create picture]
set files [glob -nocomplain ./images/spinner*.png]
set i 0
$spinner sequence length [llength $files] 
foreach file [lsort -dictionary $files] {
    set img [image create picture -file $file]
    $spinner sequence put $i $img
    image delete $img 
    incr i
}

proc FormatType { w id value } {
    if { $value != "directory" } {
       $w entry configure $id -button no
    }
    return $value
}


proc FormatSize { id value } {
    if { $value < 1000 } {
	return $value
    } elseif { $value < 1e6 } {
	return [format "%.3g kB" [expr $value / 1.0e3]]
    } elseif { $value < 1e9 } {
	return [format "%.3g MB" [expr $value / 1.0e6]]
    } else {
	return [format "%.3g GB" [expr $value / 1.0e9]]
    }
}

proc FormatDate { id value } {
    set format "year %Y month %b wknum %U day %j min %M"
    set time [clock seconds]
    array set now [clock format $time -format $format]
    array set then [clock format $value -format $format]
    set now(day) [string trimleft $now(day) 0]
    set then(day) [string trimleft $then(day) 0]
    if { $now(year) != $then(year) } {
	return [clock format $value -format "%h %e, %Y"]
    } elseif { $now(day) >= ($then(day) + 7) } {
	return [clock format $value -format "%h %e %l:%M %p"]
    } elseif { $now(day) != $then(day) } {
	return [clock format $value -format "%a %h %d %l:%M %p"]
    } elseif { $now(day) == ($then(day) + 1) } {
	return [clock format $value -format "Yesterday %l:%M %p"]
    } elseif { $now(min) != $then(min) } {
	return [clock format $value -format "Today %l:%M %p"]
    } else {
	return [clock format $value -format "Today %l:%M:%S %p"]
    }
}

array set modes {
   0	---
   1    --x
   2    -w-
   3    -wx
   4    r-- 
   5    r-x
   6    rw-
   7    rwx
}

proc FormatPerms { id mode } {
    global modes
    set mode [format %o [expr $mode & 07777]]
    set owner $modes([string index $mode 0])
    set group $modes([string index $mode 1])
    set world $modes([string index $mode 2])
    return "${owner}${group}${world}"
}

proc Find { tree parent dir } {
    $tree dir $parent $dir 
    foreach node [$tree find $parent -key type -exact "directory"] {
	.ss.t entry configure $node -button yes 
    }
}

set top [file normalize ".."]
set trim "$top"

set tree [blt::tree create]    

proc OpenNode  { tree node parent top } {
    if { [file type $top/$parent] == "directory" } {
	global spinner 
	blt::busy hold .ss.t -opacity 50 
	update
	Find $tree $node $top/$parent
	update
	blt::busy release .ss.t
    }
}

proc CloseNode  { tree node } {
    eval $tree delete [$tree children $node]
}

blt::scrollset .ss \
    -window .ss.t \
    -xscrollbar .ss.xs \
    -yscrollbar .ss.ys 
blt::tk::scrollbar .ss.xs
blt::tk::scrollbar .ss.ys

blt::treeview .ss.t \
    -width 0 \
    -height 5i \
    -height 0 \
    -selectmode multiple \
    -separator / \
    -tree $tree \
    -opencommand [list OpenNode $tree %\# %P $top]  \
    -closecommand [list CloseNode $tree %\#]

blt::table . \
    0,0 .ss  -fill both 

set img [image create picture -data {
    R0lGODlhEAANAMIAAAAAAH9/f///////AL+/vwAA/wAAAAAAACH5BAEAAAUALAAAAAAQAA0A
    AAM1WBrM+rAEMigJ8c3Kb3OSII6kGABhp1JnaK1VGwjwKwtvHqNzzd263M3H4n2OH1QBwGw6
    nQkAOw==
}]
	 
.ss.t style textbox mode -font "{courier new} 9"
.ss.t column configure treeView -title "name"  -sorttype dictionary
.ss.t column insert end mtime -formatcommand FormatDate -justify right \
    -sorttype integer
.ss.t column insert end perms -formatcommand FormatPerms -justify right \
    -style mode -sorttype integer
.ss.t column insert end type -formatcommand [list FormatType .ss.t] \
    -justify center -sorttype ascii
.ss.t column insert end size -formatcommand FormatSize -justify right \
    -sorttype integer
focus .ss.t

puts "$count entries"

.ss.t style checkbox check \
    -onvalue 30 -offvalue "50" \
    -showvalue yes 

.ss.t style combobox combo -icon $img

#.ss.t column configure owner -style combo 
#.ss.t column configure group -style check
if 0 {
.ss.t sort configure -column type 
}
#.ss.t sort auto yes 

.ss.t entry configure 0 -font "Arial -12 italic"