aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw27@cam.ac.uk>2008-10-02 21:30:52 +0100
committerThomas White <taw27@cam.ac.uk>2008-10-02 21:30:52 +0100
commita0be9639f60f43c81e919fc2c1ce9b5480bf4522 (patch)
tree21069abd558c5b3eb23cdd04e6d62c3b8b675a0c
parentb5ae83c814640ab5659103f8cdb6d080d70fada6 (diff)
Add a new tab for messages
-rw-r--r--src/displaywindow.c49
-rw-r--r--src/displaywindow.h2
2 files changed, 51 insertions, 0 deletions
diff --git a/src/displaywindow.c b/src/displaywindow.c
index fe97f73..ecd946b 100644
--- a/src/displaywindow.c
+++ b/src/displaywindow.c
@@ -561,6 +561,32 @@ static void displaywindow_switch_page(GtkNotebook *notebook, GtkNotebookPage *pa
}
}
+static void displaywindow_scrolltoend(DisplayWindow *dw) {
+
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dw->messages));
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+ gtk_text_iter_set_line_offset(&iter, 0);
+ gtk_text_buffer_move_mark(buffer, dw->messages_mark, &iter);
+ gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(dw->messages), dw->messages_mark, 0, TRUE, 1.0, 0.0);
+
+}
+
+static void displaywindow_message(DisplayWindow *dw, const char *text) {
+
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dw->messages));
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, text, -1, "default", NULL);
+
+ displaywindow_scrolltoend(dw);
+
+}
+
DisplayWindow *displaywindow_open(ControlContext *ctx) {
const char *filename;
@@ -609,6 +635,28 @@ DisplayWindow *displaywindow_open(ControlContext *ctx) {
notebook = gtk_notebook_new();
gtk_box_pack_end(GTK_BOX(dw->bigvbox), notebook, TRUE, TRUE, 0);
+ GtkWidget *messages_scroll;
+ GdkColor colour;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ dw->messages = gtk_text_view_new();
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(dw->messages), GTK_WRAP_NONE);
+ messages_scroll = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(messages_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+ gtk_container_add(GTK_CONTAINER(messages_scroll), GTK_WIDGET(dw->messages));
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(messages_scroll), GTK_SHADOW_IN);
+ gdk_color_parse("white", &colour);
+ gtk_widget_modify_bg(dw->messages, GTK_STATE_NORMAL, &colour);
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dw->messages));
+ gtk_text_buffer_create_tag(buffer, "default", "left_margin", 3, "right_margin", 3, "font", "Mono", NULL);
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(dw->messages), FALSE);
+ gtk_text_buffer_get_end_iter(buffer, &iter);
+ dw->messages_mark = gtk_text_buffer_create_mark(buffer, NULL, &iter, FALSE);
+ GTK_WIDGET_UNSET_FLAGS(dw->messages, GTK_CAN_FOCUS);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), messages_scroll, gtk_label_new("Messages"));
+ displaywindow_message(dw, "DTR version "PACKAGE_VERSION", (c) 2007-2008 Thomas White and contributors\n\n");
+
/* GL stuff */
glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE);
if ( glconfig == NULL ) {
@@ -651,6 +699,7 @@ DisplayWindow *displaywindow_open(ControlContext *ctx) {
gtk_window_set_default_size(GTK_WINDOW(dw->window), 840, 800);
gtk_widget_show_all(dw->window);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 1);
return dw;
diff --git a/src/displaywindow.h b/src/displaywindow.h
index 052e7d3..a69e807 100644
--- a/src/displaywindow.h
+++ b/src/displaywindow.h
@@ -41,6 +41,8 @@ typedef struct dw_struct {
GtkWidget *bigvbox;
GtkWidget *drawing_area;
GtkWidget *savecache_window;
+ GtkWidget *messages;
+ GtkTextMark *messages_mark;
/* Low-level OpenGL stuff */
GLuint gl_list_id; /* Display list for "everything else" */