lib / option.tclon commit git-gui: Mark forgotten strings for translation. (700e560)
   1# git-gui options editor
   2# Copyright (C) 2006, 2007 Shawn Pearce
   3
   4proc save_config {} {
   5        global default_config font_descs
   6        global repo_config global_config
   7        global repo_config_new global_config_new
   8        global ui_comm_spell
   9
  10        foreach option $font_descs {
  11                set name [lindex $option 0]
  12                set font [lindex $option 1]
  13                font configure $font \
  14                        -family $global_config_new(gui.$font^^family) \
  15                        -size $global_config_new(gui.$font^^size)
  16                font configure ${font}bold \
  17                        -family $global_config_new(gui.$font^^family) \
  18                        -size $global_config_new(gui.$font^^size)
  19                font configure ${font}italic \
  20                        -family $global_config_new(gui.$font^^family) \
  21                        -size $global_config_new(gui.$font^^size)
  22                set global_config_new(gui.$name) [font configure $font]
  23                unset global_config_new(gui.$font^^family)
  24                unset global_config_new(gui.$font^^size)
  25        }
  26
  27        foreach name [array names default_config] {
  28                set value $global_config_new($name)
  29                if {$value ne $global_config($name)} {
  30                        if {$value eq $default_config($name)} {
  31                                catch {git config --global --unset $name}
  32                        } else {
  33                                regsub -all "\[{}\]" $value {"} value
  34                                git config --global $name $value
  35                        }
  36                        set global_config($name) $value
  37                        if {$value eq $repo_config($name)} {
  38                                catch {git config --unset $name}
  39                                set repo_config($name) $value
  40                        }
  41                }
  42        }
  43
  44        foreach name [array names default_config] {
  45                set value $repo_config_new($name)
  46                if {$value ne $repo_config($name)} {
  47                        if {$value eq $global_config($name)} {
  48                                catch {git config --unset $name}
  49                        } else {
  50                                regsub -all "\[{}\]" $value {"} value
  51                                git config $name $value
  52                        }
  53                        set repo_config($name) $value
  54                }
  55        }
  56
  57        if {[info exists repo_config(gui.spellingdictionary)]} {
  58                set value $repo_config(gui.spellingdictionary)
  59                if {$value eq {none}} {
  60                        if {[info exists ui_comm_spell]} {
  61                                $ui_comm_spell stop
  62                        }
  63                } elseif {[info exists ui_comm_spell]} {
  64                        $ui_comm_spell lang $value
  65                }
  66        }
  67}
  68
  69proc do_options {} {
  70        global repo_config global_config font_descs
  71        global repo_config_new global_config_new
  72        global ui_comm_spell
  73
  74        array unset repo_config_new
  75        array unset global_config_new
  76        foreach name [array names repo_config] {
  77                set repo_config_new($name) $repo_config($name)
  78        }
  79        load_config 1
  80        foreach name [array names repo_config] {
  81                switch -- $name {
  82                gui.diffcontext {continue}
  83                }
  84                set repo_config_new($name) $repo_config($name)
  85        }
  86        foreach name [array names global_config] {
  87                set global_config_new($name) $global_config($name)
  88        }
  89
  90        set w .options_editor
  91        toplevel $w
  92        wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
  93
  94        frame $w.buttons
  95        button $w.buttons.restore -text [mc "Restore Defaults"] \
  96                -default normal \
  97                -command do_restore_defaults
  98        pack $w.buttons.restore -side left
  99        button $w.buttons.save -text [mc Save] \
 100                -default active \
 101                -command [list do_save_config $w]
 102        pack $w.buttons.save -side right
 103        button $w.buttons.cancel -text [mc "Cancel"] \
 104                -default normal \
 105                -command [list destroy $w]
 106        pack $w.buttons.cancel -side right -padx 5
 107        pack $w.buttons -side bottom -fill x -pady 10 -padx 10
 108
 109        labelframe $w.repo -text [mc "%s Repository" [reponame]]
 110        labelframe $w.global -text [mc "Global (All Repositories)"]
 111        pack $w.repo -side left -fill both -expand 1 -pady 5 -padx 5
 112        pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5
 113
 114        set optid 0
 115        foreach option {
 116                {t user.name {mc "User Name"}}
 117                {t user.email {mc "Email Address"}}
 118
 119                {b merge.summary {mc "Summarize Merge Commits"}}
 120                {i-1..5 merge.verbosity {mc "Merge Verbosity"}}
 121                {b merge.diffstat {mc "Show Diffstat After Merge"}}
 122
 123                {b gui.trustmtime  {mc "Trust File Modification Timestamps"}}
 124                {b gui.pruneduringfetch {mc "Prune Tracking Branches During Fetch"}}
 125                {b gui.matchtrackingbranch {mc "Match Tracking Branches"}}
 126                {b gui.fastcopyblame {mc "Blame Copy Only On Changed Files"}}
 127                {i-20..200 gui.copyblamethreshold {mc "Minimum Letters To Blame Copy On"}}
 128                {i-0..300 gui.blamehistoryctx {mc "Blame History Context Radius (days)"}}
 129                {i-1..99 gui.diffcontext {mc "Number of Diff Context Lines"}}
 130                {i-0..99 gui.commitmsgwidth {mc "Commit Message Text Width"}}
 131                {t gui.newbranchtemplate {mc "New Branch Name Template"}}
 132                } {
 133                set type [lindex $option 0]
 134                set name [lindex $option 1]
 135                set text [eval [lindex $option 2]]
 136                incr optid
 137                foreach f {repo global} {
 138                        switch -glob -- $type {
 139                        b {
 140                                checkbutton $w.$f.$optid -text $text \
 141                                        -variable ${f}_config_new($name) \
 142                                        -onvalue true \
 143                                        -offvalue false
 144                                pack $w.$f.$optid -side top -anchor w
 145                        }
 146                        i-* {
 147                                regexp -- {-(\d+)\.\.(\d+)$} $type _junk min max
 148                                frame $w.$f.$optid
 149                                label $w.$f.$optid.l -text "$text:"
 150                                pack $w.$f.$optid.l -side left -anchor w -fill x
 151                                spinbox $w.$f.$optid.v \
 152                                        -textvariable ${f}_config_new($name) \
 153                                        -from $min \
 154                                        -to $max \
 155                                        -increment 1 \
 156                                        -width [expr {1 + [string length $max]}]
 157                                bind $w.$f.$optid.v <FocusIn> {%W selection range 0 end}
 158                                pack $w.$f.$optid.v -side right -anchor e -padx 5
 159                                pack $w.$f.$optid -side top -anchor w -fill x
 160                        }
 161                        t {
 162                                frame $w.$f.$optid
 163                                label $w.$f.$optid.l -text "$text:"
 164                                entry $w.$f.$optid.v \
 165                                        -borderwidth 1 \
 166                                        -relief sunken \
 167                                        -width 20 \
 168                                        -textvariable ${f}_config_new($name)
 169                                pack $w.$f.$optid.l -side left -anchor w
 170                                pack $w.$f.$optid.v -side left -anchor w \
 171                                        -fill x -expand 1 \
 172                                        -padx 5
 173                                pack $w.$f.$optid -side top -anchor w -fill x
 174                        }
 175                        }
 176                }
 177        }
 178
 179        set all_dicts [linsert \
 180                [spellcheck::available_langs] \
 181                0 \
 182                none]
 183        incr optid
 184        foreach f {repo global} {
 185                if {![info exists ${f}_config_new(gui.spellingdictionary)]} {
 186                        if {[info exists ui_comm_spell]} {
 187                                set value [$ui_comm_spell lang]
 188                        } else {
 189                                set value none
 190                        }
 191                        set ${f}_config_new(gui.spellingdictionary) $value
 192                }
 193
 194                frame $w.$f.$optid
 195                label $w.$f.$optid.l -text [mc "Spelling Dictionary:"]
 196                eval tk_optionMenu $w.$f.$optid.v \
 197                        ${f}_config_new(gui.spellingdictionary) \
 198                        $all_dicts
 199                pack $w.$f.$optid.l -side left -anchor w -fill x
 200                pack $w.$f.$optid.v -side right -anchor e -padx 5
 201                pack $w.$f.$optid -side top -anchor w -fill x
 202        }
 203        unset all_dicts
 204
 205        set all_fonts [lsort [font families]]
 206        foreach option $font_descs {
 207                set name [lindex $option 0]
 208                set font [lindex $option 1]
 209                set text [eval [lindex $option 2]]
 210
 211                set global_config_new(gui.$font^^family) \
 212                        [font configure $font -family]
 213                set global_config_new(gui.$font^^size) \
 214                        [font configure $font -size]
 215
 216                frame $w.global.$name
 217                label $w.global.$name.l -text "$text:"
 218                button $w.global.$name.b \
 219                        -text [mc "Change Font"] \
 220                        -command [list \
 221                                choose_font::pick \
 222                                $w \
 223                                [mc "Choose %s" $text] \
 224                                global_config_new(gui.$font^^family) \
 225                                global_config_new(gui.$font^^size) \
 226                                ]
 227                label $w.global.$name.f -textvariable global_config_new(gui.$font^^family)
 228                label $w.global.$name.s -textvariable global_config_new(gui.$font^^size)
 229                label $w.global.$name.pt -text [mc "pt."]
 230                pack $w.global.$name.l -side left -anchor w
 231                pack $w.global.$name.b -side right -anchor e
 232                pack $w.global.$name.pt -side right -anchor w
 233                pack $w.global.$name.s -side right -anchor w
 234                pack $w.global.$name.f -side right -anchor w
 235                pack $w.global.$name -side top -anchor w -fill x
 236        }
 237
 238        bind $w <Visibility> "grab $w; focus $w.buttons.save"
 239        bind $w <Key-Escape> "destroy $w"
 240        bind $w <Key-Return> [list do_save_config $w]
 241
 242        if {[is_MacOSX]} {
 243                set t [mc "Preferences"]
 244        } else {
 245                set t [mc "Options"]
 246        }
 247        wm title $w "[appname] ([reponame]): $t"
 248        tkwait window $w
 249}
 250
 251proc do_restore_defaults {} {
 252        global font_descs default_config repo_config
 253        global repo_config_new global_config_new
 254
 255        foreach name [array names default_config] {
 256                set repo_config_new($name) $default_config($name)
 257                set global_config_new($name) $default_config($name)
 258        }
 259
 260        foreach option $font_descs {
 261                set name [lindex $option 0]
 262                set repo_config(gui.$name) $default_config(gui.$name)
 263        }
 264        apply_config
 265
 266        foreach option $font_descs {
 267                set name [lindex $option 0]
 268                set font [lindex $option 1]
 269                set global_config_new(gui.$font^^family) \
 270                        [font configure $font -family]
 271                set global_config_new(gui.$font^^size) \
 272                        [font configure $font -size]
 273        }
 274}
 275
 276proc do_save_config {w} {
 277        if {[catch {save_config} err]} {
 278                error_popup [strcat [mc "Failed to completely save options:"] "\n\n$err"]
 279        }
 280        reshow_diff
 281        destroy $w
 282}