summaryrefslogtreecommitdiff
path: root/gdb/gdbtk/library/helpviewer.itb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/gdbtk/library/helpviewer.itb')
-rw-r--r--gdb/gdbtk/library/helpviewer.itb286
1 files changed, 286 insertions, 0 deletions
diff --git a/gdb/gdbtk/library/helpviewer.itb b/gdb/gdbtk/library/helpviewer.itb
new file mode 100644
index 00000000000..a366b689979
--- /dev/null
+++ b/gdb/gdbtk/library/helpviewer.itb
@@ -0,0 +1,286 @@
+# Viewer for HTML help info
+# Copyright 1998, 1999 Cygnus Solutions
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License (GPL) 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.
+
+
+# -----------------------------------------------------------------------------
+# NAME:
+# HtmlViewer::constructor
+#
+# SYNOPSIS:
+# constructor args
+#
+# DESC:
+# Creates the Help Viewer window.
+# -----------------------------------------------------------------------------
+body HtmlViewer::constructor {args} {
+ window_name "Help"
+ eval itk_initialize $args
+ _buildwin
+}
+
+
+# -----------------------------------------------------------------------------
+# NAME:
+# private method HtmlViewer::_buildwin
+#
+# SYNOPSIS:
+# _buildwin args
+#
+# DESC:
+# This function is called by the constructor to build the widget. It
+# creates pulldown menus, buttons, a stack, and a scrolledhtml widget.
+# Finally it loads help/index.html. This last step should change if
+# this widget is ever used for anything but help.
+# -----------------------------------------------------------------------------
+body HtmlViewer::_buildwin {} {
+ global GDBTK_LIBRARY gdb_ImageDir
+
+ set _links [PageStack \#auto]
+
+ # create pulldown menu
+ set menu [menu $itk_interior.m -tearoff 0]
+ $menu add cascade -menu $menu.file -label "File" -underline 0
+ set _m [menu $menu.file]
+ $_m add command -label "Back" -underline 0 -command "$this back"
+ $_m add command -label "Forward" -underline 0 -command "$this forward"
+ $_m add command -label "Home" -underline 0 -command "$this link $file"
+ $_m add separator
+ $_m add command -label "Close" -underline 0 -command "delete object $this"
+ $menu add cascade -menu $menu.topic -label "Topics" -underline 0
+ set _t [menu $menu.topic]
+ foreach t $topics {
+ $_t add command -label [lindex $t 0] -command "$this link [lindex $t 1]"
+ }
+ [winfo toplevel $itk_interior] configure -menu $menu
+
+ # create buttons
+ set _f [frame $itk_interior.b]
+ button $_f.back -command "$this back" \
+ -image [image create photo -file [file join $gdb_ImageDir back.gif]]
+ button $_f.fore -command "$this forward" \
+ -image [image create photo -file [file join $gdb_ImageDir fore.gif]]
+ button $_f.home -command "$this link $file" \
+ -image [image create photo -file [file join $gdb_ImageDir home.gif]]
+ standard_toolbar $_f $_f.back $_f.fore $_f.home
+
+ _enable 0 back fore
+
+ # create html widget
+ set _html [iwidgets::scrolledhtml $itk_interior.a -linkcommand "$this link"]
+
+ # get things going by loading index.html
+ $_html import [file join $GDBTK_LIBRARY help $file]
+ $_links push $file
+
+ pack $_f -side top -fill x
+ pack $_html -expand yes -fill both
+
+}
+
+# -----------------------------------------------------------------------------
+# NAME: public method PageStack::push
+# SYNOPSIS: push val
+# DESC: Pushes a value onto the stack.
+# -----------------------------------------------------------------------------
+body PageStack::push {val} {
+ incr _ptr
+ incr _max
+ if {$_ptr < $_max} {
+ set _max $_ptr
+ }
+ set _stack($_ptr) $val
+}
+
+# -----------------------------------------------------------------------------
+# NAME: public method PageStack::back
+# SYNOPSIS: back
+# DESC: Moves the stack pointer back by one.
+# RETURNS: Returns the value on the stack, or 0 on error.
+# -----------------------------------------------------------------------------
+body PageStack::back {} {
+ if {$_ptr > 0} {
+ incr _ptr -1
+ return $_stack($_ptr)
+ }
+ return 0
+}
+
+# -----------------------------------------------------------------------------
+# NAME: public method PageStack::next
+# SYNOPSIS: next
+# DESC: Moves the stack pointer forward by one.
+# RETURNS: Returns the value on the stack, or 0 on error.
+# -----------------------------------------------------------------------------
+body PageStack::next {} {
+ if {$_ptr < $_max} {
+ incr _ptr
+ return $_stack($_ptr)
+ }
+ return 0
+}
+
+# -----------------------------------------------------------------------------
+# NAME: public method PageStack:more
+# SYNOPSIS: more
+# DESC: Indicates if the stack pointer is not at the top.
+# RETURNS: Returns 1 if PageStack::next will suceed, 0 otherwise.
+# -----------------------------------------------------------------------------
+body PageStack::more {} {
+ if {$_ptr < $_max} {
+ return 1
+ }
+ return 0
+}
+
+# -----------------------------------------------------------------------------
+# NAME: public method PageStack:less
+# SYNOPSIS: less
+# DESC: Indicates if the stack pointer is not at the bottom of stack.
+# RETURNS: Returns 1 if PageStack::back will suceed, 0 otherwise.
+# -----------------------------------------------------------------------------
+body PageStack::less {} {
+ if {$_ptr > 0} {
+ return 1
+ }
+ return 0
+}
+
+# -----------------------------------------------------------------------------
+# NAME: public method PageStack:current
+# SYNOPSIS: current
+# RETURNS: Returns the current value on the stack.
+# -----------------------------------------------------------------------------
+body PageStack::current {} {
+ if {$_ptr > 0} {
+ return $_stack($_ptr)
+ }
+ return 0
+}
+
+# ------------------------------------------------------------------------------
+# NAME:
+# private method HtmlViewer::_enable
+#
+# SYNOPSIS:
+# _enable { on args }
+#
+# DESC:
+# Enables or disables buttons and menus.
+#
+# ARGS:
+# on - "1" to enable, "0" to disable
+# args - things to enable/disable. May include "back",
+# "fore", and "home"
+#
+# ------------------------------------------------------------------------------
+body HtmlViewer::_enable { on args } {
+ if {$on} {
+ set state normal
+ } else {
+ set state disabled
+ }
+
+ foreach a $args {
+ switch $a {
+ back {
+ # set state of "back"
+ $_m entryconfigure 0 -state $state
+ $_f.back configure -state $state
+ }
+ fore {
+ # set state of "forward"
+ $_m entryconfigure 1 -state $state
+ $_f.fore configure -state $state
+ }
+ home {
+ # set state of "home"
+ $_m entryconfigure 2 -state $state
+ $_f.home configure -state $state
+ }
+ }
+ }
+}
+
+# ------------------------------------------------------------------------------
+# NAME: public method HtmlViewer::back
+# SYNOPSIS: back
+# DESC: Moves to the previous page
+# ------------------------------------------------------------------------------
+body HtmlViewer::back {} {
+ set res [$_links back]
+ if {$res != 0} {
+ load $res
+ if {![$_links less]} {
+ _enable 0 back
+ }
+ }
+}
+
+# ------------------------------------------------------------------------------
+# NAME: public method HtmlViewer::forward
+# SYNOPSIS: forward
+# DESC: Moves to the next page
+# ------------------------------------------------------------------------------
+body HtmlViewer::forward {} {
+ set res [$_links next]
+ if {$res != 0} {
+ load $res
+ if {![$_links more]} {
+ _enable 0 fore
+ }
+ }
+}
+
+# ------------------------------------------------------------------------------
+# NAME: public method HtmlViewer::link
+# SYNOPSIS: link page
+# ARDS: page - link to the page to load
+# DESC: Saves the page on the stack and calls the "load" method
+# ------------------------------------------------------------------------------
+body HtmlViewer::link {page} {
+ if {$page != [$_links current]} {
+ $_links push $page
+ load $page
+ if {![$_links more]} {
+ _enable 0 fore
+ }
+ }
+}
+
+# ------------------------------------------------------------------------------
+# NAME: private method HtmlViewer::load
+# SYNOPSIS: load link
+# DESC: Disables menus and buttons, sets cursor, loads a page into
+# the html widget, then resets cursor and enables the menus
+# and buttons
+# ------------------------------------------------------------------------------
+body HtmlViewer::load {link} {
+ _enable 0 back fore home
+ $itk_interior configure -cursor watch
+ $_html import -link $link
+ $itk_interior configure -cursor ""
+ _enable 1 back fore home
+}
+
+# ------------------------------------------------------------------------------
+# NAME: public proc HtmlViewer::open_help
+# SYNOPSIS: HtmlViewer::open_help file
+# DESC: If the prefs are set to use a browser, attempts
+# to do so. Otherwise, uses builtin HtmlViewer class.
+# ------------------------------------------------------------------------------
+body HtmlViewer::open_help {hfile} {
+ set link file://[file join $::GDBTK_LIBRARY help $hfile]
+ if {![pref get gdb/help/browser] || ![::open_url $link]} {
+ ManagedWin::open HtmlViewer -file $hfile
+ }
+}