openmohaa/code/gamespy/common/nitro/menu.h
2023-02-04 21:00:01 +01:00

65 lines
No EOL
1.8 KiB
C

#ifndef _MENU_H_
#define _MENU_H_
// various length defines
#define MAX_CHOICE_STRING_LEN 32
#define MAX_TOP_SCREEN_TEXT 32
#define MAX_CHOICES 10
#define MAX_LIST_STRINGS 16
#define MAX_LIST_STRING_LEN 32
#define MAX_KEYBOARD_TEXT_LEN 32
#define MAX_EXTRA_TEXT_STRINGS 10
#define MAX_EXTRA_TEXT_STRING_LEN 32
// options for screens
#define SCREEN_OPTION_ANIMATED 0x1
#define SCREEN_OPTION_KEYBOARD 0x2
#define SCREEN_OPTION_LIST 0x4
#define SCREEN_OPTION_EXTRAS_CENTERED 0x8
// options for screen choices
#define CHOICE_OPTION_NEEDS_LIST_SELECTION 0x1
#define CHOICE_OPTION_DISABLED 0x2
// a single choice on a screen
typedef struct MenuScreenChoice
{
const char * text;
int options;
} MenuScreenChoice;
// an instance of a screen
typedef struct MenuScreen
{
struct MenuScreenConfiguration * configuration;
char extraText[MAX_EXTRA_TEXT_STRINGS][MAX_EXTRA_TEXT_STRING_LEN + 1];
char list[MAX_LIST_STRINGS][MAX_LIST_STRING_LEN + 1];
int listSelection; // default -1, no selection
char keyboardText[MAX_KEYBOARD_TEXT_LEN + 1];
int numChoices;
} MenuScreen;
// the static configuration for a screen
typedef struct MenuScreenConfiguration
{
const char * topScreenText;
MenuScreenChoice choices[MAX_CHOICES];
void (* initFunc)(void);
void (* choseFunc)(const char * choice);
void (* thinkFunc)(void);
int options;
} MenuScreenConfiguration;
// call this to start showing a menu, pass in the initial screen to show
void StartMenuScreen(MenuScreenConfiguration * configuration);
// call this from any of the configuration callback funcs to set the next screen to show
void SetNextMenuScreen(MenuScreenConfiguration * configuration);
// call this to exit the menu
void ExitMenu(void);
// gets the current menu screen
MenuScreen * GetMenuScreen(void);
#endif