Changeset 6667


Ignore:
Timestamp:
Jun 3, 2007, 2:59:25 AM (17 years ago)
Author:
Gary Byers
Message:

New args+locals scheme.

File:
1 edited

Legend:

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

    r6234 r6667  
    1414
    1515(defclass frame-label (ns-lisp-string)
    16     ((frame-number :initarg :frame-number :foreign-type :int :accessor frame-label-number)
    17      (controller :initarg :controller :foreign-type :id :reader frame-label-controller)
     16    ((frame-number :foreign-type :int :accessor frame-label-number)
     17     (controller :foreign-type :id :reader frame-label-controller)
    1818     (frame-inspector :initform nil :accessor frame-label-frame-inspector))
    1919  (:metaclass ns:+ns-object))
    2020
    21 (defclass frame-item (ns-lisp-string)
    22     ((frame-label :initarg :frame-label :foreign-type :id :accessor frame-item-label)
    23      (index :initarg :index :foreign-type :int :accessor frame-item-index))
    24   (:metaclass ns:+ns-object))
    25 
     21(objc:defmethod #/initWithFrameNumber:controller: ((self frame-label) (frame-number :int) controller)
     22  (let* ((obj (#/init self)))
     23    (unless (%null-ptr-p obj)
     24      (setf (slot-value obj 'frame-number) frame-number
     25            (slot-value obj 'controller) controller))
     26    obj))
     27
     28
     29(defclass item-label (ns-lisp-string)
     30    ((frame-label :foreign-type :id :accessor item-label-label)
     31     (index :foreign-type :int :accessor item-label-index))
     32  (:metaclass ns:+ns-object))
     33
     34(objc:defmethod #/initWithFrameLabel:index: ((self item-label) the-frame-label (index :int))
     35  (let* ((obj (#/init self)))
     36    (unless (%null-ptr-p obj)
     37      (setf (slot-value obj 'frame-label) the-frame-label
     38            (slot-value obj 'index) index))
     39    obj))
    2640
    2741(defclass backtrace-window-controller (ns:ns-window-controller)
     
    4660         (font (default-font :name "Monaco" :size 12)))
    4761    (unless (%null-ptr-p outline)
     62      (#/setTarget: outline self)
     63      (#/setDoubleAction: outline (@selector #/backtraceDoubleClick:))
     64      (#/setShouldCascadeWindows: self nil)
    4865      (let* ((columns (#/tableColumns outline)))
    4966        (dotimes (i (#/count columns))
     
    6481                                (class-name (class-of break-condition))
    6582                                break-condition))))
    66                      
    6783                (#/setFont: header-cell (default-font :attributes '(:bold)))
    6884                (#/setStringValue: header-cell (%make-nsstring break-condition-string))))))))
     
    7086      (unless (%null-ptr-p window)
    7187        (let* ((context (backtrace-controller-context self))
    72                (process (tcr->process (bt.tcr context))))
     88               (process (tcr->process (bt.tcr context)))
     89               (listener-window (if (typep process 'cocoa-listener-process)
     90                                  (cocoa-listener-process-window process))))
     91          (when listener-window
     92            (let* ((listener-frame (#/frame listener-window))
     93                   (backtrace-width (ns:ns-rect-width (#/frame window)))
     94                   (new-x (- (+ (ns:ns-rect-x listener-frame)
     95                                (/ (ns:ns-rect-width listener-frame) 2))
     96                             (/ backtrace-width 2))))
     97              (ns:with-ns-point (p new-x (+ (ns:ns-rect-y listener-frame) (ns:ns-rect-height listener-frame)))
     98                (#/setFrameOrigin: window p))))
    7399          (#/setTitle:  window (%make-nsstring
    74100                                (format nil "Backtrace for ~a(~d), break level ~d"
     
    76102                                        (process-serial-number process)
    77103                                        (bt.break-level context)))))))))
     104
     105
     106(objc:defmethod (#/backtraceDoubleClick: :void)
     107    ((self backtrace-window-controller) sender)
     108  (let* ((row (#/clickedRow sender)))
     109    (if (>= row 0)
     110      (let* ((item (#/itemAtRow: sender row))
     111             (val-p nil)
     112             (value nil))
     113        (cond ((typep item 'frame-label)
     114               (let* ((controller (frame-label-controller item))
     115                      (inspector (backtrace-controller-inspector controller))
     116                      (frame-number (frame-label-number item)))
     117                 (setq val-p t value (inspector::line-n inspector frame-number))))
     118              ((typep item 'item-label)
     119               (let* ((the-frame-label (item-label-label item))
     120                      (frame-inspector (frame-label-frame-inspector the-frame-label))
     121                      (index (item-label-index item))
     122                      (rawval (inspector::line-n frame-inspector index)))
     123                 (if (and (consp rawval)
     124                          (typep (car rawval) 'keyword))
     125                 (setq val-p t value (cddr rawval))))))
     126        (if val-p
     127          (cinspect value))))))
     128
     129
     130
    78131
    79132(objc:defmethod (#/outlineView:isItemExpandable: :<BOOL>)
     
    108161           (let* ((label
    109162                   (make-instance 'frame-label
     163                                  :with-frame-number index
     164                                  :controller self
    110165                                  :string
    111166                                  (let* ((value
     
    114169                                      (%lfun-name-string value)
    115170                                      ":kernel")))))
    116              (setf (slot-value label 'controller) self
    117                    (slot-value label 'frame-number) index)
    118171             label))
    119172          ((our-frame-label-p self item)
     
    126179                              :object (inspector::inspector-object inspector)
    127180                              :update-line-count t)))))
    128              (make-instance 'frame-item
    129                             :frame-label item
     181             (make-instance 'item-label
     182                            :with-frame-label item
    130183                            :index index
    131184                            :string
    132185                            (let* ((ccl::*aux-vsp-ranges* (inspector::vsp-range inspector))
    133                                    (ccl::*aux-tsp-ranges* (inspector::tsp-range inspector)))
     186                                   (ccl::*aux-tsp-ranges* (inspector::tsp-range inspector))
     187                                   (ccl::*aux-csp-ranges* (inspector::csp-range inspector)))
    134188                              (with-output-to-string (s)
    135                                                      (multiple-value-bind (value label)
    136                                                          (inspector::line-n
    137                                                           frame-inspector
    138                                                           index)
     189                                                     (let* ((value
     190                                                             (inspector::line-n
     191                                                              frame-inspector
     192                                                              index)))
    139193                                                       (inspector::prin1-value
    140194                                                        frame-inspector
    141195                                                        s
    142                                                         value
    143                                                         label)))))))
     196                                                        value)))))))
    144197          (t (break) (%make-nsstring "Huh?")))))
    145198
     
    182235        (let* ((window (bt.dialog context)))
    183236          (when window
    184             (#/performSelectorOnMainThread:withObject:waitUntilDone: window (@selector @/close)  +null-ptr+ t)))))))
     237            (#/performSelectorOnMainThread:withObject:waitUntilDone: window (@selector #/close)  +null-ptr+ t)))))))
    185238
    186239 
Note: See TracChangeset for help on using the changeset viewer.