You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.3 KiB
81 lines
1.3 KiB
# 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 |
|
} |
|
} |
|
} |
|
|
|
}
|
|
|