Removed legacy files from .asd
[clinton/lisp-on-lines.git] / src / slot-presentations.lisp
index 89492aa..2f75737 100644 (file)
@@ -217,11 +217,10 @@ Calendar.setup({
   ;; the viewed instance could have been changed/deleted, so we sync this instance
   (meta-model:sync-instance (instance (ucw::parent self))))
 
-
 (defmethod  present-slot :around ((slot foreign-key-slot-presentation) instance)  
   (setf (foreign-instance slot) 
        (when (lol::presentation-slot-value slot instance) 
-         (meta-model:explode-foreign-key instance (slot-name slot))))
+         (meta-model:explode-foreign-key instance (slot-name slot) :nilp t)))
   (flet ((render () (when (foreign-instance slot)(call-next-method))))
     (if (slot-boundp slot 'ucw::place)
         (cond 
@@ -239,7 +238,8 @@ Calendar.setup({
 
 
 (defmethod find-foreign-instances ((slot foreign-key-slot-presentation))
-  (clsql:select (class-name (class-of (meta-model:explode-foreign-key (instance slot) (slot-name slot))))))
+  (clsql:select (class-name (class-of (meta-model:explode-foreign-key (instance slot) (slot-name slot))))
+               :order-by (car (list-keys (instance slot)))))
 
 
 
@@ -301,7 +301,7 @@ Calendar.setup({
 
 (defmethod get-foreign-instances ((slot has-many-slot-presentation) instance)
   (sort (slot-value instance (slot-name slot)) #'<  
-       :key #'(lambda (x) (funcall (car (list-keys instance)) x))))
+       :key #'(lambda (x) (funcall (car (list-keys x)) x))))
 
 (defmethod lol::presentation-slot-value ((slot has-many-slot-presentation) instance)
   (get-foreign-instances slot instance))
@@ -393,7 +393,9 @@ Calendar.setup({
   ((list-view :accessor list-view :initarg :list-view :initform :one-line)
    (action-view :accessor action-view :initarg :action-view :initform :viewer)
    (create-view :initform :creator)
-   (select-view :initform :as-string :accessor select-view))
+   (select-view :initform :as-string :accessor select-view)
+   (can-add-new-p :initarg :can-add-new-p :accessor can-add-new-p :initform t)
+   (can-add-existing-p :initarg :can-add-existing-p :accessor can-add-existing-p :initform t))
   (:type-name many-to-many)
   (:default-initargs :label "many to many"))
 
@@ -429,22 +431,26 @@ Calendar.setup({
   (let ((instances (slot-value instance (slot-name slot)))
        new-instance)
     (<:ul
-     (<:li (<ucw:button :action (add-to-many-to-many slot instance)
-                        (<:as-html "Add New")))
-     (<:li  (<ucw:button :action (add-to-many-to-many slot instance new-instance)
-                        (<:as-html "Add:"))
-           (<ucw:select :accessor new-instance
-                        (arnesi:dolist* (i (find-all-instances slot instance))
-                          (<ucw:option
-                           :value i
-                           (lol:present-view (i (select-view slot) slot))))))
+     (when (can-add-new-p slot)
+       (<:li 
+       (<ucw:submit :action (add-to-many-to-many slot instance)
+                       
+                    :value "Add New")))
+     (when (can-add-existing-p slot )
+       (<:li  (<ucw:submit :action (add-to-many-to-many slot instance new-instance)
+                          :value "Add:")
+             (<ucw:select :accessor new-instance
+                          (arnesi:dolist* (i (find-all-instances slot instance))
+                            (<ucw:option
+                             :value i
+                             (lol:present-view (i (select-view slot) slot)))))))
      (dolist* (i instances)
        (<:li
        (<ucw:a :action (call-view ((car i) (action-view slot) (ucw::parent slot)))
                (<:as-html "(view) "))
        (<ucw:a :action (delete-relationship slot (second i) instance)
                (<:as-html "(remove) "))
-       (present-view ((car i) (list-view slot) (ucw::parent slot)))) ))))
+       (present-view ((car i) (list-view slot) (ucw::parent slot))))))))
 
 
 (defaction add-to-many-to-many ((slot many-to-many-slot-presentation) instance &optional foreign-instance)