/* this file is part of evince, a gnome document viewer
*
* Copyright (C) 2004 Red Hat, Inc.
- * Copyright (C) 2004 Anders Carlsson <andersca@gnome.org>
+ * Copyright (C) 2004, 2005 Anders Carlsson <andersca@gnome.org>
*
* Authors:
* Jonathan Blandford <jrb@alum.mit.edu>
#include "ev-sidebar-thumbnails.h"
#include "ev-document-thumbnails.h"
#include "ev-document-misc.h"
+#include "ev-window.h"
#include "ev-utils.h"
#define THUMBNAIL_WIDTH 75
NUM_COLUMNS
};
-static GtkVBoxClass *parent_class;
-
G_DEFINE_TYPE (EvSidebarThumbnails, ev_sidebar_thumbnails, GTK_TYPE_VBOX);
#define EV_SIDEBAR_THUMBNAILS_GET_PRIVATE(object) \
priv->idle_id = 0;
}
- GTK_OBJECT_CLASS (parent_class)->destroy (object);
+ GTK_OBJECT_CLASS (ev_sidebar_thumbnails_parent_class)->destroy (object);
}
static void
g_object_class = G_OBJECT_CLASS (ev_sidebar_thumbnails_class);
gtk_object_class = GTK_OBJECT_CLASS (ev_sidebar_thumbnails_class);
- parent_class = g_type_class_peek_parent (ev_sidebar_thumbnails_class);
-
gtk_object_class->destroy = ev_sidebar_thumbnails_destroy;
g_type_class_add_private (g_object_class, sizeof (EvSidebarThumbnailsPrivate));
}
}
+static void
+ev_sidebar_tree_selection_changed (GtkTreeSelection *selection,
+ EvSidebarThumbnails *ev_sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv;
+ GtkWidget *window;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ int page;
+
+ priv = ev_sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (ev_sidebar_thumbnails);
+
+ if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
+ return;
+
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->list_store),
+ &iter);
+
+ page = gtk_tree_path_get_indices (path)[0] + 1;
+
+ gtk_tree_path_free (path);
+
+ window = gtk_widget_get_ancestor (GTK_WIDGET (ev_sidebar_thumbnails),
+ EV_TYPE_WINDOW);
+ if (window && ev_document_get_page (priv->document) != page) {
+ ev_window_open_page (EV_WINDOW (window), page);
+ }
+}
+
static void
ev_sidebar_thumbnails_init (EvSidebarThumbnails *ev_sidebar_thumbnails)
{
GtkWidget *swindow;
EvSidebarThumbnailsPrivate *priv;
GtkCellRenderer *renderer;
+ GtkTreeSelection *selection;
priv = ev_sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (ev_sidebar_thumbnails);
-
+
priv->list_store = gtk_list_store_new (NUM_COLUMNS, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN);
priv->tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (priv->list_store));
-
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (ev_sidebar_tree_selection_changed), ev_sidebar_thumbnails);
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->tree_view), FALSE);
renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF,
"xpad", 2,
return TRUE;
}
+void
+ev_sidebar_thumbnails_select_page (EvSidebarThumbnails *sidebar,
+ int page)
+{
+ GtkTreePath *path;
+ GtkTreeSelection *selection;
+
+ /* if the EvSidebar's document can't provide thumbnails */
+ if (sidebar->priv->document == NULL)
+ return;
+
+ path = gtk_tree_path_new_from_indices (page - 1, -1);
+ selection = gtk_tree_view_get_selection
+ (GTK_TREE_VIEW (sidebar->priv->tree_view));
+
+ if (path) {
+ gtk_tree_selection_select_path (selection, path);
+ gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (sidebar->priv->tree_view),
+ path, NULL, FALSE, 0.0, 0.0);
+ gtk_tree_path_free (path);
+ }
+}
+
+
void
ev_sidebar_thumbnails_set_document (EvSidebarThumbnails *sidebar_thumbnails,
EvDocument *document)
/* We get the dimensions of the first doc so that we can make a blank
* icon. */
ev_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (priv->document),
- 0, THUMBNAIL_WIDTH, &width, &height);
+ 1, THUMBNAIL_WIDTH, &width, &height);
loading_icon = ev_document_misc_get_thumbnail_frame (width, height, NULL);
- for (i = 0; i < n_pages; i++) {
- page = g_strdup_printf ("<i>%d</i>", i + 1);
+ for (i = 1; i <= n_pages; i++) {
+ page = g_strdup_printf ("<i>%d</i>", i);
gtk_list_store_append (priv->list_store, &iter);
gtk_list_store_set (priv->list_store, &iter,
COLUMN_PAGE_STRING, page,
g_free (page);
}
+ g_object_unref (loading_icon);
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->list_store),
&(priv->current_page_iter));
priv->current_page = 0;