-(in-package :gtk)
+;; Common Lisp bindings for GTK+ 2.x
+;; Copyright 2005 Espen S. Johnsen <espen@users.sf.net>
+;;
+;; Permission is hereby granted, free of charge, to any person obtaining
+;; a copy of this software and associated documentation files (the
+;; "Software"), to deal in the Software without restriction, including
+;; without limitation the rights to use, copy, modify, merge, publish,
+;; distribute, sublicense, and/or sell copies of the Software, and to
+;; permit persons to whom the Software is furnished to do so, subject to
+;; the following conditions:
+;;
+;; The above copyright notice and this permission notice shall be
+;; included in all copies or substantial portions of the Software.
+;;
+;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+;; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+;; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+;; $Id: ginspect.lisp,v 1.8 2006-02-03 00:15:52 espen Exp $
+
+#+sbcl(require :gtk)
+#+cmu(asdf:oos 'asdf:load-op :gtk)
+
+(defpackage "GINSPECT"
+ (:use "COMMON-LISP" "GLIB" "GTK" #+cmu"PCL" #+sbcl"SB-PCL")
+ (:export "GINSPECT"))
+
+(in-package "GINSPECT")
(defvar *ginspect-unbound-object-marker*
#+cmu (gensym "UNBOUND-OBJECT-")
(defgeneric decompose-describe-object (object))
+;; A container to hold lisp objects "inside" the tree store
+(defclass object-container (gobject)
+ ((object :initarg :object))
+ (:metaclass gobject-class))
+
+
(defun ginspect (object)
(let* ((store (make-instance 'tree-store
:column-types '(string string gobject boolean)
(object (make-instance 'cell-renderer-text)))
(tree-view-append-column view column)
(cell-layout-pack column name :expand nil)
- (cell-layout-add-attribute column name 'text 'name store)
+ (cell-layout-add-attribute column name 'text (column-index store 'name))
(cell-layout-pack column object :expand t)
- (cell-layout-add-attribute column object 'text 'pprinted store))
+ (cell-layout-add-attribute column object 'text (column-index store 'pprinted)))
(insert-object object store nil)
(signal-connect view 'row-expanded
#'(lambda (iter path)
(when (setf
- (tree-model-column-value store iter 'expanded)
- (not (tree-model-column-value store iter 'expanded)))
+ (tree-model-value store iter 'expanded)
+ (not (tree-model-value store iter 'expanded)))
(multiple-value-bind (valid child-iter)
(tree-model-iter-children store iter)
;; Remove old children
(when valid
(loop while (tree-store-remove store child-iter))))
- (let ((gobject (tree-model-column-value store iter 'object)))
- (insert-parts (object-data gobject 'object) store iter))
+ (let ((container (tree-model-value store iter 'object)))
+ (insert-parts (slot-value container 'object) store iter))
(tree-view-expand-row view path nil))))
(make-instance 'dialog
(if (equal parts (list object))
(values description nil nil)
(values description named-p parts)))
- (sb-impl::inspected-parts object))
+ #+sbcl(sb-impl::inspected-parts object))
(defmethod decompose-describe-object ((object (eql t)))
(values (call-next-method) nil nil))
(defmethod decompose-describe-object ((object symbol))
(values
(call-next-method) t
- (cons "Name" (symbol-name object))
- (cons "Package" (symbol-package objecy))
- (cons "Value" (if (boundp object)
- (symbol-value object)
- *ginspect-unbound-object-marker*))
- (cons "Function" (if (fboundp object)
- (symbol-function object)
- *ginspect-unbound-object-marker*))
- (cons "Plist" (symbol-plist object))))
+ (list
+ (cons "Name" (symbol-name object))
+ (cons "Package" (symbol-package object))
+ (cons "Value" (if (boundp object)
+ (symbol-value object)
+ *ginspect-unbound-object-marker*))
+ (cons "Function" (if (fboundp object)
+ (symbol-function object)
+ *ginspect-unbound-object-marker*))
+ (cons "Plist" (symbol-plist object)))))
#+cmu
(defmethod decompose-describe-object ((object standard-object))
"<unbound>")
(defmethod insert-object ((object t) store parent &optional (name ""))
- (let ((gobject (make-instance 'gobject)) ; to "hang" the lisp object on
+ (let ((container (make-instance 'object-container :object object))
(has-parts (object-has-parts-p object)))
- (setf (object-data gobject 'object) object)
(let ((iter (tree-store-append store parent
(vector name (object-to-string object)
- gobject (not has-parts)))))
+ container (not has-parts)))))
(when has-parts
;; Insert dummy child
- (tree-store-append store iter (vector "" "" gobject t))))))
+ (tree-store-append store iter (vector "" "" container t))))))
(defmethod insert-parts :around ((object t) store parent)
(when (object-has-parts-p object)