? src/doc_index.xpm Index: src/poppler_viewer.c =================================================================== RCS file: /pack/anoncvs/sylpheedclaws/plugins/pdf_viewer/src/Attic/poppler_viewer.c,v retrieving revision 1.1.2.25 diff -u -p -r1.1.2.25 poppler_viewer.c --- src/poppler_viewer.c 2007/03/03 06:58:32 1.1.2.25 +++ src/poppler_viewer.c 2007/03/03 13:05:50 @@ -58,6 +58,7 @@ #include "rotate_right.xpm" #include "rotate_left.xpm" #include "doc_info.xpm" +#include "doc_index.xpm" #ifdef USE_PTHREAD #include @@ -72,45 +73,47 @@ static gchar *msg = NULL; struct _PopplerViewer { - MimeViewer mimeviewer; - GtkWidget *vsep; - GtkWidget *vsep1; - GtkWidget *vbox; - GtkWidget *pdf_view; - GtkWidget *scrollwin; - GtkWidget *icon_type; - GdkPixmap *icon_pixmap; - GdkBitmap *icon_bitmap; - GtkWidget *doc_label; - GtkWidget *cur_page; + MimeViewer mimeviewer; + GtkWidget *vsep; + GtkWidget *vsep1; + GtkWidget *vbox; + GtkWidget *pdf_view; + GtkWidget *scrollwin; + GtkWidget *icon_type; + GdkPixmap *icon_pixmap; + GdkBitmap *icon_bitmap; + GtkWidget *doc_label; + GtkWidget *cur_page; /* begin GtkButtons */ - GtkWidget *first_page; - GtkWidget *last_page; - GtkWidget *prev_page; - GtkWidget *next_page; - GtkWidget *zoom_in; - GtkWidget *zoom_out; - GtkWidget *zoom_fit; - GtkWidget *zoom_width; - GtkWidget *rotate_left; - GtkWidget *rotate_right; - GtkWidget *doc_info; + GtkWidget *first_page; + GtkWidget *last_page; + GtkWidget *prev_page; + GtkWidget *next_page; + GtkWidget *zoom_in; + GtkWidget *zoom_out; + GtkWidget *zoom_fit; + GtkWidget *zoom_width; + GtkWidget *rotate_left; + GtkWidget *rotate_right; + GtkWidget *doc_info; + GtkWidget *doc_index; /* end GtkButtons */ - GtkTable *table_doc_info; - GtkWidget *hbox; - GtkTooltips *button_bar_tips; - PopplerDocument *pdf_doc; - PopplerPage *pdf_page; - gchar *target_filename; - gchar *filename; - gchar *fsname; - gchar *doc_info_text; - gint rotate; - double zoom; - double width; - double height; - MimeInfo *mimeinfo; - MimeInfo *to_load; + GtkTable *table_doc_info; + GtkWidget *hbox; + GtkTooltips *button_bar_tips; + PopplerDocument *pdf_doc; + PopplerPage *pdf_page; + PopplerIndexIter *pdf_index; + gchar *target_filename; + gchar *filename; + gchar *fsname; + gchar *doc_info_text; + gint rotate; + double zoom; + double width; + double height; + MimeInfo *mimeinfo; + MimeInfo *to_load; }; typedef enum { @@ -231,6 +234,42 @@ static const char * poppler_get_document return (gchar *) enum_value->value_name; } */ +static void poppler_get_document_index(PopplerIndexIter *index_iter) +{ + do + { + PopplerAction *action; + PopplerIndexIter *child; + + action = poppler_index_iter_get_action (index_iter); + g_print ("Action: %d\n", action->type); + g_print ("Named: %s\n", action->named.title); + g_print ("Goto Dest: %s\n", action->goto_dest.title); + g_print ("Goto Launch: %s\n", action->launch.title); + poppler_action_free (action); + child = poppler_index_iter_get_child (index_iter); + if (child) + poppler_get_document_index (child); + poppler_index_iter_free (child); + } + while (poppler_index_iter_next (index_iter)); +} +static void poppler_get_document_index_cb(GtkButton *button, PopplerViewer *viewer) +{ + poppler_get_document_index((PopplerIndexIter *) viewer->pdf_index); +} +static void poppler_check_document_index(PopplerViewer *viewer) +{ + viewer->pdf_index = poppler_index_iter_new(viewer->pdf_doc); + if (viewer->pdf_index) { + if(!GTK_WIDGET_IS_SENSITIVE(viewer->doc_index)) + gtk_widget_set_sensitive(viewer->doc_index, TRUE); + } + else { + gtk_widget_set_sensitive(viewer->doc_index, FALSE); + } +} + static char * poppler_get_document_format_data(GTime utime) { time_t time = (time_t) utime; @@ -421,6 +460,7 @@ static void poppler_show_controls(Popple gtk_widget_show(viewer->rotate_right); gtk_widget_show(viewer->rotate_left); gtk_widget_show(viewer->doc_info); + gtk_widget_show(viewer->doc_index); } else { gtk_widget_hide(viewer->first_page); gtk_widget_hide(viewer->cur_page); @@ -436,6 +476,7 @@ static void poppler_show_controls(Popple gtk_widget_hide(viewer->rotate_right); gtk_widget_hide(viewer->rotate_left); gtk_widget_hide(viewer->doc_info); + gtk_widget_hide(viewer->doc_index); } } @@ -447,9 +488,9 @@ static void poppler_pdf_view_update(Mime gchar *tmpfile = NULL; error = NULL; - debug_print("poppler_pdf_view_update\n"); if (reload_file) { - debug_print("\treload_file\n"); + + pb = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 1, 1); gdk_pixbuf_fill (pb, 0x00000000); gtk_image_set_from_pixbuf(GTK_IMAGE(viewer->pdf_view), pb); @@ -524,11 +565,12 @@ static void poppler_pdf_view_update(Mime poppler_document_get_n_pages(viewer->pdf_doc), poppler_document_get_n_pages(viewer->pdf_doc) > 1 ? "s":"") )); + + poppler_show_controls(viewer, TRUE); main_window_cursor_normal(mainwindow_get_mainwindow()); } if (viewer->pdf_doc == NULL) { - debug_print("viewer->pdf_doc is null\n"); strretchomp(error->message); stock_pixmap_gdk(viewer->hbox, @@ -543,6 +585,9 @@ static void poppler_pdf_view_update(Mime return; } + /* check for the index if exists */ + poppler_check_document_index((PopplerViewer *) viewer); + if(page_num > 0 && page_num <= poppler_document_get_n_pages(viewer->pdf_doc)) { gchar *page_str = g_strdup_printf("%d", page_num); @@ -654,7 +699,10 @@ static void poppler_clear_viewer(MimeVie PopplerViewer *viewer = (PopplerViewer *) _viewer; GtkAdjustment *vadj; GdkPixbuf *pb; - + + //if(viewer->pdf_index) + // poppler_index_iter_free(viewer->pdf_index); + debug_print("poppler_clear_viewer\n"); viewer->to_load = NULL; @@ -811,6 +859,9 @@ static MimeViewer *poppler_viewer_create gtk_widget_set_size_request(viewer->doc_info, -1, -1); button_set_pixmap(viewer->doc_info, doc_info_xpm); + viewer->doc_index = gtk_button_new(); + gtk_widget_set_size_request(viewer->doc_index, -1, -1); + button_set_pixmap(viewer->doc_index, doc_index_xpm); gtk_scrolled_window_set_policy( @@ -861,7 +912,8 @@ static MimeViewer *poppler_viewer_create gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->rotate_right, FALSE, FALSE, 1); gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->doc_info, FALSE, FALSE, 1); - + gtk_box_pack_start(GTK_BOX(viewer->hbox), viewer->doc_index, FALSE, FALSE, 1); + gtk_box_pack_start(GTK_BOX(viewer->vbox), viewer->hbox, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(viewer->vbox), viewer->scrollwin, TRUE, TRUE, 0); @@ -905,6 +957,8 @@ static MimeViewer *poppler_viewer_create gtk_widget_ref(GTK_WIDGET(viewer->rotate_left)); gtk_widget_show(GTK_WIDGET(viewer->doc_info)); gtk_widget_ref(GTK_WIDGET(viewer->doc_info)); + gtk_widget_show(GTK_WIDGET(viewer->doc_index)); + gtk_widget_ref(GTK_WIDGET(viewer->doc_index)); gtk_widget_show(GTK_WIDGET(viewer->doc_label)); gtk_widget_ref(GTK_WIDGET(viewer->doc_label)); gtk_widget_show(GTK_WIDGET(viewer->icon_type)); @@ -930,11 +984,6 @@ static MimeViewer *poppler_viewer_create NULL); gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), - viewer->next_page, - _("Next Page"), - NULL); - - gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->last_page, _("Last Page"), NULL); @@ -947,22 +996,27 @@ static MimeViewer *poppler_viewer_create viewer->zoom_out, _("Zoom Out"), NULL); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->zoom_fit, _("Fit Page"), NULL); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->zoom_width, _("Fit Page Width"), NULL); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->rotate_left, _("Rotate Left"), NULL); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->rotate_right, _("Rotate Right"), NULL); + gtk_tooltips_set_tip (GTK_TOOLTIPS (viewer->button_bar_tips), viewer->doc_info, _("Document Info"), @@ -1032,15 +1086,22 @@ static MimeViewer *poppler_viewer_create "clicked", G_CALLBACK(poppler_button_rotate_right_cb), (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->rotate_left), "clicked", G_CALLBACK(poppler_button_rotate_left_cb), (gpointer) viewer); + g_signal_connect (G_OBJECT(viewer->doc_info), "clicked", G_CALLBACK(poppler_button_document_info_cb), (gpointer) viewer); - + + g_signal_connect (G_OBJECT(viewer->doc_index), + "clicked", + G_CALLBACK(poppler_get_document_index_cb), + (gpointer) viewer); + viewer->target_filename = NULL; viewer->filename = NULL; viewer->fsname = NULL;