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