X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=blobdiff_plain;f=src%2Flogwindow.c;h=14f41b4d22b5c15f0e05c27f26fa98de129b60fc;hp=8a678d918a3f7d3342a261d4dda50ac5ecd1ce0b;hb=324129463b17052472ce473df3e253bee6476837;hpb=9c47109d3aa65663b0c95d454dadca43ce0ba7f4 diff --git a/src/logwindow.c b/src/logwindow.c index 8a678d91..14f41b4d 100644 --- a/src/logwindow.c +++ b/src/logwindow.c @@ -22,6 +22,8 @@ #include "logwindow.h" #include "misc.h" +#include "secure_save.h" +#include "ui_misc.h" #include "window.h" #include @@ -38,6 +40,11 @@ struct _LogWindow GdkColor colors[LOG_COUNT]; guint lines; + GtkWidget *regexp_box; + GtkWidget *bar; + GtkWidget *pause; + GtkWidget *wrap; + GtkWidget *debug_level; }; typedef struct _LogDef LogDef; @@ -70,7 +77,43 @@ static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, return FALSE; } -static LogWindow *log_window_create(void) + +static void log_window_pause_cb(GtkWidget *widget, gpointer data) +{ + options->log_window.paused = !options->log_window.paused; +} + +static void log_window_line_wrap_cb(GtkWidget *widget, gpointer data) +{ + LogWindow *logwin = data; + + options->log_window.line_wrap = !options->log_window.line_wrap; + + if (options->log_window.line_wrap) + { + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(logwin->text), GTK_WRAP_WORD); + } + else + { + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(logwin->text), GTK_WRAP_NONE); + } +} + +static void log_window_regexp_cb(GtkWidget *text_entry, gpointer data) +{ + gchar *new_regexp; + + new_regexp = g_strdup(gtk_entry_get_text(GTK_ENTRY(text_entry))); + set_regexp(new_regexp); + g_free(new_regexp); +} + +static void log_window_debug_spin_cb(GtkSpinButton *debug_level, gpointer data) +{ + set_debug_level(gtk_spin_button_get_value(debug_level)); +} + +static LogWindow *log_window_create(LayoutWindow *lw) { LogWindow *logwin; GtkWidget *window; @@ -78,11 +121,21 @@ static LogWindow *log_window_create(void) GtkWidget *text; GtkTextBuffer *buffer; GtkTextIter iter; + GtkWidget *button; + GtkWidget *win_vbox; + GtkWidget *textbox; + GtkWidget *hbox; logwin = g_new0(LogWindow, 1); window = window_new(GTK_WINDOW_TOPLEVEL, "log", NULL, NULL, _("Log")); - gtk_widget_set_size_request(window, 520, 400); + win_vbox = gtk_vbox_new(FALSE, PREF_PAD_SPACE); + gtk_container_add(GTK_CONTAINER(window), win_vbox); + gtk_widget_show(win_vbox); + + gtk_widget_set_size_request(window, lw->options.log_window.w, lw->options.log_window.h); + gtk_window_move(GTK_WINDOW(window), lw->options.log_window.x, lw->options.log_window.y); + g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); g_signal_connect(G_OBJECT(window), "key_press_event", @@ -96,9 +149,31 @@ static LogWindow *log_window_create(void) GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwin), GTK_SHADOW_IN); - gtk_container_add(GTK_CONTAINER(window), scrolledwin); + + gtk_container_add(GTK_CONTAINER(win_vbox), scrolledwin); gtk_widget_show(scrolledwin); + hbox = pref_box_new(win_vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE); + + gtk_widget_show(hbox); + logwin->debug_level = pref_spin_new_mnemonic(hbox, _("Debug level:"), NULL, + 0, 4, 1, 1, get_debug_level(),G_CALLBACK(log_window_debug_spin_cb), + logwin->debug_level ); + + logwin->pause = pref_button_new(hbox, NULL, "Pause", FALSE, + G_CALLBACK(log_window_pause_cb), NULL); + + logwin->wrap = pref_button_new(hbox, NULL, "Line wrap", FALSE, + G_CALLBACK(log_window_line_wrap_cb), logwin); + + pref_label_new(hbox, "Filter regexp"); + + textbox = gtk_entry_new(); + gtk_container_add(GTK_CONTAINER(hbox), textbox); + gtk_widget_show(textbox); + g_signal_connect(G_OBJECT(textbox), "activate", + G_CALLBACK(log_window_regexp_cb), logwin); + text = gtk_text_view_new(); gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD); @@ -112,7 +187,8 @@ static LogWindow *log_window_create(void) logwin->scrolledwin = scrolledwin; logwin->text = text; logwin->lines = 1; - + logwin->regexp_box = textbox; + lw->log_window = logwin->window; return logwin; } @@ -168,6 +244,7 @@ static void log_window_show(LogWindow *logwin) GtkTextView *text = GTK_TEXT_VIEW(logwin->text); GtkTextBuffer *buffer; GtkTextMark *mark; + gchar *regexp; g_assert(logwin != NULL); @@ -178,15 +255,22 @@ static void log_window_show(LogWindow *logwin) gtk_window_present(GTK_WINDOW(logwin->window)); log_window_append("", LOG_NORMAL); // to flush memorized lines + + regexp = g_strdup(get_regexp()); + if (regexp != NULL) + { + gtk_entry_set_text(GTK_ENTRY(logwin->regexp_box), regexp); + g_free(regexp); + } } -void log_window_new(void) +void log_window_new(LayoutWindow *lw) { if (logwindow == NULL) { LogWindow *logwin; - logwin = log_window_create(); + logwin = log_window_create(lw); log_window_init(logwin); logwindow = logwin; } @@ -277,12 +361,15 @@ void log_window_append(const gchar *str, LogType type) log_window_insert_text(buffer, &iter, str, logdefs[type].tag); - if (gtk_widget_get_visible(GTK_WIDGET(text))) + if (!options->log_window.paused) { - GtkTextMark *mark; + if (gtk_widget_get_visible(GTK_WIDGET(text))) + { + GtkTextMark *mark; - mark = gtk_text_buffer_get_mark(buffer, "end"); - gtk_text_view_scroll_mark_onscreen(text, mark); + mark = gtk_text_buffer_get_mark(buffer, "end"); + gtk_text_view_scroll_mark_onscreen(text, mark); + } } logwindow->lines = gtk_text_buffer_get_line_count(buffer);