Skip to content

Commit

Permalink
gitk: add menu item for editing the current view
Browse files Browse the repository at this point in the history
This allows the user to change the name of the view, whether it is
permanent, and the list of files/directories for the view.

Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Paul Mackerras committed Apr 25, 2006
1 parent a90a6d2 commit d16c081
Showing 1 changed file with 90 additions and 37 deletions.
127 changes: 90 additions & 37 deletions gitk
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,7 @@ proc makewindow {} {
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} \
Expand Down Expand Up @@ -806,79 +807,124 @@ f Scroll diff view to next file
}

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
grid $top.buts - -pady 10 -sticky ew
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
Expand Down Expand Up @@ -958,6 +1004,7 @@ proc showview {n} {
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
Expand Down Expand Up @@ -1025,6 +1072,11 @@ proc showview {n} {
} 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
}
}
}

Expand Down Expand Up @@ -4260,6 +4312,7 @@ if {$cmdline_files ne {}} {
.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]} {
Expand Down

0 comments on commit d16c081

Please sign in to comment.