Revision: 1696
http://gtkpod.svn.sourceforge.net/gtkpod/?rev=1696&view=rev
Author: phantom_sf
Date: 2007-09-16 11:19:50 -0700 (Sun, 16 Sep 2007)
Log Message:
-----------
- cleanup of function names
- implementation of dnd between image view and album view, ie. drag and image
onto a different album
in the album list to move the image to it.
Modified Paths:
--------------
gtkpod/branches/photo_support_branch/src/display_photo.c
gtkpod/branches/photo_support_branch/src/display_photo.h
gtkpod/branches/photo_support_branch/src/display_playlists.c
gtkpod/branches/photo_support_branch/src/file_itunesdb.c
gtkpod/branches/photo_support_branch/src/misc.c
gtkpod/branches/photo_support_branch/src/misc.h
Modified: gtkpod/branches/photo_support_branch/src/display_photo.c
===================================================================
--- gtkpod/branches/photo_support_branch/src/display_photo.c 2007-09-15
15:33:37 UTC (rev 1695)
+++ gtkpod/branches/photo_support_branch/src/display_photo.c 2007-09-16
18:19:50 UTC (rev 1696)
@@ -64,30 +64,47 @@
static GtkMenuItem *photo_remove_album_menuItem= NULL;
static GtkMenuItem *photo_remove_image_menuItem= NULL;
+/* Drag n Drop Definitions */
+static GtkTargetEntry photo_drag_types [] = {
+ { DND_GTKPOD_PHOTOIMAGELIST_TYPE, 0, DND_GTKPOD_PHOTOIMAGELIST
},
+ { "text/plain", 0, DND_TEXT_PLAIN },
+ { "STRING", 0, DND_TEXT_PLAIN }
+};
+
+static GtkTargetEntry photo_drop_types [] = {
+ { DND_GTKPOD_PHOTOIMAGELIST_TYPE, 0, DND_GTKPOD_PHOTOIMAGELIST
},
+ { "text/plain", 0, DND_TEXT_PLAIN },
+ { "STRING", 0, DND_TEXT_PLAIN }
+};
+
/* Declarations */
-static void gp_create_albumview();
-static void gp_create_thumbnailview();
-static void gp_build_thumbnail_model(gchar *album_name);
-static void gp_album_selection_changed(GtkTreeSelection *selection, gpointer
user_data);
-static void gp_thumb_selection_changed(GtkIconView *iconview, gpointer
user_data);
-static void gp_display_photo_preview(Artwork *artwork);
+static void gphoto_create_albumview();
+static void gphoto_create_thumbnailview();
+static void gphoto_build_thumbnail_model(gchar *album_name);
+static void gphoto_album_selection_changed(GtkTreeSelection *selection,
gpointer user_data);
+static void gphoto_thumb_selection_changed(GtkIconView *iconview, gpointer
user_data);
+static void gphoto_display_photo_preview(Artwork *artwork);
void on_photodb_add_album_menuItem_activate(GtkMenuItem *menuItem, gpointer
user_data);
void on_photodb_add_image_menuItem_activate(GtkMenuItem *menuItem, gpointer
user_data);
void on_photodb_add_image_dir_menuItem_activate(GtkMenuItem *menuItem,
gpointer user_data);
-void on_photodb_remove_album_menuItem_activate (GtkMenuItem *menuItem,
gpointer user_data);
-void on_photodb_remove_image_menuItem_activate (GtkMenuItem *menuItem,
gpointer user_data);
+void on_photodb_remove_album_menuItem_activate(GtkMenuItem *menuItem, gpointer
user_data);
+void on_photodb_remove_image_menuItem_activate(GtkMenuItem *menuItem, gpointer
user_data);
static void signal_data_changed();
-static gchar *get_selected_album_name();
-static void gp_add_image_to_database(gchar *photo_filename);
-static void gp_remove_album_from_database();
-static void gp_add_image_to_iconview(Artwork *photo, gint index);
-static void gp_remove_photo_from_album();
-static gboolean gp_photodb_button_press(GtkWidget *w, GdkEventButton *e,
gpointer data);
+static gchar *gphoto_get_selected_album_name();
+static void gphoto_add_image_to_database(gchar *photo_filename);
+static void gphoto_remove_album_from_database ();
+static void gphoto_add_image_to_iconview(Artwork *photo, gint index);
+static void gphoto_remove_selected_photos_from_album (gboolean show_dialogs);
+static gboolean gphoto_button_press(GtkWidget *w, GdkEventButton *e, gpointer
data);
/* Create popup menu */
-static void create_context_menu(gint view_component);
+static void gphoto_create_context_menu(gint view_component);
/* Menu Items displayed in popup menu */
-static GtkWidget *add_remove_album_from_db_item(GtkWidget *menu);
-static GtkWidget *add_remove_photo_from_album_item(GtkWidget *menu);
+static GtkWidget *gphoto_menuitem_remove_album_from_db_item(GtkWidget *menu);
+static GtkWidget *gphoto_menuitem_remove_photo_from_album_item(GtkWidget
*menu);
+/* DnD */
+static gboolean dnd_album_drag_drop(GtkWidget *widget, GdkDragContext
*drag_context, gint x, gint y, guint time, gpointer user_data);
+static void dnd_album_drag_data_received(GtkWidget *widget, GdkDragContext
*dc, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer
user_data);
+static void dnd_images_drag_data_get(GtkWidget *widget, GdkDragContext *dc,
GtkSelectionData *data, guint info, guint time, gpointer user_data);
enum
{
@@ -151,7 +168,7 @@
}
/**
- * gp_photodb_load_photodb:
+ * gphoto_load_photodb:
*
* Using the info in the provided itunes db, load the photo db
* from the ipod if there is one present. Reference it in the
@@ -160,7 +177,7 @@
* @ itdb: itunes database
*
*/
-void gp_photodb_load_photodb(iTunesDB *itdb)
+void gphoto_load_photodb(iTunesDB *itdb)
{
ExtraiTunesDBData *eitdb;
PhotoDB *db;
@@ -190,11 +207,11 @@
/* Set the reference to the photo database */
eitdb->photodb = db;
- printf ("Reference to photo db successfully set\n");
+ /*printf ("Reference to photo db successfully set\n");*/
}
/**
- * gp_photodb_ipod_supports_photos
+ * gphoto_ipod_supports_photos
*
* Convenience function that passes onto libgpod and requests
* whether the ipod has photo support
@@ -202,20 +219,20 @@
* Returns:
* true/false whether the ipod has photo support
*/
-gboolean gp_photodb_ipod_supports_photos(iTunesDB *itdb)
+gboolean gphoto_ipod_supports_photos(iTunesDB *itdb)
{
- printf ("Checking ipod has photo support: ");
gboolean status =itdb_device_supports_photo (itdb->device);
+/*
if (status)
printf ("device supports photos\n");
else
printf ("photos not supported\n");
-
+*/
return status;
}
/**
- * gp_photodb_is_photo_playlist
+ * gphoto_is_photo_playlist
*
* Convenience function that determines whether the
* playlist is the photo playlist.
@@ -225,13 +242,13 @@
* Returns:
* true/false whether the playlist is the photo playlist
*/
-gboolean gp_photodb_is_photo_playlist(Playlist *pl)
+gboolean gphoto_is_photo_playlist(Playlist *pl)
{
return pl->type == GP_PL_TYPE_PHOTO;
}
/**
- * gp_photodb_display_photo_window
+ * gphoto_display_photo_window
*
* When the photo playlist is clicked on, it hands off to this
* function which changes the entire display to the photo
@@ -239,7 +256,7 @@
*
* @itdb: itunes db associated with the photo playlist clicked on
*/
-void gp_photodb_display_photo_window(iTunesDB *itdb)
+void gphoto_display_photo_window(iTunesDB *itdb)
{
ExtraiTunesDBData *eitdb;
@@ -257,24 +274,24 @@
return;
}
- gp_photodb_change_to_photo_window (TRUE);
+ gphoto_change_to_photo_window (TRUE);
- gp_create_albumview ();
- gp_create_thumbnailview ();
+ gphoto_create_albumview ();
+ gphoto_create_thumbnailview ();
if (eitdb->photo_data_changed != TRUE)
eitdb->photo_data_changed = FALSE;
}
/**
- * gp_photodb_change_to_photo_window
+ * gphoto_change_to_photo_window
*
* When the photo playlist is NOT clicked on;
* this changes the entire display back to original
* rather than the photo window.
*
*/
-void gp_photodb_change_to_photo_window(gboolean showflag)
+void gphoto_change_to_photo_window(gboolean showflag)
{
GtkWidget *paned1 = gtkpod_xml_get_widget (main_window_xml, "paned1");
GtkWidget *downbutton = gtkpod_xml_get_widget (main_window_xml,
"cover_down_button");
@@ -370,8 +387,7 @@
NULL);
g_signal_connect (G_OBJECT(photo_remove_image_menuItem),
"activate", G_CALLBACK(on_photodb_remove_image_menuItem_activate),
NULL);
- }
- else
+ } else
{
if (!GTK_WIDGET_VISIBLE (paned1))
{
@@ -417,7 +433,7 @@
}
/* Create album listview */
-static void gp_create_albumview()
+static void gphoto_create_albumview()
{
GtkListStore *model;
GtkTreeSelection *selection;
@@ -471,17 +487,35 @@
/* function to be enacted when the album is changed */
selection = gtk_tree_view_get_selection (album_view);
- g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK
(gp_album_selection_changed),
+ g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK
(gphoto_album_selection_changed),
NULL);
- g_signal_connect (G_OBJECT (album_view), "button-press-event",
G_CALLBACK (gp_photodb_button_press), (gpointer) ALBUM_VIEW);
+ g_signal_connect (G_OBJECT (album_view), "button-press-event",
G_CALLBACK (gphoto_button_press), (gpointer) ALBUM_VIEW);
- /* Disable the remove album menu item until an album is selected */
+ /* Disable the remove album menu item until an album is selected */
gtk_widget_set_sensitive (GTK_WIDGET(photo_remove_album_menuItem),
FALSE);
+
+ /* Dnd destinaton for album view */
+ gtk_drag_dest_set (
+ GTK_WIDGET (album_view),
+ GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT,
+ photo_drop_types,
+ TGNR (photo_drop_types),
+ GDK_ACTION_COPY|GDK_ACTION_MOVE);
+
+ g_signal_connect ((gpointer) album_view, "drag-drop",
+ G_CALLBACK (dnd_album_drag_drop),
+ NULL);
+
+ g_signal_connect ((gpointer) album_view, "drag-data-received",
+ G_CALLBACK (dnd_album_drag_data_received),
+ NULL);
+
+
}
/* Create thumbnail view */
-static void gp_create_thumbnailview()
+static void gphoto_create_thumbnailview()
{
/* destroy old listview */
if (thumbnail_view)
@@ -497,16 +531,28 @@
if (!GTK_WIDGET_REALIZED(thumbnail_view))
gtk_widget_set_events (GTK_WIDGET(thumbnail_view),
GDK_KEY_PRESS_MASK);
- gp_build_thumbnail_model (NULL);
+ gphoto_build_thumbnail_model (NULL);
gtk_container_add (GTK_CONTAINER (photo_thumb_window),
GTK_WIDGET(thumbnail_view));
gtk_widget_show_all (photo_thumb_window);
- g_signal_connect (G_OBJECT (thumbnail_view), "button-press-event",
G_CALLBACK (gp_photodb_button_press), (gpointer) ICON_VIEW);
+ g_signal_connect (G_OBJECT (thumbnail_view), "button-press-event",
G_CALLBACK (gphoto_button_press), (gpointer) ICON_VIEW);
+
+ /* DnD */
+ gtk_drag_source_set (
+ GTK_WIDGET (thumbnail_view),
+ GDK_BUTTON1_MASK,
+ photo_drag_types,
+ TGNR (photo_drag_types),
+ GDK_ACTION_COPY|GDK_ACTION_MOVE);
+
+ g_signal_connect ((gpointer) thumbnail_view, "drag-data-get",
+ G_CALLBACK (dnd_images_drag_data_get),
+ NULL);
}
/* Build the thumbnail model */
-static void gp_build_thumbnail_model(gchar *album_name)
+static void gphoto_build_thumbnail_model(gchar *album_name)
{
GtkListStore *model;
PhotoAlbum *album;
@@ -532,11 +578,11 @@
Artwork *photo = g_list_nth_data (photos, i);
g_return_if_fail (photo);
- gp_add_image_to_iconview (photo, (i + 1));
+ gphoto_add_image_to_iconview (photo, (i + 1));
/* On creation of the model, place the first image into the
preview pane */
if (i == 0)
- gp_display_photo_preview (photo);
+ gphoto_display_photo_preview (photo);
}
gtk_icon_view_set_pixbuf_column (thumbnail_view, 0);
@@ -546,32 +592,32 @@
gtk_icon_view_set_item_width(thumbnail_view, -1); // let the model
decide how wide
/* function to be enacted when the thumbnail is changed */
- g_signal_connect (thumbnail_view, "selection-changed", G_CALLBACK
(gp_thumb_selection_changed),
+ g_signal_connect (thumbnail_view, "selection-changed", G_CALLBACK
(gphoto_thumb_selection_changed),
NULL);
-
- /* Disable the remove image menu item until an image is selected */
- gtk_widget_set_sensitive
(GTK_WIDGET(photo_remove_image_menuItem), FALSE);
+
+ /* Disable the remove image menu item until an image is selected */
+ gtk_widget_set_sensitive (GTK_WIDGET(photo_remove_image_menuItem),
FALSE);
}
/* Callback when the selection of the album is changed */
-static void gp_album_selection_changed(GtkTreeSelection *selection, gpointer
user_data)
+static void gphoto_album_selection_changed(GtkTreeSelection *selection,
gpointer user_data)
{
gchar *album_name= NULL;
- album_name = get_selected_album_name (selection);
+ album_name = gphoto_get_selected_album_name (selection);
/* if album_name returns NULL then it merely selects the default Photo
Library */
- gp_build_thumbnail_model (album_name);
-
+ gphoto_build_thumbnail_model (album_name);
+
if (album_name != NULL)
{
- /* Enable the remove album menu item now that one is selected
*/
+ /* Enable the remove album menu item now that one is selected */
gtk_widget_set_sensitive
(GTK_WIDGET(photo_remove_album_menuItem), TRUE);
}
}
/* Callback when the selection of a thumbnail image is changed */
-static void gp_thumb_selection_changed(GtkIconView *iconview, gpointer
user_data)
+static void gphoto_thumb_selection_changed(GtkIconView *iconview, gpointer
user_data)
{
GtkTreeModel *model;
GtkTreeIter iter;
@@ -587,14 +633,14 @@
gtk_tree_model_get_iter (model, &iter, selected_items->data);
gtk_tree_model_get (model, &iter, COL_THUMB_ARTWORK, &artwork, -1);
g_return_if_fail (artwork);
- gp_display_photo_preview (artwork);
-
- /* Enable the remove image menu item until an album is selected */
+ gphoto_display_photo_preview (artwork);
+
+ /* Enable the remove image menu item until an album is selected */
gtk_widget_set_sensitive (GTK_WIDGET(photo_remove_image_menuItem),
TRUE);
}
/* Display the selected thumbnail image in the preview window */
-static void gp_display_photo_preview(Artwork *artwork)
+static void gphoto_display_photo_preview(Artwork *artwork)
{
Thumb *thumb;
GdkPixbuf *pixbuf, *scaled;
@@ -658,7 +704,7 @@
* Returns:
* string value representing the album name selected
*/
-static gchar *get_selected_album_name(GtkTreeSelection *selection)
+static gchar *gphoto_get_selected_album_name(GtkTreeSelection *selection)
{
gchar *album_name= NULL;
GtkTreeModel *album_model;
@@ -676,7 +722,7 @@
}
/**
- * gp_add_image_to_database
+ * gphoto_add_image_to_database
*
* Add a photo from file name to the photo database and
* hence to the gui. If an album is selected other than the
@@ -685,7 +731,7 @@
* @ photo_filename: gchar *
*
*/
-static void gp_add_image_to_database(gchar *photo_filename)
+static void gphoto_add_image_to_database(gchar *photo_filename)
{
gchar *album_name= NULL;
PhotoAlbum *selected_album;
@@ -710,7 +756,7 @@
}
/* Add the image to the selected album if there is one selected */
- album_name= get_selected_album_name (gtk_tree_view_get_selection
(album_view));
+ album_name= gphoto_get_selected_album_name (gtk_tree_view_get_selection
(album_view));
/* Find the selected album. If no selection then returns the Main Album
*/
selected_album = itdb_photodb_photoalbum_by_name (photodb, album_name);
@@ -724,20 +770,20 @@
itdb_photodb_photoalbum_add_photo (photodb, selected_album,
image, -1);
}
- gp_add_image_to_iconview (image, g_list_length
(selected_album->members));
+ gphoto_add_image_to_iconview (image, g_list_length
(selected_album->members));
signal_data_changed ();
}
/**
- * gp_add_image_to_iconview
+ * gphoto_add_image_to_iconview
*
* Add an Artwork image to the icon_view
*
* @ photo: Artwork
*
*/
-static void gp_add_image_to_iconview(Artwork *photo, gint index)
+static void gphoto_add_image_to_iconview(Artwork *photo, gint index)
{
GdkPixbuf *pixbuf= NULL;
Thumb *thumb= NULL;
@@ -764,12 +810,12 @@
}
/**
- * gp_remove_album_from_database
+ * gphoto_remove_album_from_database
*
* Remove the selected album from the photo database and the view
*
*/
-static void gp_remove_album_from_database()
+static void gphoto_remove_album_from_database()
{
GtkTreeModel *album_model;
GtkTreeIter iter;
@@ -782,9 +828,10 @@
return;
if (gtk_tree_selection_get_selected (curr_selection, &album_model,
&iter) == TRUE)
- { /* handle new selection */
gtk_tree_model_get (album_model, &iter, COL_ALBUM_NAME,
&album_name, -1);
- }
+ else
+ return;
+
g_return_if_fail (album_name);
/* Find the selected album. If no selection then returns the Main Album
*/
@@ -804,10 +851,10 @@
gint result;
GtkWindow *parent = GTK_WINDOW (gtkpod_xml_get_widget
(main_window_xml, "gtkpod"));
GtkWidget *dialog = gtk_message_dialog_new (parent,
-
GTK_DIALOG_DESTROY_WITH_PARENT,
-
GTK_MESSAGE_QUESTION,
-
GTK_BUTTONS_YES_NO,
-
_("Do you want to remove the album's photos too?"));
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ _("Do you want to remove the album's photos
too?"));
result = gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
@@ -821,6 +868,7 @@
break;
}
}
+ album_model = gtk_tree_view_get_model (album_view);
gtk_list_store_remove (GTK_LIST_STORE(album_model), &iter);
itdb_photodb_photoalbum_remove (photodb, selected_album, remove_pics);
@@ -828,18 +876,18 @@
g_free (album_name);
/* Display the default Photo Library */
- gp_build_thumbnail_model (NULL);
+ gphoto_build_thumbnail_model (NULL);
signal_data_changed ();
}
/**
- * gp_remove_image_from_album
+ * gphoto_remove_image_from_album
*
* Remove the selected image from the album
*
*/
-static void gp_remove_photo_from_album()
+static void gphoto_remove_selected_photos_from_album (gboolean show_dialogs)
{
GList *selected_images;
GtkTreeModel *thumbnail_model;
@@ -855,7 +903,7 @@
return;
/* Find which album is selected if any */
- album_name = get_selected_album_name (gtk_tree_view_get_selection
(album_view));
+ album_name = gphoto_get_selected_album_name
(gtk_tree_view_get_selection (album_view));
selected_album = itdb_photodb_photoalbum_by_name (photodb, album_name);
GtkWindow *parent = GTK_WINDOW (gtkpod_xml_get_widget (main_window_xml,
"gtkpod"));
@@ -863,14 +911,17 @@
gchar *message;
if (selected_album != NULL&& selected_album->album_type != 0x01)
message
-
= _("The photo selection will be removed from the selected album.\nTo remove
the photo from the database, remove it from the Photo Library album.");
+ = _("The photo selection will be removed from
the selected album.\nTo remove the photo from the database, remove it from the
Photo Library album.");
else
message = _("The photo selection will be deleted from the Photo
Library album");
- GtkWidget *dialog = gtk_message_dialog_new (parent,
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, message);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
+ if (show_dialogs)
+ {
+ GtkWidget *dialog = gtk_message_dialog_new (parent,
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, message);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ }
+
thumbnail_model = gtk_icon_view_get_model (thumbnail_view);
for (i = 0; i < g_list_length (selected_images); ++i)
{
@@ -890,14 +941,14 @@
/* When right mouse button is pressed on one of the widgets,
* a popup menu is displayed.
*/
-static gboolean gp_photodb_button_press(GtkWidget *w, GdkEventButton *e,
gpointer data)
+static gboolean gphoto_button_press(GtkWidget *w, GdkEventButton *e, gpointer
data)
{
g_return_val_if_fail (w && e, FALSE);
switch (e->button)
{
case 3:
printf ("Button press has occurred\n");
- create_context_menu ((gint) data);
+ gphoto_create_context_menu ((gint) data);
return TRUE;
default:
break;
@@ -906,7 +957,7 @@
}
/* create the popup menu for one of the three widgets */
-static void create_context_menu(gint view_component)
+static void gphoto_create_context_menu(gint view_component)
{
static GtkWidget *menu= NULL;
@@ -921,10 +972,10 @@
switch (view_component)
{
case ALBUM_VIEW:
- add_remove_album_from_db_item (menu);
+ gphoto_menuitem_remove_album_from_db_item (menu);
break;
case ICON_VIEW:
- add_remove_photo_from_album_item (menu);
+ gphoto_menuitem_remove_photo_from_album_item (menu);
break;
case PREVIEW:
@@ -938,16 +989,18 @@
}
}
-static GtkWidget *add_remove_album_from_db_item(GtkWidget *menu)
+static GtkWidget *gphoto_menuitem_remove_album_from_db_item(GtkWidget *menu)
{
- return hookup_mi (menu, _("Remove Album"), GTK_STOCK_DELETE, G_CALLBACK
(gp_remove_album_from_database),
+ return hookup_mi (menu, _("Remove Album"), GTK_STOCK_DELETE, G_CALLBACK
(gphoto_remove_album_from_database),
NULL);
}
-static GtkWidget *add_remove_photo_from_album_item(GtkWidget *menu)
+static GtkWidget *gphoto_menuitem_remove_photo_from_album_item(GtkWidget *menu)
{
- return hookup_mi (menu, _("Remove Photo"), GTK_STOCK_DELETE, G_CALLBACK
(gp_remove_photo_from_album),
- NULL);
+ return hookup_mi (menu,
+ _("Remove Photo"), GTK_STOCK_DELETE,
+ G_CALLBACK (gphoto_remove_selected_photos_from_album),
+ TRUE);
}
/* Callbacks for the menu items in the photo window */
@@ -962,7 +1015,7 @@
NULL,
NULL);
- if (album_name == NULL || strlen (album_name) == 0)
+ if (album_name == NULL|| strlen (album_name) == 0)
return;
/* Check an album with this name doesnt already exist */
@@ -999,7 +1052,7 @@
if (image_name == NULL)
return;
- gp_add_image_to_database (image_name);
+ gphoto_add_image_to_database (image_name);
g_free (image_name);
}
@@ -1056,7 +1109,7 @@
fileformat = gdk_pixbuf_get_file_info (full_filename,
NULL, NULL);
if (fileformat != NULL)
{
- gp_add_image_to_database (full_filename);
+ gphoto_add_image_to_database (full_filename);
}
g_free (full_filename);
}
@@ -1066,12 +1119,176 @@
g_free(dir_name);
}
-void on_photodb_remove_album_menuItem_activate (GtkMenuItem *menuItem,
gpointer user_data)
+void on_photodb_remove_album_menuItem_activate(GtkMenuItem *menuItem, gpointer
user_data)
{
- gp_remove_album_from_database ();
+ gphoto_remove_album_from_database ();
}
-void on_photodb_remove_image_menuItem_activate (GtkMenuItem *menuItem,
gpointer user_data)
+void on_photodb_remove_image_menuItem_activate(GtkMenuItem *menuItem, gpointer
user_data)
{
- gp_remove_photo_from_album ();
+ gphoto_remove_selected_photos_from_album (TRUE);
}
+
+/* -----------------------------------------------------------*/
+/* Section for album display */
+/* drag and drop */
+/* -----------------------------------------------------------*/
+
+/* remove dragged playlist after successful MOVE */
+
+static gboolean dnd_album_drag_drop(GtkWidget *widget, GdkDragContext
*drag_context, gint x, gint y, guint time, gpointer user_data)
+{
+ GdkAtom target;
+ target = gtk_drag_dest_find_target (widget, drag_context, NULL);
+
+ if (target != GDK_NONE)
+ {
+ gboolean rowfound;
+
+ /* determine whether a row has been dropped over in album view
*/
+ rowfound = gtk_tree_view_get_dest_row_at_pos
(GTK_TREE_VIEW(widget), x, y, NULL, NULL);
+ if (rowfound == TRUE)
+ {
+ gtk_drag_get_data (widget, drag_context, target, time);
+ return TRUE;
+ }
+ else
+ return FALSE;
+ }
+ return FALSE;
+}
+
+static void dnd_images_drag_data_get(GtkWidget *widget, GdkDragContext *dc,
GtkSelectionData *data, guint info, guint time,
+ gpointer user_data)
+{
+ GtkTreeModel *model;
+ GList *selected_images;
+ gint i;
+
+ if (!data)
+ return;
+
+ /* Find which images are selected */
+ selected_images = gtk_icon_view_get_selected_items
(GTK_ICON_VIEW(widget));
+ if (selected_images == NULL|| g_list_length (selected_images) == 0)
+ return;
+
+ model = gtk_icon_view_get_model (GTK_ICON_VIEW(widget));
+
+ GtkTreePath *treePath = NULL;
+ GtkTreeIter iter;
+ Artwork *artwork = NULL;
+ GString *reply = g_string_sized_new (2000);
+
+ for (i = 0; i < g_list_length(selected_images); ++i)
+ {
+ treePath = g_list_nth_data (selected_images, i);
+ gtk_tree_model_get_iter (model, &iter, treePath);
+ gtk_tree_model_get (model, &iter, COL_THUMB_ARTWORK, &artwork,
-1);
+ g_string_append_printf (reply, "%p\n", artwork);
+ }
+
+ switch (info)
+ {
+ case DND_GTKPOD_PHOTOIMAGELIST:
+ gtk_selection_data_set(data, data->target, 8,
reply->str, reply->len);
+ g_string_free (reply, TRUE);
+ break;
+ default:
+ g_warning ("Programming error: pm_drag_data_get
received unknown info type (%d)\n", info);
+ break;
+ }
+}
+
+static void dnd_album_drag_data_received(GtkWidget *widget, GdkDragContext
*dc, gint x, gint y, GtkSelectionData *data, guint info,
+ guint time, gpointer user_data)
+{
+ g_return_if_fail (widget);
+ g_return_if_fail (dc);
+ g_return_if_fail (data);
+ g_return_if_fail (data->length > 0);
+ g_return_if_fail (data->data);
+ g_return_if_fail (data->format == 8);
+
+ gboolean rowfound;
+ GtkTreePath *treepath;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gchar *tgt_name;
+ gchar *src_name;
+ PhotoAlbum *tgt_album;
+ PhotoAlbum *src_album;
+
+ /* determine whether a row has been dropped over in album view */
+ rowfound = gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW(widget), x,
y, &treepath, NULL);
+ if (! rowfound)
+ {
+ gtk_drag_finish (dc, FALSE, FALSE, time);
+ return;
+ }
+
+ g_return_if_fail (treepath);
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW(widget));
+
+ /* Find the target album to drop the artwork into */
+ if(gtk_tree_model_get_iter (model, &iter, treepath))
+ gtk_tree_model_get (model, &iter, COL_ALBUM_NAME, &tgt_name,
-1);
+
+ gtk_tree_path_free (treepath);
+ treepath = NULL;
+ g_return_if_fail (tgt_name);
+
+ tgt_album = itdb_photodb_photoalbum_by_name (photodb, tgt_name);
+ g_return_if_fail (tgt_album);
+ if (tgt_name != NULL)
+ g_free (tgt_name);
+
+ /* Find the selected album, ie. the source, or else the Photo Library
if no selection */
+ GtkTreeSelection *selection = NULL;
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(widget));
+ if (selection != NULL)
+ src_name = gphoto_get_selected_album_name (selection);
+ else
+ src_name = NULL;
+
+ /* Find the selected album. If no selection then returns the Photo
Library */
+ src_album = itdb_photodb_photoalbum_by_name (photodb, src_name);
+ g_return_if_fail (src_album);
+ if (src_name != NULL)
+ g_free (src_name);
+
+ if (src_album == tgt_album)
+ {
+ gtk_drag_finish (dc, FALSE, FALSE, time);
+ return;
+ }
+
+ Artwork *artwork;
+ GList *artwork_list = NULL;
+ gchar *datap = data->data;
+ gint i = 0;
+
+ /* parse artwork and add each one to a GList */
+ while (parse_artwork_from_string (&datap, &artwork))
+ artwork_list = g_list_append (artwork_list, artwork);
+
+ if (tgt_album->album_type != 0x01)
+ {
+ /* Only if the target is not the Photo Library (which should
have the photo
+ * already) should the artwork be added to the album
+ */
+ for (i = 0; i < g_list_length (artwork_list); ++i)
+ {
+ artwork = g_list_nth_data (artwork_list, i);
+ itdb_photodb_photoalbum_add_photo (photodb, tgt_album,
artwork, -1);
+ }
+ }
+
+ /* Remove the artwork from the selected album if it is not the Photo
Library */
+ if (src_album->album_type != 0x01)
+ gphoto_remove_selected_photos_from_album (FALSE);
+
+ signal_data_changed ();
+}
+
Modified: gtkpod/branches/photo_support_branch/src/display_photo.h
===================================================================
--- gtkpod/branches/photo_support_branch/src/display_photo.h 2007-09-15
15:33:37 UTC (rev 1695)
+++ gtkpod/branches/photo_support_branch/src/display_photo.h 2007-09-16
18:19:50 UTC (rev 1696)
@@ -45,12 +45,17 @@
#define PHOTO_FULL_SCREEN_WIDTH 220
#define PHOTO_FULL_SCREEN_HEIGHT 176
-void gp_photodb_load_photodb (iTunesDB *itdb);
-gboolean gp_photodb_ipod_supports_photos (iTunesDB *itdb);
-gboolean gp_photodb_is_photo_playlist (Playlist *pl);
-void gp_photodb_display_photo_window (iTunesDB *itdb);
-void gp_photodb_change_to_photo_window (gboolean showflag);
+/* Drag n Drop */
+#define DND_GTKPOD_PHOTOIMAGELIST_TYPE "application/gtkpod-photoimagelist"
+#define DND_GTKPOD_PHOTOIMAGELIST 1
+void gphoto_load_photodb (iTunesDB *itdb);
+gboolean gphoto_ipod_supports_photos (iTunesDB *itdb);
+gboolean gphoto_is_photo_playlist (Playlist *pl);
+void gphoto_display_photo_window (iTunesDB *itdb);
+void gphoto_change_to_photo_window (gboolean showflag);
+
+
#endif /*DISPLAY_PHOTO_H_*/
Modified: gtkpod/branches/photo_support_branch/src/display_playlists.c
===================================================================
--- gtkpod/branches/photo_support_branch/src/display_playlists.c
2007-09-15 15:33:37 UTC (rev 1695)
+++ gtkpod/branches/photo_support_branch/src/display_playlists.c
2007-09-16 18:19:50 UTC (rev 1696)
@@ -1415,16 +1415,16 @@
space_set_ipod_itdb (new_playlist->itdb);
}
- if (gp_photodb_is_photo_playlist (new_playlist))
+ if (gphoto_is_photo_playlist (new_playlist))
{
/* This is the photo playlist so need to load
photo database
* rather than get tracks.
*/
- gp_photodb_display_photo_window
(new_playlist->itdb);
+ gphoto_display_photo_window
(new_playlist->itdb);
}
else
{
- gp_photodb_change_to_photo_window (FALSE);
+ gphoto_change_to_photo_window (FALSE);
}
/* remove all entries from sort tab 0 */
@@ -1529,7 +1529,7 @@
/* Add the photo playlist onto IPOD itdb if the
* IPOD supports photos
*/
- if (gp_photodb_ipod_supports_photos (itdb))
+ if (gphoto_ipod_supports_photos (itdb))
{ /* add photo playlist */
printf ("Photos supported. Adding node.\n");
GtkTreeIter itdb_iter;
Modified: gtkpod/branches/photo_support_branch/src/file_itunesdb.c
===================================================================
--- gtkpod/branches/photo_support_branch/src/file_itunesdb.c 2007-09-15
15:33:37 UTC (rev 1695)
+++ gtkpod/branches/photo_support_branch/src/file_itunesdb.c 2007-09-16
18:19:50 UTC (rev 1696)
@@ -956,7 +956,7 @@
}
/* All successfully loaded so try loading the photo database */
- gp_photodb_load_photodb (new_itdb);
+ gphoto_load_photodb (new_itdb);
return new_itdb;
}
@@ -2010,7 +2010,7 @@
*/
if (success &&
(itdb->usertype & GP_ITDB_TYPE_IPOD) &&
- gp_photodb_ipod_supports_photos (itdb) &&
+ gphoto_ipod_supports_photos (itdb) &&
eitdb->photodb != NULL &&
eitdb->photo_data_changed == TRUE)
{
Modified: gtkpod/branches/photo_support_branch/src/misc.c
===================================================================
--- gtkpod/branches/photo_support_branch/src/misc.c 2007-09-15 15:33:37 UTC
(rev 1695)
+++ gtkpod/branches/photo_support_branch/src/misc.c 2007-09-16 18:19:50 UTC
(rev 1696)
@@ -325,8 +325,35 @@
return FALSE;
}
+gboolean
+parse_artwork_from_string(gchar **s, Artwork **artwork)
+{
+ g_return_val_if_fail (artwork, FALSE);
+ *artwork = NULL;
+ g_return_val_if_fail (s, FALSE);
+ if(*s)
+ {
+ gchar *str = *s;
+ gchar *strp = strchr (str, '\n');
+ int tokens;
+ if (strp == NULL)
+ {
+ *artwork = NULL;
+ *s = NULL;
+ return FALSE;
+ }
+ tokens = sscanf (str, "%p", artwork);
+ ++strp;
+ if (*strp) *s = strp;
+ else *s = NULL;
+ if (tokens == 1) return TRUE;
+ else return FALSE;
+ }
+ return FALSE;
+}
+
/* Duplicate a GList (shallow copy) */
GList *glist_duplicate (GList *list)
{
@@ -1934,7 +1961,7 @@
/* Change the windows back to track view to ensure the
* sorttab state is saved correctly/
*/
- gp_photodb_change_to_photo_window (FALSE);
+ gphoto_change_to_photo_window (FALSE);
/* Sort column order needs to be stored */
tm_store_col_order();
Modified: gtkpod/branches/photo_support_branch/src/misc.h
===================================================================
--- gtkpod/branches/photo_support_branch/src/misc.h 2007-09-15 15:33:37 UTC
(rev 1695)
+++ gtkpod/branches/photo_support_branch/src/misc.h 2007-09-16 18:19:50 UTC
(rev 1696)
@@ -108,6 +108,7 @@
void open_about_window (void);
void close_about_window (void);
gboolean parse_tracks_from_string (gchar **s, Track **track);
+gboolean parse_artwork_from_string(gchar **s, Artwork **artwork);
void gtkpod_init (int argc, char *argv[]);
void gtkpod_shutdown (void);
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: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2