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 & 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