Browse Source

Fixed item properties not being written to the "normal" infobox if the floating infobox option is disabled

pull/8107/head
Andrettin 8 months ago committed by Anders Jenbo
parent
commit
0e005c87a4
  1. 161
      Source/items.cpp

161
Source/items.cpp

@ -1595,92 +1595,94 @@ void ItemDoppel()
void PrintItemOil(char iDidx) void PrintItemOil(char iDidx)
{ {
const bool floatingInfoBoxEnabled = *GetOptions().Gameplay.floatingInfoBox;
switch (iDidx) { switch (iDidx) {
case IMISC_OILACC: case IMISC_OILACC:
AddInfoBoxString(_("increases a weapon's"), true); AddInfoBoxString(_("increases a weapon's"), floatingInfoBoxEnabled);
AddInfoBoxString(_("chance to hit"), true); AddInfoBoxString(_("chance to hit"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILMAST: case IMISC_OILMAST:
AddInfoBoxString(_("greatly increases a"), true); AddInfoBoxString(_("greatly increases a"), floatingInfoBoxEnabled);
AddInfoBoxString(_("weapon's chance to hit"), true); AddInfoBoxString(_("weapon's chance to hit"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILSHARP: case IMISC_OILSHARP:
AddInfoBoxString(_("increases a weapon's"), true); AddInfoBoxString(_("increases a weapon's"), floatingInfoBoxEnabled);
AddInfoBoxString(_("damage potential"), true); AddInfoBoxString(_("damage potential"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILDEATH: case IMISC_OILDEATH:
AddInfoBoxString(_("greatly increases a weapon's"), true); AddInfoBoxString(_("greatly increases a weapon's"), floatingInfoBoxEnabled);
AddInfoBoxString(_("damage potential - not bows"), true); AddInfoBoxString(_("damage potential - not bows"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILSKILL: case IMISC_OILSKILL:
AddInfoBoxString(_("reduces attributes needed"), true); AddInfoBoxString(_("reduces attributes needed"), floatingInfoBoxEnabled);
AddInfoBoxString(_("to use armor or weapons"), true); AddInfoBoxString(_("to use armor or weapons"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILBSMTH: case IMISC_OILBSMTH:
AddInfoBoxString(/*xgettext:no-c-format*/ _("restores 20% of an"), true); AddInfoBoxString(/*xgettext:no-c-format*/ _("restores 20% of an"), floatingInfoBoxEnabled);
AddInfoBoxString(_("item's durability"), true); AddInfoBoxString(_("item's durability"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILFORT: case IMISC_OILFORT:
AddInfoBoxString(_("increases an item's"), true); AddInfoBoxString(_("increases an item's"), floatingInfoBoxEnabled);
AddInfoBoxString(_("current and max durability"), true); AddInfoBoxString(_("current and max durability"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILPERM: case IMISC_OILPERM:
AddInfoBoxString(_("makes an item indestructible"), true); AddInfoBoxString(_("makes an item indestructible"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILHARD: case IMISC_OILHARD:
AddInfoBoxString(_("increases the armor class"), true); AddInfoBoxString(_("increases the armor class"), floatingInfoBoxEnabled);
AddInfoBoxString(_("of armor and shields"), true); AddInfoBoxString(_("of armor and shields"), floatingInfoBoxEnabled);
break; break;
case IMISC_OILIMP: case IMISC_OILIMP:
AddInfoBoxString(_("greatly increases the armor"), true); AddInfoBoxString(_("greatly increases the armor"), floatingInfoBoxEnabled);
AddInfoBoxString(_("class of armor and shields"), true); AddInfoBoxString(_("class of armor and shields"), floatingInfoBoxEnabled);
break; break;
case IMISC_RUNEF: case IMISC_RUNEF:
AddInfoBoxString(_("sets fire trap"), true); AddInfoBoxString(_("sets fire trap"), floatingInfoBoxEnabled);
break; break;
case IMISC_RUNEL: case IMISC_RUNEL:
case IMISC_GR_RUNEL: case IMISC_GR_RUNEL:
AddInfoBoxString(_("sets lightning trap"), true); AddInfoBoxString(_("sets lightning trap"), floatingInfoBoxEnabled);
break; break;
case IMISC_GR_RUNEF: case IMISC_GR_RUNEF:
AddInfoBoxString(_("sets fire trap"), true); AddInfoBoxString(_("sets fire trap"), floatingInfoBoxEnabled);
break; break;
case IMISC_RUNES: case IMISC_RUNES:
AddInfoBoxString(_("sets petrification trap"), true); AddInfoBoxString(_("sets petrification trap"), floatingInfoBoxEnabled);
break; break;
case IMISC_FULLHEAL: case IMISC_FULLHEAL:
AddInfoBoxString(_("restore all life"), true); AddInfoBoxString(_("restore all life"), floatingInfoBoxEnabled);
break; break;
case IMISC_HEAL: case IMISC_HEAL:
AddInfoBoxString(_("restore some life"), true); AddInfoBoxString(_("restore some life"), floatingInfoBoxEnabled);
break; break;
case IMISC_MANA: case IMISC_MANA:
AddInfoBoxString(_("restore some mana"), true); AddInfoBoxString(_("restore some mana"), floatingInfoBoxEnabled);
break; break;
case IMISC_FULLMANA: case IMISC_FULLMANA:
AddInfoBoxString(_("restore all mana"), true); AddInfoBoxString(_("restore all mana"), floatingInfoBoxEnabled);
break; break;
case IMISC_ELIXSTR: case IMISC_ELIXSTR:
AddInfoBoxString(_("increase strength"), true); AddInfoBoxString(_("increase strength"), floatingInfoBoxEnabled);
break; break;
case IMISC_ELIXMAG: case IMISC_ELIXMAG:
AddInfoBoxString(_("increase magic"), true); AddInfoBoxString(_("increase magic"), floatingInfoBoxEnabled);
break; break;
case IMISC_ELIXDEX: case IMISC_ELIXDEX:
AddInfoBoxString(_("increase dexterity"), true); AddInfoBoxString(_("increase dexterity"), floatingInfoBoxEnabled);
break; break;
case IMISC_ELIXVIT: case IMISC_ELIXVIT:
AddInfoBoxString(_("increase vitality"), true); AddInfoBoxString(_("increase vitality"), floatingInfoBoxEnabled);
break; break;
case IMISC_REJUV: case IMISC_REJUV:
AddInfoBoxString(_("restore some life and mana"), true); AddInfoBoxString(_("restore some life and mana"), floatingInfoBoxEnabled);
break; break;
case IMISC_FULLREJUV: case IMISC_FULLREJUV:
AddInfoBoxString(_("restore all life and mana"), true); AddInfoBoxString(_("restore all life and mana"), floatingInfoBoxEnabled);
break; break;
case IMISC_ARENAPOT: case IMISC_ARENAPOT:
AddInfoBoxString(_("restore all life and mana"), true); AddInfoBoxString(_("restore all life and mana"), floatingInfoBoxEnabled);
AddInfoBoxString(_("(works only in arenas)"), true); AddInfoBoxString(_("(works only in arenas)"), floatingInfoBoxEnabled);
break; break;
} }
} }
@ -1714,33 +1716,37 @@ Point DrawUniqueInfoWindow(const Surface &out)
void printItemMiscKBM(const Item &item, const bool isOil, const bool isCastOnTarget) void printItemMiscKBM(const Item &item, const bool isOil, const bool isCastOnTarget)
{ {
const bool floatingInfoBoxEnabled = *GetOptions().Gameplay.floatingInfoBox;
if (item._iMiscId == IMISC_MAPOFDOOM) { if (item._iMiscId == IMISC_MAPOFDOOM) {
AddInfoBoxString(_("Right-click to view"), true); AddInfoBoxString(_("Right-click to view"), floatingInfoBoxEnabled);
} else if (isOil) { } else if (isOil) {
PrintItemOil(item._iMiscId); PrintItemOil(item._iMiscId);
AddInfoBoxString(_("Right-click to use"), true); AddInfoBoxString(_("Right-click to use"), floatingInfoBoxEnabled);
} else if (isCastOnTarget) { } else if (isCastOnTarget) {
AddInfoBoxString(_("Right-click to read, then\nleft-click to target"), true); AddInfoBoxString(_("Right-click to read, then\nleft-click to target"), floatingInfoBoxEnabled);
} else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) { } else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) {
AddInfoBoxString(_("Right-click to read"), true); AddInfoBoxString(_("Right-click to read"), floatingInfoBoxEnabled);
} }
} }
void printItemMiscGenericGamepad(const Item &item, const bool isOil, bool isCastOnTarget) void printItemMiscGenericGamepad(const Item &item, const bool isOil, bool isCastOnTarget)
{ {
const bool floatingInfoBoxEnabled = *GetOptions().Gameplay.floatingInfoBox;
if (item._iMiscId == IMISC_MAPOFDOOM) { if (item._iMiscId == IMISC_MAPOFDOOM) {
AddInfoBoxString(_("Activate to view"), true); AddInfoBoxString(_("Activate to view"), floatingInfoBoxEnabled);
} else if (isOil) { } else if (isOil) {
PrintItemOil(item._iMiscId); PrintItemOil(item._iMiscId);
if (!invflag) { if (!invflag) {
AddInfoBoxString(_("Open inventory to use"), true); AddInfoBoxString(_("Open inventory to use"), floatingInfoBoxEnabled);
} else { } else {
AddInfoBoxString(_("Activate to use"), true); AddInfoBoxString(_("Activate to use"), floatingInfoBoxEnabled);
} }
} else if (isCastOnTarget) { } else if (isCastOnTarget) {
AddInfoBoxString(_("Select from spell book, then\ncast spell to read"), true); AddInfoBoxString(_("Select from spell book, then\ncast spell to read"), floatingInfoBoxEnabled);
} else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) { } else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) {
AddInfoBoxString(_("Activate to read"), true); AddInfoBoxString(_("Activate to read"), floatingInfoBoxEnabled);
} }
} }
@ -1753,30 +1759,34 @@ void printItemMiscGamepad(const Item &item, bool isOil, bool isCastOnTarget)
const std::string_view activateButton = GetOptions().Padmapper.InputNameForAction("SecondaryAction"); const std::string_view activateButton = GetOptions().Padmapper.InputNameForAction("SecondaryAction");
const std::string_view castButton = GetOptions().Padmapper.InputNameForAction("SpellAction"); const std::string_view castButton = GetOptions().Padmapper.InputNameForAction("SpellAction");
const bool floatingInfoBoxEnabled = *GetOptions().Gameplay.floatingInfoBox;
if (item._iMiscId == IMISC_MAPOFDOOM) { if (item._iMiscId == IMISC_MAPOFDOOM) {
AddInfoBoxString(fmt::format(fmt::runtime(_("{} to view")), activateButton), true); AddInfoBoxString(fmt::format(fmt::runtime(_("{} to view")), activateButton), floatingInfoBoxEnabled);
} else if (isOil) { } else if (isOil) {
PrintItemOil(item._iMiscId); PrintItemOil(item._iMiscId);
if (!invflag) { if (!invflag) {
AddInfoBoxString(_("Open inventory to use"), true); AddInfoBoxString(_("Open inventory to use"), floatingInfoBoxEnabled);
} else { } else {
AddInfoBoxString(fmt::format(fmt::runtime(_("{} to use")), activateButton), true); AddInfoBoxString(fmt::format(fmt::runtime(_("{} to use")), activateButton), floatingInfoBoxEnabled);
} }
} else if (isCastOnTarget) { } else if (isCastOnTarget) {
AddInfoBoxString(fmt::format(fmt::runtime(_("Select from spell book,\nthen {} to read")), castButton), true); AddInfoBoxString(fmt::format(fmt::runtime(_("Select from spell book,\nthen {} to read")), castButton), floatingInfoBoxEnabled);
} else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) { } else if (IsAnyOf(item._iMiscId, IMISC_BOOK, IMISC_NOTE, IMISC_SCROLL, IMISC_SCROLLT)) {
AddInfoBoxString(fmt::format(fmt::runtime(_("{} to read")), activateButton), true); AddInfoBoxString(fmt::format(fmt::runtime(_("{} to read")), activateButton), floatingInfoBoxEnabled);
} }
} }
void PrintItemMisc(const Item &item) void PrintItemMisc(const Item &item)
{ {
const bool floatingInfoBoxEnabled = *GetOptions().Gameplay.floatingInfoBox;
if (item._iMiscId == IMISC_EAR) { if (item._iMiscId == IMISC_EAR) {
AddInfoBoxString(fmt::format(fmt::runtime(pgettext("player", "Level: {:d}")), item._ivalue), true); AddInfoBoxString(fmt::format(fmt::runtime(pgettext("player", "Level: {:d}")), item._ivalue), floatingInfoBoxEnabled);
return; return;
} }
if (item._iMiscId == IMISC_AURIC) { if (item._iMiscId == IMISC_AURIC) {
AddInfoBoxString(_("Doubles gold capacity"), true); AddInfoBoxString(_("Doubles gold capacity"), floatingInfoBoxEnabled);
return; return;
} }
const bool isOil = (item._iMiscId >= IMISC_USEFIRST && item._iMiscId <= IMISC_USELAST) const bool isOil = (item._iMiscId >= IMISC_USEFIRST && item._iMiscId <= IMISC_USELAST)
@ -1816,7 +1826,8 @@ void PrintItemInfo(const Item &item)
text.append(fmt::format(fmt::runtime(_(" {:d} Mag")), mag)); text.append(fmt::format(fmt::runtime(_(" {:d} Mag")), mag));
if (dex != 0) if (dex != 0)
text.append(fmt::format(fmt::runtime(_(" {:d} Dex")), dex)); text.append(fmt::format(fmt::runtime(_(" {:d} Dex")), dex));
AddInfoBoxString(text, true); const bool floatingInfoBoxEnabled = *GetOptions().Gameplay.floatingInfoBox;
AddInfoBoxString(text, floatingInfoBoxEnabled);
} }
} }
@ -4056,36 +4067,38 @@ void PrintItemDetails(const Item &item)
if (HeadlessMode) if (HeadlessMode)
return; return;
const bool floatingInfoBoxEnabled = *GetOptions().Gameplay.floatingInfoBox;
if (item._iClass == ICLASS_WEAPON) { if (item._iClass == ICLASS_WEAPON) {
if (item._iMinDam == item._iMaxDam) { if (item._iMinDam == item._iMaxDam) {
if (item._iMaxDur == DUR_INDESTRUCTIBLE) if (item._iMaxDur == DUR_INDESTRUCTIBLE)
AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d} Indestructible")), item._iMinDam), true); AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d} Indestructible")), item._iMinDam), floatingInfoBoxEnabled);
else else
AddInfoBoxString(fmt::format(fmt::runtime(_(/* TRANSLATORS: Dur: is durability */ "damage: {:d} Dur: {:d}/{:d}")), item._iMinDam, item._iDurability, item._iMaxDur), true); AddInfoBoxString(fmt::format(fmt::runtime(_(/* TRANSLATORS: Dur: is durability */ "damage: {:d} Dur: {:d}/{:d}")), item._iMinDam, item._iDurability, item._iMaxDur), floatingInfoBoxEnabled);
} else { } else {
if (item._iMaxDur == DUR_INDESTRUCTIBLE) if (item._iMaxDur == DUR_INDESTRUCTIBLE)
AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d}-{:d} Indestructible")), item._iMinDam, item._iMaxDam), true); AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d}-{:d} Indestructible")), item._iMinDam, item._iMaxDam), floatingInfoBoxEnabled);
else else
AddInfoBoxString(fmt::format(fmt::runtime(_(/* TRANSLATORS: Dur: is durability */ "damage: {:d}-{:d} Dur: {:d}/{:d}")), item._iMinDam, item._iMaxDam, item._iDurability, item._iMaxDur), true); AddInfoBoxString(fmt::format(fmt::runtime(_(/* TRANSLATORS: Dur: is durability */ "damage: {:d}-{:d} Dur: {:d}/{:d}")), item._iMinDam, item._iMaxDam, item._iDurability, item._iMaxDur), floatingInfoBoxEnabled);
} }
} }
if (item._iClass == ICLASS_ARMOR) { if (item._iClass == ICLASS_ARMOR) {
if (item._iMaxDur == DUR_INDESTRUCTIBLE) if (item._iMaxDur == DUR_INDESTRUCTIBLE)
AddInfoBoxString(fmt::format(fmt::runtime(_("armor: {:d} Indestructible")), item._iAC), true); AddInfoBoxString(fmt::format(fmt::runtime(_("armor: {:d} Indestructible")), item._iAC), floatingInfoBoxEnabled);
else else
AddInfoBoxString(fmt::format(fmt::runtime(_(/* TRANSLATORS: Dur: is durability */ "armor: {:d} Dur: {:d}/{:d}")), item._iAC, item._iDurability, item._iMaxDur), true); AddInfoBoxString(fmt::format(fmt::runtime(_(/* TRANSLATORS: Dur: is durability */ "armor: {:d} Dur: {:d}/{:d}")), item._iAC, item._iDurability, item._iMaxDur), floatingInfoBoxEnabled);
} }
if (item._iMiscId == IMISC_STAFF && item._iMaxCharges != 0) { if (item._iMiscId == IMISC_STAFF && item._iMaxCharges != 0) {
AddInfoBoxString(fmt::format(fmt::runtime(_("Charges: {:d}/{:d}")), item._iCharges, item._iMaxCharges), true); AddInfoBoxString(fmt::format(fmt::runtime(_("Charges: {:d}/{:d}")), item._iCharges, item._iMaxCharges), floatingInfoBoxEnabled);
} }
if (item._iPrePower != -1) { if (item._iPrePower != -1) {
AddInfoBoxString(PrintItemPower(item._iPrePower, item), true); AddInfoBoxString(PrintItemPower(item._iPrePower, item), floatingInfoBoxEnabled);
} }
if (item._iSufPower != -1) { if (item._iSufPower != -1) {
AddInfoBoxString(PrintItemPower(item._iSufPower, item), true); AddInfoBoxString(PrintItemPower(item._iSufPower, item), floatingInfoBoxEnabled);
} }
if (item._iMagical == ITEM_QUALITY_UNIQUE) { if (item._iMagical == ITEM_QUALITY_UNIQUE) {
AddInfoBoxString(_("unique item"), true); AddInfoBoxString(_("unique item"), floatingInfoBoxEnabled);
ShowUniqueItemInfoBox = true; ShowUniqueItemInfoBox = true;
curruitem = item; curruitem = item;
} }
@ -4097,37 +4110,39 @@ void PrintItemDur(const Item &item)
if (HeadlessMode) if (HeadlessMode)
return; return;
const bool floatingInfoBoxEnabled = *GetOptions().Gameplay.floatingInfoBox;
if (item._iClass == ICLASS_WEAPON) { if (item._iClass == ICLASS_WEAPON) {
if (item._iMinDam == item._iMaxDam) { if (item._iMinDam == item._iMaxDam) {
if (item._iMaxDur == DUR_INDESTRUCTIBLE) if (item._iMaxDur == DUR_INDESTRUCTIBLE)
AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d} Indestructible")), item._iMinDam), true); AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d} Indestructible")), item._iMinDam), floatingInfoBoxEnabled);
else else
AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d} Dur: {:d}/{:d}")), item._iMinDam, item._iDurability, item._iMaxDur), true); AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d} Dur: {:d}/{:d}")), item._iMinDam, item._iDurability, item._iMaxDur), floatingInfoBoxEnabled);
} else { } else {
if (item._iMaxDur == DUR_INDESTRUCTIBLE) if (item._iMaxDur == DUR_INDESTRUCTIBLE)
AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d}-{:d} Indestructible")), item._iMinDam, item._iMaxDam), true); AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d}-{:d} Indestructible")), item._iMinDam, item._iMaxDam), floatingInfoBoxEnabled);
else else
AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d}-{:d} Dur: {:d}/{:d}")), item._iMinDam, item._iMaxDam, item._iDurability, item._iMaxDur), true); AddInfoBoxString(fmt::format(fmt::runtime(_("damage: {:d}-{:d} Dur: {:d}/{:d}")), item._iMinDam, item._iMaxDam, item._iDurability, item._iMaxDur), floatingInfoBoxEnabled);
} }
if (item._iMiscId == IMISC_STAFF && item._iMaxCharges > 0) { if (item._iMiscId == IMISC_STAFF && item._iMaxCharges > 0) {
AddInfoBoxString(fmt::format(fmt::runtime(_("Charges: {:d}/{:d}")), item._iCharges, item._iMaxCharges), true); AddInfoBoxString(fmt::format(fmt::runtime(_("Charges: {:d}/{:d}")), item._iCharges, item._iMaxCharges), floatingInfoBoxEnabled);
} }
if (item._iMagical != ITEM_QUALITY_NORMAL) if (item._iMagical != ITEM_QUALITY_NORMAL)
AddInfoBoxString(_("Not Identified"), true); AddInfoBoxString(_("Not Identified"), floatingInfoBoxEnabled);
} }
if (item._iClass == ICLASS_ARMOR) { if (item._iClass == ICLASS_ARMOR) {
if (item._iMaxDur == DUR_INDESTRUCTIBLE) if (item._iMaxDur == DUR_INDESTRUCTIBLE)
AddInfoBoxString(fmt::format(fmt::runtime(_("armor: {:d} Indestructible")), item._iAC), true); AddInfoBoxString(fmt::format(fmt::runtime(_("armor: {:d} Indestructible")), item._iAC), floatingInfoBoxEnabled);
else else
AddInfoBoxString(fmt::format(fmt::runtime(_("armor: {:d} Dur: {:d}/{:d}")), item._iAC, item._iDurability, item._iMaxDur), true); AddInfoBoxString(fmt::format(fmt::runtime(_("armor: {:d} Dur: {:d}/{:d}")), item._iAC, item._iDurability, item._iMaxDur), floatingInfoBoxEnabled);
if (item._iMagical != ITEM_QUALITY_NORMAL) if (item._iMagical != ITEM_QUALITY_NORMAL)
AddInfoBoxString(_("Not Identified"), true); AddInfoBoxString(_("Not Identified"), floatingInfoBoxEnabled);
if (item._iMiscId == IMISC_STAFF && item._iMaxCharges > 0) { if (item._iMiscId == IMISC_STAFF && item._iMaxCharges > 0) {
AddInfoBoxString(fmt::format(fmt::runtime(_("Charges: {:d}/{:d}")), item._iCharges, item._iMaxCharges), true); AddInfoBoxString(fmt::format(fmt::runtime(_("Charges: {:d}/{:d}")), item._iCharges, item._iMaxCharges), floatingInfoBoxEnabled);
} }
} }
if (IsAnyOf(item._itype, ItemType::Ring, ItemType::Amulet)) if (IsAnyOf(item._itype, ItemType::Ring, ItemType::Amulet))
AddInfoBoxString(_("Not Identified"), true); AddInfoBoxString(_("Not Identified"), floatingInfoBoxEnabled);
PrintItemInfo(item); PrintItemInfo(item);
} }

Loading…
Cancel
Save