diff options
author | Paul Pogonyshev <pogonyshev@gmx.net> | 2008-08-28 19:39:40 +0000 |
---|---|---|
committer | Paul Pogonyshev <paulp@src.gnome.org> | 2008-08-28 19:39:40 +0000 |
commit | 893f5338d35152c363ead8cde593656880054f1a (patch) | |
tree | 1815562f54c1b710664d4a7d0c0c5ae6a70e1389 /gtk/gdkevent.override | |
parent | afb4ff94e80dbdc8db82b502626fd14d251d40d7 (diff) | |
download | pygtk-893f5338d35152c363ead8cde593656880054f1a.tar.gz |
Bug 526189 – add __str__ and/or __repr__ to several types
2008-08-28 Paul Pogonyshev <pogonyshev@gmx.net>
Bug 526189 – add __str__ and/or __repr__ to several types
* gtk/gdk.override (_wrap_gdk_cursor_tp_repr): New function.
* gtk/gdkcolor.override (pygdk_color_to_string_smart)
(_wrap_gdk_color_tp_repr, _wrap_gdk_color_tp_str): New functions.
* gtk/gdkevent.override (_wrap_gdk_event_tp_repr): New function.
* gtk/gdkrectangle.override (_wrap_gdk_rectangle_tp_repr): New
function.
* tests/test_color.py (Tests.test_repr, Tests.test_str): New tests.
(Tests._test_color_list): New helper method.
* tests/test_rectangle.py (Tests.test_repr): New test.
(Tests._test_rectangle_list): New helper method.
2008-08-28 Paul Pogonyshev <pogonyshev@gmx.net>
* pygtk-gdkrectangle.xml: Document __repr__.
* pygtk-gdkcolor.xml: Document __repr__ and __str__.
* pygtk-gdkevent.xml: Document __repr__.
svn path=/trunk/; revision=3029
Diffstat (limited to 'gtk/gdkevent.override')
-rw-r--r-- | gtk/gdkevent.override | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/gtk/gdkevent.override b/gtk/gdkevent.override index 38fffef1..3c0501d2 100644 --- a/gtk/gdkevent.override +++ b/gtk/gdkevent.override @@ -918,3 +918,156 @@ _wrap_gdk_event_free(PyObject *self) Py_INCREF(Py_None); return Py_None; } +%% +override-slot GdkEvent.tp_repr +static PyObject * +_wrap_gdk_event_tp_repr(PyGObject *self) +{ + static char buffer[0x400]; + int length = 0; + + GdkEvent *event = pyg_boxed_get(self, GdkEvent); + GEnumValue *type = g_enum_get_value(g_type_class_peek(GDK_TYPE_EVENT_TYPE), event->type); + + length += g_snprintf(buffer + length, sizeof buffer - length, "<%s at %p: %s", + self->ob_type->tp_name, self, type ? type->value_name : "UNKNOWN TYPE"); + + /* Depending on event type we will append values of some most important attributes to + * representation string. In any case, this information is not enough to reconstruct + * the event object (and in any case gtk.gdk.Event is incapable of doing so), + * therefore the <...> syntax. + */ + switch(event->type) { + case GDK_NOTHING: break; + case GDK_DELETE: break; + case GDK_DESTROY: break; + case GDK_EXPOSE: + { + length += g_snprintf(buffer + length, sizeof buffer - length, " area=[%d, %d, %d, %d]", + event->expose.area.x, event->expose.area.y, + event->expose.area.width, event->expose.area.height); + break; + } + case GDK_MOTION_NOTIFY: + { + length += g_snprintf(buffer + length, sizeof buffer - length, " x=%.2f, y=%.2f", + event->motion.x, event->motion.y); + break; + } + case GDK_BUTTON_PRESS: + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + case GDK_BUTTON_RELEASE: + { + length += g_snprintf(buffer + length, sizeof buffer - length, + " x=%.2f, y=%.2f, button=%d", + event->button.x, event->button.y, event->button.button); + break; + } + case GDK_KEY_PRESS: + case GDK_KEY_RELEASE: + { + const gchar *key = gdk_keyval_name(event->key.keyval); + + if (key) + length += g_snprintf(buffer + length, sizeof buffer - length, " keyval=%s", key); + else + length += g_snprintf(buffer + length, sizeof buffer - length, + " keyval=%d", event->key.keyval); + break; + } + case GDK_ENTER_NOTIFY: + case GDK_LEAVE_NOTIFY: + { + GEnumValue *mode = g_enum_get_value(g_type_class_peek(GDK_TYPE_CROSSING_MODE), + event->crossing.mode); + length += g_snprintf(buffer + length, sizeof buffer - length, + " x=%.2f, y=%.2f, mode=%s", + event->crossing.x, event->crossing.y, + mode ? mode->value_name : "UNKNOWN"); + break; + } + case GDK_FOCUS_CHANGE: break; + case GDK_CONFIGURE: + { + length += g_snprintf(buffer + length, sizeof buffer - length, + " x=%d, y=%d, width=%d, height=%d", + event->configure.x, event->configure.y, + event->configure.width, event->configure.height); + break; + } + case GDK_MAP: break; + case GDK_UNMAP: break; + case GDK_PROPERTY_NOTIFY: + { + length += g_snprintf(buffer + length, sizeof buffer - length, " atom=%s", + gdk_atom_name(event->property.atom)); + break; + } + case GDK_SELECTION_CLEAR: + case GDK_SELECTION_REQUEST: + case GDK_SELECTION_NOTIFY: + { + length += g_snprintf(buffer + length, sizeof buffer - length, + " selection=%s, target=%s, property=%s", + gdk_atom_name(event->selection.selection), + gdk_atom_name(event->selection.target), + gdk_atom_name(event->selection.property)); + break; + } + case GDK_PROXIMITY_IN: break; + case GDK_PROXIMITY_OUT: break; + case GDK_DRAG_ENTER: break; + case GDK_DRAG_LEAVE: break; + case GDK_DRAG_MOTION: break; + case GDK_DRAG_STATUS: break; + case GDK_DROP_START: break; + case GDK_DROP_FINISHED: break; + case GDK_CLIENT_EVENT: break; + case GDK_VISIBILITY_NOTIFY: + { + GEnumValue *state = g_enum_get_value(g_type_class_peek(GDK_TYPE_VISIBILITY_STATE), + event->visibility.state); + length += g_snprintf(buffer + length, sizeof buffer - length, + " state=%s", state ? state->value_name : "UNKNOWN"); + break; + } + case GDK_NO_EXPOSE: break; + case GDK_SCROLL: + { + GEnumValue *direction = g_enum_get_value(g_type_class_peek(GDK_TYPE_SCROLL_DIRECTION), + event->scroll.direction); + length += g_snprintf(buffer + length, sizeof buffer - length, + " x=%.2f, y=%.2f, direction=%s", + event->scroll.x, event->scroll.y, + direction ? direction->value_name : "UNKNOWN"); + break; + } + case GDK_WINDOW_STATE: break; + case GDK_SETTING: + { + GEnumValue *action = g_enum_get_value(g_type_class_peek(GDK_TYPE_SETTING_ACTION), + event->setting.action); + length += g_snprintf(buffer + length, sizeof buffer - length, + " action=%s, name=%s", + action ? action->value_name : "UNKNOWN", + event->setting.name); + break; + } + case GDK_OWNER_CHANGE: + { + GEnumValue *reason = g_enum_get_value(g_type_class_peek(GDK_TYPE_OWNER_CHANGE), + event->owner_change.reason); + length += g_snprintf(buffer + length, sizeof buffer - length, + " reason=%s, selection=%s", + reason ? reason->value_name : "UNKNOWN", + gdk_atom_name(event->owner_change.selection)); + break; + } + default: + break; + } + + length += g_snprintf(buffer + length, sizeof buffer - length, ">"); + return PyString_FromStringAndSize(buffer, length); +} |