| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /*
- * CTradeBase.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #pragma once
- #include "Images.h"
- #include "../../lib/FunctionList.h"
- VCMI_LIB_NAMESPACE_BEGIN
- class IMarket;
- class CGHeroInstance;
- VCMI_LIB_NAMESPACE_END
- class CButton;
- class CTextBox;
- class CTradeBase
- {
- public:
- enum EType
- {
- RESOURCE, PLAYER, ARTIFACT_TYPE, CREATURE, CREATURE_PLACEHOLDER, ARTIFACT_PLACEHOLDER, ARTIFACT_INSTANCE
- };
- class CTradeableItem : public CIntObject, public std::enable_shared_from_this<CTradeableItem>
- {
- std::shared_ptr<CAnimImage> image;
- AnimationPath getFilename();
- int getIndex();
- public:
- const CArtifactInstance * hlp; //holds ptr to artifact instance id type artifact
- EType type;
- int id;
- const int serial;
- const bool left;
- std::string subtitle; //empty if default
- std::function<void(std::shared_ptr<CTradeableItem> altarSlot)> clickPressedCallback;
- void setType(EType newType);
- void setID(int newID);
- const CArtifactInstance* getArtInstance() const;
- void setArtInstance(const CArtifactInstance * art);
- CFunctionList<void()> callback;
- bool downSelection;
- void showAllAt(const Point & dstPos, const std::string & customSub, Canvas & to);
- void showPopupWindow(const Point & cursorPosition) override;
- void hover(bool on) override;
- void showAll(Canvas & to) override;
- void clickPressed(const Point & cursorPosition) override;
- std::string getName(int number = -1) const;
- CTradeableItem(Point pos, EType Type, int ID, bool Left, int Serial);
- };
- const IMarket * market;
- const CGHeroInstance * hero;
- //all indexes: 1 = left, 0 = right
- std::array<std::vector<std::shared_ptr<CTradeableItem>>, 2> items;
- //highlighted items (nullptr if no highlight)
- std::shared_ptr<CTradeableItem> hLeft;
- std::shared_ptr<CTradeableItem> hRight;
- std::shared_ptr<CButton> deal;
- CTradeBase(const IMarket * market, const CGHeroInstance * hero);
- void removeItems(const std::set<std::shared_ptr<CTradeableItem>> & toRemove);
- void removeItem(std::shared_ptr<CTradeableItem> item);
- void getEmptySlots(std::set<std::shared_ptr<CTradeableItem>> & toRemove);
- virtual void makeDeal() = 0;
- protected:
- std::vector<std::shared_ptr<CLabel>> labels;
- std::vector<std::shared_ptr<CButton>> buttons;
- std::vector<std::shared_ptr<CTextBox>> texts;
- };
|