Changeset 6667
- Timestamp:
- Jun 3, 2007, 2:59:25 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ide-1.0/ccl/examples/cocoa-backtrace.lisp
r6234 r6667 14 14 15 15 (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) 18 18 (frame-inspector :initform nil :accessor frame-label-frame-inspector)) 19 19 (:metaclass ns:+ns-object)) 20 20 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)) 26 40 27 41 (defclass backtrace-window-controller (ns:ns-window-controller) … … 46 60 (font (default-font :name "Monaco" :size 12))) 47 61 (unless (%null-ptr-p outline) 62 (#/setTarget: outline self) 63 (#/setDoubleAction: outline (@selector #/backtraceDoubleClick:)) 64 (#/setShouldCascadeWindows: self nil) 48 65 (let* ((columns (#/tableColumns outline))) 49 66 (dotimes (i (#/count columns)) … … 64 81 (class-name (class-of break-condition)) 65 82 break-condition)))) 66 67 83 (#/setFont: header-cell (default-font :attributes '(:bold))) 68 84 (#/setStringValue: header-cell (%make-nsstring break-condition-string)))))))) … … 70 86 (unless (%null-ptr-p window) 71 87 (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)))) 73 99 (#/setTitle: window (%make-nsstring 74 100 (format nil "Backtrace for ~a(~d), break level ~d" … … 76 102 (process-serial-number process) 77 103 (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 78 131 79 132 (objc:defmethod (#/outlineView:isItemExpandable: :<BOOL>) … … 108 161 (let* ((label 109 162 (make-instance 'frame-label 163 :with-frame-number index 164 :controller self 110 165 :string 111 166 (let* ((value … … 114 169 (%lfun-name-string value) 115 170 ":kernel"))))) 116 (setf (slot-value label 'controller) self117 (slot-value label 'frame-number) index)118 171 label)) 119 172 ((our-frame-label-p self item) … … 126 179 :object (inspector::inspector-object inspector) 127 180 :update-line-count t))))) 128 (make-instance ' frame-item129 : frame-label item181 (make-instance 'item-label 182 :with-frame-label item 130 183 :index index 131 184 :string 132 185 (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))) 134 188 (with-output-to-string (s) 135 ( multiple-value-bind (value label)136 (inspector::line-n137 frame-inspector138 index)189 (let* ((value 190 (inspector::line-n 191 frame-inspector 192 index))) 139 193 (inspector::prin1-value 140 194 frame-inspector 141 195 s 142 value 143 label))))))) 196 value))))))) 144 197 (t (break) (%make-nsstring "Huh?"))))) 145 198 … … 182 235 (let* ((window (bt.dialog context))) 183 236 (when window 184 (#/performSelectorOnMainThread:withObject:waitUntilDone: window (@selector @/close) +null-ptr+ t)))))))237 (#/performSelectorOnMainThread:withObject:waitUntilDone: window (@selector #/close) +null-ptr+ t))))))) 185 238 186 239
Note:
See TracChangeset
for help on using the changeset viewer.
