Check (featurep 'toolbar).
[riece] / lisp / riece-toolbar.el
1 ;;; riece-toolbar.el --- show toolbar icons
2 ;; Copyright (C) 1998-2004 Daiki Ueno
3
4 ;; Author: Daiki Ueno <ueno@unixuser.org>
5 ;; Created: 1998-09-28
6 ;; Keywords: IRC, riece
7
8 ;; This file is part of Riece.
9
10 ;; This program is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; This program is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Commentary:
26
27 ;; To use, add the following line to your ~/.riece/init.el:
28 ;; (add-to-list 'riece-addons 'riece-toolbar)
29
30 ;;; Code:
31
32 (require 'riece-menu)
33
34 (defvar riece-toolbar-items
35   '(riece-command-quit
36     riece-command-join
37     riece-command-part
38     riece-command-previous-channel
39     riece-command-next-channel
40     riece-command-change-layout))
41
42 (defun riece-toolbar-find-menu-item (command)
43   (let ((pointer riece-menu-items)
44         item)
45     (while pointer
46       (if (and (not (stringp (car pointer)))
47                (vectorp (car pointer))
48                (eq (aref (car pointer) 1) command))
49           (setq item (car pointer)
50                 pointer nil)
51         (setq pointer (cdr pointer))))
52     item))
53
54 (if (featurep 'xemacs)
55     (if (featurep 'toolbar)
56         (progn
57           (defun riece-make-toolbar-from-menu (items menu-items map)
58             (let ((pointer items)
59                   toolbar
60                   file
61                   menu-item)
62               (while pointer
63                 (setq file (locate-file (symbol-name (car pointer))
64                                         load-path
65                                         '(".xpm" ".pbm" ".xbm"))
66                       menu-item (riece-toolbar-find-menu-item (car pointer)))
67                 (if (and file (file-exists-p file))
68                     (setq toolbar
69                           (toolbar-add-item
70                            toolbar
71                            (toolbar-new-button
72                             file
73                             (car pointer)
74                             (if menu-item
75                                 (aref menu-item 0)
76                               (symbol-name (car pointer)))))))
77                 (setq pointer (cdr pointer)))
78               toolbar))
79           (defun riece-set-toolbar (toolbar)
80             (set-specifier default-toolbar toolbar (current-buffer))))
81       (defalias 'riece-make-toolbar-from-menu 'ignore)
82       (defalias 'riece-set-toolbar 'ignore))
83   (defun riece-make-toolbar-from-menu (items menu-items map)
84     (let ((pointer items)
85           (tool-bar-map (make-sparse-keymap)))
86       (while pointer
87         (tool-bar-add-item-from-menu (car pointer)
88                                      (symbol-name (car pointer))
89                                      map)
90         (setq pointer (cdr pointer)))
91       tool-bar-map))
92   (defun riece-set-toolbar (toolbar)
93     (make-local-variable 'tool-bar-map)
94     (setq tool-bar-map toolbar)))
95
96 (defvar riece-command-mode-map)
97 (defun riece-toolbar-insinuate-in-command-buffer ()
98   (riece-set-toolbar
99    (riece-make-toolbar-from-menu
100     riece-toolbar-items
101     riece-menu-items
102     riece-command-mode-map)))
103
104 (defun riece-toolbar-requires ()
105   '(riece-menu))
106
107 (defun riece-toolbar-insinuate ()
108   (add-hook 'riece-command-mode-hook
109             'riece-toolbar-insinuate-in-command-buffer
110             t))
111
112 (provide 'riece-toolbar)
113
114 ;;; riece-toolbar.el ends here