Lisp HUG Maillist Archive

Change-callback in rich-text-pane on LWM4.4

Hi,

I'm trying to use the rich-text-pane in LWM4.4 but cannot seem to get 
the change-callback to work. I've appended some code.

I'm assuming that this callback is supposed to be called whenever a 
change is made to the editor. So try typing into the editor. No 
callback is made.

I had a problem with the resize callback in the editor-pane. In that 
case there was a default resize callback that I had to ensure was 
called, then things worked. In this case, the documentation says the 
default callback is nil. I verified this by not setting the callback 
and checking if it was defined.

Can anybody see what I've done wrong?

Some notes:
1) I'm changing the parameter *rtf-ed-change* rather than using 
something like format in case the IO streams are not right (see the 
release notes for OS/X, no idea if this applies here, but just in case)
2) there are two ways of setting the callback: by init arg, by 
accessor. There are functions defined in the test code for both.


Thanks,
Bob

; set this parameter in the callback in case the the IO streams are 
wrong
(defparameter *rtf-ed-change* "no-change-reported")

(define-interface rtf-ed ()
   ()
   (:panes
    (editor rich-text-pane
            :text "The RTF Editor"
            :reader editor
            :horizontal-scroll nil
            :vertical-scroll t
            ;:change-callback #'(lambda (pane &key type) (format t 
"CHANGE ~S to ~S~%" type pane))
            :change-callback #'(lambda (&rest args)
                                 (setf *rtf-ed-change* "changed"))
            :visible-min-height '(:character 25)
            :visible-min-width '(:character 80)))
   (:layouts
    (main-layout row-layout '(editor)
                   :reader main-layout))
   (:default-initargs
    :title "RTF Editor"
    :layout 'main-layout
    :best-width 600
    :best-height 400))

; execute this if you want to use the callback defined in the init-arg
(defun run-using-init-arg ()
   (let* ((interface (make-instance 'rtf-ed))
          (ed (editor interface)))
     (display interface)
     (format t "The CHANGE-CALLBACK function: ~S~%" 
(rich-text-pane-change-callback ed))))

; execute this if you want to explicitly set the callback
(defun run-setting-callback ()
   (let* ((interface (make-instance 'rtf-ed))
          (ed (editor interface)))
     (display interface)
     (setf (rich-text-pane-change-callback ed)
           #'(lambda (&rest args) (setf *rtf-ed-change* "changed")))
     (format t "The CHANGE-CALLBACK function: ~S~%" 
(rich-text-pane-change-callback ed))))



----
Bob Hutchison          -- blogs at <http://www.recursive.ca/hutch/>
Recursive Design Inc.  -- <http://www.recursive.ca/>


Re: Change-callback in rich-text-pane on LWM4.4

My apologies, here is the test code that will run in the CL-USER 
package...

On Dec 15, 2004, at 9:04 AM, Bob Hutchison wrote:

> Hi,
>
> I'm trying to use the rich-text-pane in LWM4.4 but cannot seem to get 
> the change-callback to work. I've appended some code.
>
> I'm assuming that this callback is supposed to be called whenever a 
> change is made to the editor. So try typing into the editor. No 
> callback is made.
>
> I had a problem with the resize callback in the editor-pane. In that 
> case there was a default resize callback that I had to ensure was 
> called, then things worked. In this case, the documentation says the 
> default callback is nil. I verified this by not setting the callback 
> and checking if it was defined.
>
> Can anybody see what I've done wrong?
>
> Some notes:
> 1) I'm changing the parameter *rtf-ed-change* rather than using 
> something like format in case the IO streams are not right (see the 
> release notes for OS/X, no idea if this applies here, but just in 
> case)
> 2) there are two ways of setting the callback: by init arg, by 
> accessor. There are functions defined in the test code for both.
>
>
> Thanks,
> Bob
>
>

; set this parameter in the callback in case the the IO streams are 
wrong
(defparameter *rtf-ed-change* "no-change-reported")

(capi:define-interface rtf-ed ()
   ()
   (:panes
    (editor capi:rich-text-pane
            :text "The RTF Editor"
            :reader editor
            :horizontal-scroll nil
            :vertical-scroll t
            ;:change-callback #'(lambda (pane &key type) (format t 
"CHANGE ~S to ~S~%" type pane))
            :change-callback #'(lambda (&rest args)
                                 (setf *rtf-ed-change* "changed"))
            :visible-min-height '(:character 25)
            :visible-min-width '(:character 80)))
   (:layouts
    (main-layout capi:row-layout '(editor)
                 :reader main-layout))
   (:default-initargs
    :title "RTF Editor"
    :layout 'main-layout
    :best-width 600
    :best-height 400))

; execute this if you want to use the callback defined in the init-arg
(defun run-using-init-arg ()
   (let* ((interface (make-instance 'rtf-ed))
          (ed (editor interface)))
     (capi:display interface)
     (format t "The CHANGE-CALLBACK function: ~S~%" 
(capi:rich-text-pane-change-callback ed))))

; execute this if you want to explicitly set the callback
(defun run-setting-callback ()
   (let* ((interface (make-instance 'rtf-ed))
          (ed (editor interface)))
     (capi:display interface)
     (setf (capi:rich-text-pane-change-callback ed)
           #'(lambda (&rest args) (setf *rtf-ed-change* "changed")))
     (format t "The CHANGE-CALLBACK function: ~S~%" 
(capi:rich-text-pane-change-callback ed))))

----
Bob Hutchison          -- blogs at <http://www.recursive.ca/hutch/>
Recursive Design Inc.  -- <http://www.recursive.ca/>


Updated at: 2020-12-10 08:54 UTC