diff options
Diffstat (limited to 'src/gui/models')
-rw-r--r-- | src/gui/models/shopitems.cpp | 19 | ||||
-rw-r--r-- | src/gui/models/shopitems.h | 3 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/gui/models/shopitems.cpp b/src/gui/models/shopitems.cpp index 2fd399cb0..3a0d933cc 100644 --- a/src/gui/models/shopitems.cpp +++ b/src/gui/models/shopitems.cpp @@ -111,11 +111,27 @@ ShopItem *ShopItems::at(unsigned int i) const return mShopItems.at(i); } +bool ShopItems::findInAllItems(std::vector<ShopItem*>::iterator &it, + const ShopItem *const item) +{ + const std::vector<ShopItem*>::iterator it_end = mAllShopItems.end(); + for (it = mAllShopItems.begin(); it != it_end; ++ it) + { + if (*it == item) + return true; + } + return false; +} + void ShopItems::erase(const unsigned int i) { if (i >= static_cast<unsigned int>(mShopItems.size())) return; + ShopItem *item = *(mShopItems.begin() + i); + std::vector<ShopItem*>::iterator it; + if (findInAllItems(it, item)) + mAllShopItems.erase(it); mShopItems.erase(mShopItems.begin() + i); } @@ -125,6 +141,9 @@ void ShopItems::del(const unsigned int i) return; ShopItem *item = *(mShopItems.begin() + i); + std::vector<ShopItem*>::iterator it; + if (findInAllItems(it, item)) + mAllShopItems.erase(it); mShopItems.erase(mShopItems.begin() + i); delete item; } diff --git a/src/gui/models/shopitems.h b/src/gui/models/shopitems.h index 50269cff1..b222f9385 100644 --- a/src/gui/models/shopitems.h +++ b/src/gui/models/shopitems.h @@ -147,6 +147,9 @@ class ShopItems final : public ListModel ShopItem *findItem(const int id, const unsigned char color) const A_WARN_UNUSED; + bool findInAllItems(std::vector<ShopItem*>::iterator &it, + const ShopItem *const item); + /** The list of items in the shop. */ std::vector<ShopItem*> mAllShopItems; |