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 161 162 163 164 165 166 167 168 169 170
|
####################
# Game Browser window
namespace eval ::gbrowser {}
proc ::gbrowser::new {base gnum {ply -1}} {
if {! [info exists ::gbrowser::size] } { set ::gbrowser::size 65 }
options.save ::gbrowser::size
set n 0
while {[winfo exists .gb$n]} { incr n }
set w .gb$n
toplevel $w
if {$base < 1} { set base [sc_base current] }
if {$gnum < 1} { set game [sc_game number] }
set filename [file tail [sc_base filename $base]]
wm title $w "Scid: $::tr(BrowseGame) ($filename: $gnum)"
set header [sc_game summary -base $base -game $gnum header]
set ::gbrowser::boards($n) [sc_game summary -base $base -game $gnum boards]
set moves [sc_game summary -base $base -game $gnum moves]
pack [frame $w.b] -side bottom -fill x
::board::new $w.bd $::gbrowser::size
$w.bd configure -relief solid -borderwidth 1
pack $w.bd -side left -padx 4 -pady 4
#pack [frame $w.t] -side right -fill both -expand yes
#text $w.t.text -foreground black -background white -wrap word \
# -width 45 -height 12 -font font_Small -yscrollcommand "$w.t.ybar set" \
# -setgrid 1
#scrollbar $w.t.ybar -command "$w.t.text yview" -takefocus 0
#pack $w.t.ybar -side right -fill y
#pack $w.t.text -side left -fill both -expand yes
autoscrollframe $w.t text $w.t.text \
-foreground black -background white -wrap word \
-width 45 -height 12 -font font_Small -setgrid 1
pack $w.t -side right -fill both -expand yes
set t $w.t.text
event generate $t <ButtonRelease-1>
$t tag configure header -foreground darkBlue
$t tag configure next -foreground yellow -background darkBlue
$t insert end "$header" header
$t insert end "\n\n"
set m 0
foreach i $moves {
set moveTag m$m
$t insert end [::trans $i] $moveTag
$t insert end " "
$t tag bind $moveTag <ButtonRelease-1> "::gbrowser::update $n $m"
$t tag bind $moveTag <Any-Enter> \
"$t tag configure $moveTag -foreground red
$t configure -cursor hand2"
$t tag bind $moveTag <Any-Leave> \
"$t tag configure $moveTag -foreground {}
$t configure -cursor {}"
incr m
}
bind $w <F1> {helpWindow GameList Browsing}
bind $w <Escape> "destroy $w"
bind $w <Home> "::gbrowser::update $n start"
bind $w <End> "::gbrowser::update $n end"
bind $w <Left> "::gbrowser::update $n -1"
bind $w <Right> "::gbrowser::update $n +1"
bind $w <Up> "::gbrowser::update $n -10"
bind $w <Down> "::gbrowser::update $n +10"
bind $w <minus> {set ::gbrowser::size [::board::resize2 %W.bd -1]}
bind $w <Control-Shift-Left> {set ::gbrowser::size [::board::resize2 %W.bd -1]}
bind $w <Control-Button-4> {set ::gbrowser::size [::board::resize2 %W.bd -1]}
bind $w <plus> {set ::gbrowser::size [::board::resize2 %W.bd +1]}
bind $w <Control-Shift-Right> {set ::gbrowser::size [::board::resize2 %W.bd +1]}
bind $w <Control-Button-5> {set ::gbrowser::size [::board::resize2 %W.bd +1]}
bind $w <Button-4> "::gbrowser::update $n -1"
bind $w <Button-5> "::gbrowser::update $n +1"
button $w.b.start -image tb_start -command "::gbrowser::update $n start"
button $w.b.back -image tb_prev -command "::gbrowser::update $n -1"
button $w.b.forward -image tb_next -command "::gbrowser::update $n +1"
button $w.b.end -image tb_end -command "::gbrowser::update $n end"
frame $w.b.gap -width 3
button $w.b.autoplay -image autoplay_off -command "::gbrowser::autoplay $n"
frame $w.b.gap2 -width 3
button $w.b.flip -image tb_flip -command "::gbrowser::flip $n"
pack $w.b.start $w.b.back $w.b.forward $w.b.end $w.b.gap \
$w.b.autoplay $w.b.gap2 $w.b.flip -side left -padx 3 -pady 1
set ::gbrowser::autoplay($n) 0
if {$gnum > 0} {
button $w.b.load -textvar ::tr(LoadGame) -command "sc_base switch $base; ::game::Load $gnum"
button $w.b.merge -textvar ::tr(MergeGame) -command "mergeGame $base $gnum"
}
button $w.b.close -textvar ::tr(Close) -command "destroy $w"
pack $w.b.close -side right -padx 1 -pady 1
if {$gnum > 0} {
pack $w.b.merge $w.b.load -side right -padx 1 -pady 1
}
wm resizable $w 1 0
if {$ply < 0} {
set ply 0
if {$gnum > 0} {
set ply [sc_filter value $base $gnum]
if {$ply > 0} { incr ply -1 }
}
}
::gbrowser::update $n $ply
if { [::board::isFlipped .main.board] } {
::gbrowser::flip $n
}
}
proc ::gbrowser::flip {n} {
::board::flip .gb$n.bd
}
proc ::gbrowser::update {n ply} {
set w .gb$n
if {! [winfo exists $w]} { return }
set oldply 0
if {[info exists ::gbrowser::ply($n)]} { set oldply $::gbrowser::ply($n) }
if {$ply == "forward"} { set ply [expr {$oldply + 1} ] }
if {$ply == "back"} { set ply [expr {$oldply - 1} ] }
if {$ply == "start"} { set ply 0 }
if {$ply == "end"} { set ply 9999 }
if {[string index $ply 0] == "-" || [string index $ply 0] == "+"} {
set ply [expr {$oldply + $ply} ]
}
if {$ply < 0} { set ply 0 }
set max [expr {[llength $::gbrowser::boards($n)] - 1} ]
if {$ply > $max} { set ply $max }
set ::gbrowser::ply($n) $ply
::board::update $w.bd [lindex $::gbrowser::boards($n) $ply] 1
set t $w.t.text
$t configure -state normal
set moveRange [$t tag nextrange m$ply 1.0]
$t tag remove next 1.0 end
set moveRange [$t tag nextrange m$ply 1.0]
if {[llength $moveRange] == 2} {
$t tag add next [lindex $moveRange 0] [lindex $moveRange 1]
$t see [lindex $moveRange 0]
}
$t configure -state disabled
if {$::gbrowser::autoplay($n)} {
if {$ply >= $max} {
::gbrowser::autoplay $n
} else {
after cancel "::gbrowser::update $n +1"
after $::autoplayDelay "::gbrowser::update $n +1"
}
}
}
proc ::gbrowser::autoplay {n} {
if {$::gbrowser::autoplay($n)} {
set ::gbrowser::autoplay($n) 0
.gb$n.b.autoplay configure -image autoplay_off
return
} else {
set ::gbrowser::autoplay($n) 1
.gb$n.b.autoplay configure -image autoplay_on
::gbrowser::update $n +1
}
}
|