Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/gui/GUIutil.h
Show All 9 Lines | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
* GNU General Public License for more details. | * GNU General Public License for more details. | ||||
* | * | ||||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | ||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. | * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
/* | |||||
Contains help class GUI<>, which gives us templated | |||||
parameter to all functions within GUI. | |||||
*/ | |||||
#ifndef INCLUDED_GUIUTIL | #ifndef INCLUDED_GUIUTIL | ||||
#define INCLUDED_GUIUTIL | #define INCLUDED_GUIUTIL | ||||
#include "gui/IGUIObject.h" | #include "gui/IGUIObject.h" | ||||
#include <functional> | |||||
class CGUI; | class CGUI; | ||||
template<typename T> class GUI; | template<typename T> class GUI; | ||||
class IGUISetting | class IGUISetting | ||||
{ | { | ||||
public: | public: | ||||
NONCOPYABLE(IGUISetting); | NONCOPYABLE(IGUISetting); | ||||
IGUISetting() = default; | IGUISetting() = default; | ||||
virtual ~IGUISetting() = default; | virtual ~IGUISetting() = default; | ||||
/** | /** | ||||
* Parses the given string and assigns to the setting value. Used for parsing XML attributes. | * Parses the given string and assigns to the setting value. Used for parsing XML attributes. | ||||
*/ | */ | ||||
virtual bool FromString(const CStrW& Value, const bool& SkipMessage) = 0; | virtual bool FromString(const CStrW& Value, const bool SendMessage) = 0; | ||||
/** | /** | ||||
* Parses the given JS::Value using ScriptInterface::FromJSVal and assigns it to the setting data. | * Parses the given JS::Value using ScriptInterface::FromJSVal and assigns it to the setting data. | ||||
*/ | */ | ||||
virtual bool FromJSVal(JSContext* cx, JS::HandleValue Value) = 0; | virtual bool FromJSVal(JSContext* cx, JS::HandleValue Value, const bool SendMessage) = 0; | ||||
/** | /** | ||||
* Converts the setting data to a JS::Value using ScriptInterface::ToJSVal. | * Converts the setting data to a JS::Value using ScriptInterface::ToJSVal. | ||||
*/ | */ | ||||
virtual void ToJSVal(JSContext* cx, JS::MutableHandleValue Value) = 0; | virtual void ToJSVal(JSContext* cx, JS::MutableHandleValue Value) = 0; | ||||
}; | }; | ||||
template<typename T> | template<typename T> | ||||
class CGUISetting : public IGUISetting | class CGUISetting : public IGUISetting | ||||
{ | { | ||||
friend class GUI<T>; | friend class GUI<T>; | ||||
public: | public: | ||||
NONCOPYABLE(CGUISetting); | NONCOPYABLE(CGUISetting); | ||||
CGUISetting(IGUIObject& pObject, const CStr& Name); | CGUISetting(IGUIObject& pObject, const CStr& Name); | ||||
/** | /** | ||||
* Parses the given string and assigns to the setting value. Used for parsing XML attributes. | * Parses the given string and assigns to the setting value. Used for parsing XML attributes. | ||||
*/ | */ | ||||
bool FromString(const CStrW& Value, const bool& SkipMessage) override; | bool FromString(const CStrW& Value, const bool SendMessage) override; | ||||
/** | /** | ||||
* Parses the given JS::Value using ScriptInterface::FromJSVal and assigns it to the setting data. | * Parses the given JS::Value using ScriptInterface::FromJSVal and assigns it to the setting data. | ||||
*/ | */ | ||||
bool FromJSVal(JSContext* cx, JS::HandleValue Value) override; | bool FromJSVal(JSContext* cx, JS::HandleValue Value, const bool SendMessage) override; | ||||
/** | /** | ||||
* Converts the setting data to a JS::Value using ScriptInterface::ToJSVal. | * Converts the setting data to a JS::Value using ScriptInterface::ToJSVal. | ||||
*/ | */ | ||||
void ToJSVal(JSContext* cx, JS::MutableHandleValue Value) override; | void ToJSVal(JSContext* cx, JS::MutableHandleValue Value) override; | ||||
/** | /** | ||||
* These members are public because they are either unmodifiable or free to be modified. | * These members are public because they are either unmodifiable or free to be modified. | ||||
* In particular it avoids the need for setter templates specialized depending on copiability. | |||||
*/ | */ | ||||
/** | /** | ||||
* The object that stores this setting. | * The object that stores this setting. | ||||
*/ | */ | ||||
IGUIObject& m_pObject; | IGUIObject& m_pObject; | ||||
/** | /** | ||||
* Property name identifying the setting. | * Property name identifying the setting. | ||||
*/ | */ | ||||
const CStr m_Name; | const CStr m_Name; | ||||
/** | /** | ||||
* Holds the value of the setting. | * Holds the value of the setting. | ||||
*/ | */ | ||||
T m_pSetting; | T m_pSetting; | ||||
}; | }; | ||||
/** | |||||
* Includes static functions that needs one template | |||||
* argument. | |||||
*/ | |||||
template <typename T> | template <typename T> | ||||
class GUI | class GUI | ||||
{ | { | ||||
public: | public: | ||||
NONCOPYABLE(GUI); | NONCOPYABLE(GUI); | ||||
/** | |||||
* Sets a value by name using a real datatype as input. | |||||
* This variant will use the move-assignment. | |||||
* | |||||
* @param pObject Object pointer | |||||
* @param Setting Setting by name | |||||
* @param Value Sets value to this, note type T! | |||||
* @param SkipMessage Does not send a GUIM_SETTINGS_UPDATED if true | |||||
*/ | |||||
static PSRETURN SetSetting(IGUIObject* pObject, const CStr& Setting, T& Value, const bool& SkipMessage = false); | |||||
/** | |||||
* This variant will copy the value. | |||||
*/ | |||||
static PSRETURN SetSetting(IGUIObject* pObject, const CStr& Setting, const T& Value, const bool& SkipMessage = false); | |||||
/** | /** | ||||
* Sets a value by setting and object name using a real | * Sets a value by setting and object name using a real | ||||
* datatype as input. | * datatype as input. | ||||
* | * | ||||
* @param Value The value in string form, like "0 0 100% 100%" | * @param Value The value in string form, like "0 0 100% 100%" | ||||
* @param tOutput Parsed value of type T | * @param tOutput Parsed value of type T | ||||
* @return True at success. | * @return True at success. | ||||
*/ | */ | ||||
static bool ParseString(const CGUI* pGUI, const CStrW& Value, T& tOutput); | static bool ParseString(const CGUI* pGUI, const CStrW& Value, T& tOutput); | ||||
private: | |||||
/** | |||||
* Changes the value of the setting by calling the valueSet functon that performs either a copy or move assignment. | |||||
* Updates some internal data depending on the setting changed. | |||||
*/ | |||||
static PSRETURN SetSettingWrap(IGUIObject* pObject, const CStr& Setting, const bool& SkipMessage, const std::function<void()>& valueSet); | |||||
}; | }; | ||||
#endif // INCLUDED_GUIUTIL | #endif // INCLUDED_GUIUTIL |
Wildfire Games · Phabricator