| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- /*
 
- * InterfaceBuilder.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 "CIntObject.h"
 
- #include "TextAlignment.h"
 
- #include "../render/EFont.h"
 
- #include "../../lib/json/JsonNode.h"
 
- class CPicture;
 
- class CLabel;
 
- class CMultiLineLabel;
 
- class CToggleGroup;
 
- class CToggleButton;
 
- class CButton;
 
- class CLabelGroup;
 
- class CSlider;
 
- class CAnimImage;
 
- class CShowableAnim;
 
- class CFilledTexture;
 
- class ComboBox;
 
- class CTextInput;
 
- class TransparentFilledRectangle;
 
- class CTextBox;
 
- #define REGISTER_BUILDER(type, method) registerBuilder(type, std::bind(method, this, std::placeholders::_1))
 
- class InterfaceObjectConfigurable: public CIntObject
 
- {
 
- public:
 
- 	InterfaceObjectConfigurable(int used=0, Point offset=Point());
 
- 	InterfaceObjectConfigurable(const JsonNode & config, int used=0, Point offset=Point());
 
- protected:
 
- 	/// Set blocked status for all buttons associated with provided shortcut
 
- 	void setShortcutBlocked(EShortcut shortcut, bool isBlocked);
 
- 	/// Registers provided callback to be called whenever specified shortcut is triggered
 
- 	void addShortcut(EShortcut shortcut, std::function<void()> callback);
 
- 	void keyPressed(EShortcut key) override;
 
- 	using BuilderFunction = std::function<std::shared_ptr<CIntObject>(const JsonNode &)>;
 
- 	void registerBuilder(const std::string &, BuilderFunction);
 
- 	void loadCustomBuilders(const JsonNode & config);
 
- 	
 
- 	//must be called after adding callbacks
 
- 	void build(const JsonNode & config);
 
- 	void addConditional(const std::string & name, bool active);
 
- 	void addWidget(const std::string & name, std::shared_ptr<CIntObject> widget);
 
- 	
 
- 	void addCallback(const std::string & callbackName, std::function<void(int)> callback);
 
- 	void addCallback(const std::string & callbackName, std::function<void(std::string)> callback);
 
- 	JsonNode variables;
 
- 	
 
- 	template<class T>
 
- 	const std::shared_ptr<T> widget(const std::string & name) const
 
- 	{
 
- 		auto iter = widgets.find(name);
 
- 		if(iter == widgets.end())
 
- 			return nullptr;
 
- 		return std::dynamic_pointer_cast<T>(iter->second);
 
- 	}
 
- 	
 
- 	void deleteWidget(const std::string & name);
 
- 		
 
- 	//basic serializers
 
- 	Point readPosition(const JsonNode &) const;
 
- 	Rect readRect(const JsonNode &) const;
 
- 	ETextAlignment readTextAlignment(const JsonNode &) const;
 
- 	ColorRGBA readColor(const JsonNode &) const;
 
- 	EFonts readFont(const JsonNode &) const;
 
- 	std::string readText(const JsonNode &) const;
 
- 	std::pair<std::string, std::string> readHintText(const JsonNode &) const;
 
- 	EShortcut readHotkey(const JsonNode &) const;
 
- 	PlayerColor readPlayerColor(const JsonNode &) const;
 
- 	
 
- 	void loadToggleButtonCallback(std::shared_ptr<CToggleButton> button, const JsonNode & config) const;
 
- 	void loadButtonCallback(std::shared_ptr<CButton> button, const JsonNode & config) const;
 
- 	void loadButtonHotkey(std::shared_ptr<CButton> button, const JsonNode & config) const;
 
- 	void loadButtonBorderColor(std::shared_ptr<CButton> button, const JsonNode & config) const;
 
- 	//basic widgets
 
- 	std::shared_ptr<CPicture> buildPicture(const JsonNode &) const;
 
- 	std::shared_ptr<CLabel> buildLabel(const JsonNode &) const;
 
- 	std::shared_ptr<CMultiLineLabel> buildMultiLineLabel(const JsonNode &) const;
 
- 	std::shared_ptr<CToggleGroup> buildToggleGroup(const JsonNode &) const;
 
- 	std::shared_ptr<CToggleButton> buildToggleButton(const JsonNode &) const;
 
- 	std::shared_ptr<CButton> buildButton(const JsonNode &) const;
 
- 	std::shared_ptr<CLabelGroup> buildLabelGroup(const JsonNode &) const;
 
- 	std::shared_ptr<CSlider> buildSlider(const JsonNode &) const;
 
- 	std::shared_ptr<CAnimImage> buildImage(const JsonNode &) const;
 
- 	std::shared_ptr<CShowableAnim> buildAnimation(const JsonNode &) const;
 
- 	std::shared_ptr<CFilledTexture> buildTexture(const JsonNode &) const;
 
- 	std::shared_ptr<CIntObject> buildLayout(const JsonNode &);
 
- 	std::shared_ptr<ComboBox> buildComboBox(const JsonNode &);
 
- 	std::shared_ptr<CTextInput> buildTextInput(const JsonNode &) const;
 
- 	std::shared_ptr<TransparentFilledRectangle> buildTransparentFilledRectangle(const JsonNode & config) const;
 
- 	std::shared_ptr<CIntObject> buildGraphicalPrimitive(const JsonNode & config) const;
 
- 	std::shared_ptr<CTextBox> buildTextBox(const JsonNode & config) const;
 
- 		
 
- 	//composite widgets
 
- 	std::shared_ptr<CIntObject> buildWidget(JsonNode config) const;
 
- 	
 
- private:
 
- 	struct ShortcutState
 
- 	{
 
- 		std::function<void()> callback;
 
- 		mutable std::vector<std::shared_ptr<CButton>> assignedButtons;
 
- 		bool blocked = false;
 
- 	};
 
- 	
 
- 	int unnamedObjectId = 0;
 
- 	std::map<std::string, BuilderFunction> builders;
 
- 	std::map<std::string, std::shared_ptr<CIntObject>> widgets;
 
- 	std::map<std::string, std::function<void(int)>> callbacks_int;
 
- 	std::map<std::string, std::function<void(std::string)>> callbacks_string;
 
- 	std::map<std::string, bool> conditionals;
 
- 	std::map<EShortcut, ShortcutState> shortcuts;
 
- };
 
 
  |