Blame ui/gcr-viewer-window.c

Packit Service f02b19
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit Service f02b19
/* gcr-viewer-window.c: Window for viewer
Packit Service f02b19
Packit Service f02b19
   Copyright (C) 2011 Collabora Ltd.
Packit Service f02b19
Packit Service f02b19
   The Gnome Keyring Library is free software; you can redistribute it and/or
Packit Service f02b19
   modify it under the terms of the GNU Library General Public License as
Packit Service f02b19
   published by the Free Software Foundation; either version 2 of the
Packit Service f02b19
   License, or (at your option) any later version.
Packit Service f02b19
Packit Service f02b19
   The Gnome Keyring Library is distributed in the hope that it will be useful,
Packit Service f02b19
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service f02b19
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service f02b19
   Library General Public License for more details.
Packit Service f02b19
Packit Service f02b19
   You should have received a copy of the GNU Library General Public
Packit Service f02b19
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit Service f02b19
   see <http://www.gnu.org/licenses/>.
Packit Service f02b19
Packit Service f02b19
   Author: Stef Walter <stefw@collabora.co.uk>
Packit Service f02b19
*/
Packit Service f02b19
Packit Service f02b19
#include "config.h"
Packit Service f02b19
Packit Service f02b19
#include "gcr-viewer-window.h"
Packit Service f02b19
Packit Service f02b19
#include <glib/gi18n-lib.h>
Packit Service f02b19
#include <gtk/gtk.h>
Packit Service f02b19
Packit Service f02b19
#include <locale.h>
Packit Service f02b19
#include <string.h>
Packit Service f02b19
Packit Service f02b19
struct _GcrViewerWindowPrivate {
Packit Service f02b19
	GcrViewerWidget *viewer;
Packit Service f02b19
	GcrImportButton *import;
Packit Service f02b19
};
Packit Service f02b19
Packit Service f02b19
G_DEFINE_TYPE (GcrViewerWindow, gcr_viewer_window, GTK_TYPE_WINDOW);
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
on_viewer_renderer_added (GcrViewerWidget *viewer,
Packit Service f02b19
                          GcrRenderer *renderer,
Packit Service f02b19
                          GcrParsed *parsed,
Packit Service f02b19
                          gpointer user_data)
Packit Service f02b19
{
Packit Service f02b19
	GcrViewerWindow *self = GCR_VIEWER_WINDOW (user_data);
Packit Service f02b19
	gcr_import_button_add_parsed (self->pv->import, parsed);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
gcr_viewer_window_init (GcrViewerWindow *self)
Packit Service f02b19
{
Packit Service f02b19
	self->pv = G_TYPE_INSTANCE_GET_PRIVATE (self, GCR_TYPE_VIEWER_WINDOW,
Packit Service f02b19
	                                        GcrViewerWindowPrivate);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
on_import_button_importing (GcrImportButton *button,
Packit Service f02b19
                            GcrImporter *importer,
Packit Service f02b19
                            gpointer user_data)
Packit Service f02b19
{
Packit Service f02b19
	GcrViewerWindow *self = GCR_VIEWER_WINDOW (user_data);
Packit Service f02b19
	gcr_viewer_widget_clear_error (self->pv->viewer);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
on_import_button_imported (GcrImportButton *button,
Packit Service f02b19
                           GcrImporter *importer,
Packit Service f02b19
                           GError *error,
Packit Service f02b19
                           gpointer user_data)
Packit Service f02b19
{
Packit Service f02b19
	GcrViewerWindow *self = GCR_VIEWER_WINDOW (user_data);
Packit Service f02b19
Packit Service f02b19
	if (error == NULL) {
Packit Service f02b19
		g_object_set (button, "label", _("Imported"), NULL);
Packit Service f02b19
Packit Service f02b19
	} else {
Packit Service f02b19
		if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
Packit Service f02b19
			gcr_viewer_widget_show_error (self->pv->viewer, _("Import failed"), error);
Packit Service f02b19
	}
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
on_close_clicked (GtkButton *button,
Packit Service f02b19
                  gpointer user_data)
Packit Service f02b19
{
Packit Service f02b19
	GcrViewerWindow *self = GCR_VIEWER_WINDOW (user_data);
Packit Service f02b19
	gtk_widget_destroy (GTK_WIDGET (self));
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
gcr_viewer_window_constructed (GObject *obj)
Packit Service f02b19
{
Packit Service f02b19
	GcrViewerWindow *self = GCR_VIEWER_WINDOW (obj);
Packit Service f02b19
	GtkWidget *bbox;
Packit Service f02b19
	GtkWidget *box;
Packit Service f02b19
	GtkWidget *button;
Packit Service f02b19
Packit Service f02b19
	G_OBJECT_CLASS (gcr_viewer_window_parent_class)->constructed (obj);
Packit Service f02b19
Packit Service f02b19
	bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
Packit Service f02b19
	gtk_box_set_spacing (GTK_BOX (bbox), 12);
Packit Service f02b19
	gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
Packit Service f02b19
	gtk_widget_show (bbox);
Packit Service f02b19
Packit Service f02b19
	self->pv->import = gcr_import_button_new (_("Import"));
Packit Service f02b19
	g_signal_connect_object (self->pv->import, "importing",
Packit Service f02b19
	                         G_CALLBACK (on_import_button_importing),
Packit Service f02b19
	                         self, 0);
Packit Service f02b19
	g_signal_connect_object (self->pv->import, "imported",
Packit Service f02b19
	                         G_CALLBACK (on_import_button_imported),
Packit Service f02b19
	                         self, 0);
Packit Service f02b19
	gtk_widget_show (GTK_WIDGET (self->pv->import));
Packit Service f02b19
Packit Service f02b19
	button = gtk_button_new_with_mnemonic (_("_Close"));
Packit Service f02b19
	g_signal_connect_object  (button, "clicked",
Packit Service f02b19
	                          G_CALLBACK (on_close_clicked),
Packit Service f02b19
	                          self, 0);
Packit Service f02b19
	gtk_widget_show (button);
Packit Service f02b19
Packit Service f02b19
	gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, TRUE, 0);
Packit Service f02b19
	gtk_box_pack_start (GTK_BOX (bbox), GTK_WIDGET (self->pv->import), FALSE, TRUE, 0);
Packit Service f02b19
Packit Service f02b19
	gtk_widget_set_halign (bbox, 0.5);
Packit Service f02b19
	gtk_widget_set_valign (bbox, 0.5);
Packit Service f02b19
#if GTK_CHECK_VERSION (3, 12, 0)
Packit Service f02b19
	gtk_widget_set_margin_end (bbox, 12);
Packit Service f02b19
#else
Packit Service f02b19
	gtk_widget_set_margin_right (bbox, 12);
Packit Service f02b19
#endif
Packit Service f02b19
Packit Service f02b19
	self->pv->viewer = gcr_viewer_widget_new ();
Packit Service f02b19
	g_object_bind_property (self->pv->viewer, "display-name",
Packit Service f02b19
	                        self, "title", G_BINDING_SYNC_CREATE);
Packit Service f02b19
	g_signal_connect_object (self->pv->viewer, "added",
Packit Service f02b19
	                         G_CALLBACK (on_viewer_renderer_added),
Packit Service f02b19
	                         self, 0);
Packit Service f02b19
	gtk_widget_show (GTK_WIDGET (self->pv->viewer));
Packit Service f02b19
Packit Service f02b19
	box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
Packit Service f02b19
	gtk_widget_show (box);
Packit Service f02b19
Packit Service f02b19
	gtk_box_pack_start (GTK_BOX (box), GTK_WIDGET (self->pv->viewer), TRUE, TRUE, 0);
Packit Service f02b19
	gtk_box_pack_start (GTK_BOX (box), bbox, FALSE, FALSE, 6);
Packit Service f02b19
Packit Service f02b19
	gtk_container_add (GTK_CONTAINER (self), box);
Packit Service f02b19
Packit Service f02b19
	gtk_window_set_default_size (GTK_WINDOW (self), 250, 400);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
gcr_viewer_window_class_init (GcrViewerWindowClass *klass)
Packit Service f02b19
{
Packit Service f02b19
	GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
Packit Service f02b19
Packit Service f02b19
	gobject_class->constructed = gcr_viewer_window_constructed;
Packit Service f02b19
Packit Service f02b19
	g_type_class_add_private (klass, sizeof (GcrViewerWindow));
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
/**
Packit Service f02b19
 * gcr_viewer_window_new:
Packit Service f02b19
 *
Packit Service f02b19
 * Create a new viewer window.
Packit Service f02b19
 *
Packit Service f02b19
 * Returns: (transfer full) (type GcrUi.ViewerWindow): a new viewer window
Packit Service f02b19
 */
Packit Service f02b19
GtkWindow *
Packit Service f02b19
gcr_viewer_window_new (void)
Packit Service f02b19
{
Packit Service f02b19
	return g_object_new (GCR_TYPE_VIEWER_WINDOW, NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
/**
Packit Service f02b19
 * gcr_viewer_window_load:
Packit Service f02b19
 * @self: a viewer window
Packit Service f02b19
 * @file: file to load
Packit Service f02b19
 *
Packit Service f02b19
 * Load a file into a viewer window. It may not appear immediately.
Packit Service f02b19
 */
Packit Service f02b19
void
Packit Service f02b19
gcr_viewer_window_load (GcrViewerWindow *self,
Packit Service f02b19
                        GFile *file)
Packit Service f02b19
{
Packit Service f02b19
	g_return_if_fail (GCR_IS_VIEWER_WINDOW (self));
Packit Service f02b19
	g_return_if_fail (G_IS_FILE (file));
Packit Service f02b19
Packit Service f02b19
	return gcr_viewer_widget_load_file (self->pv->viewer, file);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
/**
Packit Service f02b19
 * gcr_viewer_window_get_viewer:
Packit Service f02b19
 * @self: a viewer window
Packit Service f02b19
 *
Packit Service f02b19
 * Get the actual viewer showing information in the window.
Packit Service f02b19
 *
Packit Service f02b19
 * Returns: the viewer
Packit Service f02b19
 */
Packit Service f02b19
GcrViewer *
Packit Service f02b19
gcr_viewer_window_get_viewer (GcrViewerWindow *self)
Packit Service f02b19
{
Packit Service f02b19
	g_return_val_if_fail (GCR_IS_VIEWER_WINDOW (self), NULL);
Packit Service f02b19
	return gcr_viewer_widget_get_viewer (self->pv->viewer);
Packit Service f02b19
}