Show object symbols in menu headings

... in menus where those object symbols act as menu accelerators.
Toggleable via "menu_objsyms" boolean option, defaults to off.
This commit is contained in:
Pasi Kallinen
2015-03-25 22:13:28 +02:00
parent a355911c2c
commit f41c51aef0
8 changed files with 38 additions and 15 deletions
+3
View File
@@ -2100,6 +2100,9 @@ Default '|'.
Menu character accelerator to goto the next menu page. Menu character accelerator to goto the next menu page.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
Default '>'. Default '>'.
.lp menu_objsyms
Show object symbols in menu headings in menus where
the object symbols act as menu accelerators (default off).
.lp menu_previous_page .lp menu_previous_page
Menu character accelerator to goto the previous menu page. Menu character accelerator to goto the previous menu page.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
+2
View File
@@ -883,6 +883,8 @@ add option mention_walls, which gives feedback when bumping against a wall
fix invalid pointer dereference in morguemon if ndemon returns NON_PM fix invalid pointer dereference in morguemon if ndemon returns NON_PM
after object loss through polyshudder don't get left hiding under nothing after object loss through polyshudder don't get left hiding under nothing
if you're polymorphed into a hider if you're polymorphed into a hider
show object symbols in menu headings in menus where those object symbols
act as menu accelerators, toggleable via "menu_objsyms" option
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes
+1 -1
View File
@@ -911,7 +911,7 @@ E int NDECL(dopramulet);
E int NDECL(doprtool); E int NDECL(doprtool);
E int NDECL(doprinuse); E int NDECL(doprinuse);
E void FDECL(useupf, (struct obj *,long)); E void FDECL(useupf, (struct obj *,long));
E char *FDECL(let_to_name, (CHAR_P,BOOLEAN_P)); E char *FDECL(let_to_name, (CHAR_P,BOOLEAN_P,BOOLEAN_P));
E void NDECL(free_invbuf); E void NDECL(free_invbuf);
E void NDECL(reassign); E void NDECL(reassign);
E int NDECL(doorganize); E int NDECL(doorganize);
+1
View File
@@ -191,6 +191,7 @@ struct instance_flags {
boolean news; /* print news */ boolean news; /* print news */
boolean mention_walls; /* give feedback when bumping walls */ boolean mention_walls; /* give feedback when bumping walls */
boolean menu_tab_sep; /* Use tabs to separate option menu fields */ boolean menu_tab_sep; /* Use tabs to separate option menu fields */
boolean menu_head_objsym; /* Show obj symbol in menu headings */
boolean menu_requested; /* Flag for overloaded use of 'm' prefix boolean menu_requested; /* Flag for overloaded use of 'm' prefix
* on some non-move commands */ * on some non-move commands */
boolean renameallowed; /* can change hero name during role selection */ boolean renameallowed; /* can change hero name during role selection */
+19 -7
View File
@@ -1789,7 +1789,7 @@ nextclass:
if (!flags.sortpack || otmp->oclass == *invlet) { if (!flags.sortpack || otmp->oclass == *invlet) {
if (flags.sortpack && !classcount) { if (flags.sortpack && !classcount) {
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
let_to_name(*invlet, FALSE), MENU_UNSELECTED); let_to_name(*invlet, FALSE, (want_reply && iflags.menu_head_objsym)), MENU_UNSELECTED);
classcount++; classcount++;
} }
any.a_char = ilet; any.a_char = ilet;
@@ -1863,7 +1863,7 @@ char avoidlet;
if (flags.sortpack && !classcount) { if (flags.sortpack && !classcount) {
any = zeroany; /* zero */ any = zeroany; /* zero */
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
let_to_name(*invlet, FALSE), MENU_UNSELECTED); let_to_name(*invlet, FALSE, FALSE), MENU_UNSELECTED);
classcount++; classcount++;
} }
any.a_char = ilet; any.a_char = ilet;
@@ -1991,7 +1991,7 @@ dounpaid()
if (otmp->unpaid) { if (otmp->unpaid) {
if (!flags.sortpack || otmp->oclass == *invlet) { if (!flags.sortpack || otmp->oclass == *invlet) {
if (flags.sortpack && !classcount) { if (flags.sortpack && !classcount) {
putstr(win, 0, let_to_name(*invlet, TRUE)); putstr(win, 0, let_to_name(*invlet, TRUE, FALSE));
classcount++; classcount++;
} }
@@ -2009,7 +2009,7 @@ dounpaid()
if (count > num_so_far) { if (count > num_so_far) {
/* something unpaid is contained */ /* something unpaid is contained */
if (flags.sortpack) if (flags.sortpack)
putstr(win, 0, let_to_name(CONTAINED_SYM, TRUE)); putstr(win, 0, let_to_name(CONTAINED_SYM, TRUE, FALSE));
/* /*
* Search through the container objects in the inventory for * Search through the container objects in the inventory for
* unpaid items. The top level inventory items have already * unpaid items. The top level inventory items have already
@@ -2701,10 +2701,12 @@ static NEARDATA char *invbuf = (char *)0;
static NEARDATA unsigned invbufsiz = 0; static NEARDATA unsigned invbufsiz = 0;
char * char *
let_to_name(let,unpaid) let_to_name(let,unpaid,showsym)
char let; char let;
boolean unpaid; boolean unpaid,showsym;
{ {
const char *ocsymfmt = " ('%c')";
const int invbuf_sympadding = 8; /* arbitrary */
const char *class_name; const char *class_name;
const char *pos; const char *pos;
int oclass = (let >= 1 && let < MAXOCLASSES) ? let : 0; int oclass = (let >= 1 && let < MAXOCLASSES) ? let : 0;
@@ -2717,7 +2719,8 @@ boolean unpaid;
else else
class_name = names[0]; class_name = names[0];
len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof ""); len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof "") +
(oclass ? (strlen(ocsymfmt)+invbuf_sympadding) : 0);
if (len > invbufsiz) { if (len > invbufsiz) {
if (invbuf) free((genericptr_t)invbuf); if (invbuf) free((genericptr_t)invbuf);
invbufsiz = len + 10; /* add slop to reduce incremental realloc */ invbufsiz = len + 10; /* add slop to reduce incremental realloc */
@@ -2727,6 +2730,15 @@ boolean unpaid;
Strcat(strcpy(invbuf, "Unpaid "), class_name); Strcat(strcpy(invbuf, "Unpaid "), class_name);
else else
Strcpy(invbuf, class_name); Strcpy(invbuf, class_name);
if ((oclass != 0) && showsym) {
char *bp = eos(invbuf);
int mlen = invbuf_sympadding - strlen(class_name);
while (--mlen > 0) {
*bp = ' '; bp++;
}
*bp = '\0';
Sprintf(eos(invbuf), ocsymfmt, def_oc_syms[oclass].sym);
}
return invbuf; return invbuf;
} }
+4 -4
View File
@@ -446,7 +446,7 @@ dodiscovered() /* free after Robert Viduya */
if ((dis = disco[i]) != 0 && interesting_to_discover(dis)) { if ((dis = disco[i]) != 0 && interesting_to_discover(dis)) {
ct++; ct++;
if (oclass != prev_class) { if (oclass != prev_class) {
putstr(tmpwin, iflags.menu_headings, let_to_name(oclass, FALSE)); putstr(tmpwin, iflags.menu_headings, let_to_name(oclass, FALSE, FALSE));
prev_class = oclass; prev_class = oclass;
} }
Sprintf(buf, "%s %s",(objects[dis].oc_pre_discovered ? "*" : " "), Sprintf(buf, "%s %s",(objects[dis].oc_pre_discovered ? "*" : " "),
@@ -472,7 +472,7 @@ char *buf;
{ {
char *s; char *s;
Strcpy(buf, let_to_name(oclass, FALSE)); Strcpy(buf, let_to_name(oclass, FALSE, FALSE));
for (s = buf; *s; ++s) *s = lowc(*s); for (s = buf; *s; ++s) *s = lowc(*s);
return buf; return buf;
} }
@@ -615,7 +615,7 @@ doclassdisco()
break; break;
default: default:
oclass = def_char_to_objclass(c); oclass = def_char_to_objclass(c);
Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE)); Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE, FALSE));
putstr(tmpwin, iflags.menu_headings, buf); putstr(tmpwin, iflags.menu_headings, buf);
for (i = bases[(int)oclass]; for (i = bases[(int)oclass];
i < NUM_OBJECTS && objects[i].oc_class == oclass; ++i) { i < NUM_OBJECTS && objects[i].oc_class == oclass; ++i) {
@@ -672,7 +672,7 @@ rename_disco()
if (oclass != prev_class) { if (oclass != prev_class) {
any.a_int = 0; any.a_int = 0;
add_menu(tmpwin, NO_GLYPH, &any, ' ', iflags.menu_headings, add_menu(tmpwin, NO_GLYPH, &any, ' ', iflags.menu_headings,
ATR_NONE, let_to_name(oclass, FALSE), MENU_UNSELECTED); ATR_NONE, let_to_name(oclass, FALSE, FALSE), MENU_UNSELECTED);
prev_class = oclass; prev_class = oclass;
} }
any.a_int = dis; any.a_int = dis;
+1
View File
@@ -142,6 +142,7 @@ static struct Bool_Opt
{"mention_walls", &iflags.mention_walls, FALSE, SET_IN_GAME}, {"mention_walls", &iflags.mention_walls, FALSE, SET_IN_GAME},
/* for menu debugging only*/ /* for menu debugging only*/
{"menu_tab_sep", &iflags.menu_tab_sep, FALSE, SET_IN_GAME}, {"menu_tab_sep", &iflags.menu_tab_sep, FALSE, SET_IN_GAME},
{"menu_objsyms", &iflags.menu_head_objsym, FALSE, SET_IN_GAME},
{"mouse_support", &iflags.wc_mouse_support, TRUE, DISP_IN_GAME}, /*WC*/ {"mouse_support", &iflags.wc_mouse_support, TRUE, DISP_IN_GAME}, /*WC*/
#ifdef NEWS #ifdef NEWS
{"news", &iflags.news, TRUE, DISP_IN_GAME}, {"news", &iflags.news, TRUE, DISP_IN_GAME},
+7 -3
View File
@@ -769,7 +769,9 @@ boolean FDECL((*allow), (OBJ_P));/* allow function */
if (sorted && !printed_type_name) { if (sorted && !printed_type_name) {
any = zeroany; any = zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
let_to_name(*pack, FALSE), MENU_UNSELECTED); let_to_name(*pack, FALSE,
(how != PICK_NONE) && iflags.menu_head_objsym),
MENU_UNSELECTED);
printed_type_name = TRUE; printed_type_name = TRUE;
} }
@@ -928,8 +930,10 @@ int how; /* type of query */
any.a_int = curr->oclass; any.a_int = curr->oclass;
add_menu(win, NO_GLYPH, &any, invlet++, add_menu(win, NO_GLYPH, &any, invlet++,
def_oc_syms[(int)objects[curr->otyp].oc_class].sym, def_oc_syms[(int)objects[curr->otyp].oc_class].sym,
ATR_NONE, let_to_name(*pack, FALSE), ATR_NONE,
MENU_UNSELECTED); let_to_name(*pack, FALSE,
(how != PICK_NONE) && iflags.menu_head_objsym),
MENU_UNSELECTED);
collected_type_name = TRUE; collected_type_name = TRUE;
} }
} }