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

Reply via email to