NHDT->ANH, nethack->anethack, nhdat->anhdat
[aNetHack.git] / win / gnome / gnopts.c
blob33ed82538bad04cc69d90291179fcca65363a47f
1 /* aNetHack 0.0.1 gnopts.c $ANH-Date: 1432512805 2015/05/25 00:13:25 $ $ANH-Branch: master $:$ANH-Revision: 1.9 $ */
2 /* Copyright (C) 1998 by Erik Andersen <andersee@debian.org> */
3 /* aNetHack may be freely redistributed. See license for details. */
5 #include "gnopts.h"
6 #include "gnglyph.h"
7 #include "gnmain.h"
8 #include "gnmap.h"
9 #include <gnome.h>
10 #include <ctype.h>
11 #include "hack.h"
13 static gint tileset;
14 static GtkWidget *clist;
15 const char *tilesets[] = { "Traditional (16x16)", "Big (32x32)", 0 };
17 static void
18 opt_sel_key_hit(GtkWidget *widget, GdkEventKey *event, gpointer data)
20 int i;
21 for (i = 0; tilesets[i] != 0; ++i) {
22 if (tilesets[i][0] == toupper(event->keyval)) {
23 tileset = i;
24 gtk_clist_select_row(GTK_CLIST(clist), i, 0);
29 static void
30 opt_sel_row_selected(GtkCList *cList, int row, int col, GdkEvent *event)
32 tileset = row;
35 void
36 ghack_settings_dialog()
38 int i;
39 static GtkWidget *dialog;
40 static GtkWidget *swin;
41 static GtkWidget *frame1;
43 dialog = gnome_dialog_new(_("GnomeHack Settings"), GNOME_STOCK_BUTTON_OK,
44 GNOME_STOCK_BUTTON_CANCEL, NULL);
45 gnome_dialog_close_hides(GNOME_DIALOG(dialog), FALSE);
46 gtk_signal_connect(GTK_OBJECT(dialog), "key_press_event",
47 GTK_SIGNAL_FUNC(opt_sel_key_hit), tilesets);
49 frame1 = gtk_frame_new(_("Choose one of the following tilesets:"));
50 gtk_object_set_data(GTK_OBJECT(dialog), "frame1", frame1);
51 gtk_widget_show(frame1);
52 gtk_container_border_width(GTK_CONTAINER(frame1), 3);
54 swin = gtk_scrolled_window_new(NULL, NULL);
55 clist = gtk_clist_new(2);
56 gtk_clist_column_titles_hide(GTK_CLIST(clist));
57 gtk_widget_set_usize(GTK_WIDGET(clist), 100, 180);
58 gtk_container_add(GTK_CONTAINER(swin), clist);
59 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),
60 GTK_POLICY_AUTOMATIC,
61 GTK_POLICY_AUTOMATIC);
63 gtk_signal_connect(GTK_OBJECT(clist), "select_row",
64 GTK_SIGNAL_FUNC(opt_sel_row_selected), NULL);
66 gtk_container_add(GTK_CONTAINER(frame1), swin);
67 gtk_box_pack_start_defaults(GTK_BOX(GNOME_DIALOG(dialog)->vbox), frame1);
69 /* Add the tilesets into the list here... */
70 for (i = 0; tilesets[i]; i++) {
71 gchar accelBuf[BUFSZ];
72 const char *text[3] = { accelBuf, tilesets[i], NULL };
73 sprintf(accelBuf, "%c ", tolower(tilesets[i][0]));
74 gtk_clist_insert(GTK_CLIST(clist), i, (char **) text);
77 gtk_clist_columns_autosize(GTK_CLIST(clist));
78 gtk_widget_show_all(swin);
80 /* Center the dialog over over parent */
81 gnome_dialog_set_default(GNOME_DIALOG(dialog), 0);
82 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
83 gnome_dialog_set_parent(GNOME_DIALOG(dialog),
84 GTK_WINDOW(ghack_get_main_window()));
86 /* Run the dialog -- returning whichever button was pressed */
87 i = gnome_dialog_run(GNOME_DIALOG(dialog));
88 gnome_dialog_close(GNOME_DIALOG(dialog));
90 /* They hit Quit or error */
91 if (i != 0) {
92 return;
94 switch (tileset) {
95 case 0:
96 /* They selected traditional */
97 ghack_free_glyphs();
98 if (ghack_init_glyphs(HACKDIR "/x11tiles"))
99 g_error("ERROR: Could not initialize glyphs.\n");
100 ghack_reinit_map_window();
101 break;
102 case 1:
103 ghack_free_glyphs();
104 if (ghack_init_glyphs(HACKDIR "/t32-1024.xpm"))
105 g_error("ERROR: Could not initialize glyphs.\n");
106 ghack_reinit_map_window();
108 /* They selected big */
109 break;
110 default:
111 /* This shouldn't happen */
112 g_warning("This shouldn't happen\n");