[gnac/devel] Code refactoring



commit f271cbca9b9c832a4810d256d718b276eb8f7955
Author: BenoÃt Dupasquier <bdupasqu src gnome org>
Date:   Sun Oct 30 11:41:22 2011 +0000

    Code refactoring

 src/gnac-prefs.c                     |    4 +
 src/gnac-properties.c                |  370 ++++++++++++++++++++--------------
 src/gnac-utils.c                     |    7 +
 src/gnac-utils.h                     |    3 +
 src/profiles/gnac-profiles-manager.c |    2 +-
 5 files changed, 229 insertions(+), 157 deletions(-)
---
diff --git a/src/gnac-prefs.c b/src/gnac-prefs.c
index 687cf6f..d0f6be5 100644
--- a/src/gnac-prefs.c
+++ b/src/gnac-prefs.c
@@ -70,6 +70,10 @@ gnac_prefs_get_folder_hierarchy_as_str(void);
 static gchar *
 gnac_prefs_get_rename_pattern_as_str(void);
 
+static void
+gnac_prefs_select_custom_pattern(GtkComboBox *combo_box);
+
+
 static gchar *
 gnac_prefs_get_tooltip_patterns(void)
 {
diff --git a/src/gnac-properties.c b/src/gnac-properties.c
index 5339e07..83f3b54 100644
--- a/src/gnac-properties.c
+++ b/src/gnac-properties.c
@@ -39,30 +39,6 @@
 #include "libgnac-metadata.h"
 
 
-static void 
-gnac_properties_set_entry(const gchar  *entry_name, 
-                          const GValue *entry_value);
-
-static void
-gnac_properties_build_table(void);
-
-static gchar *
-gnac_properties_get_property_from_value(const gchar  *name, 
-                                        const GValue *value);
-static void
-gnac_properties_set_property(const gchar  *name, 
-                             const GValue *value);
-
-static void
-gnac_properties_update_forward_arrow(void);
-
-static void
-gnac_properties_update_backward_arrow(void);
-
-static void
-gnac_properties_reset_spin_if_empty(const gchar *name);
-
-
 static GtkBuilder   *gnac_properties_builder = NULL;
 static GHashTable   *gnac_properties_table;
 static GtkTreeModel *properties_filter;
@@ -113,12 +89,64 @@ static const gchar *displayed_properties[][2] = {
 
 static LibgnacTags *tags;
 
+
+static void
+gnac_properties_set_entry(const gchar  *entry_name,
+                          const GValue *entry_value);
+
+static void
+gnac_properties_build_table(void);
+
+static gchar *
+gnac_properties_get_property_from_value(const gchar  *name,
+                                        const GValue *value);
+
+static void
+gnac_properties_reset_basic_tab(void);
+
+static void
+gnac_properties_reset_properties_tab(void);
+
+static void
+gnac_properties_set_property(const gchar  *name,
+                             const GValue *value);
+
+static gchar *
+gnac_properties_dup_bitrate(const GValue *value);
+
+static gchar *
+gnac_properties_dup_rate(const GValue *value);
+
+static gchar *
+gnac_properties_dup_framerate(const GValue *value);
+
+static gchar *
+gnac_properties_dup_channels(const GValue *value);
+
+static void
+gnac_properties_update_forward_arrow(void);
+
+static void
+gnac_properties_update_backward_arrow(void);
+
+static void
+gnac_properties_reset_spin_if_empty(const gchar *name);
+
+
+static GObject *
+gnac_properties_get_object(const gchar *object_name)
+{
+  return gtk_builder_get_object(gnac_properties_builder, object_name);
+}
+
+
 static GtkWidget *
 gnac_properties_get_widget(const gchar *widget_name)
 {
-  return GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, widget_name));
+  return GTK_WIDGET(gnac_properties_get_object(widget_name));
 }
 
+
 static gboolean
 gnac_properties_visible_func(GtkTreeModel *model,
                              GtkTreeIter  *iter,
@@ -134,67 +162,54 @@ static void
 gnac_properties_build_table(void)
 {
   GtkCellRenderer *renderer;
-  GtkTreeModel *model;
-  GtkWidget *view;
+  GtkTreeModel    *model;
+  GtkTreeView     *view;
 
-  GtkTreeRowReference *ref = NULL;
-  GtkTreeIter iter;
   guint i;
 
-  model = GTK_TREE_MODEL(gtk_builder_get_object(gnac_properties_builder, 
-                                            "properties_store"));
-  view = GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, 
-                                            "properties_view"));
+  model = GTK_TREE_MODEL(gnac_properties_get_object("properties_store"));
+  view = GTK_TREE_VIEW(gnac_properties_get_widget("properties_view"));
 
-  gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(view), PROPERTY_TOOLTIP);
+  gtk_tree_view_set_tooltip_column(view, PROPERTY_TOOLTIP);
 
   properties_filter = gtk_tree_model_filter_new(model, NULL);
   gtk_tree_model_filter_set_visible_func(
-        GTK_TREE_MODEL_FILTER(properties_filter), 
-        gnac_properties_visible_func, NULL, NULL);
-  gtk_tree_view_set_model(GTK_TREE_VIEW(view), properties_filter);
+      GTK_TREE_MODEL_FILTER(properties_filter),
+      gnac_properties_visible_func, NULL, NULL);
+  gtk_tree_view_set_model(view, properties_filter);
 
   renderer = gtk_cell_renderer_text_new();
   g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL);
   g_object_set(G_OBJECT(renderer), "xpad", 6, NULL);
   g_object_set(G_OBJECT(renderer), "weight", 700, NULL);
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
-                                              -1,
-                                              "Property",
-                                              renderer,
-                                              "text",
-                                              PROPERTY_NAME,
-                                              NULL);
+  gtk_tree_view_insert_column_with_attributes(view, -1,
+      "Property", renderer, "text", PROPERTY_NAME, NULL);
 
   renderer = gtk_cell_renderer_text_new();
   g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
-                                              -1,
-                                              "Value",
-                                              renderer,
-                                              "text",
-                                              PROPERTY_VALUE,
-                                              NULL);
-
-  gnac_properties_table = g_hash_table_new_full(g_str_hash, 
-                                                g_str_equal, 
-                                                g_free, 
-                (GDestroyNotify)gtk_tree_row_reference_free);
+  gtk_tree_view_insert_column_with_attributes(view, -1,
+      "Value", renderer, "text", PROPERTY_VALUE, NULL);
+
+  gnac_properties_table = g_hash_table_new_full(g_str_hash,
+      g_str_equal, g_free, (GDestroyNotify)gtk_tree_row_reference_free);
   
   for (i = 0; displayed_properties[i][0]; i++)
   {
+    GtkTreeIter iter;
     GtkTreePath *path;
+    GtkTreeRowReference *ref;
 
     gtk_list_store_append(GTK_LIST_STORE(model), &iter);
     gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-                    PROPERTY_NAME, gettext(displayed_properties[i][1]),
-                    PROPERTY_VISIBLE, TRUE, -1);
+        PROPERTY_NAME, gettext(displayed_properties[i][1]),
+        PROPERTY_VISIBLE, TRUE,
+        -1);
 
     path = gtk_tree_model_get_path(model, &iter);
     ref = gtk_tree_row_reference_new(model, path);
 
-    g_hash_table_insert(gnac_properties_table, 
-                    g_strdup(displayed_properties[i][0]), ref);
+    g_hash_table_insert(gnac_properties_table,
+        g_strdup(displayed_properties[i][0]), ref);
 
     gtk_tree_path_free(path);
   }
@@ -204,18 +219,30 @@ gnac_properties_build_table(void)
 static void
 gnac_properties_reset_properties(void)
 {
-  guint i;
+  gnac_properties_reset_basic_tab();
+  gnac_properties_reset_properties_tab();
 
-  /* reset the basic tab */
+  gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(properties_filter));
+}
+
+
+static void
+gnac_properties_reset_basic_tab(void)
+{
+  guint i;
   for (i = 0; displayed_tags[i]; i++) {
     gnac_properties_set_entry(displayed_tags[i], NULL);
   }
+}
+
 
+static void
+gnac_properties_reset_properties_tab(void)
+{
+  guint i;
   for (i = 0; displayed_properties[i][0]; i++) {
     gnac_properties_set_property(displayed_properties[i][0], NULL);
   }
-
-  gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(properties_filter));
 }
 
 
@@ -233,85 +260,84 @@ gnac_properties_set_property(const gchar  *name,
 
   if (!str_value) visible = FALSE;
 
-  model = GTK_TREE_MODEL(gtk_builder_get_object(gnac_properties_builder, 
-                                            "properties_store"));
+  model = GTK_TREE_MODEL(gnac_properties_get_object("properties_store"));
   ref = g_hash_table_lookup(gnac_properties_table, name);
-  if (ref) {
-    gchar *desc = NULL;
-    gchar *tooltip = NULL;
-
-    path = gtk_tree_row_reference_get_path(ref);
-    if (path) {
-
-      GtkTreeIter iter;
-
-      if (gtk_tree_model_get_iter(model, &iter, path)) 
-      {
-        gtk_tree_model_get(model, &iter, 
-                        PROPERTY_VALUE, &desc,
-                        PROPERTY_TOOLTIP, &tooltip,
-                        -1);
-
-        gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-                        PROPERTY_VALUE, str_value,
-                        PROPERTY_VISIBLE, visible,
-                        -1);
-
-        if (LIBGNAC_METADATA_TAG_IS_LOCATION(name) || 
-            LIBGNAC_METADATA_TAG_IS_FILENAME(name)) 
-        {
-          gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-                          PROPERTY_TOOLTIP, str_value,
-                          -1);
-        }
-
-        g_free(desc);
-        g_free(tooltip);
-      }
-    }
+  if (!ref) {
+    return;
+  }
+
+  path = gtk_tree_row_reference_get_path(ref);
+  if (!path) {
     g_free(str_value);
-    gtk_tree_path_free(path);
-    gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(properties_filter));
+    return;
+  }
+
+  GtkTreeIter iter;
+
+  if (gtk_tree_model_get_iter(model, &iter, path))
+  {
+    gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+        PROPERTY_VALUE, str_value,
+        PROPERTY_VISIBLE, visible,
+        -1);
+
+    if (LIBGNAC_METADATA_TAG_IS_LOCATION(name) ||
+        LIBGNAC_METADATA_TAG_IS_FILENAME(name))
+    {
+      gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+          PROPERTY_TOOLTIP, str_value, -1);
+    }
+  }
+
+  g_free(str_value);
+  gtk_tree_path_free(path);
+  gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(properties_filter));
+}
+
+
+static void
+gnac_properties_reset_field(GtkWidget *widget)
+{
+  if (GTK_IS_ENTRY(widget)) {
+    gtk_entry_set_text(GTK_ENTRY(widget), "");
+  } else if (GTK_IS_IMAGE(widget)) {
+    gtk_image_clear(GTK_IMAGE(widget));
   }
 }
 
 
+static void
+gnac_properties_set_image(GtkWidget    *widget,
+                          const GValue *value)
+{
+  GdkPixbuf *pixbuf = g_value_get_object(value);
+  pixbuf = gnac_utils_scale_pixbuf(pixbuf, 96, 96);
+  pixbuf = gnac_utils_add_border_to_pixbuf(pixbuf);
+  gtk_image_set_from_pixbuf(GTK_IMAGE(widget), pixbuf);
+}
+
+
 static void 
 gnac_properties_set_entry(const gchar  *entry_name, 
                           const GValue *entry_value)
 {
-  GtkWidget *entry = NULL;
+  GtkWidget *widget = NULL;
   gdouble value;
 
-  entry = GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, entry_name));
-  if (!entry) 
-  {
+  widget = gnac_properties_get_widget(entry_name);
+  if (!widget) {
     gnac_properties_set_property(entry_name, entry_value);
     return;
   }
 
-  /* if there is no value for this field, reset it */
-  if (!entry_value) 
-  {
-    if (GTK_IS_ENTRY(entry)) 
-    {
-      gtk_entry_set_text(GTK_ENTRY(entry), "");
-    } 
-    else if (GTK_IS_IMAGE(entry)) 
-    {
-      /* TODO look for a cover in the current directory?
-       *      (folder.jpg, cover.jpg, front.jpg, ...) */
-      gtk_image_clear(GTK_IMAGE(entry));
-    }
+  if (!entry_value) {
+    gnac_properties_reset_field(widget);
     return;
   }
 
   if (LIBGNAC_METADATA_TAG_IS_IMAGE(entry_name)) 
   {
-    GdkPixbuf *pixbuf = g_value_get_object(entry_value);
-    pixbuf = gnac_utils_scale_pixbuf(pixbuf, 96, 96);
-    pixbuf = gnac_utils_add_border_to_pixbuf(pixbuf);
-    gtk_image_set_from_pixbuf(GTK_IMAGE(entry), pixbuf);
+    gnac_properties_set_image(widget, entry_value);
     return;
   }
 
@@ -319,19 +345,18 @@ gnac_properties_set_entry(const gchar  *entry_name,
   switch (type) {
 
     case G_TYPE_STRING:
-      gtk_entry_set_text(GTK_ENTRY(entry), 
-                      g_value_get_string(entry_value));
+      gtk_entry_set_text(GTK_ENTRY(widget), g_value_get_string(entry_value));
       return;
 
     case G_TYPE_UINT:
       value = (gdouble) g_value_get_uint(entry_value);
-      gtk_spin_button_set_value(GTK_SPIN_BUTTON(entry), value);
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(entry), value, value);
+      gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), value);
+      gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), value, value);
       return;
     
     default:
-      gtk_entry_set_text(GTK_ENTRY(entry), 
-                      g_strdup_value_contents(entry_value));
+      gtk_entry_set_text(GTK_ENTRY(widget),
+          g_strdup_value_contents(entry_value));
       libgnac_debug("%s has an unknown type: %s",
           entry_name, g_type_name(type));
       return;
@@ -351,17 +376,7 @@ gnac_properties_get_property_from_value(const gchar  *name,
   }
   if (LIBGNAC_METADATA_TAG_IS_BITRATE(name))
   {
-    guint val = g_value_get_uint(value);
-    if (val == 0) return NULL; 
-    /* convert the bitrate from bps to kbps */
-    val /= 1000;
-    if (libgnac_metadata_tag_exists(tags, GNAC_TAG_VBR)) {
-      /* Translators: variable bitrate */
-      return  g_strdup_printf(_("~%d kbps (VBR)"), val);
-    } else {
-      /* Translators: bitrate */
-      return g_strdup_printf(_("%d kbps"), val);
-    }
+    return gnac_properties_dup_bitrate(value);
   }
   if (LIBGNAC_METADATA_TAG_IS_FILE_SIZE(name)) 
   {
@@ -373,24 +388,15 @@ gnac_properties_get_property_from_value(const gchar  *name,
   }
   if (LIBGNAC_METADATA_TAG_IS_RATE(name)) 
   {
-    gint val = g_value_get_int(value);
-    if (val == 0) return NULL;
-    /* Translators: rate */
-    else return g_strdup_printf(_("%d Hz"), val);
+    return gnac_properties_dup_rate(value);
   }
   if (LIBGNAC_METADATA_TAG_IS_FRAMERATE(name))
   {
-    gfloat val = g_value_get_float(value);
-    if (val == 0) return NULL;
-    /* Translators: framerate */
-    else return g_strdup_printf(_("%.3lf fps"), val);
+    return gnac_properties_dup_framerate(value);
   }
   if (LIBGNAC_METADATA_TAG_IS_CHANNELS(name)) 
   {
-    gint val = g_value_get_int(value);
-    if (val == 0) return NULL;
-    else return g_strdup_printf("%d%s", val,
-        val == 1 ? " (mono)" : val == 2 ? " (stereo)" : "");
+    return gnac_properties_dup_channels(value);
   }
   if (LIBGNAC_METADATA_TAG_IS_TRACK_GAIN(name) ||
       LIBGNAC_METADATA_TAG_IS_TRACK_PEAK(name))
@@ -415,12 +421,65 @@ gnac_properties_get_property_from_value(const gchar  *name,
 }
 
 
+static gchar *
+gnac_properties_dup_bitrate(const GValue *value)
+{
+  guint val = g_value_get_uint(value);
+  if (val == 0) return NULL;
+
+  val = gnac_utils_convert_bps_to_kbps(val);
+
+  if (libgnac_metadata_tag_exists(tags, GNAC_TAG_VBR)) {
+    /* Translators: variable bitrate */
+    return  g_strdup_printf(_("~%d kbps (VBR)"), val);
+  } else {
+    /* Translators: bitrate */
+    return g_strdup_printf(_("%d kbps"), val);
+  }
+}
+
+
+static gchar *
+gnac_properties_dup_rate(const GValue *value)
+{
+  gint val = g_value_get_int(value);
+  if (val == 0) return NULL;
+
+  /* Translators: rate */
+  return g_strdup_printf(_("%d Hz"), val);
+}
+
+
+static gchar *
+gnac_properties_dup_framerate(const GValue *value)
+{
+  gfloat val = g_value_get_float(value);
+  if (val == 0) return NULL;
+
+  /* Translators: framerate */
+  return g_strdup_printf(_("%.3lf fps"), val);
+}
+
+
+static gchar *
+gnac_properties_dup_channels(const GValue *value)
+{
+  gint val = g_value_get_int(value);
+  if (val == 0) return NULL;
+
+  /* Translators: channels */
+  return g_strdup_printf("%d%s", val,
+      val == 1 ? _(" (mono)") : val == 2 ? _(" (stereo)") : "");
+}
+
+
 GtkWidget *
 gnac_properties_window_new(void)
 {
   GtkWidget *properties_window;
 
-  gnac_properties_builder = gnac_utils_create_gtk_builder(PKGDATADIR "/gnac-properties-window.xml");
+  gnac_properties_builder = gnac_utils_create_gtk_builder(
+      PKGDATADIR "/gnac-properties-window.xml");
 
   gnac_properties_build_table();
 
@@ -428,8 +487,9 @@ gnac_properties_window_new(void)
   backward_arrow = gnac_properties_get_widget("backward_btn");
   forward_arrow = gnac_properties_get_widget("forward_btn");
   gtk_window_set_transient_for(GTK_WINDOW(properties_window), 
-                                GTK_WINDOW(gnac_ui_get_widget("main_window")));
-  gtk_window_set_type_hint(GTK_WINDOW(properties_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+      GTK_WINDOW(gnac_ui_get_widget("main_window")));
+  gtk_window_set_type_hint(GTK_WINDOW(properties_window),
+      GDK_WINDOW_TYPE_HINT_DIALOG);
 
   return properties_window;
 }
@@ -519,11 +579,9 @@ gnac_properties_window_show(void)
     if (gnac_file_list_get(current_ref, &file_uri)) 
     {
       GFile *uri;
-
       uri = g_file_new_for_uri(file_uri);
       gnac_properties_update_display(uri);
       g_object_unref(uri);
-
       g_free(file_uri);
     }
   }
diff --git a/src/gnac-utils.c b/src/gnac-utils.c
index 5ecf023..48b72ff 100644
--- a/src/gnac-utils.c
+++ b/src/gnac-utils.c
@@ -93,6 +93,13 @@ gnac_utils_format_duration_for_display(guint64 duration)
 }
 
 
+guint
+gnac_utils_convert_bps_to_kbps(guint value)
+{
+  return value/1000;
+}
+
+
 guint64 
 gnac_utils_moving_avg_add_sample(guint64 sample)
 {
diff --git a/src/gnac-utils.h b/src/gnac-utils.h
index 7e82f00..2e63908 100644
--- a/src/gnac-utils.h
+++ b/src/gnac-utils.h
@@ -37,6 +37,9 @@ gnac_utils_get_display_name(const gchar  *uri,
 gchar *
 gnac_utils_format_duration_for_display(guint64 duration);
 
+guint
+gnac_utils_convert_bps_to_kbps(guint value);
+
 guint64 
 gnac_utils_moving_avg_add_sample(guint64 sample);
 
diff --git a/src/profiles/gnac-profiles-manager.c b/src/profiles/gnac-profiles-manager.c
index 19397e0..d8acd37 100644
--- a/src/profiles/gnac-profiles-manager.c
+++ b/src/profiles/gnac-profiles-manager.c
@@ -161,7 +161,7 @@ static GtkWidget *
 gnac_profiles_mgr_get_widget(const gchar *widget_name)
 {
   GtkWidget *widget;
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder, widget_name));
+  widget = GTK_WIDGET(gnac_profiles_mgr_get_object(widget_name));
   return widget;
 }
 



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