changeset 26959:40d1a10917b8

A debugging toolbar for IDLWAVE
author Carsten Dominik <dominik@science.uva.nl>
date Mon, 20 Dec 1999 11:12:58 +0000
parents 35105166b1c9
children 733eba22afe2
files lisp/progmodes/idlwave-toolbar.el
diffstat 1 files changed, 866 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/progmodes/idlwave-toolbar.el	Mon Dec 20 11:12:58 1999 +0000
@@ -0,0 +1,866 @@
+;;; idlwave-toolbar.el --- A debugging toolbar for IDLWAVE
+;; Copyright (c) 1999 Carsten Dominik
+;; Copyright (c) 1999 Free Software Foundation
+
+;; Author: Carsten Dominik <dominik@strw.leidenuniv.nl>
+;; Version: 3.11
+;; Date: $Date: 1999/10/04 13:25:34 $
+;; Keywords: processes
+
+;; This file is part of GNU Emacs.
+
+;; 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.
+
+;; GNU Emacs 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 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.
+
+;;; Commentary:
+
+;; This file implements a debugging toolbar for IDLWAVE.  It requires
+;; Emacs or XEmacs with toolbar and xpm support.
+
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+
+(defun idlwave-toolbar-make-button (image)
+  (if (featurep 'xemacs)
+      (toolbar-make-button-list image)
+    (list 'image :type 'xpm :data image)))
+
+(defvar default-toolbar)
+(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
+		  (fboundp 'image-type-available-p) ; need image stuff
+		  (image-type-available-p 'xpm))    ; need xpm
+	     ))
+    ;; oops - cannot do the toolbar
+    (message "Sorry, IDLWAVE xpm toolbar cannot be used on this version of Emacs")
+;; OK, we can define a toolbar
+
+(defvar idlwave-toolbar-compile-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 2 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"             .              \",
+\"       ..   ...   ..        \",
+\"       .... ... ....        \",
+\"       .............        \",
+\"        ...........         \",
+\"    ...................     \",
+\"    ........   ........     \",
+\"     .....    ........      \",
+\"      ....  .........       \",
+\"    .....  .. ... .....     \",
+\"   ...... ..   .. ......    \",
+\"    ..... ... ..  .....     \",
+\"      .........  ....       \",
+\"     ........    .....      \",
+\"    ........   ........     \",
+\"    ...................     \",
+\"        ...........         \",
+\"       .............        \",
+\"       .... ... ....        \",
+\"       ..   ...   ..        \",
+\"             .              \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The compile icon.")
+
+(defvar idlwave-toolbar-next-error-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 3 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"R	c #FFFF00000000\",
+\"                            \",
+\"                            \",
+\"             R              \",
+\"       RR   RRR   RR        \",
+\"       RRRR RRR RRRR        \",
+\"       RRRRRRRRRRRRR        \",
+\"        RRRRRRRRRRR         \",
+\"    RRRRRRRRRRRRRRRRRRR     \",
+\"    RRRRRRRR                \",
+\"     RRRRR                  \",
+\"      RRRR                  \",
+\"               ........     \",
+\"              ........      \",
+\"            .........       \",
+\"    .....  .. ... .....     \",
+\"   ...... ..   .. ......    \",
+\"    ..... ... ..  .....     \",
+\"      .........  ....       \",
+\"     ........    .....      \",
+\"    ........   ........     \",
+\"    ...................     \",
+\"        ...........         \",
+\"       .............        \",
+\"       .... ... ....        \",
+\"       ..   ...   ..        \",
+\"             .              \",
+\"                            \",
+\"                            \"};")
+  "The Next Error icon.")
+
+(defvar idlwave-toolbar-stop-at-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 3 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"R	c #FFFF00000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"          ........          \",
+\"         .RRRRRRRR.         \",
+\"        .RRRRRRRRRR.        \",
+\"       .RRRRRRRRRRRR.       \",
+\"      .RRRRRRRRRRRRRR.      \",
+\"     .RRRRRRRRRRRRRRRR.     \",
+\"    .RRRRRRRRRRRRRRRRRR.    \",
+\"    .RRRRRRRRRRRRRRRRRR.    \",
+\"    .RRRRRRRRRRRRRRRRRR.    \",
+\"    .RRRRRRRRRRRRRRRRRR.    \",
+\"    .RRRRRRRRRRRRRRRRRR.    \",
+\"    .RRRRRRRRRRRRRRRRRR.    \",
+\"    .RRRRRRRRRRRRRRRRRR.    \",
+\"    .RRRRRRRRRRRRRRRRRR.    \",
+\"     .RRRRRRRRRRRRRRRR.     \",
+\"      .RRRRRRRRRRRRRR.      \",
+\"       .RRRRRRRRRRRR.       \",
+\"        .RRRRRRRRRR.        \",
+\"         .RRRRRRRR.         \",
+\"          ........          \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "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 #000000000000\",
+\"R	c #FFFF00000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"  ...                  ...  \",
+\"   ...    ........    ...   \",
+\"    ...  .RRRRRRRR.  ...    \",
+\"     ....RRRRRRRRRR....     \",
+\"      ...RRRRRRRRRR...      \",
+\"      ....RRRRRRRR....      \",
+\"     .RR...RRRRRR...RR.     \",
+\"    .RRRR...RRRR...RRRR.    \",
+\"    .RRRRR...RR...RRRRR.    \",
+\"    .RRRRRR......RRRRRR.    \",
+\"    .RRRRRRR....RRRRRRR.    \",
+\"    .RRRRRRR....RRRRRRR.    \",
+\"    .RRRRRR......RRRRRR.    \",
+\"    .RRRRR...RR...RRRRR.    \",
+\"    .RRRR...RRRR...RRRR.    \",
+\"     .RR...RRRRRR...RR.     \",
+\"      ....RRRRRRRR....      \",
+\"      ...RRRRRRRRRR...      \",
+\"     ....RRRRRRRRRR....     \",
+\"    ...  .RRRRRRRR.  ...    \",
+\"   ...    ........    ...   \",
+\"  ...                  ...  \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Clear At icon.")
+
+(defvar idlwave-toolbar-clear-all-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 4 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"X	c #FFFFFFFFFFFF\",
+\"R	c #FFFF00000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"  .. ....         .... ..   \",
+\"  ...RRRR.       .RRRR...   \",
+\"   ...RRRR.     .RRRR...    \",
+\"  .R...RRRR.   .RRRR...R.   \",
+\"  .RR...RRR.   .RRR...RR.   \",
+\"  .RRR...RR.   .RR...RRR.   \",
+\"  .RRRR...R.   .R...RRRR.   \",
+\"   .RRRR...     ...RRRR.    \",
+\"    .RRRR...   ...RRRR.     \",
+\"     .... ... ... ....      \",
+\"           .....            \",
+\"            ...             \",
+\"     ....  .....  ....      \",
+\"    .RRRR.... ....RRRR.     \",
+\"   .RRRRR...   ...RRRRR.    \",
+\"  .RRRRR....   ....RRRRR.   \",
+\"  .RRRR...R.   .R...RRRR.   \",
+\"  .RRR...RR.   .RR...RRR.   \",
+\"  .RR...RRR.   .RRR...RR.   \",
+\"   ....RRR.     .RRR....    \",
+\"   ...RRR.       .RRR...    \",
+\"  .......         .......   \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Clear-All icon.")
+
+(defvar idlwave-toolbar-edit-cmd-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 2 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"   ..                       \",
+\"    ..                      \",
+\"     ..                     \",
+\"    ..                      \",
+\"   ..                       \",
+\"                            \",
+\"                            \",
+\"        .................   \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The edit-cmd icon")
+
+(defvar idlwave-toolbar-run-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 3 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	s FgColor c #000000000000\",
+\"G	c #0000BBBB0000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"     .....                  \",
+\"     .GGG.                  \",
+\"     .GGG.                  \",
+\"     .GGG.       .......    \",
+\"     .GGG.                  \",
+\"     .GGG.                  \",
+\"     .GGG.       .......    \",
+\"     .GGG.                  \",
+\"  ....GGG....               \",
+\"   .GGGGGGG.     .......    \",
+\"    .GGGGG.                 \",
+\"     .GGG.                  \",
+\"      .G.        .......    \",
+\"       .                    \",
+\"                            \",
+\"                 .......    \",
+\"                            \",
+\"                            \",
+\"                 .......    \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Run icon.")
+
+(defvar idlwave-toolbar-cont-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 3 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	s FgColor c #000000000000\",
+\"G	c #0000BBBB0000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                 .......    \",
+\"                            \",
+\"       .......              \",
+\"      .GGGGGG.   .......    \",
+\"     .GGGGGGG.              \",
+\"     .GGG.....              \",
+\"     .GGG.       .......    \",
+\"     .GGG.                  \",
+\"     .GGG.                  \",
+\"     .GGG.       .......    \",
+\"     .GGG.                  \",
+\"  ....GGG....               \",
+\"   .GGGGGGG.     .......    \",
+\"    .GGGGG.                 \",
+\"     .GGG.                  \",
+\"      .G.        .......    \",
+\"       .                    \",
+\"                            \",
+\"                 .......    \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Cont icon.")	  
+
+(defvar idlwave-toolbar-to-here-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 4 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"G	c #0000BBBB0000\",
+\"R	c #FFFF00000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"      .....   ........      \",
+\"     .GGGG.                 \",
+\"    .GGGGG.                 \",
+\"    .GG....   ........      \",
+\"    .GG.                    \",
+\"    .GG. .                  \",
+\"    .GG. ..                 \",
+\"    .GG. .G.    ......      \",
+\"    .GG...GG.               \",
+\"    .GGGGGGGG.  RRRRRR      \",
+\"    .GGGGGGGGG. RRRRRR      \",
+\"     .GGGGGGG.  RRRRRR      \",
+\"      ....GG.               \",
+\"         .G.    ......      \",
+\"         ..                 \",
+\"         .                  \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Cont-to-here icon.")
+
+(defvar idlwave-toolbar-step-over-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 3 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"G	c #0000BBBB0000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"      .....                 \",
+\"     .GGGG.      .......    \",
+\"    .GGGGG.                 \",
+\"    .GG....                 \",
+\"    .GG.         .......    \",
+\"    .GG. .                  \",
+\"    .GG. ..                 \",
+\"    .GG. .G.     .......    \",
+\"    .GG...GG.               \",
+\"    .GGGGGGGG.              \",
+\"    .GGGGGGGGG.  .......    \",
+\"     .GGGGGGG.              \",
+\"      ....GG.               \",
+\"         .G.     .......    \",
+\"         ..                 \",
+\"         .                  \",
+\"                 .......    \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Step Over icon.")
+
+(defvar idlwave-toolbar-step-into-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 3 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"G	c #0000BBBB0000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"      .....   .......       \",
+\"     .GGGG.                 \",
+\"    .GGGGG.                 \",
+\"    .GG....   ........      \",
+\"    .GG.                    \",
+\"    .GG. .                  \",
+\"    .GG. ..                 \",
+\"    .GG. .G.                \",
+\"    .GG...GG.    .......    \",
+\"    .GGGGGGGG.              \",
+\"    .GGGGGGGGG.             \",
+\"     .GGGGGGG.   .......    \",
+\"      ....GG.               \",
+\"         .G.                \",
+\"         ..      .......    \",
+\"         .                  \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Step Into icon.")
+
+(defvar idlwave-toolbar-step-out-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 3 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"G	c #0000BBBB0000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"         .                  \",
+\"         ..     ........    \",
+\"         .G.                \",
+\"      ....GG.               \",
+\"     .GGGGGGG.  ........    \",
+\"    .GGGGGGGGG.             \",
+\"    .GGGGGGGG.              \",
+\"    .GG...GG.   ........    \",
+\"    .GG. .G.                \",
+\"    .GG. ..                 \",
+\"    .GG. .                  \",
+\"    .GG.                    \",
+\"    .GG.......    .......   \",
+\"    .GGGGGGGG.              \",
+\"     .GGGGGGG.              \",
+\"      ........    .......   \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Step up icon.")
+
+
+(defvar idlwave-toolbar-eval-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 2 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	c #000000000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"         ....               \",
+\"         .. ..  ......      \",
+\"         .. ..  ......      \",
+\"         .. ..              \",
+\"         .. ..  ......      \",
+\"         .. ..  ......      \",
+\"         ....               \",
+\"         ..                 \",
+\"         ..                 \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Evaluate icon.")
+
+(defvar idlwave-toolbar-stack-up-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 5 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	s FgColor c #000000000000\",
+\"_	c #FFFFFFFFFFFF\",
+\"G	c #0000BBBB0000\",
+\"R	c #FFFF00000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"      ........     .        \",
+\"      .______.    ...       \",
+\"      .______.   .....      \",
+\"      .______.  .......     \",
+\"      .______.    ...       \",
+\"      .______.    ...       \",
+\"      ........    ...       \",
+\"      .GGGGGG.    ...       \",
+\"      .GGGGGG.    ...       \",
+\"      .GGGGGG.              \",
+\"      .GGGGGG.              \",
+\"      .GGGGGG.              \",
+\"      ........              \",
+\"      .RRRRRR.              \",
+\"      .RRRRRR.              \",
+\"      .RRRRRR.              \",
+\"      .RRRRRR.              \",
+\"      .RRRRRR.              \",
+\"      ........              \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Stack Up icon.")
+
+(defvar idlwave-toolbar-stack-down-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 5 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\".	s FgColor c #000000000000\",
+\"_	c #FFFFFFFFFFFF\",
+\"G	c #0000BBBB0000\",
+\"R	c #FFFF00000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"      ........              \",
+\"      .______.              \",
+\"      .______.              \",
+\"      .______.              \",
+\"      .______.              \",
+\"      .______.              \",
+\"      ........              \",
+\"      .GGGGGG.              \",
+\"      .GGGGGG.              \",
+\"      .GGGGGG.              \",
+\"      .GGGGGG.    ...       \",
+\"      .GGGGGG.    ...       \",
+\"      ........    ...       \",
+\"      .RRRRRR.    ...       \",
+\"      .RRRRRR.    ...       \",
+\"      .RRRRRR.  .......     \",
+\"      .RRRRRR.   .....      \",
+\"      .RRRRRR.    ...       \",
+\"      ........     .        \",
+\"                            \",
+\"                            \",
+\"                            \",
+\"                            \"};")
+  "The Stack Down icon.")
+
+(defvar idlwave-toolbar-reset-icon
+  (idlwave-toolbar-make-button
+   "/* XPM */
+static char * file[] = {
+\"28 28 3 1\",
+\" 	c #C8C8C8C8C8C8 s backgroundToolBarColor\",
+\"G	c #0000BBBB0000\",
+\". 	c #000000000000\",
+\"                            \",
+\"                            \",
+\"                            \",
+\"     .                      \",
+\"    .G.     .               \",
+\"   .GGG..  .G.              \",
+\"   .GGGGG..GG.              \",
+\"    ..GGGGGGGG.             \",
+\"      ..GGGGGG.             \",
+\"        ..GGGGG.            \",
+\"        .GGGGGG.            \",
+\"        .G......            \",
+\"                            \",
+\"                 .....      \",
+\"               .........    \",
+\"               .........    \",
+\"               .........    \",
+\"               . ..... .    \",
+\"               .       .    \",
+\"               .       .    \",
+\"               .       .    \",
+\"               .       .    \",
+\"               .       .    \",
+\"               ..     ..    \",
+\"                .......     \",
+\"                 .....      \",
+\"                            \",
+\"                            \"};")
+  "The Reset icon.")
+
+(defvar idlwave-toolbar
+  '(
+    [idlwave-toolbar-compile-icon
+     idlwave-shell-save-and-compile
+     t
+     "Save and Compile this file (or recompile last)"]
+    [idlwave-toolbar-next-error-icon
+     idlwave-shell-goto-next-error
+     t
+     "Goto Next Error"]
+    [idlwave-toolbar-stop-at-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
+     "Clear Breakpoint at selected position"]
+    [idlwave-toolbar-clear-all-icon
+     idlwave-shell-clear-all-bp
+     t
+     "Clear all Breakpoints"]
+    [idlwave-toolbar-edit-cmd-icon
+     idlwave-shell-edit-default-command-line
+     t
+     "Edit Default Command Line"]
+    [idlwave-toolbar-run-icon
+     idlwave-shell-execute-default-command-line
+     t
+     "Reset, then Execute Default Command Line"]
+    [idlwave-toolbar-cont-icon
+     idlwave-shell-cont
+     t
+     "Continue Current Program"]
+    [idlwave-toolbar-to-here-icon
+     idlwave-shell-to-here
+     (eq major-mode 'idlwave-mode)
+     "Continue to Here (cursor position)"]
+    [idlwave-toolbar-step-over-icon
+     idlwave-shell-stepover
+     t
+     "Step Over (aka next)"]
+    [idlwave-toolbar-step-into-icon
+     idlwave-shell-step
+     t
+     "Step Into (aka step)"]
+    [idlwave-toolbar-step-out-icon
+     idlwave-shell-out
+     t
+     "Step Out (of subroutine)"]
+    [idlwave-toolbar-eval-icon
+     idlwave-shell-print
+     t
+     "Print Expression at or before Point"]
+    [idlwave-toolbar-stack-up-icon
+     idlwave-shell-stack-up
+     t
+     "Stack Up (towards \"cooler\" - less recently visited - frames)"]
+    [idlwave-toolbar-stack-down-icon
+     idlwave-shell-stack-down
+     t
+     "Stack Down (towards \"warmer\" - more recently visited - frames)"]
+    [idlwave-toolbar-reset-icon
+     idlwave-shell-reset
+     t
+     "Reset IDL (RETALL & CLOSE,/ALL and more)"]
+    ))
+
+
+;; 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.
+(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
+	   (or (eq major-mode 'idlwave-mode)
+	       (eq major-mode 'idlwave-shell-mode)))
+      (set-specifier default-toolbar (cons (current-buffer)
+					   idlwave-toolbar))))
+
+(defun idlwave-toolbar-remove ()
+  "Add the IDLWAVE toolbar if appropriate."
+  (if (and (featurep 'xemacs)    ; This is a noop on Emacs
+	   (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-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))
+
+(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 ()
+  (interactive)
+  (if idlwave-toolbar-visible
+      (idlwave-toolbar-remove-everywhere)
+    (idlwave-toolbar-add-everywhere)))
+
+(provide 'idlwave-toolbar)
+
+;;; idlwave-toolbar.el ends here
+
+