further work on presentations - transformers

This commit is contained in:
David Botton 2022-02-14 18:04:58 -05:00
parent a8cc2f8105
commit fa80acb1a1
3 changed files with 49 additions and 20 deletions

View file

@ -18,30 +18,25 @@
;; link-form-element-to-slot ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro link-form-element-to-slot (clog-obj object accessor)
(defmacro link-form-element-to-slot (clog-obj object accessor &key transform)
"Link changes to (value CLOG-OBJ) to (ACESSOR OBJECT)"
`(set-on-change ,clog-obj
(lambda (obj)
(declare (ignore obj))
(setf (,accessor ,object) (value ,clog-obj)))))
`(link-form-element-to-object ,clog-obj (,accessor ,object) :transform ,transform))
;;;;;;;;;;;;;;;;;;;;;;;;;;
;; link-element-to-slot ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro link-element-to-slot (clog-obj object accessor)
(defmacro link-element-to-slot (clog-obj object accessor &key transform)
"Link changes to (text CLOG-OBJ) to (ACESSOR OBJECT)"
`(set-on-change ,clog-obj
(lambda (obj)
(declare (ignore obj))
(setf (,accessor ,object) (text ,clog-obj)))))
`(link-element-to-object ,clog-obj (,accessor ,object) :transform ,transform))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; link-slot-to-form-element ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro link-slot-to-form-element (object accessor clog-obj)
"Link changes to lisp (ACCESSOR OBJECT) to (value CLOG-OBJ)"
"Link changes to lisp (ACCESSOR OBJECT) to (value CLOG-OBJ). Only one
element can be bound at a time to a list object."
`(defmethod (setf ,accessor) :after (new-value (obj (eql ,object)))
(setf (value ,clog-obj) new-value)))
@ -50,7 +45,35 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro link-slot-to-element (object accessor clog-obj)
"Link changes to lisp (ACCESSOR OBJECT) to (text CLOG-OBJ)"
"Link changes to lisp (ACCESSOR OBJECT) to (text CLOG-OBJ). Only one
element can be bound at a time to a list object."
`(defmethod (setf ,accessor) :after (new-value (obj (eql ,object)))
(setf (text ,clog-obj) new-value)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; link-form-element-to-object ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro link-form-element-to-object (clog-obj object &key transform)
"Link changes to (value CLOG-OBJ) to any lisp OBJECT"
`(set-on-change ,clog-obj
(lambda (obj)
(declare (ignore obj))
(let ((v (if ,transform
(funcall ,transform (value ,clog-obj))
(value ,clog-obj))))
(setf ,object v)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; link-element-to-object ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro link-element-to-object (clog-obj object &key transform)
"Link changes to (text CLOG-OBJ) to any lisp OBJECT"
`(set-on-change ,clog-obj
(lambda (obj)
(declare (ignore obj))
(let ((v (if ,transform
(funcall ,transform (text ,clog-obj))
(text ,clog-obj))))
(setf ,object v)))))