Added prompt menu.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4377 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2013-05-31 01:19:26 +00:00
parent d60d64c640
commit b2d34e6470
2 changed files with 67 additions and 0 deletions

View file

@ -573,6 +573,72 @@ void M_Help_Key (int key)
}
//=============================================================================
/* Various callback-based prompts */
typedef struct
{
menu_t m;
void (*callback)(void *, int);
void *ctx;
menubutton_t *b_yes;
menubutton_t *b_no;
menubutton_t *b_cancel;
} promptmenu_t;
static qboolean M_Menu_Prompt_Button (union menuoption_s *b,struct menu_s *gm, int key)
{
int action;
promptmenu_t *m = (promptmenu_t*)gm;
if (key != K_ENTER && key != K_KP_ENTER && key != K_MOUSE1)
return true;
if (b == (menuoption_t*)m->b_yes)
action = 0;
else if (b == (menuoption_t*)m->b_no)
action = 1;
else //if (b == (menuoption_t*)m->b_cancel)
action = -1;
if (m->callback)
m->callback(m->ctx, action);
m->callback = NULL;
M_RemoveMenu(&m->m);
return true;
}
static void M_Menu_Prompt_Cancel (struct menu_s *gm)
{
promptmenu_t *m = (promptmenu_t*)gm;
if (m->callback)
m->callback(m->ctx, -1);
m->callback = NULL;
}
void M_Menu_Prompt (void (*callback)(void *, int), void *ctx, char *m1, char *m2, char *m3, char *optionyes, char *optionno, char *optioncancel)
{
promptmenu_t *m;
key_dest = key_menu;
m_state = m_complex;
m = (promptmenu_t*)M_CreateMenuInfront(sizeof(*m) - sizeof(m->m));
m->callback = callback;
m->ctx = ctx;
m->m.remove = M_Menu_Prompt_Cancel;
MC_AddWhiteText(&m->m, 64, 84, m1, false);
MC_AddWhiteText(&m->m, 64, 92, m2, false);
MC_AddWhiteText(&m->m, 64, 100, m3, false);
m->b_yes = MC_AddCommand(&m->m, 64, 116, optionyes, M_Menu_Prompt_Button);
m->b_no = MC_AddCommand(&m->m, 144,116, optionno, M_Menu_Prompt_Button);
m->b_cancel = MC_AddCommand(&m->m, 224,116, optioncancel, M_Menu_Prompt_Button);
m->m.selecteditem = (menuoption_t *)m->b_cancel;
MC_AddBox (&m->m, 56, 76, 25, 5);
}
//=============================================================================
/* QUIT MENU */

View file

@ -111,6 +111,7 @@ void M_ToggleMenu_f (void);
mpic_t *M_CachePic (char *path);
void M_DrawTextBox (int x, int y, int width, int lines);
void M_Menu_Quit_f (void);
void M_Menu_Prompt (void (*callback)(void *, int), void *ctx, char *m1, char *m2, char *m3, char *optionyes, char *optionno, char *optioncancel);
struct menu_s;