From: Joshua P. <jpr...@us...> - 2001-09-18 04:20:07
|
Update of /cvsroot/gstreamer/gstreamer/gst In directory usw-pr-cvs1:/tmp/cvs-serv24731 Modified Files: gobject2gtk.h gstutils.c gstutils.h Log Message: glib 1.2 fix minor formatting improvements add gst_print_element_args Index: gobject2gtk.h =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/gobject2gtk.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- gobject2gtk.h 2001/09/13 21:16:25 1.18 +++ gobject2gtk.h 2001/09/18 04:20:04 1.19 @@ -17,6 +17,9 @@ typedef struct _GObject GObject; typedef struct _GObjectClass GObjectClass; +#define g_string_printf g_string_sprintf +#define g_string_printfa g_string_sprintfa + #define g_object_ref(obj) gtk_object_ref((GtkObject *)(obj)) #define g_object_unref(obj) gtk_object_unref((GtkObject *)(obj)) Index: gstutils.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/gstutils.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- gstutils.c 2001/09/17 23:41:18 1.17 +++ gstutils.c 2001/09/18 04:20:04 1.18 @@ -348,14 +348,30 @@ GList *props, gboolean showname) { GList *elem; + guint width = 0; + if (showname) + for (elem = props; elem; elem = g_list_next (elem)) + { + GstPropsEntry *prop = elem->data; + const gchar *name = g_quark_to_string (prop->propid); + + if (width < strlen (name)) + width = strlen (name); + } + for (elem = props; elem; elem = g_list_next (elem)) { GstPropsEntry *prop = elem->data; string_append_indent (buf, indent); if (showname) - g_string_append (buf, g_quark_to_string (prop->propid)); + { + const gchar *name = g_quark_to_string (prop->propid); + + g_string_append (buf, name); + string_append_indent (buf, 2 + width - strlen (name)); + } switch (prop->propstype) { case GST_PROPS_INT_ID: @@ -428,10 +444,97 @@ type->mime? type->mime : "unknown/unknown"); if (caps->properties) - gst_print_props (buf, indent + 2, + gst_print_props (buf, indent + 4, caps->properties->properties, TRUE); caps = caps->next; } } +} + +void gst_print_element_args (GString *buf, gint indent, GstElement *element) +{ + gint num_properties; + gint px; + guint width; + + GParamSpec **property_specs = + g_object_class_list_properties (G_OBJECT_GET_CLASS (element), + &num_properties); + + width=0; + for (px=0; px < num_properties; px++) { + GParamSpec *param = property_specs[px]; + if (width < strlen (param->name)) + width = strlen (param->name); + } + + for (px=0; px < num_properties; px++) { + GParamSpec *param = property_specs[px]; + GValue value; + + ZERO (value); + + g_value_init (&value, param->value_type); + g_object_get_property (G_OBJECT (element), param->name, &value); + + string_append_indent (buf, indent); + g_string_append (buf, param->name); + string_append_indent (buf, 2 + width - strlen (param->name)); + + if (G_IS_PARAM_SPEC_ENUM (param)) { + GEnumValue *values; + +#ifdef USE_GLIB2 + values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values; +#else + values = gtk_type_enum_get_values (param->value_type); +#endif + + g_string_printfa (buf, "%s (%s)", + values [g_value_get_enum (&value)].value_nick, + g_type_name (G_VALUE_TYPE (&value))); + } + else + switch (G_VALUE_TYPE (&value)) { + case G_TYPE_STRING: + g_string_printfa (buf, "\"%s\"", g_value_get_string (&value)); + break; + case G_TYPE_BOOLEAN: + g_string_append (buf, g_value_get_boolean (&value)? "TRUE":"FALSE"); + break; + case G_TYPE_ULONG:{ + gulong val = g_value_get_ulong (&value); + g_string_printfa (buf, "%lu (0x%lx)", val, val); + break;} + case G_TYPE_LONG:{ + glong val = g_value_get_long (&value); + g_string_printfa (buf, "%ld (0x%lx)", val, val); + break;} + case G_TYPE_UINT:{ + guint val = g_value_get_uint (&value); + g_string_printfa (buf, "%u (0x%x)", val, val); + break;} + case G_TYPE_INT:{ + gint val = g_value_get_int (&value); + g_string_printfa (buf, "%d (0x%x)", val, val); + break;} + case G_TYPE_FLOAT: + g_string_printfa (buf, "%f", g_value_get_float (&value)); + break; + case G_TYPE_DOUBLE: + g_string_printfa (buf, "%f", g_value_get_double (&value)); + break; + default: + g_string_printfa (buf, "unknown value_type %d", G_VALUE_TYPE (&value)); + break; + } + + g_string_append_c (buf, '\n'); + + if (G_VALUE_TYPE (&value)) + g_value_unset (&value); + } + + g_free (property_specs); } Index: gstutils.h =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/gstutils.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- gstutils.h 2001/09/17 23:44:58 1.9 +++ gstutils.h 2001/09/18 04:20:04 1.10 @@ -46,6 +46,7 @@ void gst_print_pad_caps (GString *buf, gint indent, GstPad *pad); +void gst_print_element_args (GString *buf, gint indent, GstElement *element); #ifdef __cplusplus } |