summaryrefslogtreecommitdiffstats
path: root/apol/goto.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'apol/goto.tcl')
-rw-r--r--apol/goto.tcl78
1 files changed, 78 insertions, 0 deletions
diff --git a/apol/goto.tcl b/apol/goto.tcl
new file mode 100644
index 0000000..7988ebb
--- /dev/null
+++ b/apol/goto.tcl
@@ -0,0 +1,78 @@
+# Copyright (C) 2007 Tresys Technology, LLC
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+namespace eval Apol_Goto {
+ variable dialog .apol_goto_dialog
+ variable line_num
+}
+
+proc Apol_Goto::goto {} {
+ variable dialog
+ if {![winfo exists $dialog]} {
+ _create_dialog
+ } else {
+ raise $dialog
+ variable entry
+ focus $entry
+ $entry selection range 0 end
+ }
+}
+
+
+########## private functions below ##########
+
+proc Apol_Goto::_create_dialog {} {
+ variable dialog
+ Dialog $dialog -title "Goto Line" -separator 0 -parent . \
+ -default 0 -cancel 1 -modal none -homogeneous 1
+ set top_frame [$dialog getframe]
+ set entry_label [label $top_frame.l -text "Goto Line:" -anchor e]
+ variable entry [entry $top_frame.e -bg white \
+ -textvariable Apol_Goto::line_num -width 10]
+ pack $entry_label -side left -padx 5 -pady 5
+ pack $entry -side left -padx 5 -pady 5 -expand 1 -fill x
+
+ $dialog add -text "OK" -command [list Apol_Goto::_do_goto]
+ $dialog add -text "Cancel" -command [list destroy $dialog]
+
+ $entry selection range 0 end
+ focus $entry
+ $dialog draw
+ wm resizable $dialog 0 0
+}
+
+proc Apol_Goto::_do_goto {} {
+ set w [ApolTop::getCurrentTextWidget]
+ if {$w == {}} {
+ return
+ }
+
+ variable line_num
+ if {[string is integer -strict $line_num] != 1} {
+ tk_messageBox -icon error \
+ -type ok \
+ -title "Goto Line" \
+ -message "$line_num is not a valid line number."
+ } else {
+ $w tag remove sel 0.0 end
+ $w mark set insert ${line_num}.0
+ $w see ${line_num}.0
+ $w tag add sel $line_num.0 $line_num.end
+ focus $w
+ }
+
+ variable dialog
+ destroy $dialog
+}