2019-07-19 23:15:04 +02:00
|
|
|
/* Copyright (C) 2019 Wildfire Games.
|
2009-04-18 19:00:33 +02:00
|
|
|
* This file is part of 0 A.D.
|
|
|
|
*
|
|
|
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* 0 A.D. is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* 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/>.
|
|
|
|
*/
|
|
|
|
|
2019-08-29 11:07:29 +02:00
|
|
|
#ifndef INCLUDED_CGUISETTINGS
|
|
|
|
#define INCLUDED_CGUISETTINGS
|
2003-11-06 01:21:45 +01:00
|
|
|
|
2019-07-26 20:57:28 +02:00
|
|
|
#include "gui/IGUIObject.h"
|
2003-11-06 01:21:45 +01:00
|
|
|
|
2019-08-29 11:07:29 +02:00
|
|
|
/**
|
|
|
|
* This setting interface allows GUI objects to call setting function functions without having to know the setting type.
|
|
|
|
* This is fact is used for setting the value from a JS value or XML value (string) and when deleting the setting,
|
|
|
|
* when the type of the setting value is not known in advance.
|
|
|
|
*/
|
2019-08-04 04:20:08 +02:00
|
|
|
class IGUISetting
|
|
|
|
{
|
|
|
|
public:
|
Use NONCOPYABLE for most GUI classes and structs to have the compiler indicate unintended copies, refs 3028551b91 / D2163.
That is CChartData, CGUIList, CGUISeries, COListColumn, GUITooltip,
SGUIMessage, SSpriteCall, STextCall, SFeedback, IGUISetting,
CGUISetting, GUI, IGUIObject, IGUIScrollBar.
Drop copying GetSetting and SetSetting template functions for CGUIList,
CGUISeries, CClientArea, CGUIString.
Stop copying COListColumn.
Drop copying GUI<CClientArea>::GetSetting call in
IGUIObject::UpdateCachedSize() and four copying
GUI<CGUIString>::GetSetting calls in SetupText() functions.
Delete unused GUIRenderer IGLState class from 849f50a500 obsolete since
1f5b8f1c9a.
Differential Revision: https://code.wildfiregames.com/D2164
This was SVN commit r22638.
2019-08-10 02:04:17 +02:00
|
|
|
NONCOPYABLE(IGUISetting);
|
|
|
|
|
|
|
|
IGUISetting() = default;
|
|
|
|
virtual ~IGUISetting() = default;
|
2019-08-04 04:20:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Parses the given string and assigns to the setting value. Used for parsing XML attributes.
|
|
|
|
*/
|
Move static GUI<>::SetSetting operating on IGUIObject to a member IGUIObject::SetSetting.
Remove PSERROR codes from SetSetting (let std::map throw an out_of_range
if a caller wants to Set a setting that doesn't exist without having
checked with SettingExists, equal to GetSetting from 92b6cdfeab).
That also simplifies std::function SetSettingWrap construct from
0a7d0ecdde to void IGUIObject::SettingChanged.
Don't trigger debug_warn or exceptions in GUITooltip::ShowTooltip if the
XML author specified wrong tooltip input, and dodge another
dynamic_cast.
Rename existing IGUIObject::SetSetting to
IGUIObject::SetSettingFromString and comment that it is purposed for
parsing XML files.
Remove SetSetting default value, so that authors are made aware
explicitly of the need to decide the function broadcasting a message,
refs d87057b1c0, 719f2d7967, ...
Change const bool& SkipMessage to const bool SendMessage, so that a
positive value relates to a positive action.
Clean AddSettings whitespace and integer types.
Differential Revision: https://code.wildfiregames.com/D2231
Tested on: gcc 9.1.0, clang 8.0.1, Jenkins
Comments By: Philip on IRC on 2010-07-24 on GUIUtil being ugly, in case
that one counts
This was SVN commit r22796.
2019-08-28 13:21:11 +02:00
|
|
|
virtual bool FromString(const CStrW& Value, const bool SendMessage) = 0;
|
2019-08-04 04:20:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Parses the given JS::Value using ScriptInterface::FromJSVal and assigns it to the setting data.
|
|
|
|
*/
|
Move static GUI<>::SetSetting operating on IGUIObject to a member IGUIObject::SetSetting.
Remove PSERROR codes from SetSetting (let std::map throw an out_of_range
if a caller wants to Set a setting that doesn't exist without having
checked with SettingExists, equal to GetSetting from 92b6cdfeab).
That also simplifies std::function SetSettingWrap construct from
0a7d0ecdde to void IGUIObject::SettingChanged.
Don't trigger debug_warn or exceptions in GUITooltip::ShowTooltip if the
XML author specified wrong tooltip input, and dodge another
dynamic_cast.
Rename existing IGUIObject::SetSetting to
IGUIObject::SetSettingFromString and comment that it is purposed for
parsing XML files.
Remove SetSetting default value, so that authors are made aware
explicitly of the need to decide the function broadcasting a message,
refs d87057b1c0, 719f2d7967, ...
Change const bool& SkipMessage to const bool SendMessage, so that a
positive value relates to a positive action.
Clean AddSettings whitespace and integer types.
Differential Revision: https://code.wildfiregames.com/D2231
Tested on: gcc 9.1.0, clang 8.0.1, Jenkins
Comments By: Philip on IRC on 2010-07-24 on GUIUtil being ugly, in case
that one counts
This was SVN commit r22796.
2019-08-28 13:21:11 +02:00
|
|
|
virtual bool FromJSVal(JSContext* cx, JS::HandleValue Value, const bool SendMessage) = 0;
|
2019-08-04 04:20:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Converts the setting data to a JS::Value using ScriptInterface::ToJSVal.
|
|
|
|
*/
|
|
|
|
virtual void ToJSVal(JSContext* cx, JS::MutableHandleValue Value) = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
class CGUISetting : public IGUISetting
|
|
|
|
{
|
|
|
|
public:
|
Use NONCOPYABLE for most GUI classes and structs to have the compiler indicate unintended copies, refs 3028551b91 / D2163.
That is CChartData, CGUIList, CGUISeries, COListColumn, GUITooltip,
SGUIMessage, SSpriteCall, STextCall, SFeedback, IGUISetting,
CGUISetting, GUI, IGUIObject, IGUIScrollBar.
Drop copying GetSetting and SetSetting template functions for CGUIList,
CGUISeries, CClientArea, CGUIString.
Stop copying COListColumn.
Drop copying GUI<CClientArea>::GetSetting call in
IGUIObject::UpdateCachedSize() and four copying
GUI<CGUIString>::GetSetting calls in SetupText() functions.
Delete unused GUIRenderer IGLState class from 849f50a500 obsolete since
1f5b8f1c9a.
Differential Revision: https://code.wildfiregames.com/D2164
This was SVN commit r22638.
2019-08-10 02:04:17 +02:00
|
|
|
NONCOPYABLE(CGUISetting);
|
|
|
|
|
2019-08-04 04:20:08 +02:00
|
|
|
CGUISetting(IGUIObject& pObject, const CStr& Name);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Parses the given string and assigns to the setting value. Used for parsing XML attributes.
|
|
|
|
*/
|
Move static GUI<>::SetSetting operating on IGUIObject to a member IGUIObject::SetSetting.
Remove PSERROR codes from SetSetting (let std::map throw an out_of_range
if a caller wants to Set a setting that doesn't exist without having
checked with SettingExists, equal to GetSetting from 92b6cdfeab).
That also simplifies std::function SetSettingWrap construct from
0a7d0ecdde to void IGUIObject::SettingChanged.
Don't trigger debug_warn or exceptions in GUITooltip::ShowTooltip if the
XML author specified wrong tooltip input, and dodge another
dynamic_cast.
Rename existing IGUIObject::SetSetting to
IGUIObject::SetSettingFromString and comment that it is purposed for
parsing XML files.
Remove SetSetting default value, so that authors are made aware
explicitly of the need to decide the function broadcasting a message,
refs d87057b1c0, 719f2d7967, ...
Change const bool& SkipMessage to const bool SendMessage, so that a
positive value relates to a positive action.
Clean AddSettings whitespace and integer types.
Differential Revision: https://code.wildfiregames.com/D2231
Tested on: gcc 9.1.0, clang 8.0.1, Jenkins
Comments By: Philip on IRC on 2010-07-24 on GUIUtil being ugly, in case
that one counts
This was SVN commit r22796.
2019-08-28 13:21:11 +02:00
|
|
|
bool FromString(const CStrW& Value, const bool SendMessage) override;
|
2019-08-04 04:20:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Parses the given JS::Value using ScriptInterface::FromJSVal and assigns it to the setting data.
|
|
|
|
*/
|
Move static GUI<>::SetSetting operating on IGUIObject to a member IGUIObject::SetSetting.
Remove PSERROR codes from SetSetting (let std::map throw an out_of_range
if a caller wants to Set a setting that doesn't exist without having
checked with SettingExists, equal to GetSetting from 92b6cdfeab).
That also simplifies std::function SetSettingWrap construct from
0a7d0ecdde to void IGUIObject::SettingChanged.
Don't trigger debug_warn or exceptions in GUITooltip::ShowTooltip if the
XML author specified wrong tooltip input, and dodge another
dynamic_cast.
Rename existing IGUIObject::SetSetting to
IGUIObject::SetSettingFromString and comment that it is purposed for
parsing XML files.
Remove SetSetting default value, so that authors are made aware
explicitly of the need to decide the function broadcasting a message,
refs d87057b1c0, 719f2d7967, ...
Change const bool& SkipMessage to const bool SendMessage, so that a
positive value relates to a positive action.
Clean AddSettings whitespace and integer types.
Differential Revision: https://code.wildfiregames.com/D2231
Tested on: gcc 9.1.0, clang 8.0.1, Jenkins
Comments By: Philip on IRC on 2010-07-24 on GUIUtil being ugly, in case
that one counts
This was SVN commit r22796.
2019-08-28 13:21:11 +02:00
|
|
|
bool FromJSVal(JSContext* cx, JS::HandleValue Value, const bool SendMessage) override;
|
2019-08-04 04:20:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Converts the setting data to a JS::Value using ScriptInterface::ToJSVal.
|
|
|
|
*/
|
|
|
|
void ToJSVal(JSContext* cx, JS::MutableHandleValue Value) override;
|
|
|
|
|
2019-08-26 14:25:07 +02:00
|
|
|
/**
|
|
|
|
* These members are public because they are either unmodifiable or free to be modified.
|
Move static GUI<>::SetSetting operating on IGUIObject to a member IGUIObject::SetSetting.
Remove PSERROR codes from SetSetting (let std::map throw an out_of_range
if a caller wants to Set a setting that doesn't exist without having
checked with SettingExists, equal to GetSetting from 92b6cdfeab).
That also simplifies std::function SetSettingWrap construct from
0a7d0ecdde to void IGUIObject::SettingChanged.
Don't trigger debug_warn or exceptions in GUITooltip::ShowTooltip if the
XML author specified wrong tooltip input, and dodge another
dynamic_cast.
Rename existing IGUIObject::SetSetting to
IGUIObject::SetSettingFromString and comment that it is purposed for
parsing XML files.
Remove SetSetting default value, so that authors are made aware
explicitly of the need to decide the function broadcasting a message,
refs d87057b1c0, 719f2d7967, ...
Change const bool& SkipMessage to const bool SendMessage, so that a
positive value relates to a positive action.
Clean AddSettings whitespace and integer types.
Differential Revision: https://code.wildfiregames.com/D2231
Tested on: gcc 9.1.0, clang 8.0.1, Jenkins
Comments By: Philip on IRC on 2010-07-24 on GUIUtil being ugly, in case
that one counts
This was SVN commit r22796.
2019-08-28 13:21:11 +02:00
|
|
|
* In particular it avoids the need for setter templates specialized depending on copiability.
|
2019-08-26 14:25:07 +02:00
|
|
|
*/
|
2019-08-04 04:20:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The object that stores this setting.
|
|
|
|
*/
|
|
|
|
IGUIObject& m_pObject;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Property name identifying the setting.
|
|
|
|
*/
|
|
|
|
const CStr m_Name;
|
|
|
|
|
|
|
|
/**
|
2019-08-26 14:25:07 +02:00
|
|
|
* Holds the value of the setting.
|
2019-08-04 04:20:08 +02:00
|
|
|
*/
|
|
|
|
T m_pSetting;
|
|
|
|
};
|
2003-11-24 18:13:37 +01:00
|
|
|
|
2019-08-29 11:07:29 +02:00
|
|
|
#endif // INCLUDED_CGUISETTINGS
|