2
0

CComponentHolder.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * CComponentHolder.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include "MiscWidgets.h"
  12. class CAnimImage;
  13. class CComponentHolder : public SelectableSlot
  14. {
  15. public:
  16. using ClickFunctor = std::function<void(CComponentHolder&, const Point&)>;
  17. ClickFunctor clickPressedCallback;
  18. ClickFunctor showPopupCallback;
  19. std::function<void()> closePopupWindowCallback;
  20. ClickFunctor gestureCallback;
  21. std::shared_ptr<CAnimImage> image;
  22. CComponentHolder(const Rect & area, const Point & selectionOversize);
  23. void setClickPressedCallback(const ClickFunctor & callback);
  24. void setShowPopupCallback(const ClickFunctor & callback);
  25. void setClosePopupWindowCallback(const std::function<void()> & callback);
  26. void setGestureCallback(const ClickFunctor & callback);
  27. void clickPressed(const Point & cursorPosition) override;
  28. void showPopupWindow(const Point & cursorPosition) override;
  29. void closePopupWindow(bool alreadyClosed) override;
  30. void gesture(bool on, const Point & initialPosition, const Point & finalPosition) override;
  31. };
  32. class CArtPlace : public CComponentHolder
  33. {
  34. public:
  35. ArtifactPosition slot;
  36. CArtPlace(Point position, const ArtifactID & newArtId = ArtifactID::NONE, const SpellID & newSpellId = SpellID::NONE);
  37. void setArtifact(const SpellID & newSpellId);
  38. void setArtifact(const ArtifactID & newArtId, const SpellID & newSpellId = SpellID::NONE);
  39. ArtifactID getArtifactId() const;
  40. void lockSlot(bool on);
  41. bool isLocked() const;
  42. void addCombinedArtInfo(const std::map<const ArtifactID, std::vector<ArtifactID>> & arts);
  43. void addChargedArtInfo(const uint16_t charges);
  44. private:
  45. ArtifactID artId;
  46. SpellID spellId;
  47. bool locked;
  48. int32_t imageIndex;
  49. };
  50. class CCommanderArtPlace : public CArtPlace
  51. {
  52. private:
  53. const CGHeroInstance * commanderOwner;
  54. ArtifactPosition commanderSlotID;
  55. void returnArtToHeroCallback();
  56. public:
  57. CCommanderArtPlace(Point position, const CGHeroInstance * commanderOwner, ArtifactPosition artSlot,
  58. const ArtifactID & artId = ArtifactID::NONE, const SpellID & spellId = SpellID::NONE);
  59. void clickPressed(const Point & cursorPosition) override;
  60. void showPopupWindow(const Point & cursorPosition) override;
  61. };
  62. class CSecSkillPlace : public CComponentHolder
  63. {
  64. public:
  65. enum class ImageSize
  66. {
  67. LARGE,
  68. MEDIUM,
  69. SMALL
  70. };
  71. CSecSkillPlace(const Point & position, const ImageSize & imageSize, const SecondarySkill & skillId = SecondarySkill::NONE, const uint8_t level = 0);
  72. void setSkill(const SecondarySkill & newSkillId, const uint8_t level = 0);
  73. void setLevel(const uint8_t level);
  74. private:
  75. SecondarySkill skillId;
  76. };