Revision: 1558
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=1558&view=rev
Author:   jcsjcs
Date:     2007-06-18 08:33:07 -0700 (Mon, 18 Jun 2007)

Log Message:
-----------
        * src/misc.h
          src/details.c
          src/misc.c
          data/gtkpod.glade: moved mediatype combobox handling in edit
          details window completely inside details.c for easier
          maintenance.

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog_detailed
    gtkpod/trunk/data/gtkpod.glade
    gtkpod/trunk/src/details.c
    gtkpod/trunk/src/misc.c
    gtkpod/trunk/src/misc.h

Modified: gtkpod/trunk/ChangeLog_detailed
===================================================================
--- gtkpod/trunk/ChangeLog_detailed     2007-06-18 14:12:13 UTC (rev 1557)
+++ gtkpod/trunk/ChangeLog_detailed     2007-06-18 15:33:07 UTC (rev 1558)
@@ -1,5 +1,14 @@
 2007-06-17 Jorg Schuler <jcsjcs at users.sourceforge.net>
 
+       * src/misc.h
+         src/details.c
+         src/misc.c
+         data/gtkpod.glade: moved mediatype combobox handling in edit
+         details window completely inside details.c for easier
+         maintenance.
+
+2007-06-17 Jorg Schuler <jcsjcs at users.sourceforge.net>
+
        * src/mp4file.c
          src/mp3file.c: read/write tempo (BPM) value from/to tags.
 

Modified: gtkpod/trunk/data/gtkpod.glade
===================================================================
--- gtkpod/trunk/data/gtkpod.glade      2007-06-18 14:12:13 UTC (rev 1557)
+++ gtkpod/trunk/data/gtkpod.glade      2007-06-18 15:33:07 UTC (rev 1558)
@@ -16174,16 +16174,6 @@
                                  <child>
                                    <widget class="GtkComboBox" 
id="details_combobox_41">
                                      <property name="visible">True</property>
-                                     <property name="items" 
translatable="yes">Audio/Video
-Audio
-Video
-Podcast
-Video Podcast
-Audiobook
-Music Video
-TV Show
-TV Show &amp; Music Video
-</property>
                                      <property 
name="add_tearoffs">False</property>
                                      <property 
name="focus_on_click">True</property>
                                    </widget>

Modified: gtkpod/trunk/src/details.c
===================================================================
--- gtkpod/trunk/src/details.c  2007-06-18 14:12:13 UTC (rev 1557)
+++ gtkpod/trunk/src/details.c  2007-06-18 15:33:07 UTC (rev 1558)
@@ -53,7 +53,41 @@
 static const gchar *DETAILS_WINDOW_DEFY="details_window_defy";
 static const gchar 
*DETAILS_WINDOW_NOTEBOOK_PAGE="details_window_notebook_page";
 
+/* enum types */
+typedef enum
+{
+    DETAILS_MEDIATYPE_AUDIO_VIDEO = 0,
+    DETAILS_MEDIATYPE_AUDIO,
+    DETAILS_MEDIATYPE_MOVIE,
+    DETAILS_MEDIATYPE_PODCAST,
+    DETAILS_MEDIATYPE_VIDEO_PODCAST,
+    DETAILS_MEDIATYPE_AUDIOBOOK,
+    DETAILS_MEDIATYPE_MUSICVIDEO,
+    DETAILS_MEDIATYPE_TVSHOW,
+    DETAILS_MEDIATYPE_MUSICVIDEO_TVSHOW
+} DETAILS_MEDIATYPE;
 
+typedef struct
+{
+    guint32 id;
+    const gchar *str;
+} ComboEntry;
+
+/* strings for mediatype combobox */
+static const ComboEntry mediatype_comboentries[] =
+{
+    { 0,                                               N_("Audio/Video") },
+    { ITDB_MEDIATYPE_AUDIO,                            N_("Audio") },
+    { ITDB_MEDIATYPE_MOVIE,                            N_("Video") },
+    { ITDB_MEDIATYPE_PODCAST,                          N_("Podcast") },
+    { ITDB_MEDIATYPE_PODCAST|ITDB_MEDIATYPE_MOVIE,     N_("Video Podcast") },
+    { ITDB_MEDIATYPE_AUDIOBOOK,                        N_("Audiobook") },
+    { ITDB_MEDIATYPE_MUSICVIDEO,                       N_("Music Video") },
+    { ITDB_MEDIATYPE_TVSHOW,                           N_("TV Show") },
+    { ITDB_MEDIATYPE_TVSHOW|ITDB_MEDIATYPE_MUSICVIDEO, N_("TV Show & Music 
Video") },
+    { 0,                                               NULL }
+};
+
 /* Declarations */
 static void details_set_track (Detail *detail, Track *track);
 static void details_free (Detail *detail);
@@ -550,7 +584,56 @@
 }
 
 
+/****** comboentries helper functions ******/
 
+/* Get index from ID (returns -1 if ID could not be found) */
+static gint comboentry_index_from_id (const ComboEntry centries[],
+                                     guint32 id)
+{
+    gint i;
+
+    g_return_val_if_fail (centries, -1);
+
+    for (i=0; centries[i].str; ++i)
+    {
+       if (centries[i].id == id)  return i;
+    }
+    return -1;
+}
+
+
+/* initialize a combobox with the corresponding entry strings */
+static void details_setup_combobox (GtkWidget *cb,
+                                   const ComboEntry centries[])
+{
+    const ComboEntry *ce = centries;
+    GtkCellRenderer *cell;
+    GtkListStore *store;
+
+    g_return_if_fail (cb);
+    g_return_if_fail (centries);
+
+    /* clear any renderers that may have been set */
+    gtk_cell_layout_clear (GTK_CELL_LAYOUT (cb));
+    /* set new model */
+    store = gtk_list_store_new (1, G_TYPE_STRING);
+    gtk_combo_box_set_model (GTK_COMBO_BOX (cb), GTK_TREE_MODEL (store));
+    g_object_unref (store);
+
+    cell = gtk_cell_renderer_text_new ();
+    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cb), cell, TRUE);
+    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cb), cell,
+                                   "text", 0,
+                                   NULL);
+
+    while (ce->str != NULL)
+    {
+       gtk_combo_box_append_text (GTK_COMBO_BOX (cb), _(ce->str));
+       ++ce;
+    }
+}
+
+
 /****** Setup of widgets ******/
 static void details_setup_widget (Detail *detail, T_item item)
 {
@@ -655,6 +738,7 @@
     case T_MEDIA_TYPE:
        buf = g_strdup_printf ("details_combobox_%d", item);
        w = gtkpod_xml_get_widget (detail->xml, buf);
+       details_setup_combobox (w, mediatype_comboentries);
        g_signal_connect (w, "changed",
                          G_CALLBACK (details_combobox_changed),
                          detail);
@@ -820,13 +904,18 @@
     case T_MEDIA_TYPE:
        if ((w = gtkpod_xml_get_widget (detail->xml, combobox)))
        {
-         if (track)
+           gint index = -1;
+           if (track)
            {
-             gint gui = dbToGUI(track->mediatype);
-             gtk_combo_box_set_active (GTK_COMBO_BOX (w), gui);
+               index = comboentry_index_from_id (mediatype_comboentries,
+                                                 track->mediatype);
+               if (index == -1)
+               {
+                   gtkpod_warning (_("Please report unknown mediatype %x\n"),
+                                   track->mediatype);
+               }
            }
-           else
-             gtk_combo_box_set_active (GTK_COMBO_BOX (w), 0);
+           gtk_combo_box_set_active (GTK_COMBO_BOX (w), index);
        }
        break;
     case T_ALL:
@@ -838,6 +927,7 @@
     g_free (entry);
     g_free (checkbutton);
     g_free (textview);
+    g_free (combobox);
     g_free (text);
 }
 
@@ -1024,12 +1114,15 @@
        {
            gint active;
            active = gtk_combo_box_get_active (GTK_COMBO_BOX (w));
-           guint32 mediatype_db = guiToDB(active);
+           if (active != -1)
+           {
+               guint32 new_mediatype = mediatype_comboentries[active].id;
 
-           if (track->mediatype != mediatype_db)
-           {
-               track->mediatype = mediatype_db;
-               changed = TRUE;
+               if (track->mediatype != new_mediatype)
+               {
+                   track->mediatype = new_mediatype;
+                   changed = TRUE;
+               }
            }
        }
        break;
@@ -1077,6 +1170,7 @@
     g_free (entry);
     g_free (checkbutton);
     g_free (textview);
+    g_free (combobox);
 
     details_update_buttons (detail);
 }
@@ -1486,11 +1580,10 @@
                      G_CALLBACK (details_writethrough_toggled),
                      detail);
 
-
-
     g_signal_connect (detail->window, "delete_event",
                      G_CALLBACK (details_delete_event), detail);
 
+
     details_set_tracks (detail, selected_tracks);
 
     /* set notebook page */

Modified: gtkpod/trunk/src/misc.c
===================================================================
--- gtkpod/trunk/src/misc.c     2007-06-18 14:12:13 UTC (rev 1557)
+++ gtkpod/trunk/src/misc.c     2007-06-18 15:33:07 UTC (rev 1558)
@@ -1405,51 +1405,6 @@
 }
 
 
-guint32 guiToDB(gint gui)
-{
-  guint32 db = 0;
-  switch (gui)
-    {
-    case 0: db = 0x00000000; break;
-    case 1: db = 0x00000001; break;
-    case 2: db = 0x00000002; break;
-    case 3: db = 0x00000004; break;
-    case 4: db = 0x00000006; break;
-    case 5: db = 0x00000008; break;
-    case 6: db = 0x00000020; break;
-    case 7: db = 0x00000040; break;
-    case 8: db = 0x00000060; break;
-    default:
-      /* This is an error */
-      g_warning ("Programming error: GUI is not in sync with Media Types.\n");
-      db = 0;
-    };
-
-  return db;
-}
-
-gint dbToGUI(guint32 db)
-{
-  gint gui = 0;
-  switch (db)
-    {
-    case 0x00000000: gui = 0; break;
-    case 0x00000001: gui = 1; break;
-    case 0x00000002: gui = 2; break;
-    case 0x00000004: gui = 3; break;
-    case 0x00000006: gui = 4; break;
-    case 0x00000008: gui = 5; break;
-    case 0x00000020: gui = 6; break;
-    case 0x00000040: gui = 7; break;
-    case 0x00000060: gui = 8; break;
-    default:
-      /* Warning */
-      g_warning ("Unknown media type found: %#.8x\n", db);
-      gui = 0;
-    };
-  return gui;
-}
-
 /* ------------------------------------------------------------
  *
  *        Helper functions for pref keys

Modified: gtkpod/trunk/src/misc.h
===================================================================
--- gtkpod/trunk/src/misc.h     2007-06-18 14:12:13 UTC (rev 1557)
+++ gtkpod/trunk/src/misc.h     2007-06-18 15:33:07 UTC (rev 1558)
@@ -264,8 +264,4 @@
 gboolean save_ipod_prefs (iTunesDB *itdb, const gchar *mountpoint);
 
 gboolean get_offline (iTunesDB *itdb);
-
-guint32 guiToDB(gint gui);
-gint dbToGUI(guint32 db);
-
 #endif


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

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to