menuinvertmode for Qt

Catch up with tty, curses, and X11.  Items flagged as skip-invert
will not be toggled On by select-all.  If menuinvertmode is 2, they
also won't be toggled Off by unselect-all.
This commit is contained in:
PatR
2022-03-19 15:32:31 -07:00
parent bc5231d0ea
commit 20411d9ed4

View File

@@ -763,8 +763,11 @@ void NetHackQtMenuWindow::All()
if (counting)
ClearCount(); // discard any pending count
for (int row = 0; row < itemcount; ++row) {
itemlist[row].selected = itemlist[row].preselected = false;
if (!itemlist[row].Selectable())
itemlist[row].preselected = false; // stale for all rows
// skip if not selectable or already selected or fails invert_test()
if (!itemlist[row].Selectable()
|| itemlist[row].selected
|| !menuitem_invert_test(1, itemlist[row].itemflags, FALSE))
continue;
itemlist[row].selected = true;
@@ -792,9 +795,13 @@ void NetHackQtMenuWindow::ChooseNone()
if (counting)
ClearCount(); // discard any pending count
for (int row = 0; row < itemcount; ++row) {
itemlist[row].selected = itemlist[row].preselected = false;
if (!itemlist[row].Selectable())
itemlist[row].preselected = false; // stale for all rows
// skip if not selectable or already unselected or fails invert_test()
if (!itemlist[row].Selectable()
|| !itemlist[row].selected
|| !menuitem_invert_test(2, itemlist[row].itemflags, TRUE))
continue;
itemlist[row].selected = false;
QTableWidgetItem *count = table->item(row, 0);
if (count != NULL) {
@@ -820,8 +827,10 @@ void NetHackQtMenuWindow::Invert()
if (counting)
ClearCount(); // discard any pending count
for (int row = 0; row < itemcount; ++row) {
if (!menuitem_invert_test(0, itemlist[row].itemflags,
itemlist[row].preselected))
itemlist[row].preselected = false; // stale for all rows
if (!itemlist[row].Selectable()
|| !menuitem_invert_test(0, itemlist[row].itemflags,
itemlist[row].selected))
continue;
ToggleSelect(row, false);
}