summaryrefslogtreecommitdiff
path: root/gtk/gtk-types.c
diff options
context:
space:
mode:
authorJohn Finlay <finlay@src.gnome.org>2004-05-21 08:21:42 +0000
committerJohn Finlay <finlay@src.gnome.org>2004-05-21 08:21:42 +0000
commit10b491411ffdb2372b0bb4cbbfa5d1799affd561 (patch)
tree962bdb89553671844f28f8d9025ddb23b04cd9a9 /gtk/gtk-types.c
parent3330d5259bb47e027511ff0dd5a2f0517b973873 (diff)
downloadpygtk-10b491411ffdb2372b0bb4cbbfa5d1799affd561.tar.gz
gtk/gtk-types.c (_pygtk_tree_model_remove_row) Add function to help in row
* gtk/gtk-types.c (_pygtk_tree_model_remove_row) Add function to help in row removal from sort and filter models using del (_pygtk_tree_model_set_row) Add support for TreeModelSort and TreeModelFilter setting row values. * gtk/pygtk-private.h (_pygtk_tree_model_remove_row) Add declaration. * gtk/gtktreeview.override (_wrap_gtk_tree_model_tp_setitem) Use _pygtk_tree_model_remove_row() helper function. (_wrap_gtk_tree_model_filter_set_modify_func) Add. Add support to TreeModelSort and TreeModelFilter for Python mapping, number and iter protocols.
Diffstat (limited to 'gtk/gtk-types.c')
-rw-r--r--gtk/gtk-types.c56
1 files changed, 54 insertions, 2 deletions
diff --git a/gtk/gtk-types.c b/gtk/gtk-types.c
index 6a6de52d..239d018c 100644
--- a/gtk/gtk-types.c
+++ b/gtk/gtk-types.c
@@ -1093,17 +1093,69 @@ static PyTypeObject PyGtkTreeModelRowIter_Type = {
};
int
+_pygtk_tree_model_remove_row(GtkTreeModel *model, GtkTreeIter *iter)
+{
+ GtkTreeModel *child;
+ GtkTreeIter citer;
+
+ if (GTK_IS_LIST_STORE(model)) {
+ gtk_list_store_remove(GTK_LIST_STORE(model), iter);
+ return 0;
+ }
+
+ if (GTK_IS_TREE_STORE(model)) {
+ gtk_tree_store_remove(GTK_TREE_STORE(model), iter);
+ return 0;
+ }
+
+ if (GTK_IS_TREE_MODEL_SORT(model)) {
+ child = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(model));
+ gtk_tree_model_sort_convert_iter_to_child_iter(
+ GTK_TREE_MODEL_SORT(model), &citer, iter);
+ return _pygtk_tree_model_remove_row(child, &citer);
+ }
+
+ if (GTK_IS_TREE_MODEL_FILTER(model)) {
+ child = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
+ gtk_tree_model_filter_convert_iter_to_child_iter(
+ GTK_TREE_MODEL_FILTER(model), &citer, iter);
+ return _pygtk_tree_model_remove_row(child, &citer);
+ }
+
+ PyErr_SetString(PyExc_TypeError,
+ "cannot remove rows in this tree model");
+ return -1;
+}
+
+int
_pygtk_tree_model_set_row(GtkTreeModel *model, GtkTreeIter *iter,
PyObject *items)
{
gint n_columns, i;
+ GtkTreeModel *child;
+ GtkTreeIter citer;
- if (!GTK_IS_LIST_STORE(model) && !GTK_IS_TREE_STORE(model)) {
+ if (!GTK_IS_LIST_STORE(model) && !GTK_IS_TREE_STORE(model) &&
+ !GTK_IS_TREE_MODEL_SORT(model) && !GTK_IS_TREE_MODEL_FILTER(model)) {
PyErr_SetString(PyExc_TypeError,
- "can not set cells in this tree model");
+ "cannot set cells in this tree model");
return -1;
}
+ if (GTK_IS_TREE_MODEL_SORT(model)) {
+ child = gtk_tree_model_sort_get_model(GTK_TREE_MODEL_SORT(model));
+ gtk_tree_model_sort_convert_iter_to_child_iter(
+ GTK_TREE_MODEL_SORT(model), &citer, iter);
+ return _pygtk_tree_model_set_row(child, &citer, items);
+ }
+
+ if (GTK_IS_TREE_MODEL_FILTER(model)) {
+ child = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
+ gtk_tree_model_filter_convert_iter_to_child_iter(
+ GTK_TREE_MODEL_FILTER(model), &citer, iter);
+ return _pygtk_tree_model_set_row(child, &citer, items);
+ }
+
if (!PySequence_Check(items)) {
PyErr_SetString(PyExc_TypeError, "expecting a sequence");
return -1;