diff --git a/gitk b/gitk index 650435e7d2..8132812b50 100755 --- a/gitk +++ b/gitk @@ -435,56 +435,59 @@ proc makewindow {} { .bar.help configure -font $uifont . configure -menu .bar - if {![info exists geometry(canv1)]} { - set geometry(canv1) [expr {45 * $charspc}] - set geometry(canv2) [expr {30 * $charspc}] - set geometry(canv3) [expr {15 * $charspc}] - set geometry(canvh) [expr {25 * $linespc + 4}] - set geometry(ctextw) 80 - set geometry(ctexth) 30 - set geometry(cflistw) 30 - } + # the gui has upper and lower half, parts of a paned window. panedwindow .ctop -orient vertical - if {[info exists geometry(width)]} { - .ctop conf -width $geometry(width) -height $geometry(height) - set texth [expr {$geometry(height) - $geometry(canvh) - 56}] - set geometry(ctexth) [expr {($texth - 8) / - [font metrics $textfont -linespace]}] + + # possibly use assumed geometry + if {![info exists geometry(topheight)]} { + set geometry(topheight) [expr {15 * $linespc}] + set geometry(topwidth) [expr {80 * $charspc}] + set geometry(botheight) [expr {15 * $linespc}] + set geometry(botwidth) [expr {50 * $charspc}] + set geometry(canv) [expr {40 * $charspc}] + set geometry(canv2) [expr {20 * $charspc}] + set geometry(canv3) [expr {20 * $charspc}] } - frame .ctop.top - frame .ctop.top.bar - frame .ctop.top.lbar - pack .ctop.top.lbar -side bottom -fill x - pack .ctop.top.bar -side bottom -fill x - set cscroll .ctop.top.csb - scrollbar $cscroll -command {allcanvs yview} -highlightthickness 0 - pack $cscroll -side right -fill y - panedwindow .ctop.top.clist -orient horizontal -sashpad 0 -handlesize 4 - pack .ctop.top.clist -side top -fill both -expand 1 - .ctop add .ctop.top - set canv .ctop.top.clist.canv - canvas $canv -height $geometry(canvh) -width $geometry(canv1) \ + + # the upper half will have a paned window, a scroll bar to the right, and some stuff below + frame .tf -height $geometry(topheight) -width $geometry(topwidth) + frame .tf.histframe + panedwindow .tf.histframe.pwclist -orient horizontal -sashpad 0 -handlesize 4 + + # create three canvases + set cscroll .tf.histframe.csb + set canv .tf.histframe.pwclist.canv + canvas $canv -width $geometry(canv) \ -background $bgcolor -bd 0 \ -yscrollincr $linespc -yscrollcommand "scrollcanv $cscroll" - .ctop.top.clist add $canv - set canv2 .ctop.top.clist.canv2 - canvas $canv2 -height $geometry(canvh) -width $geometry(canv2) \ + .tf.histframe.pwclist add $canv + set canv2 .tf.histframe.pwclist.canv2 + canvas $canv2 -width $geometry(canv2) \ -background $bgcolor -bd 0 -yscrollincr $linespc - .ctop.top.clist add $canv2 - set canv3 .ctop.top.clist.canv3 - canvas $canv3 -height $geometry(canvh) -width $geometry(canv3) \ + .tf.histframe.pwclist add $canv2 + set canv3 .tf.histframe.pwclist.canv3 + canvas $canv3 -width $geometry(canv3) \ -background $bgcolor -bd 0 -yscrollincr $linespc - .ctop.top.clist add $canv3 - bind .ctop.top.clist {resizeclistpanes %W %w} - lappend bglist $canv $canv2 $canv3 + .tf.histframe.pwclist add $canv3 - set sha1entry .ctop.top.bar.sha1 + # a scroll bar to rule them + scrollbar $cscroll -command {allcanvs yview} -highlightthickness 0 + pack $cscroll -side right -fill y + bind .tf.histframe.pwclist {resizeclistpanes %W %w} + lappend bglist $canv $canv2 $canv3 + pack .tf.histframe.pwclist -fill both -expand 1 -side left + + # we have two button bars at bottom of top frame. Bar 1 + frame .tf.bar + frame .tf.lbar -height 15 + + set sha1entry .tf.bar.sha1 set entries $sha1entry - set sha1but .ctop.top.bar.sha1label + set sha1but .tf.bar.sha1label button $sha1but -text "SHA1 ID: " -state disabled -relief flat \ -command gotocommit -width 8 -font $uifont $sha1but conf -disabledforeground [$sha1but cget -foreground] - pack .ctop.top.bar.sha1label -side left + pack .tf.bar.sha1label -side left entry $sha1entry -width 40 -font $textfont -textvariable sha1string trace add variable sha1string write sha1change pack $sha1entry -side left -pady 2 @@ -505,91 +508,105 @@ proc makewindow {} { 0x00, 0x38, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0x00, 0x38, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x80, 0x03, 0xc0, 0x01}; } - button .ctop.top.bar.leftbut -image bm-left -command goback \ + button .tf.bar.leftbut -image bm-left -command goback \ -state disabled -width 26 - pack .ctop.top.bar.leftbut -side left -fill y - button .ctop.top.bar.rightbut -image bm-right -command goforw \ + pack .tf.bar.leftbut -side left -fill y + button .tf.bar.rightbut -image bm-right -command goforw \ -state disabled -width 26 - pack .ctop.top.bar.rightbut -side left -fill y + pack .tf.bar.rightbut -side left -fill y - button .ctop.top.bar.findbut -text "Find" -command dofind -font $uifont - pack .ctop.top.bar.findbut -side left + button .tf.bar.findbut -text "Find" -command dofind -font $uifont + pack .tf.bar.findbut -side left set findstring {} - set fstring .ctop.top.bar.findstring + set fstring .tf.bar.findstring lappend entries $fstring entry $fstring -width 30 -font $textfont -textvariable findstring trace add variable findstring write find_change - pack $fstring -side left -expand 1 -fill x + pack $fstring -side left -expand 1 -fill x -in .tf.bar set findtype Exact - set findtypemenu [tk_optionMenu .ctop.top.bar.findtype \ - findtype Exact IgnCase Regexp] + set findtypemenu [tk_optionMenu .tf.bar.findtype \ + findtype Exact IgnCase Regexp] trace add variable findtype write find_change - .ctop.top.bar.findtype configure -font $uifont - .ctop.top.bar.findtype.menu configure -font $uifont + .tf.bar.findtype configure -font $uifont + .tf.bar.findtype.menu configure -font $uifont set findloc "All fields" - tk_optionMenu .ctop.top.bar.findloc findloc "All fields" Headline \ + tk_optionMenu .tf.bar.findloc findloc "All fields" Headline \ Comments Author Committer trace add variable findloc write find_change - .ctop.top.bar.findloc configure -font $uifont - .ctop.top.bar.findloc.menu configure -font $uifont - pack .ctop.top.bar.findloc -side right - pack .ctop.top.bar.findtype -side right + .tf.bar.findloc configure -font $uifont + .tf.bar.findloc.menu configure -font $uifont + pack .tf.bar.findloc -side right + pack .tf.bar.findtype -side right - label .ctop.top.lbar.flabel -text "Highlight: Commits " \ - -font $uifont - pack .ctop.top.lbar.flabel -side left -fill y + # build up the bottom bar of upper window + label .tf.lbar.flabel -text "Highlight: Commits " \ + -font $uifont + pack .tf.lbar.flabel -side left -fill y set gdttype "touching paths:" - set gm [tk_optionMenu .ctop.top.lbar.gdttype gdttype "touching paths:" \ - "adding/removing string:"] + set gm [tk_optionMenu .tf.lbar.gdttype gdttype "touching paths:" \ + "adding/removing string:"] trace add variable gdttype write hfiles_change $gm conf -font $uifont - .ctop.top.lbar.gdttype conf -font $uifont - pack .ctop.top.lbar.gdttype -side left -fill y - entry .ctop.top.lbar.fent -width 25 -font $textfont \ + .tf.lbar.gdttype conf -font $uifont + pack .tf.lbar.gdttype -side left -fill y + entry .tf.lbar.fent -width 25 -font $textfont \ -textvariable highlight_files trace add variable highlight_files write hfiles_change - lappend entries .ctop.top.lbar.fent - pack .ctop.top.lbar.fent -side left -fill x -expand 1 - label .ctop.top.lbar.vlabel -text " OR in view" -font $uifont - pack .ctop.top.lbar.vlabel -side left -fill y + lappend entries .tf.lbar.fent + pack .tf.lbar.fent -side left -fill x -expand 1 + label .tf.lbar.vlabel -text " OR in view" -font $uifont + pack .tf.lbar.vlabel -side left -fill y global viewhlmenu selectedhlview - set viewhlmenu [tk_optionMenu .ctop.top.lbar.vhl selectedhlview None] + set viewhlmenu [tk_optionMenu .tf.lbar.vhl selectedhlview None] $viewhlmenu entryconf None -command delvhighlight $viewhlmenu conf -font $uifont - .ctop.top.lbar.vhl conf -font $uifont - pack .ctop.top.lbar.vhl -side left -fill y - label .ctop.top.lbar.rlabel -text " OR " -font $uifont - pack .ctop.top.lbar.rlabel -side left -fill y + .tf.lbar.vhl conf -font $uifont + pack .tf.lbar.vhl -side left -fill y + label .tf.lbar.rlabel -text " OR " -font $uifont + pack .tf.lbar.rlabel -side left -fill y global highlight_related - set m [tk_optionMenu .ctop.top.lbar.relm highlight_related None \ - "Descendent" "Not descendent" "Ancestor" "Not ancestor"] + set m [tk_optionMenu .tf.lbar.relm highlight_related None \ + "Descendent" "Not descendent" "Ancestor" "Not ancestor"] $m conf -font $uifont - .ctop.top.lbar.relm conf -font $uifont + .tf.lbar.relm conf -font $uifont trace add variable highlight_related write vrel_change - pack .ctop.top.lbar.relm -side left -fill y + pack .tf.lbar.relm -side left -fill y - panedwindow .ctop.cdet -orient horizontal - .ctop add .ctop.cdet - frame .ctop.cdet.left - frame .ctop.cdet.left.bot - pack .ctop.cdet.left.bot -side bottom -fill x - button .ctop.cdet.left.bot.search -text "Search" -command dosearch \ + # Finish putting the upper half of the viewer together + pack .tf.lbar -in .tf -side bottom -fill x + pack .tf.bar -in .tf -side bottom -fill x + pack .tf.histframe -fill both -side top -expand 1 + .ctop add .tf + + # now build up the bottom + panedwindow .pwbottom -orient horizontal + + # lower left, a text box over search bar, scroll bar to the right + # if we know window height, then that will set the lower text height, otherwise + # we set lower text height which will drive window height + if {[info exists geometry(main)]} { + frame .bleft -width $geometry(botwidth) + } else { + frame .bleft -width $geometry(botwidth) -height $geometry(botheight) + } + frame .bleft.top + + button .bleft.top.search -text "Search" -command dosearch \ -font $uifont - pack .ctop.cdet.left.bot.search -side left -padx 5 - set sstring .ctop.cdet.left.bot.sstring + pack .bleft.top.search -side left -padx 5 + set sstring .bleft.top.sstring entry $sstring -width 20 -font $textfont -textvariable searchstring lappend entries $sstring trace add variable searchstring write incrsearch pack $sstring -side left -expand 1 -fill x - set ctext .ctop.cdet.left.ctext + set ctext .bleft.ctext text $ctext -background $bgcolor -foreground $fgcolor \ -state disabled -font $textfont \ - -width $geometry(ctextw) -height $geometry(ctexth) \ -yscrollcommand scrolltext -wrap none - scrollbar .ctop.cdet.left.sb -command "$ctext yview" - pack .ctop.cdet.left.sb -side right -fill y + scrollbar .bleft.sb -command "$ctext yview" + pack .bleft.top -side top -fill x + pack .bleft.sb -side right -fill y pack $ctext -side left -fill both -expand 1 - .ctop.cdet add .ctop.cdet.left lappend bglist $ctext lappend fglist $ctext @@ -620,36 +637,45 @@ proc makewindow {} { $ctext tag conf msep -font [concat $textfont bold] $ctext tag conf found -back yellow - frame .ctop.cdet.right - frame .ctop.cdet.right.mode - radiobutton .ctop.cdet.right.mode.patch -text "Patch" \ + .pwbottom add .bleft + + # lower right + frame .bright + frame .bright.mode + radiobutton .bright.mode.patch -text "Patch" \ -command reselectline -variable cmitmode -value "patch" - radiobutton .ctop.cdet.right.mode.tree -text "Tree" \ + radiobutton .bright.mode.tree -text "Tree" \ -command reselectline -variable cmitmode -value "tree" - grid .ctop.cdet.right.mode.patch .ctop.cdet.right.mode.tree -sticky ew - pack .ctop.cdet.right.mode -side top -fill x - set cflist .ctop.cdet.right.cfiles + grid .bright.mode.patch .bright.mode.tree -sticky ew + pack .bright.mode -side top -fill x + set cflist .bright.cfiles set indent [font measure $mainfont "nn"] - text $cflist -width $geometry(cflistw) \ + text $cflist \ -background $bgcolor -foreground $fgcolor \ -font $mainfont \ -tabs [list $indent [expr {2 * $indent}]] \ - -yscrollcommand ".ctop.cdet.right.sb set" \ + -yscrollcommand ".bright.sb set" \ -cursor [. cget -cursor] \ -spacing1 1 -spacing3 1 lappend bglist $cflist lappend fglist $cflist - scrollbar .ctop.cdet.right.sb -command "$cflist yview" - pack .ctop.cdet.right.sb -side right -fill y + scrollbar .bright.sb -command "$cflist yview" + pack .bright.sb -side right -fill y pack $cflist -side left -fill both -expand 1 $cflist tag configure highlight \ -background [$cflist cget -selectbackground] $cflist tag configure bold -font [concat $mainfont bold] - .ctop.cdet add .ctop.cdet.right - bind .ctop.cdet {resizecdetpanes %W %w} - pack .ctop -side top -fill both -expand 1 + .pwbottom add .bright + .ctop add .pwbottom + # restore window position if known + if {[info exists geometry(main)]} { + wm geometry . "$geometry(main)" + } + + bind .pwbottom {resizecdetpanes %W %w} + pack .ctop -fill both -expand 1 bindall <1> {selcanvline %W %x %y} #bindall {selcanvline %W %x %y} bindall "allcanvs yview scroll -5 units" @@ -802,18 +828,16 @@ proc savestuff {w} { puts $f [list set fgcolor $fgcolor] puts $f [list set colors $colors] puts $f [list set diffcolors $diffcolors] - puts $f "set geometry(width) [winfo width .ctop]" - puts $f "set geometry(height) [winfo height .ctop]" - puts $f "set geometry(canv1) [expr {[winfo width $canv]-2}]" - puts $f "set geometry(canv2) [expr {[winfo width $canv2]-2}]" - puts $f "set geometry(canv3) [expr {[winfo width $canv3]-2}]" - puts $f "set geometry(canvh) [expr {[winfo height $canv]-2}]" - set wid [expr {([winfo width $ctext] - 8) \ - / [font measure $textfont "0"]}] - puts $f "set geometry(ctextw) $wid" - set wid [expr {([winfo width $cflist] - 11) \ - / [font measure [$cflist cget -font] "0"]}] - puts $f "set geometry(cflistw) $wid" + + puts $f "set geometry(main) [winfo geometry .]" + puts $f "set geometry(topwidth) [winfo width .tf]" + puts $f "set geometry(topheight) [winfo height .tf]" + puts $f "set geometry(canv) [expr {[winfo width $canv]-0}]" + puts $f "set geometry(canv2) [expr {[winfo width $canv2]-0}]" + puts $f "set geometry(canv3) [expr {[winfo width $canv3]-0}]" + puts $f "set geometry(botwidth) [winfo width .bleft]" + puts $f "set geometry(botheight) [winfo height .bleft]" + puts -nonewline $f "set permviews {" for {set v 0} {$v < $nextviewnum} {incr v} { if {$viewperm($v)} { @@ -4043,11 +4067,11 @@ proc addtohistory {cmd} { } incr historyindex if {$historyindex > 1} { - .ctop.top.bar.leftbut conf -state normal + .tf.bar.leftbut conf -state normal } else { - .ctop.top.bar.leftbut conf -state disabled + .tf.bar.leftbut conf -state disabled } - .ctop.top.bar.rightbut conf -state disabled + .tf.bar.rightbut conf -state disabled } proc godo {elt} { @@ -4067,10 +4091,10 @@ proc goback {} { if {$historyindex > 1} { incr historyindex -1 godo [lindex $history [expr {$historyindex - 1}]] - .ctop.top.bar.rightbut conf -state normal + .tf.bar.rightbut conf -state normal } if {$historyindex <= 1} { - .ctop.top.bar.leftbut conf -state disabled + .tf.bar.leftbut conf -state disabled } } @@ -4081,10 +4105,10 @@ proc goforw {} { set cmd [lindex $history $historyindex] incr historyindex godo $cmd - .ctop.top.bar.leftbut conf -state normal + .tf.bar.leftbut conf -state normal } if {$historyindex >= [llength $history]} { - .ctop.top.bar.rightbut conf -state disabled + .tf.bar.rightbut conf -state disabled } } @@ -4591,7 +4615,7 @@ proc searchmarkvisible {doall} { proc scrolltext {f0 f1} { global searchstring - .ctop.cdet.left.sb set $f0 $f1 + .bleft.sb set $f0 $f1 if {$searchstring ne {}} { searchmarkvisible 0 }