From c6997f8ee41d5f85dd8a1269e82982e1ab0b5c74 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 11 Nov 2015 21:29:51 +0300 Subject: In personal shops in sell dialog shop no existing items with amount 0 and disabled. Only for legacy servers. --- src/gui/widgets/selldialog.cpp | 13 +++++++------ src/gui/widgets/selldialog.h | 11 ++++++----- src/gui/widgets/shoplistbox.cpp | 7 ++++--- src/gui/windows/shopwindow.cpp | 18 ++++++++++++++---- src/shopitem.cpp | 3 ++- src/shopitem.h | 7 +++++++ 6 files changed, 40 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/gui/widgets/selldialog.cpp b/src/gui/widgets/selldialog.cpp index 3ad8e5e7e..76cea21f2 100644 --- a/src/gui/widgets/selldialog.cpp +++ b/src/gui/widgets/selldialog.cpp @@ -218,18 +218,19 @@ void SellDialog::addItem(const Item *const item, const int price) mShopItemList->adjustSize(); } -void SellDialog::addItem(const int id, - const int type, - const ItemColor color, - const int amount, - const int price) +ShopItem *SellDialog::addItem(const int id, + const int type, + const ItemColor color, + const int amount, + const int price) { - mShopItems->addItem(id, + ShopItem *const item = mShopItems->addItem(id, type, color, amount, price); mShopItemList->adjustSize(); + return item; } diff --git a/src/gui/widgets/selldialog.h b/src/gui/widgets/selldialog.h index 92008df38..e94619f1f 100644 --- a/src/gui/widgets/selldialog.h +++ b/src/gui/widgets/selldialog.h @@ -34,6 +34,7 @@ class Button; class Item; class Label; class ScrollArea; +class ShopItem; class ShopItems; class ShopListBox; class Slider; @@ -93,11 +94,11 @@ class SellDialog notfinal : public Window, */ void setVisible(Visible visible) override final; - void addItem(const int id, - const int type, - const ItemColor color, - const int amount, - const int price); + ShopItem *addItem(const int id, + const int type, + const ItemColor color, + const int amount, + const int price); /** * Returns true if any instances exist. diff --git a/src/gui/widgets/shoplistbox.cpp b/src/gui/widgets/shoplistbox.cpp index c8f1bd889..6cdf58d2e 100644 --- a/src/gui/widgets/shoplistbox.cpp +++ b/src/gui/widgets/shoplistbox.cpp @@ -106,9 +106,10 @@ void ShopListBox::draw(Graphics *graphics) Color* backgroundColor = &mBackgroundColor; ShopItem *const item = mShopItems->at(i); - if (item && ((mShopItems && mPlayerMoney < item->getPrice() - && mPriceCheck) - || (mProtectItems && PlayerInfo::isItemProtected(item->getId())))) + if (item && + (item->getDisabled() || + (mShopItems && mPlayerMoney < item->getPrice() && mPriceCheck) || + (mProtectItems && PlayerInfo::isItemProtected(item->getId())))) { if (i != mSelected) { diff --git a/src/gui/windows/shopwindow.cpp b/src/gui/windows/shopwindow.cpp index 645ae5314..67e361715 100644 --- a/src/gui/windows/shopwindow.cpp +++ b/src/gui/windows/shopwindow.cpp @@ -849,15 +849,25 @@ void ShopWindow::showList(const std::string &nick, std::string data) { // +++ need support for colors const Item *const item = inv->findItem(id, ItemColor_zero); + bool enabled(true); + if (item) { if (item->getQuantity() < amount) amount = item->getQuantity(); - if (amount > 0) - sellDialog->addItem(id, 0, ItemColor_one, amount, price); - else - sellDialog->addItem(id, 0, ItemColor_one, -1, price); } + else + { + amount = 0; + } + ShopItem *const shopItem = sellDialog->addItem(id, + 0, + ItemColor_one, + amount, + price); + + if (shopItem && amount <= 0) + shopItem->setDisabled(true); } } if (buyDialog) diff --git a/src/shopitem.cpp b/src/shopitem.cpp index eb7499522..db60e35f8 100644 --- a/src/shopitem.cpp +++ b/src/shopitem.cpp @@ -49,7 +49,8 @@ ShopItem::ShopItem(const int inventoryIndex, mPrice(price), mUsedQuantity(0), mShowQuantity(true), - mVisible(true) + mVisible(true), + mDisabled(false) { updateDisplayName(quantity); setInvIndex(inventoryIndex); diff --git a/src/shopitem.h b/src/shopitem.h index bfe7fe39a..36ccf3c65 100644 --- a/src/shopitem.h +++ b/src/shopitem.h @@ -148,6 +148,12 @@ class ShopItem final : public Item int getUsedQuantity() const A_WARN_UNUSED { return mUsedQuantity; } + void setDisabled(const bool b) + { mDisabled = b; } + + bool getDisabled() const A_WARN_UNUSED + { return mDisabled; } + protected: void updateDisplayName(const int quantity); @@ -166,6 +172,7 @@ class ShopItem final : public Item int mUsedQuantity; bool mShowQuantity; bool mVisible; + bool mDisabled; }; #endif // SHOPITEM_H -- cgit v1.2.3-70-g09d2