Merge branch 'master' of git://repo.or.cz/git-gui
[git.git] / git-gui / 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         tentry  $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 _goto]
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         trace add variable linenum write [cb _goto_cb]
33         bind $w.ent <Return> [cb _goto]
34         bind $w.ent <Escape> [cb hide]
35
36         bind $w <Destroy> [list delete_this $this]
37         return $this
38 }
39
40 method show {} {
41         if {![visible $this]} {
42                 grid $w
43         }
44         focus -force $w.ent
45 }
46
47 method hide {} {
48         if {[visible $this]} {
49                 $w.ent delete 0 end
50                 focus $ctext
51                 grid remove $w
52         }
53 }
54
55 method visible {} {
56         return [winfo ismapped $w]
57 }
58
59 method editor {} {
60         return $w.ent
61 }
62
63 method _validate {P} {
64         # only accept numbers as input
65         string is integer $P
66 }
67
68 method _goto_cb {name ix op} {
69         after idle [cb _goto 1]
70 }
71
72 method _goto {{nohide {0}}} {
73         if {$linenum ne {}} {
74                 $ctext see $linenum.0
75                 if {!$nohide} {
76                         hide $this
77                 }
78         }
79 }
80
81 }