summaryrefslogtreecommitdiffstats
path: root/client/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/log.c')
-rw-r--r--client/log.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/client/log.c b/client/log.c
new file mode 100644
index 0000000..86b6e4a
--- /dev/null
+++ b/client/log.c
@@ -0,0 +1,71 @@
+#include "mainwin.h"
+#include "support.h"
+
+#include "log.h"
+
+static GtkListStore *log_list_store = NULL;
+enum { COLUMN_TIME, COLUMN_TYPE, COLUMN_SOURCE, COLUMN_DESTINATION, COLUMN_DECISION, N_COLUMNS };
+
+void log_widget_init() {
+ GtkTreeView *tv = GTK_TREE_VIEW(lookup_widget(get_main_window(), "log_view"));
+
+ log_list_store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+ gtk_tree_view_set_model(tv, GTK_TREE_MODEL(log_list_store));
+
+ gtk_tree_view_append_column(tv, gtk_tree_view_column_new_with_attributes("Time", gtk_cell_renderer_text_new(), "text", COLUMN_TIME, NULL));
+ gtk_tree_view_append_column(tv, gtk_tree_view_column_new_with_attributes("Type", gtk_cell_renderer_text_new(), "text", COLUMN_TYPE, NULL));
+ gtk_tree_view_append_column(tv, gtk_tree_view_column_new_with_attributes("Source", gtk_cell_renderer_text_new(), "text", COLUMN_SOURCE, NULL));
+ gtk_tree_view_append_column(tv, gtk_tree_view_column_new_with_attributes("Destination", gtk_cell_renderer_text_new(), "text", COLUMN_DESTINATION, NULL));
+ gtk_tree_view_append_column(tv, gtk_tree_view_column_new_with_attributes("Decision", gtk_cell_renderer_text_new(), "text", COLUMN_DECISION, NULL));
+}
+
+
+void log_widget_append(conn_info_t *ci) {
+ gtk_list_store_append(log_list_store, &ci->iter);
+ gtk_list_store_set(log_list_store, &ci->iter,
+ COLUMN_TIME, ci->timestamp_string,
+ COLUMN_TYPE, ci->type_string,
+ COLUMN_SOURCE, ci->from_string,
+ COLUMN_DESTINATION, ci->to_string,
+ COLUMN_DECISION, "outstanding...",
+ -1);
+
+ log_widget_cut();
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(get_main_window(), "autoscroll_button")))) {
+ GtkTreeView *tv = GTK_TREE_VIEW(lookup_widget(get_main_window(), "log_view"));
+ GtkTreePath *path;
+
+ path = gtk_tree_model_get_path(gtk_tree_view_get_model(tv), &ci->iter);
+ gtk_tree_view_set_cursor(tv, path, NULL, FALSE);
+ gtk_tree_view_scroll_to_cell(tv, path, NULL, TRUE, .5, 0);
+ gtk_tree_path_free(path);
+ }
+}
+
+void log_widget_verdict(conn_info_t *ci, verdict_t v) {
+ gtk_list_store_set(log_list_store, &ci->iter,
+ COLUMN_DECISION, v == VERDICT_REJECT ? "REJECTED" : (v == VERDICT_DROP ? "DROPPPED" : "ACCEPTED"),
+ -1);
+}
+
+void log_widget_clear() {
+ gtk_list_store_clear(log_list_store);
+}
+
+
+void log_widget_cut() {
+ gfloat m = gtk_spin_button_get_value(GTK_SPIN_BUTTON(lookup_widget(get_main_window(), "log_spinbutton")));
+
+ if (m < 10)
+ m = 10;
+
+ while (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(log_list_store), NULL) > m) {
+ GtkTreeIter iter;
+ if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(log_list_store), &iter))
+ return;
+
+ gtk_list_store_remove(log_list_store, &iter);
+ }
+
+}