summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorJohn Finlay <finlay@src.gnome.org>2004-05-03 23:16:44 +0000
committerJohn Finlay <finlay@src.gnome.org>2004-05-03 23:16:44 +0000
commit9a320ea0c80421269f4d13209ce190c8c2f9a9ad (patch)
tree34f229db28edc60b76f059fbe593edea5c5783a0 /gtk
parentea5a5e9930d7f3397996d2afa90f65e4bf500e55 (diff)
downloadpygtk-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.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtktreeview.override71
1 files changed, 69 insertions, 2 deletions
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;
+}