|  | # goto line number | 
|  | # based on code from gitk, Copyright (C) Paul Mackerras | 
|  |  | 
|  | class linebar { | 
|  |  | 
|  | field w | 
|  | field ctext | 
|  |  | 
|  | field linenum   {} | 
|  |  | 
|  | constructor new {i_w i_text args} { | 
|  | global use_ttk NS | 
|  | set w      $i_w | 
|  | set ctext  $i_text | 
|  |  | 
|  | ${NS}::frame  $w | 
|  | ${NS}::label  $w.l       -text [mc "Goto Line:"] | 
|  | tentry  $w.ent \ | 
|  | -textvariable ${__this}::linenum \ | 
|  | -background lightgreen \ | 
|  | -validate key \ | 
|  | -validatecommand [cb _validate %P] | 
|  | ${NS}::button $w.bn      -text [mc Go] -command [cb _goto] | 
|  |  | 
|  | pack   $w.l   -side left | 
|  | pack   $w.bn  -side right | 
|  | pack   $w.ent -side left -expand 1 -fill x | 
|  |  | 
|  | eval grid conf $w -sticky we $args | 
|  | grid remove $w | 
|  |  | 
|  | trace add variable linenum write [cb _goto_cb] | 
|  | bind $w.ent <Return> [cb _goto] | 
|  | bind $w.ent <Escape> [cb hide] | 
|  |  | 
|  | bind $w <Destroy> [list delete_this $this] | 
|  | return $this | 
|  | } | 
|  |  | 
|  | method show {} { | 
|  | if {![visible $this]} { | 
|  | grid $w | 
|  | } | 
|  | focus -force $w.ent | 
|  | } | 
|  |  | 
|  | method hide {} { | 
|  | if {[visible $this]} { | 
|  | $w.ent delete 0 end | 
|  | focus $ctext | 
|  | grid remove $w | 
|  | } | 
|  | } | 
|  |  | 
|  | method visible {} { | 
|  | return [winfo ismapped $w] | 
|  | } | 
|  |  | 
|  | method editor {} { | 
|  | return $w.ent | 
|  | } | 
|  |  | 
|  | method _validate {P} { | 
|  | # only accept numbers as input | 
|  | string is integer $P | 
|  | } | 
|  |  | 
|  | method _goto_cb {name ix op} { | 
|  | after idle [cb _goto 1] | 
|  | } | 
|  |  | 
|  | method _goto {{nohide {0}}} { | 
|  | if {$linenum ne {}} { | 
|  | $ctext see $linenum.0 | 
|  | if {!$nohide} { | 
|  | hide $this | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | } |