added ROFL test cases + extra formatting hooks for attributes
[clinton/lisp-on-lines.git] / src / standard-descriptions / edit.lisp
CommitLineData
4358148e 1(in-package :lisp-on-lines)
2
3
4(define-description editable ()
5 ()
6 (:mixinp t))
7
8(define-description T ()
9 ((editp :label "Edit by Default?"
10 :value nil
11 :editp nil)
12 (identity :editp nil)
13 (type :editp nil)
14 (class :editp nil))
15 (:in-description editable))
16
b7657b86 17(define-layered-method (setf attribute-value-using-object)
18 :in-layer #.(defining-description 'editable)(value object attribute)
19
20 (let ((setter (attribute-setter attribute)))
21 (if setter
22 (funcall setter value object)
23 (error "No setter in ~A for ~A" attribute object))))
4358148e 24
25(define-layered-class standard-attribute
26 :in-layer #.(defining-description 'editable)
27 ()
28 ((edit-attribute-p
29 :initform :inherit
30 :accessor %attribute-editp
31 :initarg :editp
32 :layered t)
33 (setter
34 :initarg :setter
35 :layered t
36 :accessor attribute-setter
37 :initform nil)))
38
39(define-layered-function attribute-editp (object attribute)
40 (:method (object attribute) nil))
41
42(define-layered-method attribute-editp
43 :in-layer #.(defining-description 'editable)
44 (object (attribute standard-attribute))
45
46 (if (eq :inherit (%attribute-editp attribute))
b7657b86 47 (attribute-value (find-attribute
48 (attribute-description attribute)
49 'editp))
4358148e 50 (%attribute-editp attribute)))
51
52
53(define-layered-method display-using-description
54 :in-layer #.(defining-description 'editable)
55 ((attribute standard-attribute) display object &rest args)
56
57 (declare (ignore args))
e8d4fa45 58 (if (attribute-editp object attribute)
59 (format *display* "This is where we'd edit")
60 (call-next-method)))
4358148e 61
62
63