This patch allows to change amount a columns in tree-view during execution.

For instance:

(defpackage :test
  (:use :common-lisp :cells :cells-gtk))
(in-package :test)
(defmodel mymodel ()
(( columns-list :cell t :accessor columns-list :initarg :columns-list
:initform (c-in (def-columns (:string (:title "1"))))

 )
 (items-list :cell t :accessor items-list :initarg :items-list :initform
(c-in nil)
             ))
)
(defvar *model* (make-instance 'mymodel))
(defmodel test-dyn-col (gtk-app)
()
(:default-initargs
;:md-name :test-dyn-col
:kids (list (mk-vbox :kids
             (list (mk-listbox :columns (c? (columns-list *model*))
                       :items (c? (items-list *model*)))
               (mk-button :on-clicked (callback (w e d)
                                (progn (setf (columns-list *model*)
(list (list :string (list :title "1")) (list :string (list :title "2"))))
                                (setf (items-list *model*) (list (list
"qwe" "wsx")))))))))))
(cells-gtk-init)
(cells-gtk:start-app 'test-dyn-col)

Index: gtk-ffi/gtk-list-tree.lisp
===================================================================
RCS file: /project/cells-gtk/cvsroot/root/gtk-ffi/gtk-list-tree.lisp,v
retrieving revision 1.5
diff -u -r1.5 gtk-list-tree.lisp
--- gtk-ffi/gtk-list-tree.lisp  16 Feb 2006 18:05:04 -0000      1.5
+++ gtk-ffi/gtk-list-tree.lisp  18 Jul 2006 12:23:48 -0000
@@ -129,6 +129,8 @@
                                        (data :pointer)))
   ;;tre-view-column
   (gtk-tree-view-column-new :pointer ())
+  (gtk-tree-view-remove-column :int ((tree-view :pointer)
+                               (column :pointer)))
   (gtk-tree-view-column-pack-start :void
                                   ((tree-column :pointer)
                                    (renderer :pointer)

Index: cells-gtk/tree-view.lisp
===================================================================
RCS file: /project/cells-gtk/cvsroot/root/cells-gtk/tree-view.lisp,v
retrieving revision 1.16
diff -u -r1.16 tree-view.lisp
--- cells-gtk/tree-view.lisp    7 Jun 2006 16:48:59 -0000       1.16
+++ cells-gtk/tree-view.lisp    18 Jul 2006 12:22:41 -0000
@@ -70,7 +70,9 @@
 
 (def-c-output tree-model ((self tree-view))
   (when new-value
-    (gtk-tree-view-set-model (id self) (id (to-be new-value)))))
+    (let ((new-model (to-be new-value)))
+      (gtk-tree-view-set-model (id self) (id new-model))
+      (setf (of-tree new-model) self))))
 
 (def-c-output expand-all ((self tree-view))
   (when new-value
@@ -219,9 +221,13 @@
   1)
 
 (def-c-output columns ((self tree-view))
+  (when old-value 
+    (loop for col in old-value do
+        (gtk-tree-view-remove-column (id self) (id col))
+        (gtk-object-forget (id col) col)))  
   (when new-value
     (loop for col in new-value
-        for pos from 0   
+       for pos from 0    
         for renderer = (case (nth pos (column-types self))
                          (:boolean (gtk-cell-renderer-toggle-new))
                          (:icon (gtk-cell-renderer-pixbuf-new))

_______________________________________________
cells-gtk-devel site list
[email protected]
http://common-lisp.net/mailman/listinfo/cells-gtk-devel

Reply via email to