Changeset 6723


Ignore:
Timestamp:
Jun 14, 2007, 12:32:38 AM (17 years ago)
Author:
Gary Byers
Message:

Try to work with new preferences scheme.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ide-1.0/ccl/examples/cocoa-defaults.lisp

    r6234 r6723  
    5757  value)
    5858
     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
    5964(defun %define-cocoa-default (name type value doc &optional constraint)
    6065  (proclaim `(special ,name))
     
    6570  (record-source-file name 'variable)
    6671  (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))
    6873  name)
    6974 
     
    7580       (note-variable-info ',name :global ,env))
    7681    (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))))))
    7883
    7984   
    8085(defun update-cocoa-defaults ()
    81   (update-cocoa-defaults-vector
     86  (update-cocoa-defaults-list
    8287   (#/standardUserDefaults ns:ns-user-defaults)
    83    (apply #'vector (reverse (cocoa-defaults)))))
     88   (cocoa-defaults)))
    8489
    85 (defun update-cocoa-defaults-vector (domain defaults-vector)
     90(defun update-cocoa-defaults-list (domain defaults)
    8691  (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))
    9094             (key (objc-constant-string-nsstringptr (cocoa-default-string d))))
    9195        (if (%null-ptr-p (#/objectForKey:  domain key))
    9296          (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)
    94105            (setq need-synch t))
    95106          (case (cocoa-default-type d)
     
    101112             (let* ((nsstring (#/stringForKey: domain key)))
    102113               (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))))))))))
    104119    (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.