1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-10 00:43:59 +02:00
vcmi/client/widgets/CComponentHolder.h

87 lines
2.5 KiB
C++
Raw Normal View History

/*
2024-10-20 14:27:21 +02:00
* CComponentHolder.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 "MiscWidgets.h"
class CAnimImage;
2024-10-20 14:27:21 +02:00
class CComponentHolder : public SelectableSlot
{
2023-11-04 22:15:03 +02:00
public:
2024-10-20 14:27:21 +02:00
using ClickFunctor = std::function<void(CComponentHolder&, const Point&)>;
2024-10-20 14:27:21 +02:00
ClickFunctor clickPressedCallback;
ClickFunctor showPopupCallback;
ClickFunctor gestureCallback;
std::shared_ptr<CAnimImage> image;
CComponentHolder(const Rect & area, const Point & selectionOversize);
void setClickPressedCallback(const ClickFunctor & callback);
void setShowPopupCallback(const ClickFunctor & callback);
void setGestureCallback(const ClickFunctor & callback);
void clickPressed(const Point & cursorPosition) override;
void showPopupWindow(const Point & cursorPosition) override;
void gesture(bool on, const Point & initialPosition, const Point & finalPosition) override;
};
class CArtPlace : public CComponentHolder
{
public:
ArtifactPosition slot;
2024-04-23 19:26:21 +02:00
2024-10-21 20:49:22 +02:00
CArtPlace(Point position, const ArtifactID & newArtId = ArtifactID::NONE, const SpellID & newSpellId = SpellID::NONE);
void setArtifact(const SpellID & newSpellId);
void setArtifact(const ArtifactID & newArtId, const SpellID & newSpellId = SpellID::NONE);
2024-10-19 15:25:26 +02:00
ArtifactID getArtifactId() const;
2023-11-04 22:15:03 +02:00
void lockSlot(bool on);
bool isLocked() const;
2024-05-21 19:00:13 +02:00
void addCombinedArtInfo(const std::map<const ArtifactID, std::vector<ArtifactID>> & arts);
2023-11-04 22:15:03 +02:00
2024-04-23 19:26:21 +02:00
private:
2024-10-19 15:25:26 +02:00
ArtifactID artId;
SpellID spellId;
2023-11-04 22:15:03 +02:00
bool locked;
2024-10-19 15:25:26 +02:00
int32_t imageIndex;
};
class CCommanderArtPlace : public CArtPlace
{
2024-04-23 19:26:21 +02:00
private:
const CGHeroInstance * commanderOwner;
ArtifactPosition commanderSlotID;
void returnArtToHeroCallback();
2023-04-23 13:09:49 +02:00
public:
2024-10-19 15:25:26 +02:00
CCommanderArtPlace(Point position, const CGHeroInstance * commanderOwner, ArtifactPosition artSlot,
const ArtifactID & artId = ArtifactID::NONE, const SpellID & spellId = SpellID::NONE);
void clickPressed(const Point & cursorPosition) override;
void showPopupWindow(const Point & cursorPosition) override;
};
2024-10-20 14:27:21 +02:00
class CSecSkillPlace : public CComponentHolder
{
public:
2024-10-21 20:49:22 +02:00
enum class ImageSize
{
LARGE,
MEDIUM,
SMALL
};
CSecSkillPlace(const Point & position, const ImageSize & imageSize, const SecondarySkill & skillId = SecondarySkill::NONE, const uint8_t level = 0);
void setSkill(const SecondarySkill & newSkillId, const uint8_t level = 0);
void setLevel(const uint8_t level);
2024-10-20 14:27:21 +02:00
private:
SecondarySkill skillId;
};