[mcclim-devel] calling command from activate-callback

Kilian Sprotte kilian.sprotte at gmail.com
Sun May 31 12:55:36 UTC 2009


Hi,

I have a very beginners question about calling a
command from a push-button.

It seems that I need to call redisplay-frame-panes
in the activate-callback, although this is not necessary if
I invoke the command from the interactor.

(button2 push-button
  :label "incf and call REDISPLAY-FRAME-PANES"
  :activate-callback
  (lambda (button)
    (declare (ignore button))
    (com-incf)
    ;; *
    (redisplay-frame-panes *application-frame*)))

Is an activation of a push-button not an event in the command-loop?

I would be glad to know, how this is supposed to be done.

Best,
  Kilian

================================================
My changes to the SUPERAPP:

(in-package :common-lisp-user)

(defpackage "APP"
  (:use :clim :clim-lisp)
  (:export "APP-MAIN"))

(in-package :app)

(define-application-frame superapp ()
  ((currrent-number :initform 1 :accessor current-number))
  (:pointer-documentation t)
  (:panes
   (app :application
        :height 400 :width 600
        :display-function 'display-app)
   (button push-button
           :label "incf"
           :activate-callback
           (lambda (button)
             (declare (ignore button))
             (com-incf)))
   (button2 push-button
            :label "incf and call REDISPLAY-FRAME-PANES"
            :activate-callback
            (lambda (button)
              (declare (ignore button))
              (com-incf)
              (redisplay-frame-panes *application-frame*)))
   (int :interactor :height 200 :width 600))
  (:layouts
   (default (vertically ()
              (horizontally ()
                +fill+ button button2 +fill+)
              app int))))


(defun display-app (frame pane)
  (let ((number (current-number frame)))
    (format pane "~a is ~a"
            number
            (cond ((null number) "not a number")
                  ((oddp number) "odd")
                  (t "even")))))

(defun app-main ()
  (run-frame-top-level (make-application-frame 'superapp)))

(define-superapp-command (com-quit :name t) ()
  (frame-exit *application-frame*))

(define-superapp-command (com-parity :name t) ((number 'integer))
  (setf (current-number *application-frame*) number))

(define-superapp-command (com-incf :name t) ()
  (incf (current-number *application-frame*)))







More information about the mcclim-devel mailing list