summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRamiro Estrugo <ramiro@src.gnome.org>2000-10-05 16:58:58 +0000
committerRamiro Estrugo <ramiro@src.gnome.org>2000-10-05 16:58:58 +0000
commit288b191aa27512bb702eed0977703f0109b75199 (patch)
treeefc7697fe0d895109639a6a168a7772368f22d5b /src
parentc22762019656651daf90ae15121d305765135104 (diff)
downloadnautilus-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.c182
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);
}