-;;; idlw-toolbar.el --- A debugging toolbar for IDLWAVE
-;; Copyright (c) 1999 Carsten Dominik
-;; Copyright (c) 1999 Free Software Foundation
+;;; idlw-toolbar.el --- a debugging toolbar for IDLWAVE
+;; Copyright (c) 1999, 2000, 2001,2002 Free Software Foundation
-;; Author: Carsten Dominik <dominik@strw.leidenuniv.nl>
-;; Version: 3.11
-;; Date: $Date: 2000/01/03 14:26:03 $
+;; Author: Carsten Dominik <dominik@astro.uva.nl>
+;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
+;; Version: 5.5
;; Keywords: processes
;; This file is part of GNU Emacs.
;; This file implements a debugging toolbar for IDLWAVE. It requires
;; Emacs or XEmacs with toolbar and xpm support.
+;; New versions of IDLWAVE, documentation, and more information
+;; available from:
+;; http://idlwave.org
+
\f
;;; Code:
(featurep 'xpm) ; need xpm
(featurep 'toolbar)) ; ... and the toolbar
(and (not (featurep 'xemacs)) ; This is Emacs
- (boundp 'toolbar-button-margin) ; need toolbar
+ (boundp 'tool-bar-button-margin) ; need toolbar
(fboundp 'image-type-available-p) ; need image stuff
(image-type-available-p 'xpm)) ; need xpm
))
(message "Sorry, IDLWAVE xpm toolbar cannot be used on this version of Emacs")
;; OK, we can define a toolbar
+(defconst idlwave-toolbar-is-possible t
+ "When defined, indicates that a toolbar is possible with this Emacs.")
(defvar idlwave-toolbar-compile-icon
(idlwave-toolbar-make-button
"/* XPM */
static char * file[] = {
\"28 28 2 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\" \",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\"R c #FFFF00000000\",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\"R c #FFFF00000000\",
\" \",
\" \"};")
"The Stop At icon.")
-(defvar idlwave-toolbar-stop-in-icon
- (idlwave-toolbar-make-button
- "/* XPM */
-static char * file[] = {
-\"28 28 4 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
-\"_ c #FFFFFFFFFFFF\",
-\". c #000000000000\",
-\"R c #FFFF00000000\",
-\" \",
-\" \",
-\" \",
-\" \",
-\" ........ \",
-\" .RRRRRRRR. \",
-\" .RRRRRRRRRR. \",
-\" .RRRRRRRRRRRR. \",
-\" .RRR___RR___RRR. \",
-\" .RRRR__RRRR__RRRR. \",
-\" .RRRRR__RRRR__RRRRR. \",
-\" .RRRRR__RRRR__RRRRR. \",
-\" .RRRRR__RRRR__RRRRR. \",
-\" .RRRR__RRRRRR__RRRR. \",
-\" .RRRRR__RRRR__RRRRR. \",
-\" .RRRRR__RRRR__RRRRR. \",
-\" .RRRRR__RRRR__RRRRR. \",
-\" .RRRRR__RRRR__RRRRR. \",
-\" .RRRR___RR___RRRR. \",
-\" .RRRRRRRRRRRRRR. \",
-\" .RRRRRRRRRRRR. \",
-\" .RRRRRRRRRR. \",
-\" .RRRRRRRR. \",
-\" ........ \",
-\" \",
-\" \",
-\" \",
-\" \"};")
- "The Stop in icon.")
-
(defvar idlwave-toolbar-clear-at-icon
(idlwave-toolbar-make-button
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\"R c #FFFF00000000\",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 4 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\"X c #FFFFFFFFFFFF\",
\"R c #FFFF00000000\",
\" \"};")
"The Clear-All icon.")
+(defvar idlwave-toolbar-stop-beginning-icon
+ (idlwave-toolbar-make-button
+ "/* XPM */
+static char * file[] = {
+\"28 28 4 1\",
+\" c None s backgroundToolBarColor\",
+\". c #000000000000\",
+\"X c #FFFF00000000\",
+\"_ c #FFFFFFFFFFFF\",
+\" \",
+\" \",
+\" \",
+\" \",
+\" ........ \",
+\" .XXXXXXXX. \",
+\" .XXXXXXXXXX. \",
+\" .XXXXXXXXXXXX. \",
+\" .XX..XXXXXXXXXX. \",
+\" .XX.XX.X______XXX. \",
+\" .XXX.XX.X______XXXX. \",
+\" .XXXX..XXXXXXXXXXXX. \",
+\" .XXXXXXXXXX____XXXX. \",
+\" .XXXXXXXXXX____XXXX. \",
+\" .XXXXXXXXXXXXXXXXXX. \",
+\" .XXXXXXXXXX____XXXX. \",
+\" .XXXXXXXXXX____XXXX. \",
+\" .XXXXXXXXXXXXXXXXXX. \",
+\" .XXXXXXXXX____XXX. \",
+\" .XXXXXXXX____XX. \",
+\" .XXXXXXXXXXXX. \",
+\" .XXXXXXXXXX. \",
+\" .XXXXXXXX. \",
+\" ........ \",
+\" \",
+\" \",
+\" \",
+\" \"};")
+ "The Stop at Beginning icon.")
+
+(defvar idlwave-toolbar-stop-in-icon
+ (idlwave-toolbar-make-button
+ "/* XPM */
+static char * file[] = {
+\"28 28 4 1\",
+\" c None s backgroundToolBarColor\",
+\"_ c #FFFFFFFFFFFF\",
+\". c #000000000000\",
+\"R c #FFFF00000000\",
+\" \",
+\" \",
+\" \",
+\" \",
+\" ........ \",
+\" .RRRRRRRR. \",
+\" .RRRRRRRRRR. \",
+\" .RRRRRRRRRRRR. \",
+\" .RRR___RR___RRR. \",
+\" .RRRR__RRRR__RRRR. \",
+\" .RRRRR__RRRR__RRRRR. \",
+\" .RRRRR__RRRR__RRRRR. \",
+\" .RRRRR__RRRR__RRRRR. \",
+\" .RRRR__RRRRRR__RRRR. \",
+\" .RRRRR__RRRR__RRRRR. \",
+\" .RRRRR__RRRR__RRRRR. \",
+\" .RRRRR__RRRR__RRRRR. \",
+\" .RRRRR__RRRR__RRRRR. \",
+\" .RRRR___RR___RRRR. \",
+\" .RRRRRRRRRRRRRR. \",
+\" .RRRRRRRRRRRR. \",
+\" .RRRRRRRRRR. \",
+\" .RRRRRRRR. \",
+\" ........ \",
+\" \",
+\" \",
+\" \",
+\" \"};")
+ "The Stop in icon.")
+
(defvar idlwave-toolbar-edit-cmd-icon
(idlwave-toolbar-make-button
"/* XPM */
static char * file[] = {
\"28 28 2 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\" \",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". s FgColor c #000000000000\",
\"G c #0000BBBB0000\",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". s FgColor c #000000000000\",
\"G c #0000BBBB0000\",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 4 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\"G c #0000BBBB0000\",
\"R c #FFFF00000000\",
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\"G c #0000BBBB0000\",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\"G c #0000BBBB0000\",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\"G c #0000BBBB0000\",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 2 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". c #000000000000\",
\" \",
\" \",
"/* XPM */
static char * file[] = {
\"28 28 5 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". s FgColor c #000000000000\",
\"_ c #FFFFFFFFFFFF\",
\"G c #0000BBBB0000\",
"/* XPM */
static char * file[] = {
\"28 28 5 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\". s FgColor c #000000000000\",
\"_ c #FFFFFFFFFFFF\",
\"G c #0000BBBB0000\",
"/* XPM */
static char * file[] = {
\"28 28 3 1\",
-\" c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\" c None s backgroundToolBarColor\",
\"G c #0000BBBB0000\",
\". c #000000000000\",
\" \",
\" \"};")
"The Reset icon.")
+(defvar idlwave-toolbar-electric-debug-icon
+ (idlwave-toolbar-make-button
+ "/* XPM */
+static char * file[] = {
+\"28 28 8 1\",
+\" c None s backgroundToolBarColor\",
+\". c #CFC854\",
+\"+ c #EEDB0E\",
+\"@ c #D2C739\",
+\"# c #A39C54\",
+\"$ c #CDC020\",
+\"% c #020202\",
+\"& c #D60E36\",
+\" \",
+\" \",
+\" .. \",
+\" +++++@ \",
+\" ++++++ \",
+\" +++++@ \",
+\" +++++ \",
+\" #++++@ \",
+\" $+++@ %% %% \",
+\" ++++++$ % % \",
+\" #+++++$ % % \",
+\" #++$# %%% \",
+\" #+++ %%%%%%% \",
+\" .++ %%%%%%%%%%% \",
+\" ++$$ %%%%%%%%%%% \",
+\" .+@# &&%%%%%%%&& \",
+\" .++++# &&&&&%%%&&&&& \",
+\" +++++$ &&%%&&&&&%%&& \",
+\" $+++$ &&%%&&&&&%%&& \",
+\" $++@ &&&&&&%&&&&&& \",
+\" $+@ &&&&&&%&&&&&& \",
+\" @+ &&%%&&&&&%%&& \",
+\" ++. &%%&&%&&%%& \",
+\" +. &&&&%%%&&&& \",
+\" .+ &&%%%%%&& \",
+\" ++ %%%%%%% \",
+\" . %%% \",
+\" \"};")
+ "The electric debug icon.")
+
(defvar idlwave-toolbar
'(
[idlwave-toolbar-compile-icon
idlwave-shell-break-here
(eq major-mode 'idlwave-mode)
"Set Breakpoint at selected position"]
- [idlwave-toolbar-stop-in-icon
- idlwave-shell-break-in
- t
- "Stop in Function with name near at point"]
[idlwave-toolbar-clear-at-icon
idlwave-shell-clear-current-bp
t
idlwave-shell-clear-all-bp
t
"Clear all Breakpoints"]
+ [idlwave-toolbar-stop-beginning-icon
+ idlwave-shell-break-this-module
+ (eq major-mode 'idlwave-mode)
+ "Stop at beginning of enclosing Routine"]
+ [idlwave-toolbar-stop-in-icon
+ idlwave-shell-break-in
+ t
+ "Stop in Routine with name near point"]
[idlwave-toolbar-edit-cmd-icon
idlwave-shell-edit-default-command-line
t
idlwave-shell-reset
t
"Reset IDL (RETALL & CLOSE,/ALL and more)"]
+ [idlwave-toolbar-electric-debug-icon
+ idlwave-shell-electric-debug-mode
+ (eq major-mode 'idlwave-mode)
+ "Toggle Electric Debug Mode"]
))
-
-;; Add the toolbar to all open idlwave buffers when the shell starts.
-(add-hook 'idlwave-shell-mode-hook 'idlwave-toolbar-add-everywhere)
-;; Make sure the toolbar will be added to any future idlwave-mode buffers
-(add-hook 'idlwave-mode-hook 'idlwave-toolbar-add)
-;; When the shell exits, remove the special toolbar everywhere.
+;; When the shell exits, arrange to remove the special toolbar everywhere.
(add-hook 'idlwave-shell-cleanup-hook
'idlwave-toolbar-remove-everywhere)
);; End can define toolbar
(defun idlwave-toolbar-add ()
"Add the IDLWAVE toolbar if appropriate."
(if (and (featurep 'xemacs) ; This is a noop on Emacs
+ (boundp 'idlwave-toolbar-is-possible)
(or (eq major-mode 'idlwave-mode)
(eq major-mode 'idlwave-shell-mode)))
(set-specifier default-toolbar (cons (current-buffer)
(defun idlwave-toolbar-remove ()
"Add the IDLWAVE toolbar if appropriate."
(if (and (featurep 'xemacs) ; This is a noop on Emacs
+ (boundp 'idlwave-toolbar-is-possible)
(or (eq major-mode 'idlwave-mode)
(eq major-mode 'idlwave-shell-mode)))
(remove-specifier default-toolbar (current-buffer))))
(defvar idlwave-shell-mode-map)
+(defvar idlwave-mode-map)
(defvar idlwave-toolbar-visible nil)
(defun idlwave-toolbar-add-everywhere ()
"Add the toolbar in all appropriate buffers."
- (if (featurep 'xemacs)
- ;; For XEmacs, map over all buffers to add toolbar
- (save-excursion
- (mapcar (lambda (buf)
- (set-buffer buf)
- (idlwave-toolbar-add))
- (buffer-list)))
- ;; For Emacs, add the key definitions to the mode maps
- (mapcar (lambda (x)
- (let* ((icon (aref x 0))
- (func (aref x 1))
- ;;(show (aref x 2))
- (help (aref x 3))
- (key (vector 'toolbar func))
- (def (list 'menu-item
- "a"
- func
- :image (symbol-value icon)
- :help help)))
- (define-key idlwave-mode-map key def)
- (define-key idlwave-shell-mode-map key def)))
- (reverse idlwave-toolbar)))
- (setq idlwave-toolbar-visible t))
+ (when (boundp 'idlwave-toolbar-is-possible)
+
+ ;; First make sure new buffers will get the toolbar
+ (add-hook 'idlwave-mode-hook 'idlwave-toolbar-add)
+ ;; Then add it to all existing buffers
+ (if (featurep 'xemacs)
+ ;; For XEmacs, map over all buffers to add toolbar
+ (save-excursion
+ (mapcar (lambda (buf)
+ (set-buffer buf)
+ (idlwave-toolbar-add))
+ (buffer-list)))
+ ;; For Emacs, add the key definitions to the mode maps
+ (mapcar (lambda (x)
+ (let* ((icon (aref x 0))
+ (func (aref x 1))
+ (show (aref x 2))
+ (help (aref x 3))
+ (key (vector 'tool-bar func))
+ (def (list 'menu-item
+ "a"
+ func
+ :image (symbol-value icon)
+ :visible show
+ :help help)))
+ (define-key idlwave-mode-map key def)
+ (define-key idlwave-shell-mode-map key def)))
+ (reverse idlwave-toolbar)))
+ (setq idlwave-toolbar-visible t)))
(defun idlwave-toolbar-remove-everywhere ()
"Remove the toolbar in all appropriate buffers."
;; First make sure new buffers won't get the toolbar
- (remove-hook 'idlwave-mode-hook 'idlwave-toolbar-add)
- ;; Then remove it in all existing buffers.
- (if (featurep 'xemacs)
- ;; For XEmacs, map over all buffers to remove toolbar
- (save-excursion
- (mapcar (lambda (buf)
- (set-buffer buf)
- (idlwave-toolbar-remove))
- (buffer-list)))
- ;; For Emacs, remove the key definitions from the mode maps
- (mapcar (lambda (x)
- (let* (;;(icon (aref x 0))
- (func (aref x 1))
- ;;(show (aref x 2))
- ;;(help (aref x 3))
- (key (vector 'toolbar func)))
- (define-key idlwave-mode-map key nil)
- (define-key idlwave-shell-mode-map key nil)))
- idlwave-toolbar))
- (setq idlwave-toolbar-visible nil))
-
-(defun idlwave-toolbar-toggle ()
+ (when idlwave-toolbar-is-possible
+ (remove-hook 'idlwave-mode-hook 'idlwave-toolbar-add)
+ ;; Then remove it in all existing buffers.
+ (if (featurep 'xemacs)
+ ;; For XEmacs, map over all buffers to remove toolbar
+ (save-excursion
+ (mapcar (lambda (buf)
+ (set-buffer buf)
+ (idlwave-toolbar-remove))
+ (buffer-list)))
+ ;; For Emacs, remove the key definitions from the mode maps
+ (mapcar (lambda (x)
+ (let* (;;(icon (aref x 0))
+ (func (aref x 1))
+ ;;(show (aref x 2))
+ ;;(help (aref x 3))
+ (key (vector 'tool-bar func)))
+ (define-key idlwave-mode-map key nil)
+ (define-key idlwave-shell-mode-map key nil)))
+ idlwave-toolbar))
+ (setq idlwave-toolbar-visible nil)))
+
+(defun idlwave-toolbar-toggle (&optional force-on)
(interactive)
(if idlwave-toolbar-visible
- (idlwave-toolbar-remove-everywhere)
- (idlwave-toolbar-add-everywhere)))
+ (or force-on (idlwave-toolbar-remove-everywhere))
+ (idlwave-toolbar-add-everywhere))
+ ;; Now make sure this
+ (if (featurep 'xemacs)
+ nil ; no action necessary, toolbar gets updated automatically
+ ;; On Emacs, redraw the frame to make sure the Toolbar is updated.
+ (redraw-frame (selected-frame))))
(provide 'idlw-toolbar)
(provide 'idlwave-toolbar)
+;; arch-tag: ec9a3717-c44c-4716-9bda-cdacbe5ddb62
;;; idlw-toolbar.el ends here
-
-