13 if {$unsavedCount == 0} {
14 append msg $::tr(ExitUnsaved)
18 set fname [
file tail [
sc_base filename $i]]
20 append msg " Base $i: $fname "
21 append msg "($::tr(game) $g)"
34 append msg $::tr(ExitDialog)
37 if {$unsavedCount > 0} {
38 set answer [
tk_messageBox -title "Scid: [
tr FileExit]" \
39 -message $msg -type yesno -icon question]
40 if {$answer != "yes"} {
return}
42 if {$::optionsAutoSave} {
57 { "Scid databases" {".si4"} }
58 { "PGN files" {".pgn" ".PGN"} }
61 set fName [
tk_getSaveFile \
62 -initialdir $::initialDir(base) \
64 -defaultextension ".si4" \
65 -title "Create a Scid database"]
67 if {$fName == ""} {
return}
68 set file_extension [
string tolower [
file extension $fName]]
69 if {$file_extension == ".si4"} {
71 set dbName [
file rootname $fName]
72 }
elseif {$file_extension == ".pgn"} {
76 if {[
catch {
sc_base create $dbType $dbName} baseId]} {
81 set ::initialDir(base) [
file dirname $fName]
92 proc ::file::Open {{fName ""}} {
95 set ::curr_db $::file::lastOpened
98 foreach {tagname tagvalue} [
sc_base extra $::curr_db] {
99 if {$tagname eq "autoload" && $tagvalue != 0} {
109 proc ::file::openBaseAsTree { { fName "" } } {
118 proc ::file::Open_ {{fName ""} } {
121 { "All Scid files" {".si4" ".si3" ".pgn" ".epd"} }
122 { "Scid databases, PGN files" {".si4" ".si3" ".pgn" ".PGN"} }
123 { "Scid databases" {".si4" ".si3"} }
124 { "PGN files" {".pgn" ".PGN"} }
125 { "EPD files" {".epd" ".EPD"} }
128 set fName [
tk_getOpenFile -initialdir $::initialDir(base) -filetypes $ftype -title "Open a Scid file"]
129 if {$fName == ""} {
return 2}
132 set ext [
string tolower [
file extension "$fName"]]
133 if {"$ext" == ".si4"} {
set fName [
file rootname "$fName"]}
134 if {[
sc_base slot $fName] != 0} {
135 tk_messageBox -title "Scid: opening file" -message "The database you selected is already opened."
140 if {"$ext" == ".si3"} {
142 }
elseif {"$ext" == ".pgn"} {
144 progressWindow "Scid" "$::tr(OpeningTheDatabase): $fName..." $::tr(Cancel)
145 set err [
catch {
sc_base open PGN "$fName"} ::file::lastOpened]
150 sc_base extra $::file::lastOpened type 3
151 set ::initialDir(base) [
file dirname "$fName"]
154 }
elseif {"$ext" == ".epd"} {
156 set err [
catch {
sc_base create MEMORY "$fName"} ::file::lastOpened]
161 sc_base extra $::file::lastOpened type 3
162 set ::initialDir(base) [
file dirname "$fName"]
165 }
elseif {"$ext" eq ".si4" || "$ext" eq ""} {
166 progressWindow "Scid" "$::tr(OpeningTheDatabase): [
file tail "$fName"]..." $::tr(Cancel)
167 set err [
catch {
sc_base open "$fName"} ::file::lastOpened]
170 if { $::errorCode == $::ERROR::NameDataLoss } {
set err 0}
173 set ::initialDir(base) [
file dirname "$fName"]
177 tk_messageBox -title "Scid: opening file" -message "Unsupported database format: $ext"
188 proc ::file::Upgrade {name} {
189 if {[
file readable "$name.si4"]} {
190 set msg [
string trim $::tr(ConfirmOpenNew)]
191 set res [
tk_messageBox -title "Scid" -type yesno -icon info -message $msg]
192 if {$res == "no"} {
return}
196 set msg [
string trim $::tr(ConfirmUpgrade)]
197 set res [
tk_messageBox -title "Scid" -type yesno -icon info -message $msg]
198 if {$res == "no"} {
return}
201 file copy "$name.sg3" "$name.sg4"
202 file copy "$name.sn3" "$name.sn4"
203 file copy "$name.si3" "$name.si4"}]
209 progressWindow "Scid" "$::tr(Opening): [
file tail $name]..." $::tr(Cancel)
210 set err [
catch {
sc_base open $name} ::file::lastOpened]
212 if {$::errorCode == $::ERROR::NameDataLoss} {
219 file delete "$name.sg4"
220 file delete "$name.sn4"
221 file delete "$name.si4"}
223 progressWindow "Scid" [
concat $::tr(CompactDatabase) "..."] $::tr(Cancel)
224 set err_compact [
catch {
sc_base compact $::file::lastOpened}]
234 proc ::file::Close {{base -1}} {
237 if {$base < 0} {
set base $current}
238 if {![
sc_base inUse $base]} {
return}
247 if {[
winfo exists .treeWin$base]} {
destroy .treeWin$base}
252 if { $current == $base } {
set current 9}
254 if {[
catch {
sc_base close $base}]} {
264 proc ::file::SwitchToBase {{b} {saveHistory 1}} {
265 if {![
catch {
sc_base switch $b} res]} {
268 if {[
winfo exists .emailWin]} {
destroy .emailWin}
275 proc ::file::autoLoadBases.load {} {
276 if {![
info exists ::autoLoadBases]} {
return}
277 foreach base $::autoLoadBases {
279 set idx [lsearch -exact $::autoLoadBases $base]
280 if {$idx != -1} {
set ::autoLoadBases [
lreplace $::autoLoadBases $idx $idx]}
285 proc ::file::autoLoadBases.save { {channelId} } {
286 if {![
info exists ::autoLoadBases]} {
return}
287 puts $channelId "set ::autoLoadBases [list $::autoLoadBases]"
289 proc ::file::autoLoadBases.find { {baseIdx} } {
290 if {![
info exists ::autoLoadBases]} {
return -1}
291 if {[
catch {
set base [
sc_base filename $baseIdx]}]} {
return -1}
292 return [lsearch -exact $::autoLoadBases $base]
294 proc ::file::autoLoadBases.add { {baseIdx} } {
295 if {[
catch {
set base [
sc_base filename $baseIdx]}]} {
return}
296 lappend ::autoLoadBases $base
298 proc ::file::autoLoadBases.remove { {baseIdx} } {
299 if {![
info exists ::autoLoadBases]} {
return}
300 if {[
catch {
set base [
sc_base filename $baseIdx]}]} {
return}
301 set idx [lsearch -exact $::autoLoadBases $base]
303 set ::autoLoadBases [
lreplace $::autoLoadBases $idx $idx]