File: winGTK.h

package info (click to toggle)
slashem 0.0.7E7F3-2
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 23,552 kB
  • ctags: 22,410
  • sloc: ansic: 263,188; cpp: 7,180; yacc: 2,154; sh: 738; lex: 440; makefile: 154; awk: 97; sed: 11
file content (490 lines) | stat: -rw-r--r-- 15,501 bytes parent folder | download | duplicates (9)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
/*
  $Id: winGTK.h,v 1.54 2004/04/10 15:41:21 j_ali Exp $
 */

#ifndef WINGTK_H
#define WINGTK_H

#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>

#ifndef WIN32
#define WINGTK_X11		/* X11 libraries are available for our use */
#ifdef DEBUG
#define MONITOR_XRESOURCES	/* Debugging */
#endif
#endif

#define GTK_GRAPHICS	/* Needed when building an external interface */
#ifdef GTKHACK
#define GTK_PROXY
#endif

#ifdef WINGTK_X11
#include <gdk/gdkx.h>
#include <X11/Xlib.h>
#ifdef MONITOR_XRESOURCES
#include <X11/Xlibint.h>
#endif
#include <X11/extensions/XShm.h>
#endif

#include "hack.h"
#include "wintty.h"
#include "nhxdr.h"
#include "proxycom.h"

#define WINGTK_MENU_IMAGES	/* Pretty images (tiles) in first column */
#define WINGTK_RADAR		/* Radar map window */

#define NHW_NONE 0		/* Unallocated window type.  Must be	*/
				/* different from any other NHW_* type. */

#define PROXY_CLNT_LOGGED 0x80000000UL	/* Unallocated proxy clnt flag. */

#define	NH_PAD			5

#define NH_SESSION_RESIZABLE	1    /* Allow the user to resize window */
#define NH_SESSION_USER_POS	2    /* Window position from user */
#define NH_SESSION_USER_SIZE	4    /* Window size from user */
#define NH_SESSION_PLACED	8    /* Initial window placement has occured */

struct gtkhackrc;
typedef struct _NhGtkProgressWindow NhGtkProgressWindow;

extern GtkWidget *nh_gtk_window_dialog(boolean is_modal);

extern void nh_gtk_focus_set_master(GtkWindow *w, GtkSignalFunc func,
  gpointer data, gboolean use_focus_keys);
extern void nh_gtk_focus_set_slave_for(GtkWindow *w, GtkWindow *slave_for);

extern GtkWidget *nh_session_window_new(const char *name);
extern unsigned long nh_session_window_flags(const char *name);
extern int nh_session_set_geometry(const char *name, int x, int y,
  int width, int height);
extern int nh_session_save(struct gtkhackrc *rc);

extern int nh_read_gtkhackrc(void);
extern void nh_write_gtkhackrc(void);
extern void nh_gtkhackrc_store(struct gtkhackrc *rc, const char *fmt, ...);

extern void nh_game_preferences(GtkWidget *w, gpointer data);

extern GtkWidget *nh_gtk_new(GtkWidget *w, GtkWidget *parent, gchar *lbl);
extern GtkWidget *nh_gtk_new_and_add(GtkWidget *w, GtkWidget *parent,
  gchar *lbl);
extern GtkWidget *nh_gtk_new_and_pack(GtkWidget *w, GtkWidget *parent,
  gchar *lbl, gboolean a1, gboolean a2, guint a3);
extern GtkWidget *nh_gtk_new_and_attach(GtkWidget *w, GtkWidget *parent,
  gchar *lbl, guint a1, guint a2, guint a3, guint a4);
extern GtkWidget *nh_gtk_new_and_attach2(GtkWidget *w, GtkWidget *parent,
  gchar *lbl, guint a1, guint a2, guint a3, guint a4,
  GtkAttachOptions xoptions, GtkAttachOptions yoptions,
  guint xpadding, guint ypadding);

#define		N_NH_COLORS	(CLR_MAX + 3)
extern GdkColor  nh_color[N_NH_COLORS];

enum {
    MAP_DARK_GREEN = CLR_MAX,
    MAP_BLACK,
    MAP_WHITE
};

extern GtkWidget *main_window;

#define	NH_BUFSIZ		4096
#define NH_TEXT_REMEMBER	4096

enum xshm_map_mode {
    XSHM_MAP_NONE,
    XSHM_MAP_IMAGE,
    XSHM_MAP_PIXMAP,
    XSHM_MAP_PIXBUF
};

extern struct window_ext_procs GTK_ext_procs;

extern void win_GTK_init(void);
extern void GTK_init_nhwindows(char ***capvp);
extern void GTK_init_gtk(int *argc, char **argv);
extern int GTK_ext_init_nhwindows(int *, char **, char ***);
extern char *GTK_ext_askname(void);
extern int GTK_ext_player_selection(int *, int *, int *, int *);
extern int nh_set_help_font(gchar *name);
#ifdef GTKHACK
extern int nh_help_save(struct gtkhackrc *rc);
#endif
extern void GTK_ext_display_file(int fh);
extern void GTK_ext_add_menu(winid, int, int, CHAR_P, CHAR_P, int,
  const char *, BOOLEAN_P);
extern int GTK_ext_select_menu(winid, int, struct proxy_mi **);
extern void GTK_ext_print_glyph(winid id, int x, int y, int glyph);
extern void GTK_ext_print_glyph_layered(winid id, int nl,
  struct proxy_glyph_layer *layers);
extern char GTK_ext_yn_function(const char *, const char *, CHAR_P, int *);
extern int GTK_ext_outrip(winid, char *);
extern char *GTK_getline(const char *query, boolean cancelable);
extern char *GTK_ext_getlin(const char *query);
extern void GTK_get_nh_event(void);
extern void GTK_exit_nhwindows(const char *);
extern void GTK_suspend_nhwindows(void);
extern void GTK_resume_nhwindows(void);
extern winid GTK_create_nhwindow(int);
extern void GTK_ext_clear_nhwindow(winid, int, int, int);
extern void GTK_display_nhwindow(winid, BOOLEAN_P);
extern void GTK_destroy_nhwindow(winid);
extern void GTK_curs(winid, int, int);
extern void GTK_putstr(winid, int, const char *);
extern void GTK_start_menu(winid);
extern void GTK_end_menu(winid, const char *);
extern void GTK_update_inventory(void);
extern void GTK_mark_synch(void);
extern void GTK_wait_synch(void);
#ifdef CLIPPING
extern void GTK_cliparound(int, int);
#endif
extern int GTK_nhgetch(void);
extern int GTK_nh_poskey(int *, int *, int *);
extern void GTK_nhbell(void);
extern int GTK_doprev_message(void);
extern void GTK_extcmd_set(int cmd);
extern int GTK_get_ext_cmd(void);
extern void GTK_number_pad(int);
extern void GTK_delay_output(void);
extern void GTK_start_screen(void);
extern void GTK_end_screen(void);
extern void GTK_raw_print(const char *);
extern void GTK_raw_print_bold(const char *);
extern void GTK_ext_preference_update(const char *, const char *);
#ifdef GTKHACK
extern void GTK_ext_send_config_file(int);
#endif

extern GdkPixmap *GTK_glyph_to_gdkpixmap(int);

extern GtkWidget *nh_map_new(GtkWidget *);
extern void nh_map_destroy(void);
extern void nh_map_clear(int, int, int);
extern void nh_map_check_visibility(void);
extern void nh_map_pos(int *, int *, int *);
extern void nh_map_click(int);
extern void nh_map_flush(void);
extern void nh_map_color_changed(boolean);
extern void nh_map_hilite_pet_changed(boolean);
extern int nh_set_map_visual(int);
extern int nh_set_map_font(gchar *name);
extern gchar *nh_get_map_font(void);
extern int nh_get_map_visual(void);
extern int nh_check_map_visual(int);

extern GtkWidget *GTK_preferences_new(void);

extern int main_hook(int *watch);
extern void quit_hook(void);
extern gint GTK_default_key_press(GtkWidget *widget, GdkEventKey *event,
  gpointer data);
extern gint GTK_default_focus_in(GtkWidget *widget, GdkEventFocus *event,
  gpointer data);

extern GtkWidget *nh_radar_new(void);
extern boolean nh_radar_get_use(void);
extern void nh_radar_set_use(boolean use);
extern void nh_radar_update(void);

extern GtkWidget *nh_message_new(void);
extern void nh_message_destroy(void);
extern void nh_message_putstr(const char *);

extern GtkWidget *nh_status_new(void);
extern boolean nh_status_in_trouble(void);
extern char *nh_status_last_displayed(char *quan);
extern void GTK_ext_status(int, int, const char **);

extern int nh_keysym(GdkEventKey *ev);
extern int nh_dir_keysym(GdkEventKey *ev);

extern void nh_option_new(void);
extern void nh_option_lock(boolean);
extern int nh_option_cache_sync(void);
extern void nh_option_cache_set(char *option, const char *value);
extern void nh_option_cache_set_bool(char *option, boolean value);
extern void nh_option_cache_set_addr(char *option, char **addr);
extern void nh_option_cache_set_bool_addr(char *option, boolean *addr);
extern void nh_option_cache_set_callback(char *, void (*)(char *));
extern void nh_option_cache_set_bool_callback(char *, void (*)(boolean));
extern char *nh_option_cache_get(char *option);
extern boolean nh_option_cache_get_bool(char *option);

#ifdef GTK_PROXY
extern struct proxycb_get_glyph_mapping_res *
    nh_proxy_cache_get_glyph_mapping(GtkWidget *progress_window);
extern char *nh_proxy_cache_dlbh_fmd5sum(const char *name);
extern void nh_proxy_cache_set_dir(const char *dir);
extern int nh_proxy_cache_save(struct gtkhackrc *rc);
extern char *nh_proxy_cache_file(const char *class, const char *name);
extern void nh_proxy_cache_mkdir(const char *class, const char *name);
extern char *nh_proxy_game_cache_file(const char *name);
extern NhExtIO *GTK_io_open(const char *filename, unsigned int flags);
extern int GTK_io_close(NhExtIO *io);
#endif

extern int nh_dlbh_fopen(const char *class, const char *name, const char *mode);
extern int nh_dlbh_fclose(int fh);
extern char *nh_dlbh_fgets(char *buf, int len, int fh);
extern int nh_dlbh_fread(char *buf, int size, int quan, int fh);
extern int nh_dlbh_fseek(int fh, long pos, int whence);
extern int nh_dlbh_ftell(int fh);

extern int nh_tile_height();
extern int nh_tile_3dheight();

extern void nh_position_popup_dialog(GtkWidget *w);
/*
 * topten.c
 */
extern int create_toptenwin();

struct cached_options {
    boolean num_pad;
    boolean use_color;
    boolean hilite_pet;
    boolean perm_invent;
} copts;

struct menu {
    GtkCList *clist;
    const char *prompt;
    struct _NHMenuItem *nhMenuItem;
    int alloc_menuitem;
    int n_menuitem;
    int c_menuitem;
};

struct menu_info_t {
    struct menu	curr_menu;		/* Menu being displayed. */
    struct menu	new_menu;		/* New menu being built. */
    /*
     * cancelled may take the following values:
     *	0	Menu window is blocking on user input
     *	1	Menu window is being torn down
     *	-1	Menu window is non-blocking
     */
    int cancelled;
    int n_select;
    int selmode;
    int keysym;
    int valid_widgets;
    long count;				/* Pending count */
#ifdef WINGTK_MENU_IMAGES
    int	 pixmaps;			/* Set if any pixmaps set in clist */
#endif
};

#ifdef md5_INCLUDED
struct text_info_t {
    md5_state_t md5_state;
    GtkTextBuffer *buffer;
};
#endif

#define NHWF_DISPLAYED		1

typedef struct _NHWindow{
    int type;
    unsigned flags;

    guint hid;
    GtkWidget *w;
    GtkWidget *hbox, *hbox2, *hbox3;
    GtkWidget *vbox;
    GtkWidget *clist;
    GtkWidget *scrolled, *scrolled2;

    GtkWidget *frame;

    GtkAdjustment *adj, *adj2;

    int	n_button;
    GtkWidget *button[20];

    union {
	struct menu_info_t *Menu_info;	/* menu window info */
	struct text_info_t *Text_info;	/* text window info */
    } Win_info;

} NHWindow;

/* Defines to use for the window information union. */
#define menu_information   Win_info.Menu_info
#define text_information   Win_info.Text_info

#ifdef md5_INCLUDED
/* This linked list describes non-blocking text windows which may have no
 * corresponding NetHack window (ie., the game has called destroy_nhwindow).
 */
extern struct nbtw {
    GtkWidget *w;
    md5_byte_t digest[16];		/* MD5 checksum of window contents */
    struct nbtw *next;
} *non_blocking_text_windows;
#endif

typedef struct _TileTab{
    char *ident;
    char *file;
#ifdef GTK_PROXY
    char *mapfile;
#endif
    int tilemap_width, tilemap_height;
    int unit_width, unit_height;

    int ofsetx_3d;
    int ofsety_3d;

    int transparent:1;
    int spread:1;

    void *data;
} TileTab;
extern TileTab tileTab[];
extern int no_tileTab;
extern int stone_tile;

#ifdef GTK_PROXY
#undef NO_GLYPH
extern int no_glyph;
#define NO_GLYPH no_glyph
#endif

extern GtkWidget *xshm_map_init(enum xshm_map_mode, int width, int height);
extern void xshm_map_button_handler(GtkSignalFunc func, gpointer data);
extern void xshm_map_flush();
extern void xshm_map_cliparound(int x, int y);
extern void xshm_map_destroy();
extern void xshm_map_clear();
extern void xshm_map_tile_draw(int dst_x, int dst_y);
extern void xshm_map_draw(GdkRectangle *rect);
extern void xshm_map_draw_image(GdkImage *src, int src_x, int src_y,
  int dest_x, int dest_y, int width, int height);
extern void xshm_map_draw_drawable(GdkDrawable *src, int src_x, int src_y,
  int dest_x, int dest_y, int width, int height);
extern GtkAdjustment *xshm_map_get_hadjustment(void);
extern GtkAdjustment *xshm_map_get_vadjustment(void);
extern void x_tile_init_add_stages(TileTab *t, NhGtkProgressWindow *w);
extern enum xshm_map_mode x_tile_init(TileTab *t, NhGtkProgressWindow *w);
extern void x_tile_tmp_clear();
extern int x_tile_render_to_drawable(GdkDrawable *drawable, GdkGC *gc,
  int tile, int src_x, int src_y, int dest_x, int dest_y,
  int width, int height);
extern void x_tile_draw_rectangle(int dstx, int dsty, GdkColor *c);
extern void x_tile_draw_tile(int tile, int dstx, int dsty);
extern void x_tile_draw_tmp(int dstx, int dsty);
extern void x_tile_tmp_draw_tile(int tile, int ofsx, int ofsy);
extern void x_tile_tmp_draw_rectangle(int ofsx, int ofsy, int c);
extern void x_tile_destroy();

/*
 * These must agree with the table in gtkextcmd.c -ALI
 */

#define EXT_CMD_ADJUST		0
#define EXT_CMD_BORROW		1
#define EXT_CMD_CHAT		2
#define EXT_CMD_CONDUCT		3
#define EXT_CMD_DIP		4
#define EXT_CMD_ENHANCE		5
#define EXT_CMD_EXPLORE		6
#define EXT_CMD_FORCE		7
#define EXT_CMD_INVOKE		8
#define EXT_CMD_JUMP		9
#define EXT_CMD_LOOT		10
#define EXT_CMD_MONSTER		11
#define EXT_CMD_NAME		12
#define EXT_CMD_OFFER		13
#define EXT_CMD_PRAY		14
#define EXT_CMD_QUIT		15
#define EXT_CMD_RIDE		16
#define EXT_CMD_RUB		17
#define EXT_CMD_SIT		18
#define EXT_CMD_TECHNIQUE	19
#define EXT_CMD_TURN		20
#define EXT_CMD_TWOWEAPON	21
#define EXT_CMD_UNTRAP		22
#define EXT_CMD_VERSION		23
#define EXT_CMD_WIPE		24
#define EXT_CMD_YOUPOLY		25

#define NO_EXT_CMD_MAPS		26

/* Current Map Mode */
extern int map_visual;

/* Current Map Clipping Squared distance */
extern int map_clip_dist2;

/* Current map cursor position */
extern int cursx, cursy;

/* Xshm map rasters. Warning: only one of these will be valid */
extern GdkImage *xshm_map_image;
extern GdkPixmap *xshm_map_pixmap;
extern GdkPixbuf *xshm_map_pixbuf;

#if defined(MONITOR_HEAP) && defined(INTERNAL_MALLOC)
#define XCreatePixmap(dpy, root, width, height, depth) \
	(monitor_heap_push(__FILE__, __LINE__), \
	monitor_heap_pop(__FILE__, __LINE__, \
	  (XCreatePixmap)(dpy, root, width, height, depth)))
#define gdk_pixmap_new(w, width, height, depth) \
	(GdkPixmap *)(monitor_heap_push(__FILE__, __LINE__), \
	monitor_heap_pop(__FILE__, __LINE__, \
	  (unsigned long)(gdk_pixmap_new)(w, width, height, depth)))
#define gdk_image_new(type, visual, width, height) \
	(GdkImage *)(monitor_heap_push(__FILE__, __LINE__), \
	monitor_heap_pop(__FILE__, __LINE__, \
	  (unsigned long)(gdk_image_new)(type, visual, width, height)))
#define gtk_window_new(type) \
	(GtkWidget *)(monitor_heap_push(__FILE__, __LINE__), \
	monitor_heap_pop(__FILE__, __LINE__, \
	  (unsigned long)(gtk_window_new)(type)))
#define gtk_hbox_new(homogeneous, spacing) \
	(GtkWidget *)(monitor_heap_push(__FILE__, __LINE__), \
	monitor_heap_pop(__FILE__, __LINE__, \
	  (unsigned long)(gtk_hbox_new)(homogeneous, spacing)))
#define gtk_vbox_new(homogeneous, spacing) \
	(GtkWidget *)(monitor_heap_push(__FILE__, __LINE__), \
	monitor_heap_pop(__FILE__, __LINE__, \
	  (unsigned long)(gtk_vbox_new)(homogeneous, spacing)))
#define gtk_clist_new(columns) \
	(GtkWidget *)(monitor_heap_push(__FILE__, __LINE__), \
	monitor_heap_pop(__FILE__, __LINE__, \
	  (unsigned long)(gtk_clist_new)(columns)))
#endif

#ifndef GTKHACK
#define nh_strncmpi	strncmpi
#endif

#ifdef GTKHACK
enum {
    COLUMN_NAME,
    COLUMN_SCHEME,
    COLUMN_ADDRESS,
    COLUMN_FLAGS,
    N_COLUMNS
};

extern GtkTreeRowReference *GTK_default_connection, *GTK_current_connection;
extern GtkListStore *GTK_connections;
extern GtkTextBuffer *GTK_nhext_log;

extern GtkTreeRowReference *GTK_connection_lookup(const char *name);
extern void GTK_connection_set_default(const char *name);
extern void GTK_connection_add(const char *name, const char *scheme,
  const char *address, unsigned long flags);
extern void gtkhack_enable_logging(gboolean setting);
extern GtkWidget *GTK_troubleshooting_new(void);
#endif

#endif	/* WINGTK_H */