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