static void gtkam_main_update_sensitivity (GtkamMain *m) { guint i, s; i = gtkam_list_count_all (GTKAM_LIST (m->priv->list)); s = gtkam_list_count_selected (GTKAM_LIST (m->priv->list)); gtk_widget_set_sensitive ( gtk_ui_manager_get_widget (m->priv->ui_manager, "/ui/MainMenu/SelectMenu/SelectNone"), (s != 0)); gtk_widget_set_sensitive ( gtk_ui_manager_get_widget (m->priv->ui_manager, "/ui/MainMenu/FileMenu/DeletePhotos/DeleteSelected"), (s != 0)); gtk_widget_set_sensitive ( gtk_ui_manager_get_widget (m->priv->ui_manager, "/ui/MainMenu/FileMenu/SavePhotos/SaveSelected"), (s != 0)); gtk_widget_set_sensitive ( gtk_ui_manager_get_widget (m->priv->ui_manager, "/ui/MainMenu/FileMenu/DeletePhotos/DeleteAll"), (i != 0)); gtk_widget_set_sensitive ( gtk_ui_manager_get_widget (m->priv->ui_manager, "/ui/MainMenu/FileMenu/SavePhotos/SaveAll"), (i != 0)); gtk_widget_set_sensitive ( gtk_ui_manager_get_widget (m->priv->ui_manager, "/ui/MainMenu/SelectMenu/SelectAll"), (s != i)); gtk_widget_set_sensitive ( gtk_ui_manager_get_widget (m->priv->ui_manager, "/ui/MainMenu/SelectMenu/SelectInverse"), (i != 0)); }
static void on_tree_file_added (GtkamTree *tree, GtkamTreeFileAddedData *data, GtkamMain *m) { if (gtkam_list_has_folder (GTKAM_LIST (m->priv->list), data->camera, data->folder)) gtkam_list_add_file (GTKAM_LIST (m->priv->list), data->camera, data->folder, data->name); }
static void action_view_thumbnails (GtkAction *action, gpointer callback_data) { GtkamMain *m = GTKAM_MAIN (callback_data); if (!m->priv->list) return; m->priv->view_thumbs = !m->priv->view_thumbs; if (m->priv->view_thumbs) gtkam_list_show_thumbnails (GTKAM_LIST (m->priv->list)); else gtkam_list_hide_thumbnails (GTKAM_LIST (m->priv->list)); }
static void action_info (gpointer callback_data, guint callback_action, GtkWidget *widget) { GtkamList *list = GTKAM_LIST (callback_data); GtkWidget *d; GtkamCamera *camera; gchar *folder; gchar *name; GtkamListInfoUpdatedData *data; camera = gtkam_list_get_camera_from_iter (list, &list->priv->iter); folder = gtkam_list_get_folder_from_iter (list, &list->priv->iter); name = gtkam_list_get_name_from_iter (list, &list->priv->iter); d = gtkam_info_new (camera, folder, name); g_signal_emit (G_OBJECT (list), signals[NEW_DIALOG], 0, d); g_object_unref (G_OBJECT (d)); g_free (folder); g_free (name); data = g_new0 (GtkamListInfoUpdatedData, 1); data->list = list; data->iter = gtk_tree_iter_copy (&list->priv->iter); g_signal_connect (G_OBJECT (d), "info_updated", G_CALLBACK (on_info_updated), data); g_signal_connect (G_OBJECT (d), "destroy", G_CALLBACK (on_info_destroy), data); }
static gboolean selection_func (GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data) { GtkTreeIter iter; gchar *folder, *name; GtkamList *list = GTKAM_LIST (data); GtkamListFileSelectedData sd; GtkamListFileUnselectedData ud; gtk_tree_model_get_iter (model, &iter, path); folder = gtkam_list_get_folder_from_iter (list, &iter); name = gtkam_list_get_name_from_iter (list, &iter); if (path_currently_selected) { ud.camera = gtkam_list_get_camera_from_iter (list, &iter); ud.folder = folder; ud.name = name; g_signal_emit (G_OBJECT (list), signals[FILE_UNSELECTED], 0, &ud); } else { sd.camera = gtkam_list_get_camera_from_iter (list, &iter); sd.folder = folder; sd.name = name; g_signal_emit (G_OBJECT (list), signals[FILE_SELECTED], 0, &sd); } g_free (name); g_free (folder); return (TRUE); }
static gboolean show_thumbnails_foreach_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { GtkamList *list = GTKAM_LIST (data); GtkamCamera *camera; gchar *folder, *name; CameraAbilities a; GetThumbnailData *d; camera = gtkam_list_get_camera_from_iter (list, iter); folder = gtkam_list_get_folder_from_iter (list, iter); name = gtkam_list_get_name_from_iter (list, iter); gp_camera_get_abilities (camera->camera, &a); if (a.file_operations & GP_FILE_OPERATION_PREVIEW) { d = g_new0 (GetThumbnailData, 1); d->camera = camera; g_object_ref (G_OBJECT (camera)); d->folder = g_strdup (folder); d->name = g_strdup (name); d->iter = gtk_tree_iter_copy (iter); if (list->priv->tail) ((GetThumbnailData*) list->priv->tail)->next = d; list->priv->tail = d; if (list->priv->head == NULL) list->priv->head = d; } g_free (folder); g_free (name); return (FALSE); }
static void action_zoom_100 (GtkAction *action, gpointer callback_data) { GtkamMain *m = GTKAM_MAIN (callback_data); gtkam_list_zoom_100 (GTKAM_LIST (m->priv->list)); }
static void action_delete_sel (GtkAction *action, gpointer callback_data) { GtkamMain *m = GTKAM_MAIN (callback_data); gtkam_list_delete_selected (GTKAM_LIST (m->priv->list)); }
static void gtkam_list_init (GTypeInstance *instance, gpointer g_class) { GtkamList *list = GTKAM_LIST (instance); list->priv = g_new0 (GtkamListPrivate, 1); list->priv->thumbnails = TRUE; }
static void on_folder_unselected (GtkamTree *tree, GtkamTreeFolderUnselectedData *data, GtkamMain *m) { gtkam_list_remove_folder (GTKAM_LIST (m->priv->list), data->camera, data->folder); gtkam_main_update_sensitivity (m); }
static void gtkam_list_finalize (GObject *object) { GtkamList *list = GTKAM_LIST (object); g_free (list->priv); G_OBJECT_CLASS (parent_class)->finalize (object); }
static void selection_foreach_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *name; GtkamList *list = GTKAM_LIST (data); name = gtkam_list_get_name_from_iter (list, iter); g_message (" '%s'", name); g_free (name); }
static void gtkam_list_destroy (GtkObject *object) { GtkamList *list = GTKAM_LIST (object); if (list->priv->factory) { g_object_unref (G_OBJECT (list->priv->factory)); list->priv->factory = NULL; } GTK_OBJECT_CLASS (parent_class)->destroy (object); }
static void action_save (gpointer callback_data, guint callback_action, GtkWidget *widget) { GtkWidget *s; GtkamList *list = GTKAM_LIST (callback_data); GtkamCamera *camera; gchar *folder; gchar *name; camera = gtkam_list_get_camera_from_iter (list, &list->priv->iter); folder = gtkam_list_get_folder_from_iter (list, &list->priv->iter); name = gtkam_list_get_name_from_iter (list, &list->priv->iter); s = gtkam_save_new (GTK_WINDOW (gtk_widget_get_toplevel( GTK_WIDGET(list) ))); gtkam_save_add (GTKAM_SAVE (s), camera, folder, name); g_free (folder); g_free (name); g_signal_emit (G_OBJECT (list), signals[NEW_DIALOG], 0, s); g_object_unref (G_OBJECT (s)); }
static void action_exif (gpointer callback_data, guint callback_action, GtkWidget *widget) { GtkamList *list = GTKAM_LIST (callback_data); GtkamCamera *camera; gchar *folder; gchar *name; GtkWidget *d; camera = gtkam_list_get_camera_from_iter (list, &list->priv->iter); folder = gtkam_list_get_folder_from_iter (list, &list->priv->iter); name = gtkam_list_get_name_from_iter (list, &list->priv->iter); d = gtkam_exif_new (camera, folder, name); g_free (folder); g_free (name); if (!d) return; g_signal_emit (G_OBJECT (list), signals[NEW_DIALOG], 0, d); g_object_unref (G_OBJECT (d)); }
static gboolean get_thumbnail_idle (gpointer data) { GtkamList *list = GTKAM_LIST (data); GetThumbnailData *d; CameraFile *file; GtkWidget *s; GdkPixbuf *pixbuf; GdkPixbufLoader *loader; int result; const char *fd; unsigned long fs; gfloat factor; d = list->priv->head; if (d == NULL) return (FALSE); s = gtkam_status_new (_("Downloading thumbnail of '%s' from " "folder '%s'..."), d->name, d->folder); g_signal_emit (G_OBJECT (list), signals[NEW_STATUS], 0, s); gp_file_new (&file); result = gp_camera_file_get (d->camera->camera, d->folder, d->name, GP_FILE_TYPE_PREVIEW, file, GTKAM_STATUS (s)->context->context); if (d->camera->multi) gp_camera_exit (d->camera->camera, NULL); if (result >= 0) { gp_file_get_data_and_size (file, &fd, &fs); loader = gdk_pixbuf_loader_new (); gdk_pixbuf_loader_write (loader, fd, fs, NULL); gdk_pixbuf_loader_close (loader, NULL); pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); gtk_list_store_set (list->priv->store, d->iter, PREVIEW_ORIG_COLUMN, pixbuf, -1); factor = gtkam_list_get_zoom_factor (list); pixbuf = gdk_pixbuf_scale_simple (pixbuf, gdk_pixbuf_get_width (pixbuf) * factor, gdk_pixbuf_get_height (pixbuf) * factor, GDK_INTERP_BILINEAR); g_object_unref (G_OBJECT (loader)); gtk_list_store_set (list->priv->store, d->iter, PREVIEW_COLUMN, pixbuf, -1); g_object_unref (G_OBJECT (pixbuf)); } gp_file_unref (file); gtk_object_destroy (GTK_OBJECT (s)); if (result == GP_ERROR_CAMERA_BUSY) return (TRUE); g_object_unref (G_OBJECT (d->camera)); g_free (d->name); g_free (d->folder); gtk_tree_iter_free (d->iter); list->priv->head = d->next; g_free (d); if (!list->priv->head) list->priv->tail = NULL; gtk_widget_destroy (s); if (list->priv->head == NULL) return (FALSE); else return (TRUE); }