1 (in-package :lisp-on-lines
)
3 ;;;;; Wrap a display in "back buttons"
4 (deflayer wrap-back-buttons
)
6 (defvar *back-buttons-wrapped-p
* nil
)
9 :in-layer wrap-back-buttons
:around
11 (if *back-buttons-wrapped-p
*
13 (let ((*back-buttons-wrapped-p
* t
))
15 (<ucw
:a
:class
"wiz-button previous" :action
(ok self t
)
16 (<:as-html
"Go Back"))
17 (<:div
:style
"clear:both;"
19 (<ucw
:a
:class
"wiz-button previous" :action
(ok self t
)
20 (<:as-html
"Go Back")))))
22 ;;;; Wrap an object display in with a link to the object
26 (defvar *link-wrapped-p
* nil
)
28 (define-layered-class description
29 :in-layer wrap-link
()
30 ((link :initarg
:link-action
32 :initform nil
:special t
:accessor link-action
)))
34 (defaction call-action-with--component-and-object
((self component
) action-id object
)
35 (funcall (ucw::find-action
(ucw::context.current-frame
*context
*) action-id
)
40 :in-layer wrap-link
:around
(description object
)
41 (let ((link (link-action description
)))
43 (with-inactive-layers (wrap-link)
46 (let ((*link-wrapped-p
* t
))
47 (<ucw
:a
:action
(call-action-with--component-and-object
50 (ucw::context.current-frame
*context
*)
55 (call-next-method)))))))
60 (define-layered-class description
61 :in-layer wrap-form
()
62 ((form-buttons :initarg
:form-buttons
:initform nil
:special t
:accessor form-buttons
)))
64 (defattribute form-button-attribute
()
65 ((form-buttons :initarg
:form-buttons
:initform nil
:special t
:accessor form-buttons
)))
67 (defdisplay ((description form-button-attribute
) object
)
68 (macrolet ((submit (&key action value
)
70 :action
(funcall ,action self object
)
73 (loop for button in
(form-buttons description
)
75 (let ((button button
))
76 (with-properties (button)
77 (let ((action (.get
:action
)))
78 (submit :value
(.get
:value
)
83 (defdisplay :in-layer wrap-form
:around
(description object
)
85 :action
(refresh-component self
)
86 (with-inactive-layers (wrap-form)
88 (with-inactive-layers (show-attribute-labels)
91 'form-button-attribute
93 (form-buttons description
))
101 (define-layered-class description
102 :in-layer wrap-div
()
103 ((div-attributes :accessor div-attributes
:initarg
:div
:special t
:initform nil
)))
105 (defdisplay :in-layer wrap-div
:wrap-around
(description object
)
106 (let ((args (div-attributes description
)))
107 (with-inactive-layers (wrap-div)
108 (yaclml::funcall-with-tag
111 (call-next-method))))))