diff --git a/include/menu.h b/include/menu.h new file mode 100644 index 000000000..259bf5b31 --- /dev/null +++ b/include/menu.h @@ -0,0 +1,111 @@ +/* + menu.h + + menu subsystem + + Copyright (C) 2001 Joseph Carter + + Author: Joseph Carter + Date: 16 Apr 2001 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to: + + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA + + $Id$ +*/ + +#ifndef __MENU_H +#define __MENU_H + +typedef enum { + M_Static, + M_Menu, + M_Toggle, + M_Slide, + M_SelectStr, + M_SelectInt, + M_Command, + M_Engine, + M_Progs +} mitem_type; + + +typedef enum { + MHook_None, + MHook_Engine, + MHook_Progs +} mhook_type; + +typedef struct menuitem_s { + char *title; +// char *desc; // FIXME: Implement or remove? + + mitem_type type; + union mitem { + /* NOTHING */ // M_Static + struct menu_s *menu; // M_Menu + struct cvar_s *var; // M_Toggle + struct { + float min, max, step; + struct cvar_s *var; + } slide; // M_Slide + struct { + char **choices; + char **strings; + struct cvar_s *var; + } selectstr; // M_SelectStr + struct { + char **choices; + int *values; + struct cvar_s *var; + } selectint; // M_SelectInt + char *cmd; // M_Command + void (*engine)(void); // M_Engine + char *progs; // M_Progs + }; + + // engine/progs function hook for dynamic things, called at display + mhook_type hook; + union mhook { + void (*engine_hook)(struct menuitem_s *item); + char *progs_hook; + }; + + struct menuitem_s *prev; + struct menuitem_s *next; +} menuitem_t; + +typedef struct menu_s { + char *title; + + // for any of the screen is "reserved" for hooks + int lofs, rofs; // 0-319 scale + int tofs, bofs; // 0-199 scale + + // engine/progs function hook for menu title + mhook_type hook; + union mthook { + void (*engine_hool)(char *title); + char *progs_hook; + }; + + menuitem_t *items; +} menu_t; + +#endif // __MENU_H +