gitk: Use a tabbed dialog to edit preferences
This commit converts the user preferences dialog into a tabbed property sheet grouping general properties, colours and font selections onto separate pages. The previous implementation was exceeding the screen height on some systems and this avoids such problems and permits extension using new pages in the future. If themed Tk is unavailable or undesired a reasonable facsimile of the tabbed notebook widget is used instead. Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:

committed by
Paul Mackerras

parent
3878e636c6
commit
44acce0bef
256
gitk
256
gitk
@ -10782,6 +10782,139 @@ proc chg_fontparam {v sub op} {
|
|||||||
font config sample -$sub $fontparam($sub)
|
font config sample -$sub $fontparam($sub)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Create a property sheet tab page
|
||||||
|
proc create_prefs_page {w} {
|
||||||
|
global NS
|
||||||
|
set parent [join [lrange [split $w .] 0 end-1] .]
|
||||||
|
if {[winfo class $parent] eq "TNotebook"} {
|
||||||
|
${NS}::frame $w
|
||||||
|
} else {
|
||||||
|
${NS}::labelframe $w
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc prefspage_general {notebook} {
|
||||||
|
global NS maxwidth maxgraphpct showneartags showlocalchanges
|
||||||
|
global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs
|
||||||
|
global hideremotes want_ttk have_ttk
|
||||||
|
|
||||||
|
set page [create_prefs_page $notebook.general]
|
||||||
|
|
||||||
|
${NS}::label $page.ldisp -text [mc "Commit list display options"]
|
||||||
|
grid $page.ldisp - -sticky w -pady 10
|
||||||
|
${NS}::label $page.spacer -text " "
|
||||||
|
${NS}::label $page.maxwidthl -text [mc "Maximum graph width (lines)"]
|
||||||
|
spinbox $page.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth
|
||||||
|
grid $page.spacer $page.maxwidthl $page.maxwidth -sticky w
|
||||||
|
${NS}::label $page.maxpctl -text [mc "Maximum graph width (% of pane)"]
|
||||||
|
spinbox $page.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct
|
||||||
|
grid x $page.maxpctl $page.maxpct -sticky w
|
||||||
|
${NS}::checkbutton $page.showlocal -text [mc "Show local changes"] \
|
||||||
|
-variable showlocalchanges
|
||||||
|
grid x $page.showlocal -sticky w
|
||||||
|
${NS}::checkbutton $page.autoselect -text [mc "Auto-select SHA1 (length)"] \
|
||||||
|
-variable autoselect
|
||||||
|
spinbox $page.autosellen -from 1 -to 40 -width 4 -textvariable autosellen
|
||||||
|
grid x $page.autoselect $page.autosellen -sticky w
|
||||||
|
${NS}::checkbutton $page.hideremotes -text [mc "Hide remote refs"] \
|
||||||
|
-variable hideremotes
|
||||||
|
grid x $page.hideremotes -sticky w
|
||||||
|
|
||||||
|
${NS}::label $page.ddisp -text [mc "Diff display options"]
|
||||||
|
grid $page.ddisp - -sticky w -pady 10
|
||||||
|
${NS}::label $page.tabstopl -text [mc "Tab spacing"]
|
||||||
|
spinbox $page.tabstop -from 1 -to 20 -width 4 -textvariable tabstop
|
||||||
|
grid x $page.tabstopl $page.tabstop -sticky w
|
||||||
|
${NS}::checkbutton $page.ntag -text [mc "Display nearby tags"] \
|
||||||
|
-variable showneartags
|
||||||
|
grid x $page.ntag -sticky w
|
||||||
|
${NS}::checkbutton $page.ldiff -text [mc "Limit diffs to listed paths"] \
|
||||||
|
-variable limitdiffs
|
||||||
|
grid x $page.ldiff -sticky w
|
||||||
|
${NS}::checkbutton $page.lattr -text [mc "Support per-file encodings"] \
|
||||||
|
-variable perfile_attrs
|
||||||
|
grid x $page.lattr -sticky w
|
||||||
|
|
||||||
|
${NS}::entry $page.extdifft -textvariable extdifftool
|
||||||
|
${NS}::frame $page.extdifff
|
||||||
|
${NS}::label $page.extdifff.l -text [mc "External diff tool" ]
|
||||||
|
${NS}::button $page.extdifff.b -text [mc "Choose..."] -command choose_extdiff
|
||||||
|
pack $page.extdifff.l $page.extdifff.b -side left
|
||||||
|
pack configure $page.extdifff.l -padx 10
|
||||||
|
grid x $page.extdifff $page.extdifft -sticky ew
|
||||||
|
|
||||||
|
${NS}::label $page.lgen -text [mc "General options"]
|
||||||
|
grid $page.lgen - -sticky w -pady 10
|
||||||
|
${NS}::checkbutton $page.want_ttk -variable want_ttk \
|
||||||
|
-text [mc "Use themed widgets"]
|
||||||
|
if {$have_ttk} {
|
||||||
|
${NS}::label $page.ttk_note -text [mc "(change requires restart)"]
|
||||||
|
} else {
|
||||||
|
${NS}::label $page.ttk_note -text [mc "(currently unavailable)"]
|
||||||
|
}
|
||||||
|
grid x $page.want_ttk $page.ttk_note -sticky w
|
||||||
|
return $page
|
||||||
|
}
|
||||||
|
|
||||||
|
proc prefspage_colors {notebook} {
|
||||||
|
global NS uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor
|
||||||
|
|
||||||
|
set page [create_prefs_page $notebook.colors]
|
||||||
|
|
||||||
|
${NS}::label $page.cdisp -text [mc "Colors: press to choose"]
|
||||||
|
grid $page.cdisp - -sticky w -pady 10
|
||||||
|
label $page.ui -padx 40 -relief sunk -background $uicolor
|
||||||
|
${NS}::button $page.uibut -text [mc "Interface"] \
|
||||||
|
-command [list choosecolor uicolor {} $page.ui [mc "interface"] setui]
|
||||||
|
grid x $page.uibut $page.ui -sticky w
|
||||||
|
label $page.bg -padx 40 -relief sunk -background $bgcolor
|
||||||
|
${NS}::button $page.bgbut -text [mc "Background"] \
|
||||||
|
-command [list choosecolor bgcolor {} $page.bg [mc "background"] setbg]
|
||||||
|
grid x $page.bgbut $page.bg -sticky w
|
||||||
|
label $page.fg -padx 40 -relief sunk -background $fgcolor
|
||||||
|
${NS}::button $page.fgbut -text [mc "Foreground"] \
|
||||||
|
-command [list choosecolor fgcolor {} $page.fg [mc "foreground"] setfg]
|
||||||
|
grid x $page.fgbut $page.fg -sticky w
|
||||||
|
label $page.diffold -padx 40 -relief sunk -background [lindex $diffcolors 0]
|
||||||
|
${NS}::button $page.diffoldbut -text [mc "Diff: old lines"] \
|
||||||
|
-command [list choosecolor diffcolors 0 $page.diffold [mc "diff old lines"] \
|
||||||
|
[list $ctext tag conf d0 -foreground]]
|
||||||
|
grid x $page.diffoldbut $page.diffold -sticky w
|
||||||
|
label $page.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 1]
|
||||||
|
${NS}::button $page.diffnewbut -text [mc "Diff: new lines"] \
|
||||||
|
-command [list choosecolor diffcolors 1 $page.diffnew [mc "diff new lines"] \
|
||||||
|
[list $ctext tag conf dresult -foreground]]
|
||||||
|
grid x $page.diffnewbut $page.diffnew -sticky w
|
||||||
|
label $page.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 2]
|
||||||
|
${NS}::button $page.hunksepbut -text [mc "Diff: hunk header"] \
|
||||||
|
-command [list choosecolor diffcolors 2 $page.hunksep \
|
||||||
|
[mc "diff hunk header"] \
|
||||||
|
[list $ctext tag conf hunksep -foreground]]
|
||||||
|
grid x $page.hunksepbut $page.hunksep -sticky w
|
||||||
|
label $page.markbgsep -padx 40 -relief sunk -background $markbgcolor
|
||||||
|
${NS}::button $page.markbgbut -text [mc "Marked line bg"] \
|
||||||
|
-command [list choosecolor markbgcolor {} $page.markbgsep \
|
||||||
|
[mc "marked line background"] \
|
||||||
|
[list $ctext tag conf omark -background]]
|
||||||
|
grid x $page.markbgbut $page.markbgsep -sticky w
|
||||||
|
label $page.selbgsep -padx 40 -relief sunk -background $selectbgcolor
|
||||||
|
${NS}::button $page.selbgbut -text [mc "Select bg"] \
|
||||||
|
-command [list choosecolor selectbgcolor {} $page.selbgsep [mc "background"] setselbg]
|
||||||
|
grid x $page.selbgbut $page.selbgsep -sticky w
|
||||||
|
return $page
|
||||||
|
}
|
||||||
|
|
||||||
|
proc prefspage_fonts {notebook} {
|
||||||
|
global NS
|
||||||
|
set page [create_prefs_page $notebook.fonts]
|
||||||
|
${NS}::label $page.cfont -text [mc "Fonts: press to choose"]
|
||||||
|
grid $page.cfont - -sticky w -pady 10
|
||||||
|
mkfontdisp mainfont $page [mc "Main font"]
|
||||||
|
mkfontdisp textfont $page [mc "Diff display font"]
|
||||||
|
mkfontdisp uifont $page [mc "User interface font"]
|
||||||
|
return $page
|
||||||
|
}
|
||||||
|
|
||||||
proc doprefs {} {
|
proc doprefs {} {
|
||||||
global maxwidth maxgraphpct use_ttk NS
|
global maxwidth maxgraphpct use_ttk NS
|
||||||
global oldprefs prefstop showneartags showlocalchanges
|
global oldprefs prefstop showneartags showlocalchanges
|
||||||
@ -10802,106 +10935,37 @@ proc doprefs {} {
|
|||||||
ttk_toplevel $top
|
ttk_toplevel $top
|
||||||
wm title $top [mc "Gitk preferences"]
|
wm title $top [mc "Gitk preferences"]
|
||||||
make_transient $top .
|
make_transient $top .
|
||||||
${NS}::label $top.ldisp -text [mc "Commit list display options"]
|
|
||||||
grid $top.ldisp - -sticky w -pady 10
|
|
||||||
${NS}::label $top.spacer -text " "
|
|
||||||
${NS}::label $top.maxwidthl -text [mc "Maximum graph width (lines)"]
|
|
||||||
spinbox $top.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth
|
|
||||||
grid $top.spacer $top.maxwidthl $top.maxwidth -sticky w
|
|
||||||
${NS}::label $top.maxpctl -text [mc "Maximum graph width (% of pane)"]
|
|
||||||
spinbox $top.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct
|
|
||||||
grid x $top.maxpctl $top.maxpct -sticky w
|
|
||||||
${NS}::checkbutton $top.showlocal -text [mc "Show local changes"] \
|
|
||||||
-variable showlocalchanges
|
|
||||||
grid x $top.showlocal -sticky w
|
|
||||||
${NS}::checkbutton $top.autoselect -text [mc "Auto-select SHA1 (length)"] \
|
|
||||||
-variable autoselect
|
|
||||||
spinbox $top.autosellen -from 1 -to 40 -width 4 -textvariable autosellen
|
|
||||||
grid x $top.autoselect $top.autosellen -sticky w
|
|
||||||
${NS}::checkbutton $top.hideremotes -text [mc "Hide remote refs"] \
|
|
||||||
-variable hideremotes
|
|
||||||
grid x $top.hideremotes -sticky w
|
|
||||||
|
|
||||||
${NS}::label $top.ddisp -text [mc "Diff display options"]
|
if {[set use_notebook [expr {$use_ttk && [info command ::ttk::notebook] ne ""}]]} {
|
||||||
grid $top.ddisp - -sticky w -pady 10
|
set notebook [ttk::notebook $top.notebook]
|
||||||
${NS}::label $top.tabstopl -text [mc "Tab spacing"]
|
|
||||||
spinbox $top.tabstop -from 1 -to 20 -width 4 -textvariable tabstop
|
|
||||||
grid x $top.tabstopl $top.tabstop -sticky w
|
|
||||||
${NS}::checkbutton $top.ntag -text [mc "Display nearby tags"] \
|
|
||||||
-variable showneartags
|
|
||||||
grid x $top.ntag -sticky w
|
|
||||||
${NS}::checkbutton $top.ldiff -text [mc "Limit diffs to listed paths"] \
|
|
||||||
-variable limitdiffs
|
|
||||||
grid x $top.ldiff -sticky w
|
|
||||||
${NS}::checkbutton $top.lattr -text [mc "Support per-file encodings"] \
|
|
||||||
-variable perfile_attrs
|
|
||||||
grid x $top.lattr -sticky w
|
|
||||||
|
|
||||||
${NS}::entry $top.extdifft -textvariable extdifftool
|
|
||||||
${NS}::frame $top.extdifff
|
|
||||||
${NS}::label $top.extdifff.l -text [mc "External diff tool" ]
|
|
||||||
${NS}::button $top.extdifff.b -text [mc "Choose..."] -command choose_extdiff
|
|
||||||
pack $top.extdifff.l $top.extdifff.b -side left
|
|
||||||
pack configure $top.extdifff.l -padx 10
|
|
||||||
grid x $top.extdifff $top.extdifft -sticky ew
|
|
||||||
|
|
||||||
${NS}::label $top.lgen -text [mc "General options"]
|
|
||||||
grid $top.lgen - -sticky w -pady 10
|
|
||||||
${NS}::checkbutton $top.want_ttk -variable want_ttk \
|
|
||||||
-text [mc "Use themed widgets"]
|
|
||||||
if {$have_ttk} {
|
|
||||||
${NS}::label $top.ttk_note -text [mc "(change requires restart)"]
|
|
||||||
} else {
|
} else {
|
||||||
${NS}::label $top.ttk_note -text [mc "(currently unavailable)"]
|
set notebook [${NS}::frame $top.notebook -borderwidth 0 -relief flat]
|
||||||
}
|
}
|
||||||
grid x $top.want_ttk $top.ttk_note -sticky w
|
|
||||||
|
|
||||||
${NS}::label $top.cdisp -text [mc "Colors: press to choose"]
|
lappend pages [prefspage_general $notebook] [mc "General"]
|
||||||
grid $top.cdisp - -sticky w -pady 10
|
lappend pages [prefspage_colors $notebook] [mc "Colors"]
|
||||||
label $top.ui -padx 40 -relief sunk -background $uicolor
|
lappend pages [prefspage_fonts $notebook] [mc "Fonts"]
|
||||||
${NS}::button $top.uibut -text [mc "Interface"] \
|
foreach {page title} $pages {
|
||||||
-command [list choosecolor uicolor {} $top.ui [mc "interface"] setui]
|
if {$use_notebook} {
|
||||||
grid x $top.uibut $top.ui -sticky w
|
$notebook add $page -text $title
|
||||||
label $top.bg -padx 40 -relief sunk -background $bgcolor
|
} else {
|
||||||
${NS}::button $top.bgbut -text [mc "Background"] \
|
set btn [${NS}::button $notebook.b_[string map {. X} $page] \
|
||||||
-command [list choosecolor bgcolor {} $top.bg [mc "background"] setbg]
|
-text $title -command [list raise $page]]
|
||||||
grid x $top.bgbut $top.bg -sticky w
|
$page configure -text $title
|
||||||
label $top.fg -padx 40 -relief sunk -background $fgcolor
|
grid $btn -row 0 -column [incr col] -sticky w
|
||||||
${NS}::button $top.fgbut -text [mc "Foreground"] \
|
grid $page -row 1 -column 0 -sticky news -columnspan 100
|
||||||
-command [list choosecolor fgcolor {} $top.fg [mc "foreground"] setfg]
|
}
|
||||||
grid x $top.fgbut $top.fg -sticky w
|
}
|
||||||
label $top.diffold -padx 40 -relief sunk -background [lindex $diffcolors 0]
|
|
||||||
${NS}::button $top.diffoldbut -text [mc "Diff: old lines"] \
|
|
||||||
-command [list choosecolor diffcolors 0 $top.diffold [mc "diff old lines"] \
|
|
||||||
[list $ctext tag conf d0 -foreground]]
|
|
||||||
grid x $top.diffoldbut $top.diffold -sticky w
|
|
||||||
label $top.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 1]
|
|
||||||
${NS}::button $top.diffnewbut -text [mc "Diff: new lines"] \
|
|
||||||
-command [list choosecolor diffcolors 1 $top.diffnew [mc "diff new lines"] \
|
|
||||||
[list $ctext tag conf dresult -foreground]]
|
|
||||||
grid x $top.diffnewbut $top.diffnew -sticky w
|
|
||||||
label $top.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 2]
|
|
||||||
${NS}::button $top.hunksepbut -text [mc "Diff: hunk header"] \
|
|
||||||
-command [list choosecolor diffcolors 2 $top.hunksep \
|
|
||||||
[mc "diff hunk header"] \
|
|
||||||
[list $ctext tag conf hunksep -foreground]]
|
|
||||||
grid x $top.hunksepbut $top.hunksep -sticky w
|
|
||||||
label $top.markbgsep -padx 40 -relief sunk -background $markbgcolor
|
|
||||||
${NS}::button $top.markbgbut -text [mc "Marked line bg"] \
|
|
||||||
-command [list choosecolor markbgcolor {} $top.markbgsep \
|
|
||||||
[mc "marked line background"] \
|
|
||||||
[list $ctext tag conf omark -background]]
|
|
||||||
grid x $top.markbgbut $top.markbgsep -sticky w
|
|
||||||
label $top.selbgsep -padx 40 -relief sunk -background $selectbgcolor
|
|
||||||
${NS}::button $top.selbgbut -text [mc "Select bg"] \
|
|
||||||
-command [list choosecolor selectbgcolor {} $top.selbgsep [mc "background"] setselbg]
|
|
||||||
grid x $top.selbgbut $top.selbgsep -sticky w
|
|
||||||
|
|
||||||
${NS}::label $top.cfont -text [mc "Fonts: press to choose"]
|
if {!$use_notebook} {
|
||||||
grid $top.cfont - -sticky w -pady 10
|
grid columnconfigure $notebook 0 -weight 1
|
||||||
mkfontdisp mainfont $top [mc "Main font"]
|
grid rowconfigure $notebook 1 -weight 1
|
||||||
mkfontdisp textfont $top [mc "Diff display font"]
|
raise [lindex $pages 0]
|
||||||
mkfontdisp uifont $top [mc "User interface font"]
|
}
|
||||||
|
|
||||||
|
grid $notebook -sticky news -padx 2 -pady 2
|
||||||
|
grid rowconfigure $top 0 -weight 1
|
||||||
|
grid columnconfigure $top 0 -weight 1
|
||||||
|
|
||||||
${NS}::frame $top.buts
|
${NS}::frame $top.buts
|
||||||
${NS}::button $top.buts.ok -text [mc "OK"] -command prefsok -default active
|
${NS}::button $top.buts.ok -text [mc "OK"] -command prefsok -default active
|
||||||
@ -10913,7 +10977,7 @@ proc doprefs {} {
|
|||||||
grid columnconfigure $top.buts 1 -weight 1 -uniform a
|
grid columnconfigure $top.buts 1 -weight 1 -uniform a
|
||||||
grid $top.buts - - -pady 10 -sticky ew
|
grid $top.buts - - -pady 10 -sticky ew
|
||||||
grid columnconfigure $top 2 -weight 1
|
grid columnconfigure $top 2 -weight 1
|
||||||
bind $top <Visibility> "focus $top.buts.ok"
|
bind $top <Visibility> [list focus $top.buts.ok]
|
||||||
}
|
}
|
||||||
|
|
||||||
proc choose_extdiff {} {
|
proc choose_extdiff {} {
|
||||||
|
Reference in New Issue
Block a user