mirror of
https://github.com/rabbibotton/clog.git
synced 2025-12-06 02:30:42 -08:00
37 lines
1.7 KiB
Common Lisp
37 lines
1.7 KiB
Common Lisp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;;; CLOG - The Common Lisp Omnificent GUI ;;;;
|
|
;;;; (c) 2020-2022 David Botton ;;;;
|
|
;;;; License BSD 3 Clause ;;;;
|
|
;;;; ;;;;
|
|
;;;; clog-data.lisp ;;;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(cl:in-package :clog)
|
|
|
|
;;; Various functions for binding data
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Implementation - data binding
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(defun data-load-plist (obj plist &key (upcase-key t))
|
|
"A plist where key is name of slot and value is data to load on panel.
|
|
The key is coverted to a string and upper cased before attempting to
|
|
match it to a slot if :UPCASE-KEY t. If slot is a clog-element
|
|
TEXT-VALUE is set, if not the slot is set to the value. If key is not
|
|
the name of a slot it is ignored."
|
|
(loop for (key value) on plist by #'cddr while value
|
|
do
|
|
(let* ((slot-str (format nil "~A" key))
|
|
(slot-name (if upcase-key
|
|
(string-upcase slot-str)
|
|
slot-str)))
|
|
(when (find-symbol slot-name)
|
|
(let ((slot-sym (intern slot-name)))
|
|
(when (slot-exists-p obj slot-sym)
|
|
(if (and (slot-boundp obj slot-sym)
|
|
(typep (slot-value obj slot-sym) 'clog:clog-element))
|
|
(setf (text-value (slot-value obj slot-sym)) value)
|
|
(setf (slot-value obj slot-sym) value))))))))
|
|
|
|
|