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