# 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 } } } }