Revision: 2261
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=2261&view=rev
Author:   jcsjcs
Date:     2009-02-25 13:19:01 +0000 (Wed, 25 Feb 2009)

Log Message:
-----------
        * src/display_tracks: streamline display functions. Thanks to
          Javier Kohen for the patch.

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog
    gtkpod/trunk/src/display_tracks.c

Modified: gtkpod/trunk/ChangeLog
===================================================================
--- gtkpod/trunk/ChangeLog      2009-02-24 13:56:26 UTC (rev 2260)
+++ gtkpod/trunk/ChangeLog      2009-02-25 13:19:01 UTC (rev 2261)
@@ -1,3 +1,8 @@
+2009-02-25 Jorg Schuler <jcsjcs at users.sourceforge.net>
+
+       * src/display_tracks: streamline display functions. Thanks to
+          Javier Kohen for the patch.
+
 2009-02-24 Jorg Schuler <jcsjcs at users.sourceforge.net>
 
        * src/display_tracks.c (tm_data_compare)

Modified: gtkpod/trunk/src/display_tracks.c
===================================================================
--- gtkpod/trunk/src/display_tracks.c   2009-02-24 13:56:26 UTC (rev 2260)
+++ gtkpod/trunk/src/display_tracks.c   2009-02-25 13:19:01 UTC (rev 2261)
@@ -1121,11 +1121,11 @@
    into the model.
    This function reads the data for the given cell from the list and
    passes it to the renderer. */
-static void tm_cell_data_func (GtkTreeViewColumn *tree_column,
-                              GtkCellRenderer   *renderer,
-                              GtkTreeModel      *model,
-                              GtkTreeIter       *iter,
-                              gpointer           data)
+static void tm_cell_data_text_func (GtkTreeViewColumn *tree_column,
+                                   GtkCellRenderer   *renderer,
+                                   GtkTreeModel      *model,
+                                   GtkTreeIter       *iter,
+                                   gpointer           data)
 {
        Track *track;
        ExtraTrackData *etr;
@@ -1146,102 +1146,99 @@
 
        text = track_get_text (track, TM_to_T (column));
 
+       g_object_set (G_OBJECT (renderer), "text", text, NULL);
+
+       g_free (text);
+}
+
+
+/* The track data is stored in a separate list (static GList *tracks)
+   and only pointers to the corresponding Track structure are placed
+   into the model.
+   This function reads the data for the given cell from the list and
+   passes it to the renderer. */
+static void tm_cell_data_toggle_func (GtkTreeViewColumn *tree_column,
+                                     GtkCellRenderer   *renderer,
+                                     GtkTreeModel      *model,
+                                     GtkTreeIter       *iter,
+                                     gpointer           data)
+{
+       Track *track;
+       ExtraTrackData *etr;
+       iTunesDB *itdb;
+       TM_item column;
+
+       column = (TM_item)g_object_get_data (G_OBJECT (renderer), "column");
+
+       g_return_if_fail ((column >= 0) && (column < TM_NUM_COLUMNS));
+
+       gtk_tree_model_get (model, iter, READOUT_COL, &track, -1);
+       g_return_if_fail (track);
+       etr = track->userdata;
+       g_return_if_fail (etr);
+       itdb = track->itdb;
+       g_return_if_fail (itdb);
+
        switch (column)
        {
-       case TM_COLUMN_RATING:
-               g_object_set (G_OBJECT (renderer),
-                                         "rating", (double)(track->rating / 
ITDB_RATING_STEP),
-                                         NULL);
-               break;
-       case TM_COLUMN_TITLE:
-       case TM_COLUMN_ARTIST:
-       case TM_COLUMN_ALBUM:
-       case TM_COLUMN_GENRE:
-       case TM_COLUMN_COMPOSER:
-       case TM_COLUMN_COMMENT:
-       case TM_COLUMN_FILETYPE:
-       case TM_COLUMN_GROUPING:
-       case TM_COLUMN_CATEGORY:
-       case TM_COLUMN_DESCRIPTION:
-       case TM_COLUMN_PODCASTURL:
-       case TM_COLUMN_PODCASTRSS:
-       case TM_COLUMN_SUBTITLE:
-       case TM_COLUMN_TIME_PLAYED:
-       case TM_COLUMN_TIME_MODIFIED:
-       case TM_COLUMN_TIME_ADDED:
-       case TM_COLUMN_TIME_RELEASED:
-       case TM_COLUMN_TV_SHOW:
-       case TM_COLUMN_TV_EPISODE:
-       case TM_COLUMN_TV_NETWORK:
-       case TM_COLUMN_ALBUMARTIST:
-       case TM_COLUMN_SORT_ARTIST:
-       case TM_COLUMN_SORT_TITLE:
-       case TM_COLUMN_SORT_ALBUM:
-       case TM_COLUMN_SORT_ALBUMARTIST:
-       case TM_COLUMN_SORT_COMPOSER:
-       case TM_COLUMN_SORT_TVSHOW:
-         g_object_set (G_OBJECT (renderer),
-                       "text", text,
-                       "editable", TRUE,
-                       "xalign", 0.0, NULL);
-         break;
-       case TM_COLUMN_MEDIA_TYPE:
-         g_object_set (G_OBJECT (renderer),
-                       "text", text,
-                       "editable", FALSE,
-                       "xalign", 0.0, NULL);
-         break;
-       case TM_COLUMN_TRACK_NR:
-       case TM_COLUMN_CD_NR:
-       case TM_COLUMN_BITRATE:
-       case TM_COLUMN_SAMPLERATE:
-       case TM_COLUMN_BPM:
-       case TM_COLUMN_PLAYCOUNT:
-       case TM_COLUMN_YEAR:
-       case TM_COLUMN_VOLUME:
-       case TM_COLUMN_SOUNDCHECK:
-       case TM_COLUMN_TRACKLEN:
-       case TM_COLUMN_SEASON_NR:
-       case TM_COLUMN_EPISODE_NR:
-         g_object_set (G_OBJECT (renderer),
-                       "text", text,
-                       "editable", TRUE,
-                       "xalign", 1.0, NULL);
-         break;
-       case TM_COLUMN_IPOD_ID:
-       case TM_COLUMN_SIZE:
-         g_object_set (G_OBJECT (renderer),
-                       "text", text,
-                       "editable", FALSE,
-                       "xalign", 1.0, NULL);
-         break;
-       case TM_COLUMN_PC_PATH:
-       case TM_COLUMN_IPOD_PATH:
-       case TM_COLUMN_THUMB_PATH:
-         g_object_set (G_OBJECT (renderer),
-                       "text", text,
-                       "editable", FALSE,
-                       "xalign", 0.0, NULL);
-         break;
        case TM_COLUMN_LYRICS:
          g_object_set (G_OBJECT (renderer),
                        "active", track->lyrics_flag,
-                       "activatable", TRUE, NULL);
+                       NULL);
          break;
        case TM_COLUMN_TRANSFERRED:
          g_object_set (G_OBJECT (renderer),
                        "active", track->transferred,
-                       "activatable", FALSE, NULL);
+                       NULL);
          break;
        case TM_COLUMN_COMPILATION:
          g_object_set (G_OBJECT (renderer),
                        "active", track->compilation,
-                       "activatable", TRUE, NULL);
+                       NULL);
          break;
-       case TM_NUM_COLUMNS:
+       default:
+         g_return_if_reached();
+       }
+}
+
+
+/* The track data is stored in a separate list (static GList *tracks)
+   and only pointers to the corresponding Track structure are placed
+   into the model.
+   This function reads the data for the given cell from the list and
+   passes it to the renderer. */
+static void tm_cell_data_rating_func (GtkTreeViewColumn *tree_column,
+                                     GtkCellRenderer   *renderer,
+                                     GtkTreeModel      *model,
+                                     GtkTreeIter       *iter,
+                                     gpointer           data)
+{
+       Track *track;
+       ExtraTrackData *etr;
+       iTunesDB *itdb;
+       TM_item column;
+
+       column = (TM_item)g_object_get_data (G_OBJECT (renderer), "column");
+
+       g_return_if_fail ((column >= 0) && (column < TM_NUM_COLUMNS));
+
+       gtk_tree_model_get (model, iter, READOUT_COL, &track, -1);
+       g_return_if_fail (track);
+       etr = track->userdata;
+       g_return_if_fail (etr);
+       itdb = track->itdb;
+       g_return_if_fail (itdb);
+
+       switch (column)
+       {
+       case TM_COLUMN_RATING:
+         g_object_set (G_OBJECT (renderer),
+                       "rating", (double)(track->rating / ITDB_RATING_STEP),
+                       NULL);
          break;
+       default:
+         g_return_if_reached();
        }
-       g_free (text);
 }
 
 
@@ -2238,8 +2235,99 @@
 }
 
 
+static void
+tm_setup_renderer(GtkCellRenderer *renderer)
+{
+    TM_item column;
+    column = (TM_item)g_object_get_data (G_OBJECT (renderer), "column");
 
+    g_return_if_fail ((column >= 0) && (column < TM_NUM_COLUMNS));
 
+    switch (column)
+    {
+    case TM_COLUMN_TITLE:
+    case TM_COLUMN_ARTIST:
+    case TM_COLUMN_ALBUM:
+    case TM_COLUMN_GENRE:
+    case TM_COLUMN_COMPOSER:
+    case TM_COLUMN_COMMENT:
+    case TM_COLUMN_FILETYPE:
+    case TM_COLUMN_GROUPING:
+    case TM_COLUMN_CATEGORY:
+    case TM_COLUMN_DESCRIPTION:
+    case TM_COLUMN_PODCASTURL:
+    case TM_COLUMN_PODCASTRSS:
+    case TM_COLUMN_SUBTITLE:
+    case TM_COLUMN_TIME_PLAYED:
+    case TM_COLUMN_TIME_MODIFIED:
+    case TM_COLUMN_TIME_ADDED:
+    case TM_COLUMN_TIME_RELEASED:
+    case TM_COLUMN_TV_SHOW:
+    case TM_COLUMN_TV_EPISODE:
+    case TM_COLUMN_TV_NETWORK:
+    case TM_COLUMN_ALBUMARTIST:
+    case TM_COLUMN_SORT_ARTIST:
+    case TM_COLUMN_SORT_TITLE:
+    case TM_COLUMN_SORT_ALBUM:
+    case TM_COLUMN_SORT_ALBUMARTIST:
+    case TM_COLUMN_SORT_COMPOSER:
+    case TM_COLUMN_SORT_TVSHOW:
+      g_object_set (G_OBJECT (renderer),
+                   "editable", TRUE,
+                   "xalign", 0.0, NULL);
+      break;
+    case TM_COLUMN_MEDIA_TYPE:
+      g_object_set (G_OBJECT (renderer),
+                   "editable", FALSE,
+                   "xalign", 0.0, NULL);
+      break;
+    case TM_COLUMN_TRACK_NR:
+    case TM_COLUMN_CD_NR:
+    case TM_COLUMN_BITRATE:
+    case TM_COLUMN_SAMPLERATE:
+    case TM_COLUMN_BPM:
+    case TM_COLUMN_PLAYCOUNT:
+    case TM_COLUMN_YEAR:
+    case TM_COLUMN_VOLUME:
+    case TM_COLUMN_SOUNDCHECK:
+    case TM_COLUMN_TRACKLEN:
+    case TM_COLUMN_SEASON_NR:
+    case TM_COLUMN_EPISODE_NR:
+      g_object_set (G_OBJECT (renderer),
+                   "editable", TRUE,
+                   "xalign", 1.0, NULL);
+      break;
+    case TM_COLUMN_IPOD_ID:
+    case TM_COLUMN_SIZE:
+      g_object_set (G_OBJECT (renderer),
+                   "editable", FALSE,
+                   "xalign", 1.0, NULL);
+      break;
+    case TM_COLUMN_PC_PATH:
+    case TM_COLUMN_IPOD_PATH:
+    case TM_COLUMN_THUMB_PATH:
+      g_object_set (G_OBJECT (renderer),
+                   "editable", FALSE,
+                   "xalign", 0.0, NULL);
+      break;
+    case TM_COLUMN_LYRICS:
+      g_object_set (G_OBJECT (renderer),
+                   "activatable", TRUE, NULL);
+      break;
+    case TM_COLUMN_TRANSFERRED:
+      g_object_set (G_OBJECT (renderer),
+                   "activatable", FALSE, NULL);
+      break;
+    case TM_COLUMN_COMPILATION:
+      g_object_set (G_OBJECT (renderer),
+                   "activatable", TRUE, NULL);
+      break;
+    case TM_COLUMN_RATING:
+      break;
+    case TM_NUM_COLUMNS:
+      g_return_if_reached();
+    }
+}
 
 /* Adds the columns to our track_treeview */
 static GtkTreeViewColumn *tm_add_column (TM_item tm_item, gint pos)
@@ -2249,7 +2337,9 @@
        const gchar *text;
        GtkCellRenderer *renderer = NULL;  /* default */
        GtkTooltips *tt;
+       GtkTreeCellDataFunc cell_data_func = tm_cell_data_text_func;
 
+
        g_return_val_if_fail (gtkpod_window, NULL);
        tt = g_object_get_data (G_OBJECT (gtkpod_window), "main_tooltips");
        g_return_val_if_fail (tt, NULL);
@@ -2328,15 +2418,18 @@
        case TM_COLUMN_TRANSFERRED:
          text = _("Trnsfrd");
          renderer = gtk_cell_renderer_toggle_new ();
+         cell_data_func = tm_cell_data_toggle_func;
          break;
        case TM_COLUMN_LYRICS:
          renderer = gtk_cell_renderer_toggle_new ();
+         cell_data_func = tm_cell_data_toggle_func;
          g_signal_connect (G_OBJECT (renderer), "toggled",
                        G_CALLBACK (tm_cell_toggled), model);
          break;
        case TM_COLUMN_COMPILATION:
          text = _("Cmpl");
          renderer = gtk_cell_renderer_toggle_new ();
+         cell_data_func = tm_cell_data_toggle_func;
          g_signal_connect (G_OBJECT (renderer), "toggled",
                        G_CALLBACK (tm_cell_toggled), model);
          break;
@@ -2377,6 +2470,7 @@
                if (tm_item == TM_COLUMN_RATING)
                {
                        renderer = rb_cell_renderer_rating_new ();
+                       cell_data_func = tm_cell_data_rating_func;
                        g_signal_connect (G_OBJECT (renderer), "rated",
                                                          G_CALLBACK 
(tm_rating_edited), NULL);
                }
@@ -2393,10 +2487,12 @@
        g_object_set_data (G_OBJECT (renderer), "column",
                         (gint *)tm_item);
 
+       tm_setup_renderer(renderer);
+
        gtk_tree_view_column_set_title (col, text);
        gtk_tree_view_column_pack_start (col, renderer, FALSE);
        gtk_tree_view_column_set_cell_data_func (col, renderer,
-                                          tm_cell_data_func, NULL, NULL);
+                                                cell_data_func, NULL, NULL);
        gtk_tree_view_column_set_sort_column_id (col, tm_item);
        gtk_tree_view_column_set_resizable (col, TRUE);
        gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_FIXED);


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to