window port interface change - add mbehavior flags to start_menu()
Provide a way to communicate additional behaviors and/or appearances desired from NetHack window port menus. This is foundation work for changes to follow at a future date.
This commit is contained in:
@@ -368,7 +368,7 @@ void NetHackQtBind::qt_display_file(const char *filename, BOOLEAN_P must_exist)
|
||||
}
|
||||
}
|
||||
|
||||
void NetHackQtBind::qt_start_menu(winid wid)
|
||||
void NetHackQtBind::qt_start_menu(winid wid, unsigned long mbehavior)
|
||||
{
|
||||
NetHackQtWindow* window=id_to_window[(int)wid];
|
||||
window->StartMenu();
|
||||
|
||||
@@ -51,7 +51,7 @@ public:
|
||||
static void qt_putstr(winid wid, int attr, const std::string& text);
|
||||
static void qt_putstr(winid wid, int attr, const QString& text);
|
||||
static void qt_display_file(const char *filename, BOOLEAN_P must_exist);
|
||||
static void qt_start_menu(winid wid);
|
||||
static void qt_start_menu(winid wid, unsigned long mbehavior);
|
||||
static void qt_add_menu(winid wid, int glyph,
|
||||
const ANY_P * identifier, CHAR_P ch, CHAR_P gch, int attr,
|
||||
const char *str, unsigned int itemflags);
|
||||
|
||||
@@ -4811,7 +4811,7 @@ void NetHackQtBind::qt_display_file(const char *filename, BOOLEAN_P must_exist)
|
||||
}
|
||||
}
|
||||
|
||||
void NetHackQtBind::qt_start_menu(winid wid)
|
||||
void NetHackQtBind::qt_start_menu(winid wid, unsigned long mbehavior)
|
||||
{
|
||||
NetHackQtWindow* window=id_to_window[wid];
|
||||
window->StartMenu();
|
||||
|
||||
@@ -851,7 +851,7 @@ class NetHackQtBind : NetHackQtBindBase
|
||||
static void qt_curs(winid wid, int x, int y);
|
||||
static void qt_putstr(winid wid, int attr, const char *text);
|
||||
static void qt_display_file(const char *filename, BOOLEAN_P must_exist);
|
||||
static void qt_start_menu(winid wid);
|
||||
static void qt_start_menu(winid wid, unsigned long mbehavior);
|
||||
static void qt_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P ch, CHAR_P gch, int attr, const char *str,
|
||||
unsigned itemflags);
|
||||
|
||||
@@ -1957,7 +1957,7 @@ boolean complain;
|
||||
|
||||
newwin = X11_create_nhwindow(NHW_MENU);
|
||||
wp = &window_list[newwin];
|
||||
X11_start_menu(newwin);
|
||||
X11_start_menu(newwin, MENU_BEHAVE_STANDARD);
|
||||
|
||||
any = cg.zeroany;
|
||||
while (dlb_fgets(line, LLEN, fp)) {
|
||||
|
||||
@@ -612,8 +612,9 @@ struct xwindow *wp;
|
||||
/* Global functions ======================================================= */
|
||||
|
||||
void
|
||||
X11_start_menu(window)
|
||||
X11_start_menu(window, mbehavior)
|
||||
winid window;
|
||||
unsigned long mbehavior UNUSED;
|
||||
{
|
||||
struct xwindow *wp;
|
||||
check_winid(window);
|
||||
@@ -763,7 +764,7 @@ menu_item **menu_list;
|
||||
winid newwin = X11_create_nhwindow(NHW_MENU);
|
||||
struct xwindow *nwp = &window_list[newwin];
|
||||
|
||||
X11_start_menu(newwin);
|
||||
X11_start_menu(newwin, MENU_BEHAVE_STANDARD);
|
||||
move_menu(&menu_info->new_menu, &nwp->menu_information->new_menu);
|
||||
for (curr = nwp->menu_information->new_menu.base; curr;
|
||||
curr = curr->next)
|
||||
|
||||
@@ -175,10 +175,11 @@ boolean complain;
|
||||
}
|
||||
|
||||
void
|
||||
chainin_start_menu(window)
|
||||
chainin_start_menu(window, mbehavior)
|
||||
winid window;
|
||||
unsigned long mbehavior;
|
||||
{
|
||||
(*cibase->nprocs->win_start_menu)(cibase->ndata, window);
|
||||
(*cibase->nprocs->win_start_menu)(cibase->ndata, window, mbehavior);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -213,13 +213,14 @@ boolean complain;
|
||||
}
|
||||
|
||||
void
|
||||
chainout_start_menu(vp, window)
|
||||
chainout_start_menu(vp, window, mbehavior)
|
||||
void *vp;
|
||||
winid window;
|
||||
unsigned long mbehavior;
|
||||
{
|
||||
struct chainout_data *tdp = vp;
|
||||
|
||||
(*tdp->nprocs->win_start_menu)(window);
|
||||
(*tdp->nprocs->win_start_menu)(window, mbehavior);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -356,16 +356,18 @@ boolean complain;
|
||||
}
|
||||
|
||||
void
|
||||
trace_start_menu(vp, window)
|
||||
trace_start_menu(vp, window, mbehavior)
|
||||
void *vp;
|
||||
winid window;
|
||||
unsigned long mbehavior;
|
||||
{
|
||||
struct trace_data *tdp = vp;
|
||||
|
||||
fprintf(wc_tracelogf, "%sstart_menu(%d)\n", INDENT, window);
|
||||
fprintf(wc_tracelogf, "%sstart_menu(%d, %lu)\n", INDENT,
|
||||
window, mbehavior);
|
||||
|
||||
PRE;
|
||||
(*tdp->nprocs->win_start_menu)(tdp->ndata, window);
|
||||
(*tdp->nprocs->win_start_menu)(tdp->ndata, window, mbehavior);
|
||||
POST;
|
||||
}
|
||||
|
||||
|
||||
@@ -732,7 +732,7 @@ curses_character_dialog(const char **choices, const char *prompt)
|
||||
winid wid = curses_get_wid(NHW_MENU);
|
||||
|
||||
identifier.a_void = 0;
|
||||
curses_start_menu(wid);
|
||||
curses_start_menu(wid, MENU_BEHAVE_STANDARD);
|
||||
|
||||
for (count = 0; choices[count]; count++) {
|
||||
curletter = tolower(choices[count][0]);
|
||||
|
||||
@@ -328,7 +328,7 @@ curses_create_nhwindow(int type)
|
||||
winid wid = curses_get_wid(type);
|
||||
|
||||
if (curses_is_menu(wid) || curses_is_text(wid)) {
|
||||
curses_start_menu(wid);
|
||||
curses_start_menu(wid, MENU_BEHAVE_STANDARD);
|
||||
curses_add_wid(wid);
|
||||
}
|
||||
|
||||
@@ -480,7 +480,7 @@ curses_display_file(const char *filename, BOOLEAN_P must_exist)
|
||||
be used for menus.
|
||||
*/
|
||||
void
|
||||
curses_start_menu(winid wid)
|
||||
curses_start_menu(winid wid, unsigned long mbehavior)
|
||||
{
|
||||
if (inv_update)
|
||||
return;
|
||||
|
||||
@@ -241,7 +241,7 @@ Gem_player_selection()
|
||||
} else {
|
||||
/* Prompt for a role */
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any.a_void = 0; /* zero out all bits */
|
||||
for (i = 0; roles[i].name.m; i++) {
|
||||
if (ok_role(i, flags.initrace, flags.initgend,
|
||||
@@ -313,7 +313,7 @@ Gem_player_selection()
|
||||
/* Permit the user to pick, if there is more than one */
|
||||
if (n > 1) {
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any.a_void = 0; /* zero out all bits */
|
||||
for (i = 0; races[i].noun; i++)
|
||||
if (ok_race(flags.initrole, i, flags.initgend,
|
||||
@@ -382,7 +382,7 @@ Gem_player_selection()
|
||||
/* Permit the user to pick, if there is more than one */
|
||||
if (n > 1) {
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any.a_void = 0; /* zero out all bits */
|
||||
for (i = 0; i < ROLE_GENDERS; i++)
|
||||
if (ok_gend(flags.initrole, flags.initrace, i,
|
||||
@@ -451,7 +451,7 @@ Gem_player_selection()
|
||||
/* Permit the user to pick, if there is more than one */
|
||||
if (n > 1) {
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any.a_void = 0; /* zero out all bits */
|
||||
for (i = 0; i < ROLE_ALIGNS; i++)
|
||||
if (ok_align(flags.initrole, flags.initrace,
|
||||
@@ -1002,7 +1002,7 @@ Gem_get_ext_cmd()
|
||||
const char *ptr;
|
||||
|
||||
wind = Gem_create_nhwindow(NHW_MENU);
|
||||
Gem_start_menu(wind);
|
||||
Gem_start_menu(wind, MENU_BEHAVE_STANDARD);
|
||||
for (i = 0; (ptr = extcmdlist[i].ef_txt); i++) {
|
||||
any.a_int = i;
|
||||
accelerator = *ptr;
|
||||
|
||||
@@ -1424,8 +1424,9 @@ mar_more()
|
||||
|
||||
/************************* Gem_start_menu *******************************/
|
||||
void
|
||||
Gem_start_menu(win)
|
||||
Gem_start_menu(win, mbehavior)
|
||||
winid win;
|
||||
unsigned long mbehavior UNUSED;
|
||||
{
|
||||
win = win;
|
||||
if (invent_list) {
|
||||
@@ -2551,7 +2552,7 @@ winid window;
|
||||
use_rip = FALSE;
|
||||
break;
|
||||
case NHW_MENU:
|
||||
Gem_start_menu(window); /* delete invent_list */
|
||||
Gem_start_menu(window, MENU_BEHAVE_STANDARD); /* delete invent_list */
|
||||
test_free(Menu_title);
|
||||
break;
|
||||
case 0: /* No window available, probably an error message? */
|
||||
|
||||
@@ -663,7 +663,7 @@ gnome_display_file(const char *filename, BOOLEAN_P must_exist)
|
||||
be used for menus.
|
||||
*/
|
||||
void
|
||||
gnome_start_menu(winid wid)
|
||||
gnome_start_menu(winid wid, unsigned long mbehavior)
|
||||
{
|
||||
if (wid != -1) {
|
||||
if (gnome_windowlist[wid].win == NULL
|
||||
|
||||
@@ -53,7 +53,7 @@ void gnome_destroy_nhwindow(winid wid);
|
||||
void gnome_curs(winid wid, int x, int y);
|
||||
void gnome_putstr(winid wid, int attr, const char *text);
|
||||
void gnome_display_file(const char *filename, BOOLEAN_P must_exist);
|
||||
void gnome_start_menu(winid wid);
|
||||
void gnome_start_menu(winid wid, unsigned long mbehavior);
|
||||
void gnome_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, BOOLEAN_P presel);
|
||||
|
||||
@@ -226,8 +226,9 @@ boolean complain;
|
||||
}
|
||||
|
||||
void
|
||||
safe_start_menu(window)
|
||||
safe_start_menu(window, mbehavior)
|
||||
winid window;
|
||||
unsigned long mbehavior;
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -569,7 +569,7 @@ tty_player_selection()
|
||||
tty_clear_nhwindow(BASE_WINDOW);
|
||||
role_selection_prolog(RS_ROLE, BASE_WINDOW);
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
/* populate the menu with role choices */
|
||||
setup_rolemenu(win, TRUE, RACE, GEND, ALGN);
|
||||
/* add miscellaneous menu entries */
|
||||
@@ -666,7 +666,7 @@ tty_player_selection()
|
||||
tty_clear_nhwindow(BASE_WINDOW);
|
||||
role_selection_prolog(RS_RACE, BASE_WINDOW);
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany; /* zero out all bits */
|
||||
/* populate the menu with role choices */
|
||||
setup_racemenu(win, TRUE, ROLE, GEND, ALGN);
|
||||
@@ -758,7 +758,7 @@ tty_player_selection()
|
||||
tty_clear_nhwindow(BASE_WINDOW);
|
||||
role_selection_prolog(RS_GENDER, BASE_WINDOW);
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany; /* zero out all bits */
|
||||
/* populate the menu with gender choices */
|
||||
setup_gendmenu(win, TRUE, ROLE, RACE, ALGN);
|
||||
@@ -848,7 +848,7 @@ tty_player_selection()
|
||||
tty_clear_nhwindow(BASE_WINDOW);
|
||||
role_selection_prolog(RS_ALGNMNT, BASE_WINDOW);
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany; /* zero out all bits */
|
||||
setup_algnmenu(win, TRUE, ROLE, RACE, GEND);
|
||||
role_menu_extra(ROLE_RANDOM, win, TRUE);
|
||||
@@ -927,7 +927,7 @@ tty_player_selection()
|
||||
tty_clear_nhwindow(BASE_WINDOW);
|
||||
role_selection_prolog(ROLE_NONE, BASE_WINDOW);
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany; /* zero out all bits */
|
||||
any.a_int = 0;
|
||||
if (!roles[ROLE].name.f
|
||||
@@ -1030,7 +1030,7 @@ reset_role_filtering()
|
||||
menu_item *selected = 0;
|
||||
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany;
|
||||
|
||||
/* no extra blank line preceding this entry; end_menu supplies one */
|
||||
@@ -1456,6 +1456,7 @@ int type;
|
||||
newwin->mlist = (tty_menu_item *) 0;
|
||||
newwin->plist = (tty_menu_item **) 0;
|
||||
newwin->npages = newwin->plist_size = newwin->nitems = newwin->how = 0;
|
||||
newwin->mbehavior = 0U;
|
||||
switch (type) {
|
||||
case NHW_BASE:
|
||||
/* base window, used for absolute movement on the screen */
|
||||
@@ -2907,9 +2908,11 @@ boolean complain;
|
||||
}
|
||||
|
||||
void
|
||||
tty_start_menu(window)
|
||||
tty_start_menu(window, mbehavior)
|
||||
winid window;
|
||||
unsigned long mbehavior;
|
||||
{
|
||||
wins[window]->mbehavior = mbehavior;
|
||||
tty_clear_nhwindow(window);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -405,7 +405,7 @@ prompt_for_player_selection(void)
|
||||
/* tty_putstr(BASE_WINDOW, 0, "Choosing Character's Role"); */
|
||||
/* Prompt for a role */
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany; /* zero out all bits */
|
||||
for (i = 0; roles[i].name.m; i++) {
|
||||
if (ok_role(i, flags.initrace, flags.initgend,
|
||||
@@ -497,7 +497,7 @@ prompt_for_player_selection(void)
|
||||
/* tty_clear_nhwindow(BASE_WINDOW); */
|
||||
/* tty_putstr(BASE_WINDOW, 0, "Choosing Race"); */
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany; /* zero out all bits */
|
||||
for (i = 0; races[i].noun; i++)
|
||||
if (ok_race(flags.initrole, i, flags.initgend,
|
||||
@@ -571,7 +571,7 @@ prompt_for_player_selection(void)
|
||||
/* tty_clear_nhwindow(BASE_WINDOW); */
|
||||
/* tty_putstr(BASE_WINDOW, 0, "Choosing Gender"); */
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany; /* zero out all bits */
|
||||
for (i = 0; i < ROLE_GENDERS; i++)
|
||||
if (ok_gend(flags.initrole, flags.initrace, i,
|
||||
@@ -644,7 +644,7 @@ prompt_for_player_selection(void)
|
||||
/* tty_clear_nhwindow(BASE_WINDOW); */
|
||||
/* tty_putstr(BASE_WINDOW, 0, "Choosing Alignment"); */
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
start_menu(win);
|
||||
start_menu(win, MENU_BEHAVE_STANDARD);
|
||||
any = cg.zeroany; /* zero out all bits */
|
||||
for (i = 0; i < ROLE_ALIGNS; i++)
|
||||
if (ok_align(flags.initrole, flags.initrace,
|
||||
@@ -1074,9 +1074,9 @@ mswin_display_file(const char *filename, BOOLEAN_P must_exist)
|
||||
be used for menus.
|
||||
*/
|
||||
void
|
||||
mswin_start_menu(winid wid)
|
||||
mswin_start_menu(winid wid, unsigned long mbehavior)
|
||||
{
|
||||
logDebug("mswin_start_menu(%d)\n", wid);
|
||||
logDebug("mswin_start_menu(%d, %lu)\n", wid, mbehavior);
|
||||
if ((wid >= 0) && (wid < MAXWINDOWS)) {
|
||||
if (GetNHApp()->windowlist[wid].win == NULL
|
||||
&& GetNHApp()->windowlist[wid].type == NHW_MENU) {
|
||||
|
||||
@@ -152,7 +152,7 @@ void mswin_curs(winid wid, int x, int y);
|
||||
void mswin_putstr(winid wid, int attr, const char *text);
|
||||
void mswin_putstr_ex(winid wid, int attr, const char *text, int);
|
||||
void mswin_display_file(const char *filename, BOOLEAN_P must_exist);
|
||||
void mswin_start_menu(winid wid);
|
||||
void mswin_start_menu(winid wid, unsigned long mbehavior);
|
||||
void mswin_add_menu(winid wid, int glyph, const ANY_P *identifier,
|
||||
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
||||
const char *str, unsigned int itemflags);
|
||||
|
||||
Reference in New Issue
Block a user