2 * pygnt- Python bindings for the GNT toolkit.
3 * Copyright (C) 2007 Sadrul Habib Chowdhury <sadrul@pidgin.im>
5 * gnttree.override: overrides for the tree widget.
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301
28 gnt_tree_create_row_from_list
29 gnt_tree_new_with_columns
34 deref_key(gpointer data)
36 Py_DECREF((PyGObject*)data);
40 _wrap_gnt_tree_new(PyGObject *self, PyObject *args, PyObject *kwargs)
42 static char* kwlist[] = { NULL };
44 if (!PyArg_ParseTupleAndKeywords(args, kwargs,
49 pygobject_constructv(self, 0, NULL);
53 "could not create gnt.Tree object");
56 g_object_set(G_OBJECT(self->obj), "columns", 1, NULL);
57 gnt_tree_set_hash_fns(GNT_TREE(self->obj), g_direct_hash, g_direct_equal, deref_key);
61 override gnt_tree_get_selection_text_list noargs
63 _wrap_gnt_tree_get_selection_text_list(PyGObject *self)
65 GList *list = gnt_tree_get_selection_text_list(GNT_TREE(self->obj));
66 return create_pyobject_from_string_list(list);
69 override gnt_tree_get_rows noargs
71 _wrap_gnt_tree_get_rows(PyGObject *self)
73 GList *list = gnt_tree_get_rows(GNT_TREE(self->obj));
79 if ((py_list = PyList_New(0)) == NULL) {
83 PyObject *obj = list->data;
84 PyList_Append(py_list, obj);
90 override gnt_tree_add_row_after
92 _wrap_gnt_tree_add_row_after(PyGObject *self, PyObject *args)
94 static char *kwlist[] = {"key", "row", "parent", "bigbro", NULL};
96 gpointer key, parent, bigbro = NULL;
100 gboolean insert_last = FALSE;
102 if (!PyArg_ParseTuple(args,
103 "O!OO|O:GntTree.add_row_after",
104 &PyGObject_Type, &key,
110 len = PySequence_Length(py_list);
111 for (i = 0; i < len; i++) {
112 PyObject *item = PySequence_GetItem(py_list, i);
113 if (!pygobject_check(item, &PyString_Type)) {
114 PyErr_SetString(PyExc_TypeError,
115 "column_list members must be strings");
119 list = g_list_prepend(list, PyString_AsString(item));
123 if (parent == Py_None)
125 if (bigbro == Py_None)
127 else if (bigbro == NULL)
130 list = g_list_reverse(list);
131 row = gnt_tree_create_row_from_list(GNT_TREE(self->obj), list);
133 gnt_tree_add_row_last(GNT_TREE(self->obj),
136 gnt_tree_add_row_after(GNT_TREE(self->obj),
139 Py_INCREF((PyGObject*)key);
146 override gnt_tree_get_selection_data noargs
148 _wrap_gnt_tree_get_selection_data(PyGObject *self)
150 PyObject *ret = gnt_tree_get_selection_data(GNT_TREE(self->obj));
157 override gnt_tree_change_text kwargs
159 _wrap_gnt_tree_change_text(PyGObject *self, PyObject *args, PyObject *kwargs)
161 static char *kwlist[] = { "key", "colno", "text", NULL };
166 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!is:GntTree.change_text", kwlist, &PyGObject_Type, &key, &colno, &text))
169 gnt_tree_change_text(GNT_TREE(self->obj), key, colno, text);
175 override gnt_tree_set_row_flags
177 _wrap_gnt_tree_set_row_flags(PyGObject *self, PyObject *args, PyObject *kwargs)
179 static char *kwlist[] = { "key", "flag", NULL };
183 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!i:GntTree.set_row_flags", kwlist, &PyGObject_Type, &key, &flag))
186 gnt_tree_set_row_flags(GNT_TREE(self->obj), key, flag);
192 override gnt_tree_remove
194 _wrap_gnt_tree_remove(PyGObject *self, PyObject *args, PyObject *kwargs)
196 static char *kwlist[] = { "key", NULL };
199 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!:GntTree.remove", kwlist, &PyGObject_Type, &key))
202 gnt_tree_remove(GNT_TREE(self->obj), key);
208 override gnt_tree_set_selected
210 _wrap_gnt_tree_set_selected(PyGObject *self, PyObject *args)
213 if (!PyArg_ParseTuple(args, "O!:GntTree.set_selected", &PyGObject_Type, &key)) {
216 gnt_tree_set_selected(GNT_TREE(self->obj), key);
221 ignore gnt_tree_set_compare_func
223 define GntTree.enable_sort noargs
226 Both p1 and p2 are expected to be GObjects, with a 'compare_func' property.
229 custom_compare_func(gconstpointer p1, gconstpointer p2)
231 PyObject *compare_func;
232 PyObject *ret, *params;
233 const PyGObject *o1, *o2;
240 g_return_val_if_fail(G_IS_OBJECT(o1->obj), -1);
241 g_return_val_if_fail(G_IS_OBJECT(o2->obj), -1);
243 class = pygobject_lookup_class(G_TYPE_FROM_INSTANCE(o1->obj));
244 compare_func = PyDict_GetItemString(class->tp_dict, "COMPARE_FUNC");
245 g_return_val_if_fail(compare_func && PyCallable_Check(compare_func), -1);
247 params = PyTuple_New(2);
248 Py_INCREF((PyObject*)o1);
249 PyTuple_SetItem(params, 0, (PyObject*)o1);
250 Py_INCREF((PyObject*)o2);
251 PyTuple_SetItem(params, 1, (PyObject*)o2);
252 ret = PyObject_CallObject(compare_func, params);
253 retval = (int)PyInt_AsLong(ret);
261 _wrap_gnt_tree_enable_sort(PyGObject *self)
263 gnt_tree_set_compare_func(GNT_TREE(self->obj), custom_compare_func);