From: Paul Mackerras Date: Tue, 10 May 2005 01:02:55 +0000 (+0000) Subject: Display the list of changed files in a listbox pane. X-Git-Tag: v0.99~60^2~34 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=5ad588de729eb11629f8ff31a248e8abd44e4a9a;p=git.git Display the list of changed files in a listbox pane. --- diff --git a/gitk b/gitk index 801afbca7..1b411598f 100755 --- a/gitk +++ b/gitk @@ -7,7 +7,7 @@ exec wish "$0" -- "${1+$@}" # and distributed under the terms of the GNU General Public Licence, # either version 2, or (at your option) any later version. -# CVS $Revision: 1.2 $ +# CVS $Revision: 1.3 $ set datemode 0 set boldnames 0 @@ -108,8 +108,22 @@ proc readcommit {id} { set commitsummary($id) [list $headline $auname $audate] } +proc gettreediffs {id} { + global treediffs parents + set p [lindex $parents($id) 0] + set diff {} + foreach line [split [exec git-diff-tree -r $p $id] "\n"] { + set type [lindex $line 1] + set file [lindex $line 3] + if {$type == "blob"} { + lappend diff $file + } + } + set treediffs($id) $diff +} + proc makewindow {} { - global canv linespc charspc ctext + global canv linespc charspc ctext cflist panedwindow .ctop -orient vertical frame .ctop.clist set canv .ctop.clist.canv @@ -121,10 +135,15 @@ proc makewindow {} { pack $canv -side bottom -fill both -expand 1 .ctop add .ctop.clist #pack .ctop.clist -side top -fill both -expand 1 - set ctext .ctop.ctext - text $ctext -bg white - .ctop add .ctop.ctext + panedwindow .ctop.cdet -orient horizontal + .ctop add .ctop.cdet + set ctext .ctop.cdet.ctext + text $ctext -bg white -state disabled + .ctop.cdet add $ctext #pack $ctext -side top -fill x -expand 1 + set cflist .ctop.cdet.cfiles + listbox $cflist -width 30 -bg white + .ctop.cdet add $cflist pack .ctop -side top -fill both -expand 1 bind $canv <1> {selcanvline %x %y} @@ -138,8 +157,8 @@ proc makewindow {} { bind . "$canv yview scroll -1 p" bind . "$canv yview scroll -1 p" bind . "$canv yview scroll 1 p" - bind . "$canv yview scroll -1 u" - bind . "$canv yview scroll 1 u" + bind . "selnextline -1" + bind . "selnextline 1" bind . Q "set stopped 1; destroy ." } @@ -164,7 +183,7 @@ proc truncatetofit {str width font} { proc drawgraph {start} { global parents children nparents nchildren commits - global canv mainfont namefont canvx0 canvy0 linespc namex datex + global canv mainfont namefont canvx0 canvy0 canvy linespc namex datex global datemode cdate global lineid linehtag linentag linedtag commitsummary @@ -388,17 +407,56 @@ proc selcanvline {x y} { set l 0 } if {[info exists selectedline] && $selectedline == $l} return + selectline $l +} + +proc selectline {l} { + global canv ctext commitinfo selectedline lineid linehtag + global canvy canvy0 linespc nparents + global cflist treediffs if {![info exists lineid($l)] || ![info exists linehtag($l)]} return $canv select clear $canv select from $linehtag($l) 0 $canv select to $linehtag($l) end + set y [expr {$canvy0 + $l * $linespc}] + set ytop [expr {($y - $linespc / 2.0) / $canvy}] + set ybot [expr {($y + $linespc / 2.0) / $canvy}] + set wnow [$canv yview] + if {$ytop < [lindex $wnow 0]} { + $canv yview moveto $ytop + } elseif {$ybot > [lindex $wnow 1]} { + set wh [expr {[lindex $wnow 1] - [lindex $wnow 0]}] + $canv yview moveto [expr {$ybot - $wh}] + } + set selectedline $l + set id $lineid($l) + $ctext conf -state normal $ctext delete 0.0 end set info $commitinfo($id) $ctext insert end "Author: [lindex $info 1] \t[lindex $info 2]\n" $ctext insert end "Committer: [lindex $info 3] \t[lindex $info 4]\n" $ctext insert end "\n" $ctext insert end [lindex $info 0] + $ctext conf -state disabled + + $cflist delete 0 end + if {$nparents($id) == 1} { + if {![info exists treediffs($id)]} { + gettreediffs $id + } + foreach f $treediffs($id) { + $cflist insert end $f + } + } + +} + +proc selnextline {dir} { + global selectedline + if {![info exists selectedline]} return + set l [expr $selectedline + $dir] + selectline $l } getcommits $revtreeargs