Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
static gboolean
gtkam_list_get_iter (GtkamList *list, GtkTreeIter *iter, GtkamCamera *camera,
		     const gchar *folder, const gchar *name)
{
	gint n, i;
	gchar *f, *na;

	n = gtk_tree_model_iter_n_children (
			GTK_TREE_MODEL (list->priv->store), NULL);
	for (i = 0; i < n; i++) {
		gtk_tree_model_iter_nth_child (
				GTK_TREE_MODEL (list->priv->store), iter, NULL, i);
		if (camera != gtkam_list_get_camera_from_iter (list, iter))
			continue;
		f = gtkam_list_get_folder_from_iter (list, iter);
		if (strcmp (folder, f)) {
			g_free (f);
			continue;
		}
		if (name) {
			na = gtkam_list_get_name_from_iter (list, iter);
			if (strcmp (name, na)) {
				g_free (na);
				continue;
			}
		}
		break;
	}
	return (i != n);
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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));
}
Esempio n. 7
0
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));
}
Esempio n. 8
0
static gint
on_button_press_event (GtkWidget *widget, GdkEventButton *event,
		       GtkamList *list)
{
	GtkTreePath *path = NULL;
	GtkWidget *w;
	GtkamCamera *camera;
	CameraAbilities a;

	switch (event->button) {
	case 3:
		if (!gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (list),
				event->x, event->y, &path, NULL, NULL, NULL))
			return (FALSE);
		gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->store),
					 &list->priv->iter, path);
		gtk_tree_path_free (path);
		camera = gtkam_list_get_camera_from_iter (list,
							  &list->priv->iter);
		gp_camera_get_abilities (camera->camera, &a);

		/* What operations does the camera support? */
		w = gtk_item_factory_get_widget (list->priv->factory,
						 "/Delete");
		gtk_widget_set_sensitive (w,
			(a.file_operations & GP_FILE_OPERATION_DELETE));

#ifdef HAVE_BONOBO
{
    Bonobo_ServerInfoList *l;
    guint i;
    GtkWidget *item, *c;
    CORBA_Environment ev;
    CameraFileInfo finfo;
    gchar *fo, *fi, *query;
    ViewAsData *d;
    GList *cl;

    w = gtk_item_factory_get_widget (list->priv->factory, "/View with...");
    c = gtk_item_factory_get_widget (list->priv->factory,
		    		     "/View with.../Built-in viewer");
    cl = gtk_container_get_children (GTK_CONTAINER (w));
    for (i = 0; i < g_list_length (cl); i++) {
	    if (g_list_nth_data (cl, i) != c)
		    gtk_container_remove (GTK_CONTAINER (w),
				    GTK_WIDGET (g_list_nth_data (cl, i)));
    }

    fo = gtkam_list_get_folder_from_iter (list, &list->priv->iter);
    fi = gtkam_list_get_name_from_iter (list, &list->priv->iter);
    gp_camera_file_get_info (camera->camera, fo, fi, &finfo, NULL);
    g_free (fo);
    g_free (fi);

    if (finfo.file.fields & GP_FILE_INFO_TYPE) {
	CORBA_exception_init (&ev);
	query = g_strconcat ("repo_ids.has ('IDL:Bonobo/Control:1.0') AND "
			     "bonobo:supported_mime_types.has ('", 
			     finfo.file.type, "')", NULL);
	l = bonobo_activation_query (query, NULL, &ev);
	g_free (query);
	CORBA_exception_free (&ev);

	if (l && l->_length) {
		for (i = 0; i < l->_length; i++) {
			Bonobo_ServerInfo *si = &l->_buffer[i];
			const gchar *n;

			if (!si->iid)
				continue;

			n = bonobo_server_info_prop_lookup (si, "name", NULL);
			if (!n)
				n = si->iid;
			item = gtk_menu_item_new_with_label (n);
			gtk_widget_show (item);
			gtk_menu_shell_append (GTK_MENU_SHELL (w), item);

			d = g_new0 (ViewAsData, 1);
			d->list = list;
			d->camera = camera;
			g_object_ref (G_OBJECT (d->camera));
			d->folder = gtkam_list_get_folder_from_iter (list,
							&list->priv->iter);
			d->file = gtkam_list_get_name_from_iter (list, 
							&list->priv->iter);
			d->iid = g_strdup (si->iid);
			g_signal_connect (G_OBJECT (item), "activate",
				G_CALLBACK (on_view_as_activate), d);
			g_signal_connect (G_OBJECT (item), "destroy",
				G_CALLBACK (on_menu_item_destroy), d);
		}
	}
	if (l)
		CORBA_free (l);
    }
}
#endif

		gtk_item_factory_popup (list->priv->factory, event->x_root,
				event->y_root, event->button, event->time);

		return (TRUE);
	default:
		return (FALSE);
	}
}