Public feed #379702

Mine

public text v1 · immutable
Raw Edit
·published 2007-03-03 13:06 UTC
rendered paste body
? 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 <pthread.h>
@@ -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;