Changeset 6723
- Timestamp:
- Jun 14, 2007, 12:32:38 AM (17 years ago)
- File:
-
- 1 edited
-
branches/ide-1.0/ccl/examples/cocoa-defaults.lisp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/ide-1.0/ccl/examples/cocoa-defaults.lisp
r6234 r6723 57 57 value) 58 58 59 ;;; Names which contain #\* confuse Cocoa Bindings. 60 (defun objc-default-key (name) 61 (ns-constant-string (remove #\* (lisp-to-objc-message (list name))))) 62 63 59 64 (defun %define-cocoa-default (name type value doc &optional constraint) 60 65 (proclaim `(special ,name)) … … 65 70 (record-source-file name 'variable) 66 71 (setf (documentation name 'variable) doc) 67 (set name (set-cocoa-default name ( ns-constant-string (string name)) type value doc constraint))72 (set name (set-cocoa-default name (objc-default-key name) type value doc constraint)) 68 73 name) 69 74 … … 75 80 (note-variable-info ',name :global ,env)) 76 81 (declaim (special ,name)) 77 (%define-cocoa-default ',name ',type ',value ',doc ,@(when constraint `((specifier-type ',constraint))))))82 (%define-cocoa-default ',name ',type ,value ',doc ,@(when constraint `((specifier-type ',constraint)))))) 78 83 79 84 80 85 (defun update-cocoa-defaults () 81 (update-cocoa-defaults- vector86 (update-cocoa-defaults-list 82 87 (#/standardUserDefaults ns:ns-user-defaults) 83 ( apply #'vector (reverse (cocoa-defaults)))))88 (cocoa-defaults))) 84 89 85 (defun update-cocoa-defaults- vector (domain defaults-vector)90 (defun update-cocoa-defaults-list (domain defaults) 86 91 (let* ((need-synch nil)) 87 (dotimes (i (length defaults-vector)) 88 (let* ((d (svref defaults-vector i)) 89 (name (cocoa-default-symbol d)) 92 (dolist (d defaults) 93 (let* ((name (cocoa-default-symbol d)) 90 94 (key (objc-constant-string-nsstringptr (cocoa-default-string d)))) 91 95 (if (%null-ptr-p (#/objectForKey: domain key)) 92 96 (progn 93 (#/setObject:forKey: domain (%make-nsstring (format nil "~a" (cocoa-default-value d))) key) 97 (#/setObject:forKey: domain 98 (case (cocoa-default-type d) 99 (:color (#/archivedDataWithRootObject: 100 ns:ns-archiver 101 (cocoa-default-value d))) 102 (t 103 (%make-nsstring (format nil "~a" (cocoa-default-value d))))) 104 key) 94 105 (setq need-synch t)) 95 106 (case (cocoa-default-type d) … … 101 112 (let* ((nsstring (#/stringForKey: domain key))) 102 113 (unless (%null-ptr-p nsstring) 103 (set name (lisp-string-from-nsstring nsstring))))))))) 114 (set name (lisp-string-from-nsstring nsstring))))) 115 (:color 116 (let* ((data (#/dataForKey: domain key))) 117 (unless (%null-ptr-p data) 118 (set name (#/retain (#/unarchiveObjectWithData: ns:ns-unarchiver data)))))))))) 104 119 (when need-synch (#/synchronize domain)))) 120 121 ;;; Type of newval depends on cocoa-default-type. 122 (defun update-cocoa-default (d newval) 123 (let* ((name (cocoa-default-symbol d))) 124 (case (cocoa-default-type d) 125 (:int 126 (set name (#/intValue newval))) 127 (:float 128 (set name (#/floatValue newval))) 129 (:string 130 (unless (%null-ptr-p newval) 131 (set name (lisp-string-from-nsstring newval)))) 132 (:color 133 (unless (%null-ptr-p newval) 134 (set name (#/retain (#/unarchiveObjectWithData: ns:ns-unarchiver newval))))))))
Note:
See TracChangeset
for help on using the changeset viewer.
