File: gnmesg.c

package info (click to toggle)
glhack 1.2-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,748 kB
  • sloc: ansic: 208,571; cpp: 13,139; yacc: 2,005; makefile: 1,152; lex: 377; sh: 121; awk: 89; sed: 11
file content (102 lines) | stat: -rw-r--r-- 2,875 bytes parent folder | download | duplicates (23)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*	SCCS Id: @(#)gnmesg.c	3.4	2000/07/16	*/
/* Copyright (C) 1998 by Erik Andersen <andersee@debian.org> */
/* NetHack may be freely redistributed.  See license for details. */

#include "gnmesg.h"
#include "gnsignal.h"

/* Pick an arbitrary number of chars such as 80 col X 40 rows text = 3200 chars */
#define nCharsBeforeDeletingStuff	3200

/* Message Window widgets */
GtkWidget *MW_table;
GtkWidget *MW_text;
GtkWidget *MW_scrollbar;


void ghack_message_window_clear(GtkWidget *widget, gpointer data)
{
    /* Seems nethack calls this after every move -- we don't want
     * to really clear the window at all though.  Ignore the request */
    gint len;

    len = gtk_text_get_length(GTK_TEXT(MW_text));
    
    if(len < nCharsBeforeDeletingStuff)
        return;
    
    gtk_text_freeze(GTK_TEXT(MW_text));
    gtk_text_set_point(GTK_TEXT(MW_text), 0);
    gtk_text_forward_delete(GTK_TEXT(MW_text), len-((guint)(nCharsBeforeDeletingStuff*0.5)));
    gtk_text_set_point(GTK_TEXT(MW_text), (guint)(nCharsBeforeDeletingStuff*0.5));
    gtk_text_thaw(GTK_TEXT(MW_text));
}

void ghack_message_window_destroy( GtkWidget *win, gpointer data)
{

}

void ghack_message_window_display(GtkWidget *widget, boolean block,
                                 gpointer data)
{

}

void ghack_message_window_put_string(GtkWidget *widget, int attr,
                                     const char* text, gpointer data)
{

    if(text == NULL)
        return;
    
    /* Don't bother with attributes yet */
    gtk_text_insert(GTK_TEXT(MW_text), NULL, NULL, NULL, text, -1);
    gtk_text_insert(GTK_TEXT(MW_text), NULL, NULL, NULL, "\n", -1);
}

void ghack_message_window_use_RIP(int how)
{

}

void ghack_message_window_scroll(int dx, int dy)
{

}

GtkWidget* ghack_init_message_window(void)
{

    MW_table = gtk_table_new(2, 1, FALSE);
    gtk_table_set_row_spacing(GTK_TABLE(MW_table), 0, 2);

    MW_text = gtk_text_new(NULL, NULL);
    gtk_text_set_editable(GTK_TEXT(MW_text), FALSE);
    gtk_text_set_word_wrap(GTK_TEXT(MW_text), TRUE);
    gtk_table_attach(GTK_TABLE(MW_table), MW_text, 0, 1, 0, 1,
                     (GTK_EXPAND | GTK_FILL),
                     (GTK_EXPAND | GTK_FILL),
                     0, 0);

    MW_scrollbar = gtk_vscrollbar_new(GTK_TEXT(MW_text)->vadj);
    gtk_table_attach(GTK_TABLE(MW_table), MW_scrollbar, 1, 2, 0, 1,
                     GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
    
    gtk_signal_connect(GTK_OBJECT(MW_table), "ghack_putstr",
		    GTK_SIGNAL_FUNC(ghack_message_window_put_string),
		    NULL);

    gtk_signal_connect(GTK_OBJECT(MW_table), "ghack_clear",
		    GTK_SIGNAL_FUNC(ghack_message_window_clear),
		    NULL);
    
    gtk_signal_connect(GTK_OBJECT(MW_table), "gnome_delay_output",
	                GTK_SIGNAL_FUNC(ghack_delay), NULL);

    gtk_widget_show_all(MW_table);

    return GTK_WIDGET(MW_table);
}