-;;; 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
-;; Author: Carsten Dominik <dominik@strw.leidenuniv.nl>
-;; Version: 3.11
-;; Date: $Date: 2000/01/03 14:23:13 $
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+;; Free Software Foundation, Inc.
+
+;; Author: Carsten Dominik <dominik@astro.uva.nl>
+;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu>
+;; Version: 6.1_em22
;; Keywords: processes
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs 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, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; 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:
(toolbar-make-button-list image)
(list 'image :type 'xpm :data image)))
+(defvar idlwave-toolbar)
(defvar default-toolbar)
+(defvar idlwave-toolbar-is-possible)
+
(if (not (or (and (featurep 'xemacs) ; This is XEmacs
(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)
+ (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
+ (mapc (lambda (x)
(let* ((icon (aref x 0))
(func (aref x 1))
- ;;(show (aref x 2))
+ (show (aref x 2))
(help (aref x 3))
- (key (vector 'toolbar func))
+ (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))
+ (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)
+ (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
+ (mapc (lambda (x)
(let* (;;(icon (aref x 0))
(func (aref x 1))
;;(show (aref x 2))
;;(help (aref x 3))
- (key (vector 'toolbar func)))
+ (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))
+ (setq idlwave-toolbar-visible nil)))
-(defun idlwave-toolbar-toggle ()
+(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
-
-