Update of /cvsroot/gtkpod/gtkpod/src
In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv22423/src
Modified Files:
Tag: fetchcover_development_branch
display_coverart.c fetchcover.c display_coverart.h
fetchcover.h context_menus.c
Log Message:
- Context menu on display artwork updated with new items:
-- Selection of cover from a file
-- Download of cover from the web
- Fetch Cover button moved up in Edit Details window
- Display Coverart slider values sorted out so as to better reflect index
of covers
- Display Coverart up/down arrows are shown/hidden depending on window start
- Fetchcover dialog bordered to clarify a blank image is displayed
- Fetchcover dialog added to glade-2 xml file
- Hightlighting toned down for main image in Display Coverart window
Index: display_coverart.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/display_coverart.c,v
retrieving revision 1.7.2.5
retrieving revision 1.7.2.6
diff -u -d -r1.7.2.5 -r1.7.2.6
--- display_coverart.c 5 Apr 2007 13:13:04 -0000 1.7.2.5
+++ display_coverart.c 14 Apr 2007 20:02:44 -0000 1.7.2.6
@@ -1,4 +1,4 @@
-/* Time-stamp: <2007-04-05 21:57:13 jcs>
+/* Time-stamp: <2007-02-24 15:22:41 jcs>
|
| Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -38,15 +38,16 @@
#include "display_coverart.h"
#include "context_menus.h"
#include "details.h"
+#include "fileselection.h"
+#include "fetchcover.h"
/* Declarations */
static gint sort_tracks (Track *a, Track *b);
static void set_display_dimensions ();
static GdkPixbuf *draw_blank_cdimage ();
-static void set_highlight (Cover_Item *cover);
+static void set_highlight (Cover_Item *cover, gboolean ismain);
static void raise_cdimages (GPtrArray *cdcovers);
/*static void scroll_covers (gint direction);*/
-static GdkPixbuf *coverart_get_track_thumb (Track *track);
static void on_cover_display_button_clicked (GtkWidget *widget, gpointer data);
static gint on_main_cover_image_clicked (GnomeCanvasItem *canvasitem, GdkEvent
*event, gpointer data);
static void on_cover_display_slider_value_changed (GtkRange *range, gpointer
user_data);
@@ -75,6 +76,8 @@
static gchar *DEFAULT_FILE;
/* Path of the png file used for the highlighting of cd covers */
static gchar *HIGHLIGHT_FILE;
+/* Path of the png file used for the display of the main cd cover */
+static gchar *HIGHLIGHT_FILE_MAIN;
#if 0
static void debug_albums ()
@@ -158,13 +161,17 @@
* @cover: A Cover_Item object which the higlighted is added to.
*
*/
-static void set_highlight (Cover_Item *cover)
+static void set_highlight (Cover_Item *cover, gboolean ismain)
{
GdkPixbuf *image;
GError *error = NULL;
GdkPixbuf *scaled;
- image = gdk_pixbuf_new_from_file(HIGHLIGHT_FILE, &error);
+ if(ismain)
+ image = gdk_pixbuf_new_from_file(HIGHLIGHT_FILE_MAIN,
&error);
+ else
+ image = gdk_pixbuf_new_from_file(HIGHLIGHT_FILE, &error);
+
if(error != NULL)
{
printf("Error occurred loading file - \nCode: %d\nMessage: %s\n",
error->code, error->message);
@@ -241,7 +248,7 @@
}
else
{
- imgbuf = coverart_get_track_thumb (track);
+ imgbuf = coverart_get_track_thumb (track, track->itdb->device);
gnome_canvas_item_show (cover->highlight);
}
@@ -307,16 +314,14 @@
if (displaytotal <= 0)
return;
-
+
/* Use the index value from the slider for the main image index */
- cdwidget->first_imgindex = index - IMG_MAIN - 1;
- if (cdwidget->first_imgindex < 0)
- cdwidget->first_imgindex = 0;
- else if((cdwidget->first_imgindex + IMG_TOTAL) >= displaytotal)
- cdwidget->first_imgindex = displaytotal - IMG_TOTAL;
-
- set_covers ();
+ cdwidget->first_imgindex = index;
+ if (cdwidget->first_imgindex > (displaytotal - 4))
+ cdwidget->first_imgindex = displaytotal - 4;
+
+ set_covers ();
}
/**
@@ -333,6 +338,7 @@
{
GtkButton *button;
const gchar *label;
+ gint displaytotal;
button = GTK_BUTTON(widget);
label = gtk_button_get_label(button);
@@ -341,9 +347,20 @@
cdwidget->first_imgindex++;
else
cdwidget->first_imgindex--;
-
+
+ displaytotal = g_list_length(cdwidget->displaytracks) - 8;
+
+ if (displaytotal <= 0)
+ return;
+
+ /* Use the index value from the slider for the main image index */
+ if (cdwidget->first_imgindex < 0)
+ cdwidget->first_imgindex = 0;
+ else if (cdwidget->first_imgindex > (displaytotal - 1))
+ cdwidget->first_imgindex = displaytotal - 1;
+
/* Change the value of the slider to do the work of scrolling the
covers */
- gtk_range_set_value (GTK_RANGE (cdwidget->cdslider),
(cdwidget->first_imgindex + IMG_MAIN + 1));
+ gtk_range_set_value (GTK_RANGE (cdwidget->cdslider),
cdwidget->first_imgindex);
/* debug_albums(); */
}
@@ -457,7 +474,7 @@
* pixbuf referenced by the provided track or the pixbuf of the
* default file if track has no cover art.
*/
-static GdkPixbuf *coverart_get_track_thumb (Track *track)
+GdkPixbuf *coverart_get_track_thumb (Track *track, Itdb_Device *device)
{
Itdb_Thumb *thumb = NULL;
GdkPixbuf *pixbuf = NULL;
@@ -466,14 +483,19 @@
if(thumb == NULL)
thumb = itdb_artwork_get_thumb_by_type (track->artwork,
ITDB_THUMB_COVER_SMALL);
- /* Track has a viable thumbnail */
+ /* Track has a viable thumb but check it has data */
if(thumb != NULL)
{
pixbuf = GDK_PIXBUF (
- itdb_thumb_get_gdk_pixbuf
(track->itdb->device, thumb)
+ itdb_thumb_get_gdk_pixbuf (device,
thumb)
);
}
- else
+
+ /* Either thumb was null or the attempt at getting a pixbuf failed
+ * due to invalid file. For example, some nut (like me) decided to
+ * apply an mp3 file to the track as its cover file
+ */
+ if (pixbuf == NULL)
{
/* Could not get a viable thumbnail so get default pixbuf */
pixbuf = coverart_get_default_track_thumb ();
@@ -563,7 +585,7 @@
if (g_str_has_suffix (artpath, ".ithmb"))
{
/* playlist is on the ipod so display the file as
appears on ipod */
- imgbuf = coverart_get_track_thumb (cover->track);
+ imgbuf = coverart_get_track_thumb (cover->track,
cover->track->itdb->device);
}
else
{
@@ -605,7 +627,7 @@
/* Apply the image to the canvas */
gnome_canvas_item_set ( canvasitem,
-
"pixbuf", imgbuf, NULL);
+
"pixbuf", imgbuf);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
GTK_WIDGET(canvas));
gdk_pixbuf_unref (imgbuf);
@@ -713,6 +735,7 @@
*suffix = 0;
DEFAULT_FILE = g_build_filename (progname, "pixmaps",
"default-cover.png", NULL);
HIGHLIGHT_FILE = g_build_filename (progname, "pixmaps",
"cdshine.png", NULL);
+ HIGHLIGHT_FILE_MAIN = g_build_filename (progname, "pixmaps",
"cdshine_main.png", NULL);
}
}
@@ -754,6 +777,10 @@
{
gtk_widget_show_all (cdwidget->contentpanel);
prefs_set_int (KEY_DISPLAY_COVERART, TRUE);
+ gtk_widget_hide (widget);
+
+ GtkWidget *downbutton = gtkpod_xml_get_widget (main_window_xml,
"cover_down_button");
+ gtk_widget_show (downbutton);
}
/**
@@ -769,6 +796,10 @@
{
gtk_widget_hide_all (cdwidget->contentpanel);
prefs_set_int (KEY_DISPLAY_COVERART, FALSE);
+ gtk_widget_hide (widget);
+
+ GtkWidget *upbutton = gtkpod_xml_get_widget (main_window_xml,
"cover_up_button");
+ gtk_widget_show (upbutton);
}
/**
@@ -803,7 +834,10 @@
{
cover = g_ptr_array_index(cdwidget->cdcovers, i);
set_cover_dimensions (cover, i);
- set_highlight (cover);
+ if(i == IMG_MAIN)
+ set_highlight (cover, FALSE);
+ else
+ set_highlight (cover, TRUE);
}
set_covers ();
@@ -1017,11 +1051,11 @@
cover->highlight = gnome_canvas_item_new((GnomeCanvasGroup *)
cover->cdcvrgrp,
GNOME_TYPE_CANVAS_PIXBUF,
NULL);
-
- set_highlight (cover);
if(i == IMG_MAIN)
{
+ set_highlight (cover, TRUE);
+
/* set up some callback events on the main scaled image
*/
g_signal_connect(GTK_OBJECT(cover->cdimage), "event",
GTK_SIGNAL_FUNC(on_main_cover_image_clicked), NULL);
@@ -1036,6 +1070,8 @@
"font",
"-*-clean-medium-r-normal-*-12-*-*-*-*-*-*",
NULL));
}
+ else
+ set_highlight (cover, FALSE);
g_ptr_array_add(cdwidget->cdcovers, cover);
cover = NULL;
@@ -1088,21 +1124,30 @@
coverart_block_change (FALSE);
+ GtkWidget *upbutton = gtkpod_xml_get_widget (main_window_xml,
"cover_up_button");
+ GtkWidget *downbutton = gtkpod_xml_get_widget (main_window_xml,
"cover_down_button");
+
/* show/hide coverart display -- default to show */
if (prefs_get_int_value (KEY_DISPLAY_COVERART, NULL))
{
if (prefs_get_int (KEY_DISPLAY_COVERART))
{
gtk_widget_show_all (cdwidget->contentpanel);
+ gtk_widget_hide (upbutton);
+ gtk_widget_show (downbutton);
}
else
{
gtk_widget_hide_all (cdwidget->contentpanel);
+ gtk_widget_show (upbutton);
+ gtk_widget_hide (downbutton);
}
}
else
{
gtk_widget_show_all (cdwidget->contentpanel);
+ gtk_widget_hide (upbutton);
+ gtk_widget_show (downbutton);
}
}
@@ -1234,7 +1279,7 @@
Playlist *playlist;
/* initialize display if not already done */
- if (!cdwidget) coverart_init_display();
+ if (!cdwidget) coverart_init_display ();
/* Ensure that the setting of images hasnt been turned off
* due to being in the middle of a selection operation
@@ -1283,11 +1328,16 @@
set_covers ();
- /* Set the scale range */
- gtk_range_set_range (GTK_RANGE (cdwidget->cdslider), 0, g_list_length
(cdwidget->displaytracks) - 1);
+ /* Set the scale range - maximum value should be display
+ * track list length - (8 NULL images + 1 as index value),
+ * ie. the ones either end of the list.
+ */
+ gtk_range_set_range (GTK_RANGE (cdwidget->cdslider), 0, g_list_length
(cdwidget->displaytracks) - 9);
gtk_range_set_value (GTK_RANGE (cdwidget->cdslider), 0);
+ printf ("Size of glist = %d\n", g_list_length
(cdwidget->displaytracks));
+
/*printf("######### ORIGINAL LINE UP ########\n");
debug_albums ();
printf("######### END OF ORIGINAL LINE UP #######\n");*/
@@ -1297,7 +1347,7 @@
* coverart_block_change:
*
* Select covers events can be switched off when automatic
- * slections of tracks are taking place.
+ * selections of tracks are taking place.
*
* @val: indicating whether to block or unblock select cover events
*
@@ -1307,3 +1357,53 @@
if (cdwidget != NULL)
cdwidget->block_display_change = val;
}
+
+/**
+ * coverart_set_cover_from_file:
+ *
+ * Add a cover to the displayed track by setting it from a
+ * picture file.
+ *
+ */
+void coverart_set_cover_from_file ()
+{
+ gchar *filename;
+ Track *track;
+ GList *tracks = NULL;
+
+ filename = fileselection_get_cover_filename ();
+
+ if (filename)
+ {
+ tracks = coverart_get_displayed_tracks ();
+ while (tracks)
+ {
+ track = tracks->data;
+
+ if (gp_track_set_thumbnails (track, filename))
+ data_changed (track->itdb);
+
+ tracks = tracks->next;
+ }
+ }
+
+ g_free (filename);
+
+ set_covers ();
+}
+
+/**
+ * coverart_set_cover_from_web:
+ *
+ * Find a cover on tinternet and apply it as the cover
+ * of the main displayed album
+ *
+ */
+void coverart_set_cover_from_web ()
+{
+ GList *tracks = coverart_get_displayed_tracks ();
+
+ on_coverart_context_menu_click (tracks);
+
+ set_covers ();
+}
Index: fetchcover.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/Attic/fetchcover.c,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -d -r1.1.2.5 -r1.1.2.6
--- fetchcover.c 5 Apr 2007 13:49:47 -0000 1.1.2.5
+++ fetchcover.c 14 Apr 2007 20:02:45 -0000 1.1.2.6
@@ -52,7 +52,8 @@
static void fetchcover_next_button_clicked (GtkWidget *widget, gpointer data);
static void fetchcover_prev_button_clicked (GtkWidget *widget, gpointer data);
static void fetchcover_cleanup();
-static void fetchcover_save (Detail *detail);
+static gchar *fetchcover_save ();
+static GtkDialog *fetchcover_display_dialog (Track *track, Itdb_Device
*device);
struct chunk
{
@@ -255,7 +256,7 @@
{
fetchcover_debug("fetchcover_next: successfully recovered
covers\n");
gchar *buf;
- buf = g_strdup_printf ("Found potentially %d covers",
g_list_length (fetchcover_image_list) - 1);
+ buf = g_strdup_printf ("Found potentially %d covers. (Some
covers may be blank)", g_list_length (fetchcover_image_list) - 1);
fetchcover_statusbar_update (buf);
g_free (buf);
}
@@ -442,7 +443,7 @@
fetchcover_debug("Displayed Image path: %s/%s\n", displayed_cover->dir,
displayed_cover->filename);
GdkPixbuf *scaled = gdk_pixbuf_scale_simple(displayed_cover->image,
IMGSCALE, IMGSCALE, GDK_INTERP_NEAREST);
- gnome_canvas_item_set(fetchcover_canvasitem, "pixbuf", scaled, NULL);
+ gnome_canvas_item_set(fetchcover_canvasitem, "pixbuf", scaled);
gdk_window_set_cursor (window, gdk_cursor_new (GDK_LEFT_PTR));
@@ -488,7 +489,7 @@
}
GdkPixbuf *scaled = gdk_pixbuf_scale_simple(displayed_cover->image,
IMGSCALE, IMGSCALE, GDK_INTERP_NEAREST);
- gnome_canvas_item_set(fetchcover_canvasitem, "pixbuf", scaled, NULL);
+ gnome_canvas_item_set(fetchcover_canvasitem, "pixbuf", scaled);
return;
}
@@ -616,10 +617,15 @@
* Save the displayed cover.
* Set thumbnails, update details window.
* Called on response to the clicking of the save button in the dialog
+ *
+ * Returns:
+ * Filename of chosen cover image file
*/
-static void fetchcover_save (Detail *detail)
+gchar *fetchcover_save ()
{
- #ifdef HAVE_CURL
+ #ifdef HAVE_CURL
+ gchar *newname = NULL;
+ ;
/* The default cover image will have both dir and filename set
* to null because no need to save because it is already saved (!!)
* Thus, this whole process is avoided. Added bonus that pressing
@@ -635,7 +641,7 @@
/* Split the existing filename to remove the prefix */
gchar **fname_items = g_strsplit(displayed_cover->filename,
"[EMAIL PROTECTED]", 2);
/* Assign the filename ready to rename the file */
- gchar *newname = g_build_filename(displayed_cover->dir,
fname_items[1], NULL);
+ newname = g_build_filename(displayed_cover->dir,
fname_items[1], NULL);
fetchcover_debug("New name of file is %s\n", newname);
if (g_file_test (newname, G_FILE_TEST_EXISTS))
@@ -656,40 +662,10 @@
g_free (displayed_cover->filename);
displayed_cover->dir = NULL;
displayed_cover->filename = NULL;
-
- if (details_writethrough(detail))
- {
- GList *list;
- for (list = detail->tracks; list; list = list->next)
- {
- ExtraTrackData *etd;
- Track *track = list->data;
-
- if (!track)
- break;
-
- etd = track->userdata;
- gp_track_set_thumbnails(track, newname);
- etd->tchanged = TRUE;
- }
- }
- else
- {
- ExtraTrackData *etd = fetchcover_track->userdata;
- if (etd)
- {
- gp_track_set_thumbnails(fetchcover_track,
newname);
- etd->tchanged = TRUE;
- }
- }
-
- detail->changed = TRUE;
- details_update_thumbnail(detail);
- details_update_buttons(detail);
}
- #endif /* HAVE_CURL */
+ return newname;
- fetchcover_cleanup();
+ #endif /* HAVE_CURL */
}
/**
@@ -699,56 +675,57 @@
*
* @track: track to look up images for
*/
-GtkDialog *fetchcover_display_dialog (Detail *detail)
+static GtkDialog *fetchcover_display_dialog (Track *track, Itdb_Device *device)
{
- GtkBox *canvasbutton_hbox, *panelbox, *buttonbox;
+ GnomeCanvasItem *art_border;
+ GtkBox *canvasbutton_hbox;
GtkWidget *fetchcover_dialog;
-
+ GladeXML *fetchcover_xml;
GdkPixbuf *imgbuf;
- g_return_val_if_fail(detail, NULL);
+ g_return_val_if_fail (track, NULL);
+ g_return_val_if_fail (device, NULL);
/* Enable searching of internet for images */
netsearched = FALSE;
- fetchcover_dialog = gtk_dialog_new_with_buttons ( "Fetch Cover
from the Internet",
-
GTK_WINDOW (detail->window),
-
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-
GTK_STOCK_CANCEL,
-
GTK_RESPONSE_REJECT,
-
"_Save",
-
GTK_RESPONSE_ACCEPT,
-
NULL);
+ fetchcover_xml = glade_xml_new (xml_file, "fetchcover_dialog", NULL);
+ fetchcover_dialog = gtkpod_xml_get_widget (fetchcover_xml,
"fetchcover_dialog");
+
gboolean trkartfail = FALSE;
GError *error = NULL;
/* Find the image cover from the track */
- if (detail->artwork_ok)
+ Itdb_Thumb *thumb = itdb_artwork_get_thumb_by_type (track->artwork,
ITDB_THUMB_COVER_LARGE);
+ if(thumb == NULL)
+ thumb = itdb_artwork_get_thumb_by_type (track->artwork,
ITDB_THUMB_COVER_SMALL);
+
+ if (thumb)
{
- Itdb_Thumb *thumb = itdb_artwork_get_thumb_by_type
(detail->track->artwork, ITDB_THUMB_COVER_LARGE);
- if (thumb)
+ gchar *artpath = itdb_thumb_get_filename (device, thumb);
+ if (g_str_has_suffix (artpath, ".ithmb"))
{
- gchar *artpath = itdb_thumb_get_filename
(detail->itdb->device, thumb);
- imgbuf = gdk_pixbuf_new_from_file(artpath, &error);
- if (error != NULL)
- {
- printf("Error occurred loading the artwork file
- \nCode: %d\nMessage: %s\n", error->code, error->message);
- /* Artwork failed to load from file */
- trkartfail = TRUE;
- g_error_free (error);
- }
- g_free(artpath);
+ /* playlist is on the ipod so display the file as
appears on ipod */
+ imgbuf = coverart_get_track_thumb (track, device);
}
else
{
- /* No thumb extractable from track */
+ imgbuf = gdk_pixbuf_new_from_file(artpath, &error);
+ }
+
+ if (error != NULL)
+ {
+ printf("Error occurred loading the artwork file -
\nCode: %d\nMessage: %s\n", error->code, error->message);
+ /* Artwork failed to load from file */
trkartfail = TRUE;
+ g_error_free (error);
}
+ g_free(artpath);
}
else
{
- /* No Artwork associated with track */
+ /* No thumb extractable from track */
trkartfail = TRUE;
- }
+ }
if (trkartfail)
{
@@ -779,52 +756,52 @@
fetchcover_canvas = GNOME_CANVAS (gnome_canvas_new());
gtk_widget_set_size_request (GTK_WIDGET(fetchcover_canvas), IMGSCALE,
IMGSCALE);
gnome_canvas_set_scroll_region (fetchcover_canvas, 0.0, 0.0, IMGSCALE,
IMGSCALE);
- fetchcover_canvasitem = gnome_canvas_item_new(
gnome_canvas_root(fetchcover_canvas),
-
GNOME_TYPE_CANVAS_PIXBUF, NULL);
+ fetchcover_canvasitem = gnome_canvas_item_new(
+ gnome_canvas_root(fetchcover_canvas),
+ GNOME_TYPE_CANVAS_PIXBUF,
+ "x", (double) 0,
+ "y", (double) 0,
+ "width", (double) IMGSCALE,
+ "height", (double) IMGSCALE,
+ NULL);
/* Apply the image cover to the canvas */
gnome_canvas_item_set ( fetchcover_canvasitem,
-
"pixbuf", displayed_cover->image,
- NULL);
+
"pixbuf", displayed_cover->image);
- /* Create buttons */
- next_button = gtk_button_new_with_mnemonic ("_Find New");
- gtk_button_set_use_underline (GTK_BUTTON(next_button), TRUE);
- prev_button = gtk_button_new_with_mnemonic ("_Previous");
- gtk_button_set_use_underline (GTK_BUTTON(prev_button), TRUE);
- gtk_widget_set_sensitive (prev_button, FALSE);
+ /* Create the canvas border */
+ art_border = gnome_canvas_item_new(
+ gnome_canvas_root(fetchcover_canvas),
+ gnome_canvas_rect_get_type(),
+ "x1", (double) 0,
+ "y1", (double) 0,
+ "x2", (double) IMGSCALE,
+ "y2", (double) IMGSCALE,
+ "outline-color-rgba", 0xAA000000,
+ "width-units", (double) 3,
+ NULL);
- /* Add buttons to a vertical button box */
- buttonbox = GTK_BOX (gtk_vbox_new (FALSE, 5));
- gtk_box_pack_start ( buttonbox, GTK_WIDGET (next_button), FALSE, FALSE,
0);
- gtk_box_pack_start ( buttonbox, GTK_WIDGET (prev_button), FALSE, FALSE,
0);
+ gnome_canvas_item_raise_to_top (art_border);
- /* Add canvas and buttons to horizonontal box */
- canvasbutton_hbox = GTK_BOX (gtk_hbox_new (FALSE, 5));
- gtk_widget_set_size_request (GTK_WIDGET(canvasbutton_hbox), IMGSCALE +
100, IMGSCALE + 20);
+ /* Add canvas to horizonontal box */
+ canvasbutton_hbox = GTK_BOX (gtkpod_xml_get_widget (fetchcover_xml,
"canvasbutton_hbox"));
+ gtk_widget_set_size_request (GTK_WIDGET(canvasbutton_hbox), IMGSCALE +
150, IMGSCALE + 20);
gtk_box_pack_start_defaults ( canvasbutton_hbox, GTK_WIDGET
(fetchcover_canvas));
- gtk_box_pack_start_defaults ( canvasbutton_hbox, GTK_WIDGET
(buttonbox));
- /* Create the status message bar */
- fetchcover_statusbar = gtk_statusbar_new ();
+ /* Assign the status message bar */
+ fetchcover_statusbar = gtkpod_xml_get_widget (fetchcover_xml,
"fetchcover_statusbar");
- /* Add the canvas panel and status bar into a vertical box */
- panelbox = GTK_BOX (gtk_vbox_new (FALSE, 5));
- gtk_container_set_border_width (GTK_CONTAINER(panelbox), 10);
- gtk_box_pack_start_defaults ( panelbox, GTK_WIDGET (canvasbutton_hbox));
- gtk_box_pack_start_defaults ( panelbox, GTK_WIDGET
(fetchcover_statusbar));
-
- gtk_container_add ( GTK_CONTAINER
(GTK_DIALOG(fetchcover_dialog)->vbox),
-
GTK_WIDGET (panelbox));
-
+
#ifdef HAVE_CURL
+ next_button = gtkpod_xml_get_widget (fetchcover_xml, "next_button");
g_signal_connect (G_OBJECT(next_button), "clicked",
G_CALLBACK(fetchcover_next_button_clicked), NULL);
+ prev_button = gtkpod_xml_get_widget (fetchcover_xml, "prev_button");
g_signal_connect (G_OBJECT(prev_button), "clicked",
G_CALLBACK(fetchcover_prev_button_clicked), NULL);
- fetchcover_track = detail->track;
+ fetchcover_track = track;
/* Check there are valid values for artist and album, otherwise disable
everything */
if (fetchcover_track->artist == NULL || fetchcover_track->album == NULL)
@@ -848,10 +825,54 @@
gtk_widget_show_all (fetchcover_dialog);
+ g_object_unref (fetchcover_xml);
+
return GTK_DIALOG(fetchcover_dialog);
}
/**
+ * on_coverart_context_menu_click:
+ *
+ * @Track: track
+ *
+ * Callback. Start cover selection from CoverArt Display's context menu.
+ */
+void on_coverart_context_menu_click (GList *tracks)
+{
+ gchar *filename = NULL;
+ Track *track;
+
+ track = tracks->data;
+
+ GtkDialog *dialog = fetchcover_display_dialog (track,
track->itdb->device);
+ g_return_if_fail (dialog);
+
+ gint result = gtk_dialog_run (GTK_DIALOG (dialog));
+ switch (result)
+ {
+ case GTK_RESPONSE_ACCEPT:
+ filename = fetchcover_save ();
+ if (filename)
+ {
+ while (tracks)
+ {
+ track = tracks->data;
+ if (gp_track_set_thumbnails (track,
filename))
+ data_changed (track->itdb);
+ tracks = tracks->next;
+ }
+ }
+ g_free (filename);
+ fetchcover_cleanup ();
+ break;
+ default:
+ fetchcover_cancel ();
+ break;
+ }
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+/**
* fetchcover_fetch_button:
*
* @widget: widget
@@ -863,15 +884,50 @@
void on_fetchcover_fetch_button (GtkWidget *widget, gpointer data)
{
Detail *detail = details_get_selected_detail ();
- GtkDialog *dialog = fetchcover_display_dialog (detail);
-
+ GtkDialog *dialog = fetchcover_display_dialog (detail->track,
detail->itdb->device);
g_return_if_fail (dialog);
gint result = gtk_dialog_run (GTK_DIALOG (dialog));
+ gchar *filename = NULL;
+
switch (result)
{
case GTK_RESPONSE_ACCEPT:
- fetchcover_save (detail);
+ filename = fetchcover_save ();
+ if (filename)
+ {
+ if (details_writethrough(detail))
+ {
+ GList *list;
+ for (list = detail->tracks; list; list
= list->next)
+ {
+ ExtraTrackData *etd;
+ Track *track = list->data;
+
+ if (!track)
+ break;
+
+ etd = track->userdata;
+ gp_track_set_thumbnails(track,
filename);
+ etd->tchanged = TRUE;
+ }
+ }
+ else
+ {
+ ExtraTrackData *etd =
fetchcover_track->userdata;
+ if (etd)
+ {
+
gp_track_set_thumbnails(fetchcover_track, filename);
+ etd->tchanged = TRUE;
+ }
+ }
+
+ detail->changed = TRUE;
+ details_update_thumbnail(detail);
+ details_update_buttons(detail);
+ }
+
+ fetchcover_cleanup();
break;
default:
fetchcover_cancel ();
Index: display_coverart.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/display_coverart.h,v
retrieving revision 1.4.2.3
retrieving revision 1.4.2.4
diff -u -d -r1.4.2.3 -r1.4.2.4
--- display_coverart.h 1 Apr 2007 19:47:10 -0000 1.4.2.3
+++ display_coverart.h 14 Apr 2007 20:02:45 -0000 1.4.2.4
@@ -51,4 +51,7 @@
void coverart_clear_images ();
void coverart_block_change (gboolean val);
void coverart_init_display ();
+GdkPixbuf *coverart_get_track_thumb (Track *track, Itdb_Device *device);
+void coverart_set_cover_from_file ();
+void coverart_set_cover_from_web ();
#endif
Index: fetchcover.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/Attic/fetchcover.h,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -d -r1.1.2.2 -r1.1.2.3
--- fetchcover.h 25 Mar 2007 22:53:14 -0000 1.1.2.2
+++ fetchcover.h 14 Apr 2007 20:02:45 -0000 1.1.2.3
@@ -14,7 +14,7 @@
#include "prefs.h"
-GtkDialog *fetchcover_display_dialog(Detail *detail);
+void on_coverart_context_menu_click (GList *tracks);
void on_fetchcover_fetch_button (GtkWidget *widget, gpointer data);
#endif
Index: context_menus.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/context_menus.c,v
retrieving revision 1.67.4.1
retrieving revision 1.67.4.2
diff -u -d -r1.67.4.1 -r1.67.4.2
--- context_menus.c 1 Apr 2007 19:47:10 -0000 1.67.4.1
+++ context_menus.c 14 Apr 2007 20:02:45 -0000 1.67.4.2
@@ -512,10 +512,24 @@
static GtkWidget *add_display_big_coverart (GtkWidget *menu)
{
return hookup_mi (menu, _("View Full Size Artwork"),
- GTK_STOCK_EDIT,
+ GTK_STOCK_FULLSCREEN,
G_CALLBACK (display_track_artwork), NULL);
}
+static GtkWidget *add_get_cover_from_file (GtkWidget *menu)
+{
+ return hookup_mi (menu, _("Select Cover From File"),
+ GTK_STOCK_FLOPPY,
+ G_CALLBACK
(coverart_set_cover_from_file), NULL);
+}
+
+static GtkWidget *add_get_cover_from_web (GtkWidget *menu)
+{
+ return hookup_mi (menu, _("Find Cover on Web"),
+ GTK_STOCK_NETWORK,
+ G_CALLBACK
(coverart_set_cover_from_web), NULL);
+}
+
static GtkWidget *add_check_ipod_files (GtkWidget *menu)
{
/* FIXME */
@@ -788,6 +802,8 @@
#endif
break;
case CM_CAD:
+ add_get_cover_from_file (menu);
+ add_get_cover_from_web (menu);
add_display_big_coverart (menu);
add_edit_track_details (menu);
break;
-------------------------------------------------------------------------
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