File: treeview1.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 (156 lines) | stat: -rw-r--r-- 4,406 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
#!../src/bltwish

package require BLT

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"]
    }
}

proc FormatMode { id mode } {
    array set modes {
	0	---
	1    --x
	2    -w-
	3    -wx
	4    r-- 
	5    r-x
	6    rw-
	7    rwx
    }
   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 } {
    global count 

    $tree dir $parent $dir -fields "atime ctime gid uid type size mtime mode"
    incr count [$tree degree $parent]
    foreach node [$tree children $parent] {
	set name [$tree label $node]
	if { [$tree get $node "type"] == "directory" } {
	    Find $tree $node [file join $dir $name]
	}
    }
}

button .b -font { Helvetica 11 bold }
#set top [file normalize ..]
set top [file normalize "$env(HOME)"]
set top [file normalize $blt_library/..]
set trim "$top"

set tree [blt::tree create]    

set view .ss.t 

blt::scrollset .ss \
    -window $view \
    -xscrollbar .ss.x \
    -yscrollbar .ss.y 
blt::tk::scrollbar .ss.x
blt::tk::scrollbar .ss.y

blt::treeview $view \
    -width 0 \
    -height 4i \
    -selectmode multiple \
    -separator / \
    -tree $tree  -font "Arial 9"

$view column configure treeView -title "name" -edit yes \
    -sorttype dictionary 
$view column insert 0 mtime -sorttype integer -formatcommand FormatDate 
$view column insert 0 atime -sorttype integer -formatcommand FormatDate
$view column insert 0 gid -sorttype integer
$view column insert end mode -sorttype integer -formatcommand FormatMode 
$view column insert end type -sorttype dictionary
$view column insert end ctime -sorttype integer -formatcommand FormatDate
$view column insert end uid -sorttype integer 
$view column insert end size -sorttype integer -formatcommand FormatSize \
    -justify right

$view sort configure -columns treeView 
focus $view

$view column configure all \
    -titleborderwidth 1 -borderwidth 1 -relief sunken -titlefont "Arial 10"

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

set count 0
Find $tree root $top
puts "$count entries"
$tree set all uid 123456789
$view style checkbox check \
    -onvalue "file" -offvalue "directory" \
    -showvalue yes

$view style create combobox combo \
    -menu $view.menu \
    -textvariable textVar \
    -iconvariable iconVar
blt::combomenu $view.menu  \
    -restrictwidth min \
    -textvariable textVar \
    -iconvariable iconVar \
    -yscrollbar $view.menu.ybar \
    -xscrollbar $view.menu.xbar 
blt::tk::scrollbar $view.menu.xbar 
blt::tk::scrollbar $view.menu.ybar

$view.menu add -text directory -value directory
$view.menu add -text file -value file

$view column configure type -style combo

$view style create textbox textbox \
    -editor $view.editor -edit yes -fg red
blt::comboeditor $view.editor  \
    -height { 0 2i }  \
    -yscrollbar $view.editor.ybar \
    -xscrollbar $view.editor.xbar
blt::tk::scrollbar $view.editor.xbar 
blt::tk::scrollbar $view.editor.ybar
$view column configure ctime -style textbox 
$view column configure treeView -style textbox 

wm protocol . WM_DELETE_WINDOW { destroy . }

bind $view <Enter> { focus %W }
$view open root -recurse -depth 0