diff options
author | John Finlay <finlay@src.gnome.org> | 2004-05-03 23:16:44 +0000 |
---|---|---|
committer | John Finlay <finlay@src.gnome.org> | 2004-05-03 23:16:44 +0000 |
commit | 9a320ea0c80421269f4d13209ce190c8c2f9a9ad (patch) | |
tree | 34f229db28edc60b76f059fbe593edea5c5783a0 | |
parent | ea5a5e9930d7f3397996d2afa90f65e4bf500e55 (diff) | |
download | pygtk-9a320ea0c80421269f4d13209ce190c8c2f9a9ad.tar.gz |
gtk/gtktreeview.override (_wrap_gtk_tree_store_reorder) Add.
* gtk/gtktreeview.override (_wrap_gtk_tree_store_reorder) Add.
(_wrap_gtk_list_store_reorder) Throw exception if indices out of
range.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | gtk/gtktreeview.override | 71 |
2 files changed, 73 insertions, 2 deletions
@@ -3,6 +3,10 @@ * gtk/gtktextview.override (_wrap_gtk_text_iter_forward_find_char) (_wrap_gtk_text_iter_backward_find_char) Add. + * gtk/gtktreeview.override (_wrap_gtk_tree_store_reorder) Add. + (_wrap_gtk_list_store_reorder) Throw exception if indices out of + range. + 2004-05-03 Johan Dahlin <johan@gnome.org> * codegen/codegen.py (Wrapper): Add support for tp_as_buffer. diff --git a/gtk/gtktreeview.override b/gtk/gtktreeview.override index eb1f19ee..8174e83a 100644 --- a/gtk/gtktreeview.override +++ b/gtk/gtktreeview.override @@ -1458,12 +1458,19 @@ _wrap_gtk_list_store_reorder(PyGObject *self, PyObject *args) new_order = g_new0(gint, store->length); for (i = 0; i < store->length; i++) { PyObject *item = PyList_GetItem(list, i); + int index; if (!PyInt_Check(item)) { PyErr_SetString(PyExc_TypeError, "all items must be of type int"); g_free(new_order); return NULL; - } - new_order[i] = PyInt_AsLong(item); + } + index = PyInt_AsLong(item); + if (index < 0 || index >= store->length) { + PyErr_SetString(PyExc_ValueError, "position index out of range"); + g_free(new_order); + return NULL; + } + new_order[i] = index; Py_DECREF(item); } gtk_list_store_reorder(GTK_LIST_STORE(self->obj), new_order); @@ -2571,3 +2578,63 @@ _wrap_gtk_tree_view_column_cell_get_position(PyGObject *self, PyObject *args, Py_INCREF(Py_None); return Py_None; } +%% +override gtk_tree_store_reorder kwargs +static PyObject * +_wrap_gtk_tree_store_reorder(PyGObject *self, PyObject *args, PyObject *kwargs) +{ + static char *kwlist[] = { "parent", "new_order", NULL }; + PyObject *list, *pyparent; + gint *new_order; + GtkTreeStore *store; + GtkTreeIter *parent = NULL; + int i, slen; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "OO!:gtk.TreeStore.reorder", kwlist, + &pyparent, &PyList_Type, &list)) + return NULL; + + if (pyparent != Py_None) { + if (!pyg_boxed_check(pyparent, GTK_TYPE_TREE_ITER)) { + parent = pyg_boxed_get(pyparent, GtkTreeIter); + } else { + PyErr_SetString(PyExc_TypeError, + "parent must be a valid gtk.TreeIter or None"); + return NULL; + } + } + store = GTK_TREE_STORE(self->obj); + slen = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(self->obj), parent); + if (PyList_Size(list) < slen) { + PyErr_SetString(PyExc_TypeError, + "list size must be >= the number of " + "children of parent"); + return NULL; + } + + new_order = g_new0(gint, slen); + for (i = 0; i < slen; i++) { + PyObject *item = PyList_GetItem(list, i); + int index; + if (!PyInt_Check(item)) { + PyErr_SetString(PyExc_TypeError, "all items must be of type int"); + g_free(new_order); + return NULL; + } + index = PyInt_AsLong(item); + if (index < 0 || index >= slen) { + PyErr_SetString(PyExc_ValueError, "position index out of range"); + g_free(new_order); + return NULL; + } + new_order[i] = index; + Py_DECREF(item); + } + gtk_tree_store_reorder(GTK_TREE_STORE(self->obj), parent, new_order); + + g_free(new_order); + + Py_INCREF(Py_None); + return Py_None; +} |