diff options
author | Ramiro Estrugo <ramiro@src.gnome.org> | 2000-10-05 16:58:58 +0000 |
---|---|---|
committer | Ramiro Estrugo <ramiro@src.gnome.org> | 2000-10-05 16:58:58 +0000 |
commit | 288b191aa27512bb702eed0977703f0109b75199 (patch) | |
tree | efc7697fe0d895109639a6a168a7772368f22d5b /src | |
parent | c22762019656651daf90ae15121d305765135104 (diff) | |
download | nautilus-288b191aa27512bb702eed0977703f0109b75199.tar.gz |
Make the profile report show up in a scrolling text window.
* src/nautilus-profiler.c: (scrolled_text_new),
(window_delete_event), (window_print_button_callback),
(window_save_button_callback), (dump_dialog_new),
(dump_dialog_show), (nautilus_profiler_bonobo_ui_report_callback):
Make the profile report show up in a scrolling text window.
Diffstat (limited to 'src')
-rw-r--r-- | src/nautilus-profiler.c | 182 |
1 files changed, 176 insertions, 6 deletions
diff --git a/src/nautilus-profiler.c b/src/nautilus-profiler.c index 56a8e67b5..3d44d5525 100644 --- a/src/nautilus-profiler.c +++ b/src/nautilus-profiler.c @@ -27,14 +27,22 @@ */ #include <config.h> -#include <gtk/gtkdialog.h> - -#include <glib.h> - #include "nautilus-profiler.h" #include <stdlib.h> #include <unistd.h> +#include <stdio.h> + +#include <glib.h> + +#include <gtk/gtkwindow.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtktext.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkvscrollbar.h> +#include <gtk/gtkhscrollbar.h> + +#include <libnautilus-extensions/nautilus-file-utilities.h> /* These are defined in eazel-tools/profiler/profiler.C */ extern void profile_on (void); @@ -125,16 +133,172 @@ widget_clear_busy_cursor (GtkWidget *widget) gdk_flush (); } +typedef struct +{ + GtkWidget *main_box; + GtkWidget *text; + GtkWidget *ver_scroll_bar; +} ScrolledText; + +static ScrolledText * +scrolled_text_new (void) +{ + ScrolledText *scrolled_text; + + scrolled_text = g_new (ScrolledText, 1); + + scrolled_text->main_box = gtk_hbox_new (FALSE, 0); + + scrolled_text->text = gtk_text_new (NULL, NULL); + + scrolled_text->ver_scroll_bar = gtk_vscrollbar_new (GTK_TEXT (scrolled_text->text)->vadj); + + gtk_box_pack_start (GTK_BOX (scrolled_text->main_box), scrolled_text->text, TRUE, TRUE, 0); + gtk_box_pack_end (GTK_BOX (scrolled_text->main_box), scrolled_text->ver_scroll_bar, FALSE, FALSE, 0); + + gtk_widget_show (scrolled_text->ver_scroll_bar); + gtk_widget_show (scrolled_text->text); + + return scrolled_text; +} + +typedef struct +{ + GtkWidget *window; + ScrolledText *scrolled_text; +} DumpDialog; + +static void +window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer callback_data) +{ + g_return_if_fail (GTK_IS_WINDOW (widget)); + + gtk_widget_hide (widget); +} + +static void +window_print_button_callback (GtkWidget *widget, gpointer callback_data) +{ + DumpDialog *dump_dialog = (DumpDialog *) callback_data; + + g_return_if_fail (dump_dialog != NULL); + + g_print ("print\n"); +} + +static void +window_save_button_callback (GtkWidget *widget, gpointer callback_data) +{ + DumpDialog *dump_dialog = (DumpDialog *) callback_data; + + g_return_if_fail (dump_dialog != NULL); + + g_print ("save\n"); +} + +static DumpDialog * +dump_dialog_new (const char *title) +{ + DumpDialog *dump_dialog; + GtkWidget *print_button; + GtkWidget *save_button; + GtkWidget *main_box; + GtkWidget *button_box; + + dump_dialog = g_new (DumpDialog, 1); + + dump_dialog->window = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_signal_connect (GTK_OBJECT (dump_dialog->window), + "delete_event", + GTK_SIGNAL_FUNC (window_delete_event), + dump_dialog->window); + + gtk_widget_set_usize (dump_dialog->window, 700, 700); + + main_box = gtk_vbox_new (FALSE, 0); + dump_dialog->scrolled_text = scrolled_text_new (); + gtk_text_set_editable (GTK_TEXT (dump_dialog->scrolled_text->text), FALSE); + + print_button = gtk_button_new_with_label ("Print"); + save_button = gtk_button_new_with_label ("Save"); + + gtk_signal_connect (GTK_OBJECT (print_button), + "clicked", + GTK_SIGNAL_FUNC (window_print_button_callback), + dump_dialog); + + gtk_signal_connect (GTK_OBJECT (save_button), + "clicked", + GTK_SIGNAL_FUNC (window_save_button_callback), + dump_dialog); + + gtk_container_add (GTK_CONTAINER (dump_dialog->window), main_box); + + button_box = gtk_hbox_new (FALSE, 4); + gtk_container_set_border_width (GTK_CONTAINER (button_box), 4); + + gtk_box_pack_start (GTK_BOX (main_box), dump_dialog->scrolled_text->main_box, TRUE, TRUE, 0); + gtk_box_pack_end (GTK_BOX (main_box), button_box, FALSE, FALSE, 0); + + gtk_box_pack_end (GTK_BOX (button_box), print_button, FALSE, FALSE, 0); + gtk_box_pack_end (GTK_BOX (button_box), save_button, FALSE, FALSE, 0); + + gtk_widget_show_all (dump_dialog->window); + + return dump_dialog; +} + +static void +dump_dialog_show (const char *dump_data, const char *title) +{ + static DumpDialog *dump_dialog = NULL; + GdkFont *font; + + g_return_if_fail (dump_data != NULL); + + if (dump_dialog == NULL) { + dump_dialog = dump_dialog_new ("Profile Dump"); + } + + gtk_text_forward_delete (GTK_TEXT (dump_dialog->scrolled_text->text), + gtk_text_get_length (GTK_TEXT (dump_dialog->scrolled_text->text))); + + font = gdk_font_load ("fixed"); + + gtk_text_freeze (GTK_TEXT (dump_dialog->scrolled_text->text)); + + gtk_text_insert (GTK_TEXT (dump_dialog->scrolled_text->text), + font, + NULL, + NULL, + dump_data, + strlen (dump_data)); + + gtk_text_thaw (GTK_TEXT (dump_dialog->scrolled_text->text)); + + gdk_font_unref (font); + + if (title != NULL) { + gtk_window_set_title (GTK_WINDOW (dump_dialog->window), title); + } + + gtk_widget_show (dump_dialog->window); +} + void nautilus_profiler_bonobo_ui_report_callback (BonoboUIHandler *ui_handler, gpointer user_data, const char *path) { char *dump_file_name; + char *uri; + + int dump_size = 0; + char *dump_contents = NULL; GtkWidget *window = NULL; - dump_file_name = g_strdup ("nautilus-profile-log-XXXXXX"); + dump_file_name = g_strdup ("/tmp/nautilus-profile-log-XXXXXX"); if (mktemp (dump_file_name) != dump_file_name) { g_free (dump_file_name); @@ -147,9 +311,15 @@ nautilus_profiler_bonobo_ui_report_callback (BonoboUIHandler *ui_handler, profile_dump (dump_file_name); - /* Do something interesting with the data */ + uri = g_strdup_printf ("file://%s", dump_file_name); + + if (nautilus_read_entire_file (uri, &dump_size, &dump_contents) == GNOME_VFS_OK) { + dump_dialog_show (dump_contents, uri); + } widget_clear_busy_cursor (window); + remove (dump_file_name); + g_free (dump_file_name); } |