]> icculus.org git repositories - btb/d2x.git/blob - main/newmenu.h
use the orientation parameter of g3_draw_bitmap
[btb/d2x.git] / main / newmenu.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 /*
15  *
16  * Routines for menus.
17  *
18  */
19
20
21 #ifndef _NEWMENU_H
22 #define _NEWMENU_H
23
24 #define NM_TYPE_MENU        0   // A menu item... when enter is hit on this, newmenu_do returns this item number
25 #define NM_TYPE_INPUT       1   // An input box... fills the text field in, and you need to fill in text_len field.
26 #define NM_TYPE_CHECK       2   // A check box. Set and get its status by looking at flags field (1=on, 0=off)
27 #define NM_TYPE_RADIO       3   // Same as check box, but only 1 in a group can be set at a time. Set group fields.
28 #define NM_TYPE_TEXT        4   // A line of text that does nothing.
29 #define NM_TYPE_NUMBER      5   // A numeric entry counter.  Changes value from min_value to max_value;
30 #define NM_TYPE_INPUT_MENU  6   // A inputbox that you hit Enter to edit, when done, hit enter and menu leaves.
31 #define NM_TYPE_SLIDER      7   // A slider from min_value to max_value. Draws with text_len chars.
32
33 #define NM_MAX_TEXT_LEN     50
34
35 typedef struct newmenu_item {
36         int     type;           // What kind of item this is, see NM_TYPE_????? defines
37         int     value;          // For checkboxes and radio buttons, this is 1 if marked initially, else 0
38         int     min_value, max_value;   // For sliders and number bars.
39         int     group;          // What group this belongs to for radio buttons.
40         int     text_len;       // The maximum length of characters that can be entered by this inputboxes
41         char    *text;          // The text associated with this item.
42         // The rest of these are used internally by by the menu system, so don't set 'em!!
43         short   x, y;
44         short   w, h;
45         short   right_offset;
46         ubyte   redraw;
47         char    saved_text[NM_MAX_TEXT_LEN+1];
48 } newmenu_item;
49
50 // Pass an array of newmenu_items and it processes the menu. It will
51 // return a -1 if Esc is pressed, otherwise, it returns the index of
52 // the item that was current when Enter was was selected.
53 // The subfunction function gets called constantly, so you can dynamically
54 // change the text of an item.  Just pass NULL if you don't want this.
55 // Title draws big, Subtitle draw medium sized.  You can pass NULL for
56 // either/both of these if you don't want them.
57 extern int newmenu_do(char * title, char * subtitle, int nitems, newmenu_item *item, void (*subfunction)(int nitems, newmenu_item *items, int *last_key, int citem));
58
59 // Same as above, only you can pass through what item is initially selected.
60 extern int newmenu_do1(char *title, char *subtitle, int nitems, newmenu_item *item, void (*subfunction)(int nitems, newmenu_item *items, int *last_key, int citem), int citem);
61
62 // Same as above, only you can pass through what background bitmap to use.
63 extern int newmenu_do2(char *title, char *subtitle, int nitems, newmenu_item *item, void (*subfunction)(int nitems, newmenu_item *items, int *last_key, int citem), int citem, char *filename);
64
65 // Same as above, only you can pass through the width & height
66 extern int newmenu_do3(char *title, char *subtitle, int nitems, newmenu_item *item, void (*subfunction)(int nitems, newmenu_item *items, int *last_key, int citem), int citem, char *filename, int width, int height);
67
68
69 // Sample Code:
70 /*
71 {
72         int mmn;
73         newmenu_item mm[8];
74         char xtext[21];
75
76         strcpy( xtext, "John" );
77
78         mm[0].type=NM_TYPE_MENU; mm[0].text="Play game";
79         mm[1].type=NM_TYPE_INPUT; mm[1].text=xtext; mm[1].text_len=20;
80         mm[2].type=NM_TYPE_CHECK; mm[2].value=0; mm[2].text="check box";
81         mm[3].type=NM_TYPE_TEXT; mm[3].text="-pickone-";
82         mm[4].type=NM_TYPE_RADIO; mm[4].value=1; mm[4].group=0; mm[4].text="Radio #1";
83         mm[5].type=NM_TYPE_RADIO; mm[5].value=1; mm[5].group=0; mm[5].text="Radio #2";
84         mm[6].type=NM_TYPE_RADIO; mm[6].value=1; mm[6].group=0; mm[6].text="Radio #3";
85         mm[7].type=NM_TYPE_PERCENT; mm[7].value=50; mm[7].text="Volume";
86
87         mmn = newmenu_do("Descent", "Sample Menu", 8, mm, NULL );
88         mprintf( 0, "Menu returned: %d\n", mmn );
89 }
90
91 */
92
93 // This function pops up a messagebox and returns which choice was selected...
94 // Example:
95 // nm_messagebox( "Title", "Subtitle", 2, "Ok", "Cancel", "There are %d objects", nobjects );
96 // Returns 0 through nchoices-1.
97 int nm_messagebox(char *title, int nchoices, ...);
98 // Same as above, but you can pass a function
99 int nm_messagebox1(char *title, void (*subfunction)(int nitems, newmenu_item *items, int *last_key, int citem), int nchoices, ...);
100
101 void nm_draw_background(int x1, int y1, int x2, int y2);
102 void nm_restore_background(int x, int y, int w, int h);
103
104 // Returns 0 if no file selected, else filename is filled with selected file.
105 int newmenu_get_filename(char *title, char *filespec, char *filename, int allow_abort_flag);
106
107 // in menu.c
108 extern int Max_linear_depth_objects;
109
110 extern const char *Newmenu_allowed_chars;
111
112 // Example listbox callback function...
113 // int lb_callback( int * citem, int *nitems, char * items[], int *keypress )
114 // {
115 //      int i;
116 //
117 //      if ( *keypress = KEY_CTRLED+KEY_D )     {
118 //              if ( *nitems > 1 )      {
119 //                      unlink( items[*citem] );                // Delete the file
120 //                      for (i=*citem; i<*nitems-1; i++ )       {
121 //                              items[i] = items[i+1];
122 //                      }
123 //                      *nitems = *nitems - 1;
124 //                      free( items[*nitems] );
125 //                      items[*nitems] = NULL;
126 //                      return 1;       // redraw;
127 //              }
128 //                      *keypress = 0;
129 //      }
130 //      return 0;
131 // }
132
133 extern int newmenu_listbox(char *title, int nitems, char *items[], int allow_abort_flag, int (*listbox_callback)(int *citem, int *nitems, char *items[], int *keypress));
134 extern int newmenu_listbox1(char *title, int nitems, char *items[], int allow_abort_flag, int default_item, int (*listbox_callback)(int *citem, int *nitems, char *items[], int *keypress));
135
136 extern int newmenu_filelist(char *title, char *filespace, char *filename);
137
138 //added on 10/14/98 by Victor Rachels to attempt a fixedwidth font messagebox
139 int nm_messagebox_fixedfont(char *title, int nchoices, ...);
140 //end this section addition
141
142 //should be called whenever the palette changes
143 extern void nm_remap_background(void);
144
145 extern int newmenu_inkey(void);
146 extern int newmenu_getch(void);
147
148 #if defined(MACINTOSH) || defined(WINDOWS) || defined(SDL_INPUT)
149 # define NEWMENU_MOUSE
150 #endif
151
152 #ifdef NEWMENU_MOUSE
153 # if defined(MACINTOSH)
154 #  define newmenu_show_cursor() show_cursor()
155 #  define newmenu_hide_cursor() hide_cursor()
156 # elif defined(WINDOWS)
157 #  define newmenu_show_cursor() ShowCursorW()
158 #  define newmenu_hide_cursor() HideCursorW()
159 # elif defined(SDL_INPUT)
160 #  include <SDL.h>
161 #  define newmenu_show_cursor() SDL_ShowCursor(SDL_ENABLE)
162 #  define newmenu_hide_cursor() SDL_ShowCursor(SDL_DISABLE)
163 # else
164 #  define newmenu_show_cursor()
165 #  define newmenu_hide_cursor()
166 # endif
167 #else
168 # define newmenu_show_cursor()
169 # define newmenu_hide_cursor()
170 #endif
171
172 #endif /* _NEWMENU_H */