Added documentation of GObject high-level layer
[cl-gtk2.git] / gtk / gtk.tree-model.lisp
index 6cbdb96..6bd65bb 100644 (file)
@@ -30,6 +30,7 @@
 
 ; TODO: GtkTreeModelFilter
 
+
 (defclass array-list-store (g-object tree-model)
   ((items :initform (make-array 0 :adjustable t :fill-pointer t) :reader store-items)
    (columns-getters :initform (make-array 0 :adjustable t :fill-pointer t) :reader store-getters)
 
 (register-object-type-implementation "LispArrayListStore" array-list-store "GObject" ("GtkTreeModel") nil)
 
+(defun store-items-count (store)
+  (length (store-items store)))
+
+(export 'store-items-count)
+
+(defun store-item (store index)
+  (aref (store-items store) index))
+
+(export 'store-item)
+
 (defun store-add-item (store item)
   (vector-push-extend item (store-items store))
   (using* ((path (make-instance 'tree-path))
-                   (iter (make-instance 'tree-iter)))
+           (iter (make-instance 'tree-iter)))
     (setf (tree-path-indices path) (list (1- (length (store-items store)))))
     (setf (tree-iter-stamp iter) 0 (tree-iter-user-data iter) (1- (length (store-items store))))
     (emit-signal store "row-inserted" path iter)))
 
 (export 'store-add-item)
 
+(defun store-remove-item (store item &key (test 'eq))
+  (with-slots (items) store
+    (let ((index (position item items :test test)))
+      (unless index (error "No such item~%~A~%in list-store~%~A" item store))
+      (setf items (delete item items :test test))
+      (using (path (make-instance 'tree-path))
+             (setf (tree-path-indices path) (list index))
+             (emit-signal store "row-deleted" path)))))
+
+(export 'store-remove-item)
+
 (defun store-add-column (store type getter)
   (vector-push-extend (ensure-g-type type) (store-types store))
   (vector-push-extend getter (store-getters store))
 
 (defmethod tree-model-get-path-impl ((model array-list-store) iter)
   (using* (iter)
-    (anaphora:aprog1 (make-instance 'tree-path)
-      (setf (tree-path-indices anaphora:it) (list (tree-iter-user-data iter)))
-      (disown-boxed-ref anaphora:it))))
+    (let ((path (make-instance 'tree-path)))
+      (setf (tree-path-indices path) (list (tree-iter-user-data iter)))
+      (disown-boxed-ref path)
+      path)))
 
 (defmethod tree-model-iter-has-child-impl ((model array-list-store) iter)
   (release iter)
                             (aref (store-items model) n-row))
                    (aref (store-types model) n)))))
 
-(defstruct tree-node
-  store
-  (columns-values (make-array 0 :adjustable t :fill-pointer t) :type vector)
-  (children (make-array 0 :adjustable t :fill-pointer t) :type (vector tree-node)))
-
-(export 'tree-node)
-
-(defclass tree-store (g-object tree-model)
-  ((root :reader tree-store-root)
-   (columns-types :initform (make-array 0 :adjustable t :fill-pointer t) :reader tree-store-types)
-   (columns-getters :initform (make-array 0 :adjustable t :fill-pointer t) :reader tree-store-getters)))
-
-(export 'tree-store)
-
-(register-object-type-implementation "LispTreeStore" tree-store "GObject" ("GtkTreeModel") nil)
-
 (defcfun (tree-model-flags "gtk_tree_model_get_flags") tree-model-flags
   (tree-model g-object))
 
   (with-foreign-object (v 'g-value)
     (g-value-zero v)
     (gtk-tree-model-get-value tree-model iter column v)
-    (prog1 (parse-gvalue v)
+    (prog1 (parse-g-value v)
       (g-value-unset v))))
 
 (export 'tree-model-value)