diff options
author | John Finlay <finlay@src.gnome.org> | 2004-05-21 08:21:42 +0000 |
---|---|---|
committer | John Finlay <finlay@src.gnome.org> | 2004-05-21 08:21:42 +0000 |
commit | 10b491411ffdb2372b0bb4cbbfa5d1799affd561 (patch) | |
tree | 962bdb89553671844f28f8d9025ddb23b04cd9a9 /gtk/gtk-types.c | |
parent | 3330d5259bb47e027511ff0dd5a2f0517b973873 (diff) | |
download | pygtk-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.c | 56 |
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; |