-(defun column-name (model index)
- (svref (object-data model 'column-names) index))
-
-(defun tree-model-column-value-setter (model column)
- (let ((setters (or
- (object-data model 'column-setters)
- (setf
- (object-data model 'column-setters)
- (make-array (tree-model-n-columns model)
- :initial-element nil)))))
- (let ((index (column-index model column)))
- (or
- (svref setters index)
- (setf
- (svref setters index)
- (let ((setter
- (mkbinding (column-setter-name model)
- nil (type-of model) 'tree-iter 'int
-; (type-from-number (tree-model-get-column-type model index))
- (tree-model-get-column-type model index)
- 'int)))
- #'(lambda (value iter)
- (funcall setter model iter index value -1))))))))
-
-(defun tree-model-row-setter (model)
- (or
- (object-data model 'row-setter)
- (progn
- ;; This will create any missing column setter
- (loop
- for i from 0 below (tree-model-n-columns model)
- do (tree-model-column-value-setter model i))
- (let ((setters (object-data model 'column-setters)))
- (setf
- (object-data model 'row-setter)
- #'(lambda (row iter)
- (map nil #'(lambda (value setter)
- (funcall setter value iter))
- row setters)))))))
-
-(defun (setf tree-model-value) (value model row column)
- (let ((iter (etypecase row
- (tree-iter row)
- (tree-path (multiple-value-bind (valid iter)
- (tree-model-get-iter model row)
- (if valid
- iter
- (error "Invalid tree path: ~A" row)))))))
- (funcall (tree-model-column-value-setter model column) value iter)
- value))
-
-(defun (setf tree-model-row-data) (data model iter)
- (funcall (tree-model-row-setter model) data iter)
+(defmethod tree-model-column-name ((model tree-model) index)
+ (svref (user-data model 'column-names) index))
+
+
+(defmethod (setf tree-model-row-data) ((data list) (model tree-model) (iter tree-iter))
+ (loop
+ for (column value) on data by #'cddr
+ do (setf (tree-model-value model iter column) value))