Changeset 3439
- Timestamp:
- 07/15/08 12:03:24 (6 months ago)
- Files:
-
- trunk/projects/bos/web/contract-tree.lisp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/projects/bos/web/contract-tree.lisp
r3438 r3439 4 4 (defclass contract-node (node-extension) 5 5 ((name :allocation :class :initform 'contract-node) 6 (timestamp :accessor timestamp )6 (timestamp :accessor timestamp :initform 0) ; timestamp initially "very old" 7 7 (placemark-contracts :initform nil :accessor placemark-contracts) 8 8 (image :initform nil :accessor image) … … 13 13 (setf (timestamp node) (get-universal-time))) 14 14 15 (defun contract-node-timestamp-updater (contract) 16 (lambda (node) (setf (timestamp node) 17 (max (timestamp node) (contract-date contract))))) 18 15 19 (defun contract-node-find-corresponding-store-image (node) 16 (first (get-keyword-store-images (contract-node-keyword node)))) 20 (let ((store-images (get-keyword-store-images (contract-node-keyword node)))) 21 (when (< 1 (length store-images)) 22 (warn "~D store-images for ~S" (length store-images) node)) 23 (first store-images))) 17 24 18 25 (defmethod initialize-instance :after ((node contract-node) &key args) 19 26 (declare (ignore args)) 20 27 (let ((image (contract-node-find-corresponding-store-image node))) 21 (if (and image (probe-file (blob-pathname image))) 22 (setf (image node) image 23 (timestamp node) (blob-timestamp image)) 24 (contract-node-set-timestamp-now node)))) 28 (when (and image (probe-file (blob-pathname image))) 29 (setf (image node) image 30 (timestamp node) (blob-timestamp image))))) 25 31 26 32 (defvar *contract-tree* nil) … … 79 85 (let ((geo-box (contract-geo-box contract)) 80 86 (geo-center (contract-geo-center contract))) 81 (ensure-intersecting-children contract-tree geo-box #'contract-node-set-timestamp-now) 82 (let ((placemark-node (find-node-if (lambda (node) (contract-placemark-at-node-p node contract)) 83 contract-tree 84 :prune-test (lambda (node) 85 (not (geo-point-in-box-p (geo-box node) geo-center)))))) 87 (ensure-intersecting-children contract-tree geo-box 88 (contract-node-timestamp-updater contract)) 89 (let ((placemark-node (find-node-if 90 (lambda (node) (contract-placemark-at-node-p node contract)) 91 contract-tree 92 :prune-test (lambda (node) 93 (not (geo-point-in-box-p (geo-box node) geo-center)))))) 86 94 (assert placemark-node) 87 95 (push contract (placemark-contracts placemark-node))))) … … 290 298 (when (contract-published-p contract) 291 299 (insert-contract *contract-tree* contract))) 292 (format t "~&rendering contract-tree images if needed...") 300 (format t "~&rendering contract-tree images if needed...") (force-output) 293 301 (map-nodes #'contract-node-update-image-if-needed *contract-tree*) 294 (format t "done.~%") 302 (format t "done.~%") (force-output) 295 303 (geometry:register-rect-subscriber geometry:*rect-publisher* *contract-tree* 296 304 (list 0 0 +width+ +width+)
