5 set recentFiles(limit) 10
6 set recentFiles(menu) 9
7 set recentFiles(extra) 9
8 set recentFiles(data) {}
12 namespace eval ::recentFiles {}
18 proc ::recentFiles::save {{reportError 0}} {
22 if {[
catch {open $filename w} f]} {
24 tk_messageBox -title "Scid" -type ok -icon warning \
25 -message "Unable to write file: $filename\n$f"
29 puts $f "# Scid $::scidVersion recent files list"
31 foreach i {limit menu extra data} {
32 puts $f "set recentFiles($i) [list [
set recentFiles($i)]]"
35 if {[
info exists ::recentSort]} {
36 puts $f "set ::recentSort [list $::recentSort]"
46 proc ::recentFiles::add {fname} {
49 if {$fname == "" } {
return}
51 set rlist $recentFiles(data)
56 set idx [lsearch -exact $rlist $fname]
57 if {$idx < 0} { break}
58 set rlist [
lreplace $rlist $idx $idx]
62 set rlist [
linsert $rlist 0 $fname]
65 if {[
llength $rlist] < $recentFiles(limit)} {
66 set rlist [
lrange $rlist 0 [
expr {$recentFiles(limit) - 1}]]
69 set recentFiles(data) $rlist
77 proc ::recentFiles::load {fname} {
79 if {[
file extension $rname] == ".si4"} {
80 set rname [
file rootname $rname]
86 proc ::recentFiles::treeshow {menu} {
88 set rlist $recentFiles(data)
90 set nfiles [
llength $rlist]
91 if {$nfiles > $recentFiles(limit)} {
set nfiles $recentFiles(limit)}
93 for {
set i 0} {$i<$nfiles} {
incr i} {
94 set name [
lindex $rlist $i]
95 $menu add command -label "$name" -command [list ::file::openBaseAsTree $name]
104 proc ::recentFiles::show {menu idx} {
106 set rlist $recentFiles(data)
107 set nfiles [
llength $rlist]
108 set nExtraFiles [
expr {$nfiles - $recentFiles(menu)}]
109 if {$nfiles > $recentFiles(menu)} {
set nfiles $recentFiles(menu)}
110 if {$nExtraFiles > $recentFiles(extra)} {
111 set nExtraFiles $recentFiles(extra)
113 if {$nExtraFiles < 0} {
set nExtraFiles 0}
117 for {
set i 0} {$i < $nfiles} {
incr i} {
118 set fname [
lindex $rlist $i]
120 set text [
file tail $fname]
121 set num [
expr {$i + 1}]
123 if {$num <= 9} {
set underline 0}
124 if {$num == 10} {
set underline 1}
125 $menu insert $idx command -label "$num: $mname" -underline $underline \
126 -command [list ::recentFiles::load $fname]
127 set ::helpMessage($menu,$idx) " [
file nativename $fname]"
132 if {$nExtraFiles <= 0} {
return $nfiles}
135 catch {
destroy $menu.recentFiles}
136 menu $menu.recentFiles
137 $menu insert $idx cascade -label "..." -underline 0 -menu $menu.recentFiles
139 for {
set extra 0} {$extra < $nExtraFiles} {
incr extra} {
140 set fname [
lindex $rlist $i]
143 set text [
file tail $fname]
144 set num [
expr {$extra + 1}]
146 if {$num <= 9} {
set underline 0}
147 if {$num == 10} {
set underline 1}
148 $menu.recentFiles add command -label "$num: $mname" -underline $underline \
149 -command [list ::recentFiles::load $fname]
150 set ::helpMessage($menu.recentFiles,$extra) " $fname"
152 return [
expr {$nfiles + 1}]
160 proc ::recentFiles::menuname {fname} {
162 set mname [
file nativename $mname]
163 if {[
file extension $mname] == [
sc_info suffix index]} {
164 set mname [
file rootname $mname]
166 if {[
string length $mname] < 25} {
return $mname}
169 set dir [
file dirname $fname]
171 set tail [
file join [
file tail $dir] $mname]
172 set dir [
file dirname $dir]
173 if {[
string length $tail] > 20} { break}
176 set mname [
file join .... $mname]
177 set mname [
file nativename $mname]
185 proc ::recentFiles::configure {} {
187 set recentFiles(temp_menu) $recentFiles(menu)
188 set recentFiles(temp_extra) $recentFiles(extra)
189 set w .recentFilesDlg
191 wm title $w "Scid: [
tr OptionsRecent]"
194 ttk::label $w.lmenu -text $::tr(RecentFilesMenu)
196 for {
set x 1} {$x <= 10} {
incr x} {
199 ttk::combobox $w.menu -textvariable recentFiles(temp_menu) -width 3 -values $tmpcombo -justify right -state readonly
200 ttk::label $w.lextra -text $::tr(RecentFilesExtra)
201 ttk::combobox $w.extra -textvariable recentFiles(temp_extra) -width 3 -values $tmpcombo -justify right -state readonly
202 pack $w.m $w.e -side top -anchor e
203 pack $w.lmenu $w.menu -side left -padx "0 5" -pady "0 5" -in $w.m -anchor e
204 pack $w.lextra $w.extra -side left -padx "0 5" -in $w.e -anchor e
205 pack [ttk::frame $w.b] -side bottom -fill x
206 ttk::button $w.b.ok -text "OK" -command {
207 set recentFiles(menu) $recentFiles(temp_menu)
208 set recentFiles(extra) $recentFiles(temp_extra)
209 catch {grab release .recentFilesDlg}
210 destroy .recentFilesDlg
213 ttk::button $w.b.cancel -text $::tr(Cancel) \
214 -command "catch {grab release $w}; destroy $w"