]> granicus.if.org Git - nethack/commitdiff
*** empty log message ***
authorjwalz <jwalz>
Sat, 5 Jan 2002 21:06:01 +0000 (21:06 +0000)
committerjwalz <jwalz>
Sat, 5 Jan 2002 21:06:01 +0000 (21:06 +0000)
win/gnome/gntext.c [new file with mode: 0644]

diff --git a/win/gnome/gntext.c b/win/gnome/gntext.c
new file mode 100644 (file)
index 0000000..ece5f77
--- /dev/null
@@ -0,0 +1,155 @@
+/*     SCCS Id: @(#)gntext.c   3.3     2000/07/16      */
+/* Copyright (C) 1998 by Erik Andersen <andersee@debian.org> */
+/* NetHack may be freely redistributed.  See license for details. */
+
+#include "gntext.h"
+#include "gnmain.h"
+#include <gnome.h>
+
+/* include the standard RIP window (win/X11/rip.xpm) */
+#include "gn_rip.h"
+
+/* dimensions of the pixmap */
+#define RIP_IMAGE_WIDTH 400
+#define RIP_IMAGE_HEIGHT 200
+
+/* dimensions and location of area where we can draw text on the pixmap */
+#define RIP_DRAW_WIDTH 84
+#define RIP_DRAW_HEIGHT 89
+#define RIP_DRAW_X 114
+#define RIP_DRAW_Y 69
+
+
+
+/* Text Window widgets */
+GtkWidget *RIP = NULL;
+GtkWidget *RIPlabel = NULL;
+GtkWidget *TW_window = NULL;
+GnomeLess *gless;
+
+static int showRIP = 0;
+
+
+
+
+void ghack_text_window_clear(GtkWidget *widget, gpointer data)
+{
+    g_assert (gless != NULL);
+    gtk_editable_delete_text (GTK_EDITABLE (gless->text), 0, 0);
+}
+
+void ghack_text_window_destroy()
+{
+}
+
+void ghack_text_window_display(GtkWidget *widget, boolean block,
+                              gpointer data)
+{
+    if(showRIP == 1) {
+       gtk_widget_show (GTK_WIDGET ( RIP));
+       gtk_window_set_title(GTK_WINDOW( TW_window), "Rest In Peace");
+    }
+   
+    if (block)
+       gnome_dialog_run(GNOME_DIALOG(TW_window));
+    else
+       gnome_dialog_run_and_close(GNOME_DIALOG(TW_window));
+    
+    if(showRIP == 1) {
+       showRIP = 0;
+       gtk_widget_hide (GTK_WIDGET ( RIP));
+       gtk_window_set_title(GTK_WINDOW(TW_window), "Text Window");
+    }
+}
+
+void ghack_text_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 (gless->text), NULL, NULL, NULL, text, -1);
+    gtk_text_insert (GTK_TEXT (gless->text), NULL, NULL, NULL, "\n", -1);
+}
+
+
+GtkWidget* ghack_init_text_window ( )
+{
+    GtkWidget *pixmap;
+    if(TW_window)
+        return(GTK_WIDGET(TW_window));
+    
+    TW_window = gnome_dialog_new("Text Window", GNOME_STOCK_BUTTON_OK, NULL);
+    gtk_window_set_default_size( GTK_WINDOW(TW_window), 500, 400);
+    gtk_window_set_policy(GTK_WINDOW(TW_window), TRUE, TRUE, FALSE);
+    gtk_window_set_title(GTK_WINDOW(TW_window), "Text Window");
+    
+    /* create GNOME pixmap object */
+    pixmap = gnome_pixmap_new_from_xpm_d (rip_xpm);
+    g_assert (pixmap != NULL);
+    gtk_widget_show (GTK_WIDGET (pixmap));
+
+    /* create label with our "death message", sized to fit into the
+    * tombstone */
+    RIPlabel = gtk_label_new ("RIP");
+    g_assert (RIPlabel != NULL);
+    /* gtk_label_set_justify is broken? */
+    gtk_label_set_justify (GTK_LABEL (RIPlabel), GTK_JUSTIFY_CENTER); 
+    gtk_label_set_line_wrap (GTK_LABEL (RIPlabel), TRUE);
+    gtk_widget_set_usize (RIPlabel, RIP_DRAW_WIDTH, RIP_DRAW_HEIGHT);
+    gtk_widget_show (RIPlabel);
+
+    /* create a fixed sized widget for the RIP pixmap */
+    RIP = gtk_fixed_new ();
+    g_assert (RIP != NULL);
+    gtk_widget_set_usize (RIP, RIP_IMAGE_WIDTH, RIP_IMAGE_HEIGHT);
+    gtk_fixed_put (GTK_FIXED (RIP), pixmap, 0, 0);
+    gtk_fixed_put (GTK_FIXED (RIP), RIPlabel, RIP_DRAW_X, RIP_DRAW_Y);
+    gtk_widget_show (RIP);
+    gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(TW_window)->vbox), RIP,
+                       TRUE, TRUE, 0);
+    
+    /* create a gnome Less widget for the text stuff */
+    gless = GNOME_LESS (gnome_less_new ());
+    g_assert (gless != NULL);
+    gtk_widget_show (GTK_WIDGET (gless));
+    gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(TW_window)->vbox), 
+           GTK_WIDGET (gless), TRUE, TRUE, 0);
+    
+    /* Hook up some signals */
+    gtk_signal_connect(GTK_OBJECT(TW_window), "ghack_putstr",
+                   GTK_SIGNAL_FUNC(ghack_text_window_put_string),
+                   NULL);
+
+    gtk_signal_connect(GTK_OBJECT(TW_window), "ghack_clear",
+                   GTK_SIGNAL_FUNC(ghack_text_window_clear),
+                   NULL);
+
+    gtk_signal_connect(GTK_OBJECT(TW_window), "ghack_display",
+                       GTK_SIGNAL_FUNC(ghack_text_window_display),
+                       NULL);
+
+    /* Center the dialog over over parent */
+    gnome_dialog_set_parent( GNOME_DIALOG (TW_window), 
+           GTK_WINDOW(ghack_get_main_window()) );
+
+    gtk_window_set_modal( GTK_WINDOW(TW_window), TRUE);
+    gtk_widget_show_all(TW_window);
+    gtk_widget_hide (GTK_WIDGET ( RIP));
+    gnome_dialog_close_hides (GNOME_DIALOG (TW_window), TRUE);
+
+    return GTK_WIDGET(TW_window);
+
+}
+
+
+void ghack_text_window_rip_string( const char* string)
+{
+    /* This is called to specify that the next message window will
+     * be a RIP window, which will include this text */
+
+    showRIP = 1;
+    gtk_label_set( GTK_LABEL( RIPlabel), string);
+}
+