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;
103 if (!PyArg_ParseTuple(args,
104 "O!OO|Oi:GntTree.add_row_after",
105 &PyGObject_Type, &key,
111 len = PySequence_Length(py_list);
112 for (i = 0; i < len; i++) {
113 PyObject *item = PySequence_GetItem(py_list, i);
114 if (!pygobject_check(item, &PyString_Type)) {
115 PyErr_SetString(PyExc_TypeError,
116 "column_list members must be strings");
120 list = g_list_prepend(list, PyString_AsString(item));
124 if (parent == Py_None)
126 if (bigbro == Py_None)
128 else if (bigbro == NULL)
131 list = g_list_reverse(list);
132 row = gnt_tree_create_row_from_list(GNT_TREE(self->obj), list);
134 gnt_tree_add_row_last(GNT_TREE(self->obj),
138 gnt_tree_add_choice(GNT_TREE(self->obj), key, row, parent, bigbro);
140 gnt_tree_add_row_after(GNT_TREE(self->obj),
144 Py_INCREF((PyGObject*)key);
151 override gnt_tree_get_selection_data noargs
153 _wrap_gnt_tree_get_selection_data(PyGObject *self)
155 PyObject *ret = gnt_tree_get_selection_data(GNT_TREE(self->obj));
162 override gnt_tree_set_choice kwargs
164 _wrap_gnt_tree_set_choice(PyGObject *self, PyObject *args, PyObject *kwargs)
168 if (!PyArg_ParseTuple(args, "O!i:GntTree.set_choice", &PyGObject_Type, &key, &choice)) {
171 gnt_tree_set_choice(GNT_TREE(self->obj), key, choice);
176 override gnt_tree_get_choice kwargs
178 _wrap_gnt_tree_get_choice(PyGObject *self, PyObject *args, PyObject *kwargs)
182 if (!PyArg_ParseTuple(args, "O!:GntTree.get_choice", &PyGObject_Type, &key)) {
185 choice = gnt_tree_get_choice(GNT_TREE(self->obj), key);
186 return PyBool_FromLong(choice);
189 override gnt_tree_change_text kwargs
191 _wrap_gnt_tree_change_text(PyGObject *self, PyObject *args, PyObject *kwargs)
193 static char *kwlist[] = { "key", "colno", "text", NULL };
198 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!is:GntTree.change_text", kwlist, &PyGObject_Type, &key, &colno, &text))
201 gnt_tree_change_text(GNT_TREE(self->obj), key, colno, text);
207 override gnt_tree_set_row_color kwargs
209 _wrap_gnt_tree_set_row_color(PyGObject *self, PyObject *args, PyObject *kwargs)
211 static char *kwlist[] = { "key", "color", NULL };
215 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!i:GntTree.set_row_color", kwlist, &PyGObject_Type, &key, &color))
218 gnt_tree_set_row_color(GNT_TREE(self->obj), key, color);
224 override gnt_tree_set_row_flags kwargs
226 _wrap_gnt_tree_set_row_flags(PyGObject *self, PyObject *args, PyObject *kwargs)
228 static char *kwlist[] = { "key", "flag", NULL };
232 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!i:GntTree.set_row_flags", kwlist, &PyGObject_Type, &key, &flag))
235 gnt_tree_set_row_flags(GNT_TREE(self->obj), key, flag);
241 override gnt_tree_remove kwargs
243 _wrap_gnt_tree_remove(PyGObject *self, PyObject *args, PyObject *kwargs)
245 static char *kwlist[] = { "key", NULL };
248 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!:GntTree.remove", kwlist, &PyGObject_Type, &key))
251 gnt_tree_remove(GNT_TREE(self->obj), key);
257 override gnt_tree_sort_siblings kwargs
259 _wrap_gnt_tree_sort_siblings(PyGObject *self, PyObject *args, PyObject *kwargs)
261 static char *kwlist[] = { "key", NULL };
264 if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!:GntTree.sort_siblings", kwlist, &PyGObject_Type, &key))
267 gnt_tree_sort_siblings(GNT_TREE(self->obj), key);
273 override gnt_tree_set_selected
275 _wrap_gnt_tree_set_selected(PyGObject *self, PyObject *args)
278 if (!PyArg_ParseTuple(args, "O!:GntTree.set_selected", &PyGObject_Type, &key)) {
281 gnt_tree_set_selected(GNT_TREE(self->obj), key);
286 override gnt_tree_set_expanded
288 _wrap_gnt_tree_set_expanded(PyGObject *self, PyObject *args)
292 if (!PyArg_ParseTuple(args, "O!i:GntTree.set_expanded", &PyGObject_Type, &key, &expanded)) {
295 gnt_tree_set_expanded(GNT_TREE(self->obj), key, expanded);
300 ignore gnt_tree_set_compare_func
302 define GntTree.enable_sort noargs
305 Both p1 and p2 are expected to be GObjects, with a 'compare_func' property.
308 custom_compare_func(gconstpointer p1, gconstpointer p2)
310 PyObject *compare_func;
311 PyObject *ret, *params;
312 const PyGObject *o1, *o2;
319 g_return_val_if_fail(G_IS_OBJECT(o1->obj), -1);
320 g_return_val_if_fail(G_IS_OBJECT(o2->obj), -1);
322 class = pygobject_lookup_class(G_TYPE_FROM_INSTANCE(o1->obj));
323 compare_func = PyDict_GetItemString(class->tp_dict, "COMPARE_FUNC");
324 g_return_val_if_fail(compare_func && PyCallable_Check(compare_func), -1);
326 params = PyTuple_New(2);
327 Py_INCREF((PyObject*)o1);
328 PyTuple_SetItem(params, 0, (PyObject*)o1);
329 Py_INCREF((PyObject*)o2);
330 PyTuple_SetItem(params, 1, (PyObject*)o2);
331 ret = PyObject_CallObject(compare_func, params);
332 retval = (int)PyInt_AsLong(ret);
340 _wrap_gnt_tree_enable_sort(PyGObject *self)
342 gnt_tree_set_compare_func(GNT_TREE(self->obj), custom_compare_func);