1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-17 01:10:10 +00:00
OpenMW/apps/openmw/mwgui/tradeitemmodel.hpp
2022-09-22 21:35:26 +03:00

60 lines
1.8 KiB
C++

#ifndef MWGUI_TRADE_ITEM_MODEL_H
#define MWGUI_TRADE_ITEM_MODEL_H
#include "itemmodel.hpp"
namespace MWGui
{
class ItemModel;
/// @brief An item model that allows 'borrowing' items from another item model. Used for previewing barter offers.
/// Also filters items that the merchant does not sell.
class TradeItemModel : public ProxyItemModel
{
public:
TradeItemModel(std::unique_ptr<ItemModel> sourceModel, const MWWorld::Ptr& merchant);
bool allowedToUseItems() const override;
ItemStack getItem(ModelIndex index) override;
size_t getItemCount() override;
void update() override;
void borrowItemFromUs(ModelIndex itemIndex, size_t count);
void borrowItemToUs(ModelIndex itemIndex, ItemModel* source, size_t count);
///< @note itemIndex points to an item in \a source
void returnItemBorrowedToUs(ModelIndex itemIndex, size_t count);
void returnItemBorrowedFromUs(ModelIndex itemIndex, ItemModel* source, size_t count);
/// Permanently transfers items that were borrowed to us from another model to this model
void transferItems();
/// Aborts trade
void abort();
/// Adjusts the given encumbrance by adding weight for items that have been lent to us,
/// and removing weight for items we've lent to someone else.
void adjustEncumbrance(float& encumbrance);
const std::vector<ItemStack> getItemsBorrowedToUs() const;
private:
void borrowImpl(const ItemStack& item, std::vector<ItemStack>& out);
void unborrowImpl(const ItemStack& item, size_t count, std::vector<ItemStack>& out);
std::vector<ItemStack> mItems;
std::vector<ItemStack> mBorrowedToUs;
std::vector<ItemStack> mBorrowedFromUs;
MWWorld::Ptr mMerchant;
};
}
#endif