[graphic-forms-cvs] r24 - trunk/src/uitoolkit/widgets
junrue at common-lisp.net
junrue at common-lisp.net
Fri Mar 3 22:27:21 UTC 2006
Author: junrue
Date: Fri Mar 3 17:27:21 2006
New Revision: 24
Modified:
trunk/src/uitoolkit/widgets/menu-language.lisp
Log:
Modified: trunk/src/uitoolkit/widgets/menu-language.lisp
==============================================================================
--- trunk/src/uitoolkit/widgets/menu-language.lisp (original)
+++ trunk/src/uitoolkit/widgets/menu-language.lisp Fri Mar 3 17:27:21 2006
@@ -53,7 +53,9 @@
;;;
(defclass base-menu-generator ()
- ((menu-stack :accessor menu-stack-of
+ ((commands :accessor commands-of
+ :initform nil)
+ (menu-stack :accessor menu-stack-of
:initform nil)))
(defgeneric define-item (generator label dispatcher disabled checked image)
@@ -61,10 +63,10 @@
(:method (generator label dispatcher disabled checked image)
(declare (ignorable generator label dispatcher disabled checked image))))
-(defgeneric define-submenu (generator label body dispatcher disabled)
+(defgeneric define-submenu (generator label dispatcher disabled)
(:documentation "Defines a submenu and its associated item on the parent menu.")
- (:method (generator label body dispatcher disabled)
- (declare (ignorable generator label body dispatcher disabled))))
+ (:method (generator label dispatcher disabled)
+ (declare (ignorable generator label dispatcher disabled))))
(defgeneric define-separator (generator)
(:documentation "Defines a separator.")
@@ -144,14 +146,17 @@
(if (or checked image sep (not (listp sub)))
(error 'gfs:toolkit-error :detail "invalid option for submenu")))
(cond
- (sep `(define-separator ,generator))
- (sub `(define-submenu ,generator ,label ,sub ,disp ,disabled))
- (t `(define-item ,generator ,label ,disp ,disabled ,checked ,image)))))
-
-#|
- (mapcar #'(lambda (var) (process-item-form gen var)) body)
- (complete-submenu gen)))
-|#
+ (sep (push (commands-of generator) `(define-separator ,generator)))
+ (sub (push (commands-of generator) `(define-submenu ,generator
+ ,label
+ ,disp
+ ,disabled)))
+ (t (push (commands-of generator) `(define-item ,generator
+ ,label
+ ,disp
+ ,disabled
+ ,checked
+ ,image))))))
;;;
;;; interpreter for debugging
@@ -159,7 +164,8 @@
(defun interp-menusystem (sexp)
(let ((gen (make-instance 'base-menu-generator)))
- (mapcar #'(lambda (var) (process-item-form gen var)) sexp)))
+ (mapcar #'(lambda (var) (process-item-form gen var)) sexp)
+ (commands-of gen)))
;;;
;;; the real generator
@@ -187,7 +193,7 @@
(setf (slot-value it 'gfi:handle) hmenu)
(vector-push-extend it (items owner))))
-(defmethod define-submenu ((gen win32-menu-generator) label body dispatcher disabled)
+(defmethod define-submenu ((gen win32-menu-generator) label dispatcher disabled)
(let* ((submenu (make-instance 'menu :handle (gfs::create-popup-menu) :dispatcher dispatcher))
(parent (first (menu-stack-of gen)))
(item (append-submenu parent label submenu)))
@@ -200,4 +206,5 @@
(defmacro defmenusystem (sexp)
(let ((gen (gensym)))
`(let ((,gen (make-instance 'win32-menu-generator)))
- ,@(loop for form in sexp append (process-item-form gen form)))))
+ (loop for form in sexp do (process-item-form gen form))
+ ,@(commands-of ,gen))))
More information about the Graphic-forms-cvs
mailing list