match id path]} {
continue
}
+ if {[regexp {^remotes/.*/HEAD$} $path match]} {
+ continue
+ }
if {![regexp {^(tags|heads)/(.*)$} $path match type name]} {
set type others
set name $path
}
+ if {[regexp {^remotes/} $path match]} {
+ set type heads
+ }
if {$type == "tags"} {
set tagids($name) $id
lappend idtags($id) $name
menu .bar.view -font $uifont
.bar add cascade -label "View" -menu .bar.view
.bar.view add command -label "New view..." -command newview
+ .bar.view add command -label "Edit view..." -command editview
.bar.view add command -label "Delete view" -command delview -state disabled
.bar.view add separator
.bar.view add radiobutton -label "All files" -command {showview 0} \
}
proc newview {} {
- global newviewname nextviewnum newviewtop newviewperm uifont
+ global nextviewnum newviewname newviewperm uifont
set top .gitkview
if {[winfo exists $top]} {
raise $top
return
}
- set newviewtop $top
+ set newviewname($nextviewnum) "View $nextviewnum"
+ set newviewperm($nextviewnum) 0
+ vieweditor $top $nextviewnum "Gitk view definition"
+}
+
+proc editview {} {
+ global curview
+ global viewname viewperm newviewname newviewperm
+
+ set top .gitkvedit-$curview
+ if {[winfo exists $top]} {
+ raise $top
+ return
+ }
+ set newviewname($curview) $viewname($curview)
+ set newviewperm($curview) $viewperm($curview)
+ vieweditor $top $curview "Gitk: edit view $viewname($curview)"
+}
+
+proc vieweditor {top n title} {
+ global newviewname newviewperm viewfiles
+ global uifont
+
toplevel $top
- wm title $top "Gitk view definition"
+ wm title $top $title
label $top.nl -text "Name" -font $uifont
- entry $top.name -width 20 -textvariable newviewname
- set newviewname "View $nextviewnum"
+ entry $top.name -width 20 -textvariable newviewname($n)
grid $top.nl $top.name -sticky w -pady 5
- set newviewperm 0
- checkbutton $top.perm -text "Remember this view" -variable newviewperm
+ checkbutton $top.perm -text "Remember this view" -variable newviewperm($n)
grid $top.perm - -pady 5 -sticky w
message $top.l -aspect 500 -font $uifont \
-text "Enter files and directories to include, one per line:"
grid $top.l - -sticky w
text $top.t -width 40 -height 10 -background white
+ if {[info exists viewfiles($n)]} {
+ foreach f $viewfiles($n) {
+ $top.t insert end $f
+ $top.t insert end "\n"
+ }
+ $top.t delete {end - 1c} end
+ $top.t mark set insert 0.0
+ }
grid $top.t - -sticky w -padx 5
frame $top.buts
- button $top.buts.ok -text "OK" -command newviewok
- button $top.buts.can -text "Cancel" -command newviewcan
+ button $top.buts.ok -text "OK" -command [list newviewok $top $n]
+ button $top.buts.can -text "Cancel" -command [list destroy $top]
grid $top.buts.ok $top.buts.can
grid columnconfigure $top.buts 0 -weight 1 -uniform a
grid columnconfigure $top.buts 1 -weight 1 -uniform a
focus $top.t
}
-proc newviewok {} {
- global newviewtop nextviewnum newviewperm
- global viewname viewfiles viewperm selectedview
+proc viewmenuitem {n} {
+ set nmenu [.bar.view index end]
+ set targetcmd [list showview $n]
+ for {set i 6} {$i <= $nmenu} {incr i} {
+ if {[.bar.view entrycget $i -command] eq $targetcmd} {
+ return $i
+ }
+ }
+ return {}
+}
+
+proc newviewok {top n} {
+ global nextviewnum newviewperm newviewname
+ global viewname viewfiles viewperm selectedview curview
- set n $nextviewnum
- incr nextviewnum
- set viewname($n) [$newviewtop.name get]
- set viewperm($n) $newviewperm
set files {}
- foreach f [split [$newviewtop.t get 0.0 end] "\n"] {
+ foreach f [split [$top.t get 0.0 end] "\n"] {
set ft [string trim $f]
if {$ft ne {}} {
lappend files $ft
}
}
- set viewfiles($n) $files
- catch {destroy $newviewtop}
- unset newviewtop
- .bar.view add radiobutton -label $viewname($n) \
- -command [list showview $n] -variable selectedview -value $n
- after idle showview $n
-}
-
-proc newviewcan {} {
- global newviewtop
-
- catch {destroy $newviewtop}
- unset newviewtop
+ if {![info exists viewfiles($n)]} {
+ # creating a new view
+ incr nextviewnum
+ set viewname($n) $newviewname($n)
+ set viewperm($n) $newviewperm($n)
+ set viewfiles($n) $files
+ .bar.view add radiobutton -label $viewname($n) \
+ -command [list showview $n] -variable selectedview -value $n
+ after idle showview $n
+ } else {
+ # editing an existing view
+ set viewperm($n) $newviewperm($n)
+ if {$newviewname($n) ne $viewname($n)} {
+ set viewname($n) $newviewname($n)
+ set i [viewmenuitem $n]
+ if {$i ne {}} {
+ .bar.view entryconf $i -label $viewname($n)
+ }
+ }
+ if {$files ne $viewfiles($n)} {
+ set viewfiles($n) $files
+ if {$curview == $n} {
+ after idle updatecommits
+ }
+ }
+ }
+ catch {destroy $top}
}
proc delview {} {
global curview viewdata viewperm
if {$curview == 0} return
- set nmenu [.bar.view index end]
- set targetcmd [list showview $curview]
- for {set i 5} {$i <= $nmenu} {incr i} {
- if {[.bar.view entrycget $i -command] eq $targetcmd} {
- .bar.view delete $i
- break
- }
+ set i [viewmenuitem $curview]
+ if {$i ne {}} {
+ .bar.view delete $i
}
set viewdata($curview) {}
set viewperm($curview) 0
set curview $n
set selectedview $n
.bar.view entryconf 2 -state [expr {$n == 0? "disabled": "normal"}]
+ .bar.view entryconf 3 -state [expr {$n == 0? "disabled": "normal"}]
if {![info exists viewdata($n)]} {
set pending_select $selid
} else {
. config -cursor watch
settextcursor watch
+ if {$phase eq "getcommits"} {
+ global mainfont
+ $canv create text 3 3 -anchor nw -text "Reading commits..." \
+ -font $mainfont -tags textitems
+ }
}
}
set xl [expr {$xl - $delta/2}]
$canv create polygon $x $yt $xr $yt $xr $yb $x $yb \
-width 1 -outline black -fill $col -tags tag.$id
+ if {[regexp {^(remotes/.*/|remotes/)} $tag match remoteprefix]} {
+ set rwid [font measure $mainfont $remoteprefix]
+ set xi [expr {$x + 1}]
+ set yti [expr {$yt + 1}]
+ set xri [expr {$x + $rwid}]
+ $canv create polygon $xi $yti $xri $yti $xri $yb $xi $yb \
+ -width 0 -fill "#ffddaa" -tags tag.$id
+ }
}
set t [$canv create text $xl $y1 -anchor w -text $tag \
-font $mainfont -tags tag.$id]
.bar.view add radiobutton -label $viewname(1) -command {showview 1} \
-variable selectedview -value 1
.bar.view entryconf 2 -state normal
+ .bar.view entryconf 3 -state normal
}
if {[info exists permviews]} {