git-gui: clear the goto line input when hiding
[git] / lib / line.tcl
1 # goto line number
2 # based on code from gitk, Copyright (C) Paul Mackerras
3
4 class linebar {
5
6 field w
7 field ctext
8
9 field linenum   {}
10
11 constructor new {i_w i_text args} {
12         global use_ttk NS
13         set w      $i_w
14         set ctext  $i_text
15
16         ${NS}::frame  $w
17         ${NS}::label  $w.l       -text [mc "Goto Line:"]
18         entry  $w.ent \
19                 -textvariable ${__this}::linenum \
20                 -background lightgreen \
21                 -validate key \
22                 -validatecommand [cb _validate %P]
23         ${NS}::button $w.bn      -text [mc Go] -command [cb _incrgoto]
24
25         pack   $w.l   -side left
26         pack   $w.bn  -side right
27         pack   $w.ent -side left -expand 1 -fill x
28
29         eval grid conf $w -sticky we $args
30         grid remove $w
31
32         bind $w.ent <Return> [cb _incrgoto]
33         bind $w.ent <Escape> [cb hide]
34
35         bind $w <Destroy> [list delete_this $this]
36         return $this
37 }
38
39 method show {} {
40         if {![visible $this]} {
41                 grid $w
42         }
43         focus -force $w.ent
44 }
45
46 method hide {} {
47         if {[visible $this]} {
48                 $w.ent delete 0 end
49                 focus $ctext
50                 grid remove $w
51         }
52 }
53
54 method visible {} {
55         return [winfo ismapped $w]
56 }
57
58 method editor {} {
59         return $w.ent
60 }
61
62 method _validate {P} {
63         # only accept numbers as input
64         string is integer $P
65 }
66
67 method _incrgoto {} {
68         if {$linenum ne {}} {
69                 $ctext see $linenum.0
70                 hide $this
71         }
72 }
73
74 }