diff console/gntdebug.c @ 13983:b7a99d54a5a9

[gaim-migrate @ 16552] Add a debug window. The scrolling doesn't seem to work properly. I will try to figure out what's wrong with it. Start the request-ui. The ui for request input, choice and action are mostly done. I am not handling multiline input requests yet. It's not too high in my todo-list either. committer: Tailor Script <tailor@pidgin.im>
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sun, 23 Jul 2006 20:38:07 +0000
parents
children a7b1d2ab9cb0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/console/gntdebug.c	Sun Jul 23 20:38:07 2006 +0000
@@ -0,0 +1,106 @@
+#include <gnt.h>
+#include <gntbox.h>
+#include <gnttextview.h>
+
+#include "gntdebug.h"
+#include "gntgaim.h"
+
+#include <stdio.h>
+#include <string.h>
+
+static struct
+{
+	GntWidget *window;
+	GntWidget *tview;
+} debug;
+
+static gboolean
+debug_window_kpress_cb(GntWidget *wid, const char *key, GntTextView *view)
+{
+	if (key[0] == 27)
+	{
+		/* XXX: This doesn't seem to always work */
+		if (strcmp(key+1, GNT_KEY_DOWN) == 0)
+			gnt_text_view_scroll(view, 1);
+		else if (strcmp(key+1, GNT_KEY_UP) == 0)
+			gnt_text_view_scroll(view, -1);
+		else if (strcmp(key+1, GNT_KEY_PGDOWN) == 0)
+			gnt_text_view_scroll(view, wid->priv.height - 2);
+		else if (strcmp(key+1, GNT_KEY_PGUP) == 0)
+			gnt_text_view_scroll(view, -(wid->priv.height - 2));
+		else
+			return FALSE;
+		return TRUE;
+	}
+	return FALSE;
+}
+
+static void
+gg_debug_print(GaimDebugLevel level, const char *category,
+		const char *args)
+{
+	if (debug.window == NULL)
+		fprintf(stderr, "%s: %s\n", category, args);
+	else
+	{
+		GntTextFormatFlags flag = GNT_TEXT_FLAG_NORMAL;
+
+		gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(debug.tview),
+				category, GNT_TEXT_FLAG_BOLD);
+		gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(debug.tview),
+				": ", GNT_TEXT_FLAG_BOLD);
+		
+		switch (level)
+		{
+			case GAIM_DEBUG_WARNING:
+				flag |= GNT_TEXT_FLAG_UNDERLINE;
+			case GAIM_DEBUG_ERROR:
+			case GAIM_DEBUG_FATAL:
+				flag |= GNT_TEXT_FLAG_BOLD;
+				break;
+			default:
+				break;
+		}
+		
+		gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(debug.tview), args, flag);
+		gnt_text_view_next_line(GNT_TEXT_VIEW(debug.tview));
+		gnt_text_view_scroll(GNT_TEXT_VIEW(debug.tview), 0);
+
+		g_signal_connect(G_OBJECT(debug.window), "key_pressed", G_CALLBACK(debug_window_kpress_cb), debug.tview);
+	}
+}
+
+static GaimDebugUiOps uiops = 
+{
+	gg_debug_print,
+};
+
+GaimDebugUiOps *gg_debug_get_ui_ops()
+{
+	return &uiops;
+}
+
+void gg_debug_window_show()
+{
+	if (debug.window == NULL)
+	{
+		debug.window = gnt_vbox_new(FALSE);
+		gnt_box_set_toplevel(GNT_BOX(debug.window), TRUE);
+		gnt_box_set_title(GNT_BOX(debug.window), _("Debug Window"));
+
+		debug.tview = gnt_text_view_new();
+		gnt_box_add_widget(GNT_BOX(debug.window), debug.tview);
+	}
+
+	gnt_widget_show(debug.window);
+}
+
+void gg_debug_init()
+{
+	gg_debug_window_show();
+}
+
+void gg_debug_uninit()
+{
+}
+