X-Git-Url: https://git.hcoop.net/clinton/lisp-on-lines.git/blobdiff_plain/a4e6154d961ff4b606aa534bd4e1570565cab351..ebabbd23b74ef8706d0213ae246801bcf4254285:/src/standard-display.lisp?pf=clinton diff --git a/src/standard-display.lisp b/src/standard-display.lisp index a5b0f0e..0fe6df5 100644 --- a/src/standard-display.lisp +++ b/src/standard-display.lisp @@ -4,24 +4,24 @@ (deflayer viewer) (deflayer editor) +(define-layered-method label (anything) + nil) + (defdisplay :in-layer editor :around (description object) - "It is useful to remove the viewer layer when in the editing layer. + "It is useful to remove the viewer layer when in the editing layer. This allows us to dispatch to a subclasses editor." - (with-inactive-layers (viewer) - (call-next-method))) + (with-inactive-layers (viewer) + (call-next-method))) -(deflayer creator) +;;;; These layers affect the layout of the object (deflayer one-line) (deflayer as-table) - - - (deflayer as-string) (defdisplay :in-layer as-string (d o) - (with-inactive-layers (editor viewer creator one-line as-table label-attributes) + (with-inactive-layers (editor viewer one-line as-table show-attribute-labels) (do-attributes (a d) (display-attribute a o) (<:as-is " ")))) @@ -29,31 +29,6 @@ This allows us to dispatch to a subclasses editor." (defmethod list-slots (thing) (list 'identity)) - -;;;; TODO : this doesn't work - -(defaction call-display-with-context ((from component) object context &rest properties) - (call-component self (make-instance 'standard-display-component - :context context - :object object - :args (if (cdr properties) - properties - (car properties))))) - -(defmacro call-display (component object &rest properties) - `(let () - (call-display-with-context ,component ,object nil ,@properties))) - -(defcomponent standard-display-component () - ((context :accessor context :initarg :context) - (object :accessor object :initarg :object) - (args :accessor args :initarg :args))) - -(defmethod render ((self standard-display-component)) - - (apply #'display self (object self) (args self))) - - ;;;; * Object displays. @@ -109,11 +84,11 @@ This allows us to dispatch to a subclasses editor." ;;;; ** One line (defdisplay - :in-layer one-line (description object) - "The one line presentation just displays the attributes with a #\Space between them" - (do-attributes (attribute description) - (display-attribute attribute object) - (<:as-html " "))) + :in-layer one-line (description object) + "The one line presentation just displays the attributes with a #\Space between them" + (do-attributes (attribute description) + (display-attribute attribute object) + (<:as-html " "))) ;;;; ** as-table @@ -125,19 +100,24 @@ This allows us to dispatch to a subclasses editor." (<:td (display-attribute a object)))))) ;;;; List Displays + +(deflayer list-display-layer) + +(define-layered-class description + :in-layer list-display-layer () + ((list-item :initarg :list-item :initform nil :special t :accessor list-item))) + (defdisplay (desc (list list)) - (<:ul - (dolist* (item list) - (<:li (display* item) - (<:as-html item))))) + (with-active-layers (list-display-layer) + (<:ul + (dolist* (item list) + (<:li (apply #'display* item (list-item desc))))))) ;;;; Attributes (defdisplay :in-layer editor ((attribute standard-attribute) object) - "Legacy editor using UCW presentations" - - (warn "USING LEGACY EDITOR FOR ~A" (slot-name attribute))) + (call-next-method)) (define-layered-method display-using-description ((attribute standard-attribute) object component)