[gnome-media] Bug 581921 – Please show high-level channel mapping string for each device



commit e0177e1fcec7bc4624c861e9e9b66cced824475e
Author: Bastien Nocera <hadess hadess net>
Date:   Wed May 13 18:12:15 2009 +0100

    Bug 581921 â?? Please show high-level channel mapping string for each device
    
    Show a nice name for the output device's channel mapping, eg. Stereo,
    or Surround 5.1.
---
 gnome-volume-control/src/gvc-channel-map.c  |   13 ++++++-
 gnome-volume-control/src/gvc-channel-map.h  |    1 +
 gnome-volume-control/src/gvc-mixer-dialog.c |   53 ++++++++++++++++++++++-----
 3 files changed, 56 insertions(+), 11 deletions(-)

diff --git a/gnome-volume-control/src/gvc-channel-map.c b/gnome-volume-control/src/gvc-channel-map.c
index 66a8ecf..e508e80 100644
--- a/gnome-volume-control/src/gvc-channel-map.c
+++ b/gnome-volume-control/src/gvc-channel-map.c
@@ -97,10 +97,21 @@ gvc_channel_map_can_fade (GvcChannelMap  *map)
         return map->priv->can_fade;
 }
 
+const char *
+gvc_channel_map_get_mapping (GvcChannelMap  *map)
+{
+        g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
+
+        if (!pa_channel_map_valid(&map->priv->pa_map))
+                return NULL;
+
+        return pa_channel_map_to_pretty_name (&map->priv->pa_map);
+}
+
 const pa_channel_map *
 gvc_channel_map_get_pa_channel_map (GvcChannelMap  *map)
 {
-        g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
+        g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
 
         if (!pa_channel_map_valid(&map->priv->pa_map))
                 return NULL;
diff --git a/gnome-volume-control/src/gvc-channel-map.h b/gnome-volume-control/src/gvc-channel-map.h
index b00895a..d1c85a2 100644
--- a/gnome-volume-control/src/gvc-channel-map.h
+++ b/gnome-volume-control/src/gvc-channel-map.h
@@ -64,6 +64,7 @@ gboolean                gvc_channel_map_can_fade                (GvcChannelMap
 
 void                    gvc_channel_map_volume_changed          (GvcChannelMap    *map,
                                                                  const pa_cvolume *cv);
+const char *            gvc_channel_map_get_mapping             (GvcChannelMap  *map);
 
 /* private */
 const pa_cvolume *      gvc_channel_map_get_cvolume_for_volumes (GvcChannelMap  *map,
diff --git a/gnome-volume-control/src/gvc-mixer-dialog.c b/gnome-volume-control/src/gvc-mixer-dialog.c
index 036fe87..7fa0120 100644
--- a/gnome-volume-control/src/gvc-mixer-dialog.c
+++ b/gnome-volume-control/src/gvc-mixer-dialog.c
@@ -80,6 +80,7 @@ enum {
         DEVICE_COLUMN,
         ACTIVE_COLUMN,
         ID_COLUMN,
+        SPEAKERS_COLUMN,
         NUM_COLUMNS
 };
 
@@ -740,17 +741,20 @@ add_stream (GvcMixerDialog *dialog,
                                     ID_COLUMN, gvc_mixer_stream_get_id (stream),
                                     -1);
         } else if (GVC_IS_MIXER_SINK (stream)) {
-                GtkTreeModel *model;
-                GtkTreeIter   iter;
+                GtkTreeModel  *model;
+                GtkTreeIter    iter;
+                GvcChannelMap *map;
 
                 model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->output_treeview));
                 gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+                map = gvc_mixer_stream_get_channel_map (stream);
                 gtk_list_store_set (GTK_LIST_STORE (model),
                                     &iter,
                                     NAME_COLUMN, gvc_mixer_stream_get_description (stream),
                                     DEVICE_COLUMN, "",
                                     ACTIVE_COLUMN, is_default,
                                     ID_COLUMN, gvc_mixer_stream_get_id (stream),
+                                    SPEAKERS_COLUMN, gvc_channel_map_get_mapping (map),
                                     -1);
         }
 
@@ -963,6 +967,36 @@ on_output_radio_toggled (GtkCellRendererToggle *renderer,
         }
 }
 
+static void
+name_to_text (GtkTreeViewColumn *column,
+              GtkCellRenderer *cell,
+              GtkTreeModel *model,
+              GtkTreeIter *iter,
+              gpointer user_data)
+{
+        char *name, *mapping;
+
+        gtk_tree_model_get(model, iter,
+                           NAME_COLUMN, &name,
+                           SPEAKERS_COLUMN, &mapping,
+                           -1);
+
+        if (mapping == NULL) {
+                g_object_set (cell, "text", name, NULL);
+        } else {
+                char *str;
+
+                str = g_strdup_printf ("%s\n\t<i>%s</i>",
+                                       name, mapping);
+                g_object_set (cell, "markup", str, NULL);
+                g_free (str);
+        }
+
+        g_free (name);
+        g_free (mapping);
+}
+
+
 static GtkWidget *
 create_stream_treeview (GvcMixerDialog *dialog,
                         GCallback       on_toggled)
@@ -979,7 +1013,8 @@ create_stream_treeview (GvcMixerDialog *dialog,
                                     G_TYPE_STRING,
                                     G_TYPE_STRING,
                                     G_TYPE_BOOLEAN,
-                                    G_TYPE_UINT);
+                                    G_TYPE_UINT,
+                                    G_TYPE_STRING);
         gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
                                  GTK_TREE_MODEL (store));
 
@@ -996,20 +1031,18 @@ create_stream_treeview (GvcMixerDialog *dialog,
                           G_CALLBACK (on_toggled),
                           dialog);
 
-        renderer = gtk_cell_renderer_text_new ();
-        column = gtk_tree_view_column_new_with_attributes (_("Name"),
-                                                           renderer,
-                                                           "text", NAME_COLUMN,
-                                                           NULL);
-        gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+        gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview), -1,
+                                                    _("Name"), gtk_cell_renderer_text_new (),
+                                                    name_to_text, NULL, NULL);
 
+#if 0
         renderer = gtk_cell_renderer_text_new ();
         column = gtk_tree_view_column_new_with_attributes (_("Device"),
                                                            renderer,
                                                            "text", DEVICE_COLUMN,
                                                            NULL);
         gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-
+#endif
         return treeview;
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]