menustyle:full skip_inverted for u and x

Use of select-all, select-page, toggle-all, and toggle-page in the
object class selection menu for menustyle:full excluded A (auto-
select all), a (all classes), B, C, U, X (bless/curse states), and
P (recently picked up) but allowed u and x (unpaid and used-up shop
goods) to be set.  Treat u and x like the other pseudo-classes;
they have to be chosen explicitly rather than be set with . and ~.
This commit is contained in:
PatR
2023-06-21 18:40:14 -07:00
parent 1209b15bcf
commit c86595001c

View File

@@ -1137,11 +1137,12 @@ query_objlist(const char *qstr, /* query string */
* *
*/ */
int int
query_category(const char *qstr, /* query string */ query_category(
struct obj *olist, /* the list to pick from */ const char *qstr, /* query string */
int qflags, /* behavior modification flags */ struct obj *olist, /* the list to pick from */
menu_item **pick_list, /* return list of items picked */ int qflags, /* behavior modification flags */
int how) /* type of query */ menu_item **pick_list, /* return list of items picked */
int how) /* type of query */
{ {
int n; int n;
winid win; winid win;
@@ -1152,13 +1153,9 @@ query_category(const char *qstr, /* query string */
char invlet; char invlet;
int ccount; int ccount;
boolean (*ofilter)(OBJ_P) = (boolean (*)(OBJ_P)) 0; boolean (*ofilter)(OBJ_P) = (boolean (*)(OBJ_P)) 0;
boolean do_unpaid = FALSE; boolean do_unpaid = FALSE, do_blessed = FALSE, do_cursed = FALSE,
boolean do_blessed = FALSE, do_cursed = FALSE, do_uncursed = FALSE, do_uncursed = FALSE, do_buc_unknown = FALSE;
do_buc_unknown = FALSE; int num_buc_types = 0, num_justpicked = 0, clr = 0;
int num_buc_types = 0;
unsigned itemflags = MENU_ITEMFLAGS_NONE;
int num_justpicked = 0;
int clr = 0;
*pick_list = (menu_item *) 0; *pick_list = (menu_item *) 0;
if (!olist) if (!olist)
@@ -1219,25 +1216,23 @@ query_category(const char *qstr, /* query string */
invlet = 'A'; invlet = 'A';
any = cg.zeroany; any = cg.zeroany;
any.a_int = 'A'; any.a_int = 'A';
itemflags = MENU_ITEMFLAGS_SKIPINVERT;
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr, add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr,
(qflags & WORN_TYPES) ? "Auto-select every item being worn" (qflags & WORN_TYPES) ? "Auto-select every item being worn"
: "Auto-select every relevant item", : "Auto-select every relevant item",
itemflags); MENU_ITEMFLAGS_SKIPINVERT);
any = cg.zeroany; any = cg.zeroany;
add_menu(win, &nul_glyphinfo, &any, 0, 0, add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, clr, "", MENU_ITEMFLAGS_NONE); ATR_NONE, NO_COLOR, "", MENU_ITEMFLAGS_NONE);
} }
if ((qflags & ALL_TYPES) && (ccount > 1)) { if ((qflags & ALL_TYPES) && (ccount > 1)) {
invlet = 'a'; invlet = 'a';
any = cg.zeroany; any = cg.zeroany;
any.a_int = ALL_TYPES_SELECTED; any.a_int = ALL_TYPES_SELECTED;
itemflags = MENU_ITEMFLAGS_SKIPINVERT;
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr, add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr,
(qflags & WORN_TYPES) ? "All worn types" : "All types", (qflags & WORN_TYPES) ? "All worn types" : "All types",
itemflags); MENU_ITEMFLAGS_SKIPINVERT);
invlet = 'b'; invlet = 'b';
} else } else
invlet = 'a'; invlet = 'a';
@@ -1248,15 +1243,16 @@ query_category(const char *qstr, /* query string */
if (ofilter && !(*ofilter)(curr)) if (ofilter && !(*ofilter)(curr))
continue; continue;
if (!collected_type_name) { if (!collected_type_name) {
int oclass = (int) curr->oclass;
any = cg.zeroany; any = cg.zeroany;
any.a_int = curr->oclass; any.a_int = oclass;
add_menu( add_menu(win, &nul_glyphinfo, &any, invlet++,
win, &nul_glyphinfo, &any, invlet++, (int) def_oc_syms[oclass].sym, ATR_NONE, clr,
def_oc_syms[(int) objects[curr->otyp].oc_class].sym, let_to_name(*pack, FALSE,
ATR_NONE, clr, let_to_name(*pack, FALSE, (how != PICK_NONE
(how != PICK_NONE) && iflags.menu_head_objsym)),
&& iflags.menu_head_objsym), MENU_ITEMFLAGS_NONE);
MENU_ITEMFLAGS_NONE);
collected_type_name = TRUE; collected_type_name = TRUE;
} }
} }
@@ -1270,10 +1266,10 @@ query_category(const char *qstr, /* query string */
} while (*pack); } while (*pack);
if (do_unpaid || (qflags & BILLED_TYPES) || do_blessed || do_cursed if (do_unpaid || (qflags & BILLED_TYPES) || do_blessed || do_cursed
|| do_uncursed || do_buc_unknown) { || do_uncursed || do_buc_unknown || num_justpicked) {
any = cg.zeroany; any = cg.zeroany;
add_menu(win, &nul_glyphinfo, &any, 0, 0, add_menu(win, &nul_glyphinfo, &any, 0, 0,
ATR_NONE, clr, "", MENU_ITEMFLAGS_NONE); ATR_NONE, NO_COLOR, "", MENU_ITEMFLAGS_NONE);
} }
/* unpaid items if there are any */ /* unpaid items if there are any */
@@ -1282,7 +1278,7 @@ query_category(const char *qstr, /* query string */
any = cg.zeroany; any = cg.zeroany;
any.a_int = 'u'; any.a_int = 'u';
add_menu(win, &nul_glyphinfo, &any, invlet, 0, add_menu(win, &nul_glyphinfo, &any, invlet, 0,
ATR_NONE, clr, "Unpaid items", MENU_ITEMFLAGS_NONE); ATR_NONE, clr, "Unpaid items", MENU_ITEMFLAGS_SKIPINVERT);
} }
/* billed items: checked by caller, so always include if BILLED_TYPES */ /* billed items: checked by caller, so always include if BILLED_TYPES */
if (qflags & BILLED_TYPES) { if (qflags & BILLED_TYPES) {
@@ -1290,40 +1286,40 @@ query_category(const char *qstr, /* query string */
any = cg.zeroany; any = cg.zeroany;
any.a_int = 'x'; any.a_int = 'x';
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr, add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr,
"Unpaid items already used up", MENU_ITEMFLAGS_NONE); "Unpaid items already used up", MENU_ITEMFLAGS_SKIPINVERT);
} }
/* items with b/u/c/unknown if there are any; /* items with b/u/c/unknown if there are any;
this cluster of menu entries is in alphabetical order, this cluster of menu entries is in alphabetical order,
reversing the usual sequence of 'U' and 'C' in BUCX */ reversing the usual sequence of 'U' and 'C' in BUCX */
itemflags = MENU_ITEMFLAGS_SKIPINVERT;
if (do_blessed) { if (do_blessed) {
invlet = 'B'; invlet = 'B';
any = cg.zeroany; any = cg.zeroany;
any.a_int = 'B'; any.a_int = 'B';
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr,
clr, "Items known to be Blessed", itemflags); "Items known to be Blessed", MENU_ITEMFLAGS_SKIPINVERT);
} }
if (do_cursed) { if (do_cursed) {
invlet = 'C'; invlet = 'C';
any = cg.zeroany; any = cg.zeroany;
any.a_int = 'C'; any.a_int = 'C';
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr,
clr, "Items known to be Cursed", itemflags); "Items known to be Cursed", MENU_ITEMFLAGS_SKIPINVERT);
} }
if (do_uncursed) { if (do_uncursed) {
invlet = 'U'; invlet = 'U';
any = cg.zeroany; any = cg.zeroany;
any.a_int = 'U'; any.a_int = 'U';
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr,
clr, "Items known to be Uncursed", itemflags); "Items known to be Uncursed", MENU_ITEMFLAGS_SKIPINVERT);
} }
if (do_buc_unknown) { if (do_buc_unknown) {
invlet = 'X'; invlet = 'X';
any = cg.zeroany; any = cg.zeroany;
any.a_int = 'X'; any.a_int = 'X';
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr,
clr, "Items of unknown Bless/Curse status", itemflags); "Items of unknown Bless/Curse status",
MENU_ITEMFLAGS_SKIPINVERT);
} }
if (num_justpicked) { if (num_justpicked) {
char tmpbuf[BUFSZ]; char tmpbuf[BUFSZ];
@@ -1332,12 +1328,12 @@ query_category(const char *qstr, /* query string */
Sprintf(tmpbuf, "Just picked up: %s", Sprintf(tmpbuf, "Just picked up: %s",
doname(find_justpicked(olist))); doname(find_justpicked(olist)));
else else
Sprintf(tmpbuf, "Items you just picked up"); Strcpy(tmpbuf, "Items you just picked up");
invlet = 'P'; invlet = 'P';
any = cg.zeroany; any = cg.zeroany;
any.a_int = 'P'; any.a_int = 'P';
add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, add_menu(win, &nul_glyphinfo, &any, invlet, 0, ATR_NONE, clr,
clr, tmpbuf, itemflags); tmpbuf, MENU_ITEMFLAGS_SKIPINVERT);
} }
end_menu(win, qstr); end_menu(win, qstr);
n = select_menu(win, how, pick_list); n = select_menu(win, how, pick_list);