diff options
Diffstat (limited to 'bin')
-rw-r--r-- | bin/tools/info.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/bin/tools/info.c b/bin/tools/info.c index ec264cd..90f2057 100644 --- a/bin/tools/info.c +++ b/bin/tools/info.c @@ -61,6 +61,8 @@ print_properties (UcaCamera *camera) { GObjectClass *oclass; GParamSpec **pspecs; + GHashTable *map; + GList *names; gchar *fmt_string; guint n_props; guint max_length = 0; @@ -71,12 +73,11 @@ print_properties (UcaCamera *camera) for (guint i = 0; i < n_props; i++) max_length = MAX (max_length, strlen (g_param_spec_get_name (pspecs[i]))); - fmt_string = g_strdup_printf (" %%s | %%-%us | %%s\n", max_length); + map = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free); for (guint i = 0; i < n_props; i++) { GParamSpec *pspec; GValue value= { 0, { { 0 } } }; - gchar *value_string; const gchar *name; pspec = pspecs[i]; @@ -84,14 +85,26 @@ print_properties (UcaCamera *camera) g_value_init (&value, pspec->value_type); g_object_get_property (G_OBJECT (camera), name, &value); - value_string = g_strdup_value_contents (&value); + g_hash_table_insert (map, (gpointer) name, g_strdup_value_contents (&value)); + g_value_unset (&value); + } + + fmt_string = g_strdup_printf (" %%s | %%-%us | %%s\n", max_length); + names = g_list_sort (g_hash_table_get_keys (map), (GCompareFunc) g_strcmp0); - g_print (fmt_string, get_flags_description (pspec), name, value_string); + for (GList *it = g_list_first (names); it != NULL; it = g_list_next (it)) { + GParamSpec *pspec; + const gchar *name; + gchar* value; - g_free (value_string); - g_value_unset (&value); + name = (const gchar *) it->data; + pspec = g_object_class_find_property (oclass, name); + value = g_hash_table_lookup (map, name); + g_print (fmt_string, get_flags_description (pspec), name, value); } + g_list_free (names); + g_hash_table_destroy (map); g_free (fmt_string); g_free (pspecs); } |