Fixed.
[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 (defconst riece-toolbar-description
35   "Show toolbar icons.")
36
37 (defvar riece-toolbar-items
38   '(riece-command-quit
39     riece-command-join
40     riece-command-part
41     riece-command-previous-channel
42     riece-command-next-channel
43     riece-command-change-layout
44     riece-submit-bug-report))
45
46 (defun riece-toolbar-find-menu-item (command)
47   (let ((pointer riece-menu-items)
48         item)
49     (while pointer
50       (if (and (not (stringp (car pointer)))
51                (vectorp (car pointer))
52                (eq (aref (car pointer) 1) command))
53           (setq item (car pointer)
54                 pointer nil)
55         (setq pointer (cdr pointer))))
56     item))
57
58 (if (featurep 'xemacs)
59     (if (featurep 'toolbar)
60         (progn
61           (defun riece-make-toolbar-from-menu (items menu-items map)
62             (let ((pointer items)
63                   toolbar
64                   file
65                   menu-item
66                   (riece-data-directory (locate-data-directory "riece")))
67               (while pointer
68                 (setq file (locate-file (symbol-name (car pointer))
69                                         (if riece-data-directory
70                                             (cons riece-data-directory
71                                                   load-path)
72                                           load-path)
73                                         '(".xpm" ".pbm" ".xbm"))
74                       menu-item (riece-toolbar-find-menu-item (car pointer)))
75                 (if (and file (file-exists-p file))
76                     (setq toolbar
77                           (toolbar-add-item
78                            toolbar
79                            (toolbar-new-button
80                             file
81                             (car pointer)
82                             (if menu-item
83                                 (aref menu-item 0)
84                               (symbol-name (car pointer)))))))
85                 (setq pointer (cdr pointer)))
86               toolbar))
87           (defun riece-set-toolbar (toolbar)
88             (set-specifier default-toolbar toolbar (current-buffer))))
89       (defalias 'riece-make-toolbar-from-menu 'ignore)
90       (defalias 'riece-set-toolbar 'ignore))
91   (defun riece-make-toolbar-from-menu (items menu-items map)
92     (let ((pointer items)
93           (tool-bar-map (make-sparse-keymap)))
94       (while pointer
95         (tool-bar-add-item-from-menu (car pointer)
96                                      (symbol-name (car pointer))
97                                      map)
98         (setq pointer (cdr pointer)))
99       tool-bar-map))
100   (defun riece-set-toolbar (toolbar)
101     (make-local-variable 'tool-bar-map)
102     (setq tool-bar-map toolbar)))
103
104 (defvar riece-command-mode-map)
105 (defun riece-toolbar-insinuate-in-command-buffer ()
106   (riece-set-toolbar
107    (riece-make-toolbar-from-menu
108     riece-toolbar-items
109     riece-menu-items
110     riece-command-mode-map)))
111
112 (defun riece-toolbar-requires ()
113   '(riece-menu))
114
115 (defun riece-toolbar-insinuate ()
116   (add-hook 'riece-command-mode-hook
117             'riece-toolbar-insinuate-in-command-buffer
118             t))
119
120 (provide 'riece-toolbar)
121
122 ;;; riece-toolbar.el ends here