menus.el 10.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
;;;;;
;;;;; $Id$
;;;;; Copyright (C) 1991, 1996  Lysator Academic Computer Association.
;;;;;
;;;;; This file is part of the LysKOM server.
;;;;; 
;;;;; LysKOM 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.
;;;;; 
;;;;; LysKOM 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 LysKOM; see the file COPYING.  If not, write to
;;;;; Lysator, c/o ISY, Linkoping University, S-581 83 Linkoping, SWEDEN,
;;;;; or the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, 
;;;;; MA 02139, USA.
;;;;;
;;;;; Please mail bug reports to bug-lyskom@lysator.liu.se. 
;;;;;
;;;; ================================================================
;;;; ================================================================
;;;;
;;;; File: menus.el
;;;; Author: Niels Mller
;;;;
;;;;


David Byers's avatar
X  
David Byers committed
34 35 36 37 38
(defvar lyskom-current-menu-category nil
  "Category of menus currently used in buffer")
(make-variable-buffer-local 'lyskom-current-menu-category)

(defvar lyskom-menu-template
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
  '((menu read
	  ((item kom-view-next-text)
	   (item kom-list-news)
	   (hline review-separator)
	   (item kom-view-commented-text)
	   (item kom-view-previous-commented-text)
	   (item kom-review-comments)
	   (item kom-review-tree)
	   (item kom-find-root)
	   (hline jump-separator)
	   (item kom-jump)
	   (item kom-super-jump)
	   (item kom-set-unread)))
    (menu write
	  ((item kom-write-text)
	   (item kom-send-letter)
	   (item kom-write-comment)
	   (item kom-private-answer)
	   (item kom-comment-previous)
	   (hline send-separator)
	   (item kom-send-message)))
    (menu conference
	  ((item kom-go-to-conf)
	   (item kom-go-to-next-conf)
	   (hline info-separator)
	   (item kom-membership)
	   (item kom-list-conferences)
	   (item kom-status-conf)
	   (item kom-review-presentation)
	   (hline member-separator)
	   (item kom-add-self)
	   (item kom-sub-self)
	   (item kom-prioritize)))
    (menu person
	  ((item kom-who-is-on)
	   (item kom-status-session)
	   (hline info-separator)
	   (item kom-list-persons)
	   (item kom-status-person)
	   (item kom-review-presentation)
	   (hline change-separator)
	   (item kom-change-name)
David Byers's avatar
David Byers committed
81 82 83
	   (item kom-change-password)))
    (menu other
          ((item kom-customize))))
84
  "The menus used in LysKOM.")
Niels Möller's avatar
Niels Möller committed
85

David Byers's avatar
X  
David Byers committed
86 87
(defvar lyskom-popup-menu-template
  (` (menu lyskom ((,@ lyskom-menu-template))))
88 89
  "Popup-menu in the backgrouond of the LysKOM window")

David Byers's avatar
X  
David Byers committed
90 91

(defvar lyskom-edit-menu-template
92
  '((menu lyskom
93 94 95 96 97 98 99 100 101 102
	  ((item kom-edit-send)
;	   (item kom-edit-send-anonymous)
	   (hline reciever-separator)
	   (item kom-edit-add-recipient)
	   (item kom-edit-add-copy)
	   (hline comment-separator)
	   (item kom-edit-show-commented)
;	   (item kom-edit-insert-commented)
	   (hline send-separator)
	   (item kom-edit-quit))))
103
  "The menus for editing LysKOM messages.")
104

David Byers's avatar
X  
David Byers committed
105 106 107 108 109
(defvar lyskom-menu-list '((lyskom-mode . lyskom-menu)
                           (lyskom-edit-mode . lyskom-edit-menu))
  "List of menu sets in LysKOM")

(defvar lyskom-menu nil
110
  "A keymap describing the LysKOM top menu.")
111

David Byers's avatar
X  
David Byers committed
112 113
;(when (not lyskom-menu) 
;  (setq lyskom-menu (make-sparse-keymap)))
Niels Möller's avatar
Niels Möller committed
114

David Byers's avatar
X  
David Byers committed
115
(defvar lyskom-edit-menu nil
116 117
  "A keymap the LysKOM menu in the edit buffer.")

David Byers's avatar
X  
David Byers committed
118 119
;(when (not lyskom-edit-menu)
;  (setq lyskom-edit-menu (make-sparse-keymap)))
Niels Möller's avatar
Niels Möller committed
120

David Byers's avatar
X  
David Byers committed
121
(defvar lyskom-popup-menu nil
122 123
  "A keymap the LysKOM menu in the edit buffer.")

David Byers's avatar
X  
David Byers committed
124 125
;(when (not lyskom-popup-menu)
;  (setq lyskom-popup-menu (make-sparse-keymap)))
126

Niels Möller's avatar
Niels Möller committed
127
(defun lyskom-build-menus ()
David Byers's avatar
X  
David Byers committed
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
  "Create menus according to LYSKOM-MENUS"
  (lyskom-xemacs-or-gnu (lyskom-build-menus-xemacs)
                        (lyskom-build-menus-gnu)))


(defun lyskom-build-menus-xemacs ()
  (setq lyskom-edit-menu (lyskom-define-menu-xemacs lyskom-edit-menu-template))
  (setq lyskom-popup-menu (lyskom-define-menu-xemacs
                               lyskom-popup-menu-template))
  (setq lyskom-menu (lyskom-define-menu-xemacs lyskom-menu-template)))


(defun lyskom-build-menus-gnu ()
  "Rebuilds the LysKOM menus"
  (setq lyskom-menu (make-sparse-keymap))
  (setq lyskom-edit-menu (make-sparse-keymap))
  (setq lyskom-popup-menu (make-sparse-keymap))
  (lyskom-define-menu-gnu lyskom-menu lyskom-menu-template)
  (lyskom-define-menu-gnu lyskom-edit-menu lyskom-edit-menu-template)
  (lyskom-define-menu-gnu lyskom-popup-menu
                          (list lyskom-popup-menu-template))
  (setq lyskom-popup-menu (lookup-key lyskom-popup-menu [lyskom])))

(defun lyskom-define-menu-xemacs (menus)
  (let ((type nil)
        (parameters nil))
David Byers's avatar
David Byers committed
154
    (ignore type parameters)            ; Are they ever used?
David Byers's avatar
X  
David Byers committed
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
    (cond ((null (car menus)))
          ((listp (car menus))          ; Menu bar
           (mapcar 'lyskom-define-menu-xemacs
                   menus))

          ((eq (car menus) 'menu)       ; A menu
           (let ((menu-title (car (cdr menus)))
                 (menu-items (car (cdr (cdr menus)))))
             (cons (lyskom-get-menu-string menu-title)
                   (mapcar
                    (function
                     (lambda (item)
                       (cond ((eq (car item) 'item)
                              (vector (lyskom-get-menu-string 
                                       (car (cdr item)))
                                       (car (cdr item))
                                       ':active
                                       t))
                             ((eq (car item) 'hline)
                              (vector "--:shadowEtchedIn" nil ':active nil) )
                             ((eq (car item) 'menu)
                              (lyskom-define-menu-xemacs item))
                             (t
                              (error "Bad menu item: %S"
                                     item)))))
                    menu-items))))

          (t nil))))


(defun lyskom-define-menu-gnu (map menus)
Niels Möller's avatar
Niels Möller committed
186
  (when menus
David Byers's avatar
X  
David Byers committed
187
    (lyskom-define-menu-gnu map (cdr menus))
188 189 190 191 192 193 194 195 196
    (let ((type (car (car menus)))
	  (symbol (car (cdr (car menus)))))
      (cond ((eq 'hline type)
	     (define-key map (vector symbol) '("--")))
	    ((eq 'menu type)
	     (let* ((name (lyskom-get-menu-string symbol))
		    (submap (make-sparse-keymap name)))
	       (define-key map (vector symbol)
		 (cons name submap))
David Byers's avatar
X  
David Byers committed
197
	       (lyskom-define-menu-gnu submap
198 199
				   (car (cdr (cdr (car menus)))))))
	    ((eq 'item type)
Niels Möller's avatar
Niels Möller committed
200
	     (define-key map (vector symbol)
201 202
	       (cons (lyskom-get-menu-string symbol) symbol)))
	    (t (error "Menu description invalid in lyskom-define-menu"))))))
Niels Möller's avatar
Niels Möller committed
203

David Byers's avatar
X  
David Byers committed
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240

(defun lyskom-get-menu-category (menu-category)
  (symbol-value (cdr (assq menu-category lyskom-menu-list))))

(defun lyskom-update-menus ()
  (lyskom-build-menus)
  (when (and (boundp 'lyskom-current-menu-category)
             lyskom-current-menu-category)
    (mapcar (function
             (lambda (mc)
               (lyskom-set-menus mc (current-local-map))))
            lyskom-current-menu-category)))

(defun lyskom-set-menus (menu-category  keymap)
  (lyskom-xemacs-or-gnu (lyskom-set-menus-xemacs menu-category)
                        (lyskom-set-menus-gnu menu-category keymap)))

(defun lyskom-set-menus-gnu (menu-category keymap)
  "Update the menus"
  (define-key keymap [menu-bar] (lyskom-get-menu-category menu-category))
  (make-local-variable 'lyskom-current-menu-category)
  (if (not (boundp 'lyskom-current-menu-category))
      (setq lyskom-current-menu-category (list menu-category))
    (add-to-list 'lyskom-current-menu-category menu-category)))

(defun lyskom-set-menus-xemacs (menu-category)
  "Update the menus"
  (make-local-variable 'current-menubar)
  (make-local-variable 'lyskom-current-menu-category)
  (set-buffer-menubar default-menubar)
  (mapcar (function
           (lambda (menu)
             (add-submenu nil menu)))
          (lyskom-get-menu-category menu-category))
  (setq lyskom-current-menu-category (list menu-category)))


Niels Möller's avatar
Niels Möller committed
241
		   
242 243
(defun lyskom-background-menu (pos event)
  "Pop up a menu with LysKOM commands and execute the selected command."
David Byers's avatar
X  
David Byers committed
244 245
  (let* ((menu lyskom-popup-menu)
	 (result (popup-menu menu event)))))
246

Niels Möller's avatar
Niels Möller committed
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304



;;;;(terse) Baklnges		   Addera extra kopiemottagare
;;;;Addera kommentar		   Addera medlem
;;;;Addera mottagare		   Automatsvar
;;;;Avmarkera (inlgg)		   Bli medlem i mte
;;;;Brja med nytt namn		   Endast lsa senaste
;;;;Filtrera frfattare		   Filtrera innehll
;;;;Filtrera rende			   Fjrrkontrollera automatsvar
;;;;Fjrrkontrollera avsluta	   Fjrrkontrollera lista meddelanden
;;;;Fjrrkontrollera radera meddelanden
;;;;Fjrrkontrollera ndra svarsmeddelande
;;;;Flytta inlgg			   Fotnot till inlgg
;;;;F skll			   F uppmuntran
;;;;G till mte			   G till nsta mte
;;;;Hjlp				   Hoppa ver alla kommentarer
;;;;Kasta ut en session		   Kommentera fregende inlgg
;;;;Kommentera inlgget		   Ladda ner fil
;;;;Ladda upp fil			   Lista (med) regexpar
;;;;Lista filarean			   Lista filter
;;;;Lista klienter			   Lista meddelanden
;;;;Lista medlemsskap		   Lista mten
;;;;Lista nyheter			   Lista personer
;;;;Lista renden			   Lsa nsta inlgg
;;;;Lngsamma kommandon		   Markera (inlgg)
;;;;Personligt svar			   Personligt svar p fregende inlgg
;;;;Prioritera mten		   Radera inlgg
;;;;Radera meddelanden		   Se tiden
;;;;Skapa mte			   Skicka brev
;;;;Skriva ett inlgg		   Sluta
;;;;Snabba kommandon		   Spara text (p fil)
;;;;Spara variabler			   Status (fr) mte
;;;;Status (fr) person		   Status (fr) session
;;;;Subtrahera kommentar		   Subtrahera mottagare
;;;;Superhoppa			   Snda meddelande
;;;;Stt lapp p drren		   Stt lsniv
;;;;Ta bort lapp p drren		   Uppskjuta lsning
;;;;Uteslut medlem			   Utplna
;;;;Uttrda ur mte			   Var (r) jag
;;;;Vilka r inloggade		   Visa user-arean
;;;;Vnta p ett inlgg		   ndra filter
;;;;ndra livslngd			   ndra lsenord
;;;;ndra mtestyp			   ndra namn
;;;;ndra organisatr		   ndra presentation
;;;;ndra supermte			   ndra svarsmeddelande
;;;;ndra tilltna frfattare	   ndra variabler
;;;;terse alla			   terse alla kommentarer
;;;;terse alla kommentarer rekursivt  terse alla markerade
;;;;terse det fregende kommenterade
;;;;terse det kommenterade		   terse frsta
;;;;terse hoppa			   terse igen
;;;;terse inlgg			   terse lista
;;;;terse markerade		   terse nsta
;;;;terse omodifierat		   terse presentation
;;;;terse senaste			   terse trd
;;;;terse urinlgget		   terstarta kom
;;;;verg till administratrsmod
David Kågedal's avatar
David Kågedal committed
305 306 307 308

(provide 'lyskom-menus)

;;; menus.el ends here