chiark / gitweb /
Added the PCL package to list of used packages
authorespen <espen>
Fri, 3 Feb 2006 00:15:52 +0000 (00:15 +0000)
committerespen <espen>
Fri, 3 Feb 2006 00:15:52 +0000 (00:15 +0000)
examples/ginspect.lisp

index ebdbefe02fbe3794a2462575d2f9899daaebad80..25b49d18a714e14781f58ca7a8d5f33bb0fa4da5 100644 (file)
 ;; 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.7 2006-02-02 23:00:28 espen Exp $
+;; $Id: ginspect.lisp,v 1.8 2006-02-03 00:15:52 espen Exp $
 
-(in-package :gtk)
+#+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-")
@@ -35,6 +42,12 @@ (defgeneric object-has-parts-p (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)
@@ -62,8 +75,8 @@ (defun ginspect (object)
             ;; Remove old children
             (when valid
               (loop while (tree-store-remove store child-iter))))
-          (let ((gobject (tree-model-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
@@ -153,15 +166,14 @@ (defmethod object-to-string ((object (eql *ginspect-unbound-object-marker*)))
   "<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)