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