Pyrogenesis HEAD
Pyrogenesis, a RTS Engine
|
GUI object such as a button or an input-box. More...
#include <IGUIObject.h>
Public Member Functions | |
NONCOPYABLE (IGUIObject) | |
IGUIObject (CGUI &pGUI) | |
virtual | ~IGUIObject () |
virtual bool | IsMouseOver () const |
This function checks if the mouse is hovering the rectangle that the base setting "size" makes. More... | |
virtual bool | IsMouseHovering () const |
This function returns true if the mouse is hovering over this GUI object and if this GUI object is the topmost object in that screen location. More... | |
Leaf Functions | |
const CStr & | GetName () const |
Get object name, name is unique. More... | |
void | SetName (const CStr &Name) |
Get object name. More... | |
CStr | GetPresentableName () const |
const std::vector< IGUIObject * > & | GetChildren () const |
Return all child objects of the current object. More... | |
Settings Management | |
void | RegisterSetting (const CStr &Name, IGUISetting *setting) |
Registers the given setting with the GUI object. More... | |
void | ReregisterSetting (const CStr &Name, IGUISetting *setting) |
bool | SettingExists (const CStr &Setting) const |
Returns whether there is a setting with the given name registered. More... | |
bool | SetSettingFromString (const CStr &Setting, const CStrW &Value, const bool SendMessage) |
Set a setting by string, regardless of what type it is. More... | |
bool | IsEnabled () const |
Returns whether this object is set to be hidden or ghost. More... | |
bool | IsHidden () const |
Returns whether this is object is set to be hidden. More... | |
void | SetHidden (bool hidden) |
bool | IsHiddenOrGhost () const |
Returns whether this object is set to be hidden or ghost. More... | |
void | PlaySound (const CStrW &soundPath) const |
Retrieves the configured sound filename from the given setting name and plays that once. More... | |
InReaction | SendEvent (EGUIMessageType type, const CStr &eventName) |
Send event to this GUI object (HandleMessage and ScriptEvent) More... | |
InReaction | SendMouseEvent (EGUIMessageType type, const CStr &eventName) |
Same as SendEvent, but passes mouse coordinates and button state as an argument. More... | |
virtual void | UpdateCachedSize () |
All sizes are relative to resolution, and the calculation is not wanted in real time, therefore it is cached, update the cached size with this function. More... | |
CRect | GetComputedSize () |
Updates and returns the size of the object. More... | |
virtual const CStrW & | GetTooltipText () const |
virtual const CStr & | GetTooltipStyle () const |
virtual void | ResetStates () |
Reset internal state of this object. More... | |
void | RegisterScriptHandler (const CStr &eventName, const CStr &Code, CGUI &pGUI) |
Set the script handler for a particular object-specific action. More... | |
JSObject * | GetJSObject () |
Retrieves the JSObject representing this GUI object. More... | |
Friends | |
class | CGUI |
class | IGUISetting |
template<typename T > | |
class | JSI_GUIProxy |
Called by CGUI and friends | |
Methods that the CGUI will call using its friendship, these should not be called by user. TODO: this comment is old and the following interface should be cleaned up. | |
CRect | m_CachedActualSize |
Cached size, real size m_Size is actually dependent on resolution and can have different real outcomes, this is the real outcome cached to avoid slow calculations in real time. More... | |
virtual void | Tick () |
Called on every GUI tick unless the object or one of its parent is hidden/ghost. More... | |
virtual void | HandleMessage (SGUIMessage &Message) |
This function is called with different messages for instance when the mouse enters the object. More... | |
template<typename... Args> | |
void | RecurseObject (bool(IGUIObject::*isRestricted)() const, void(IGUIObject::*callbackFunction)(Args... args), Args &&... args) |
Calls an IGUIObject member function recursively on this object and its children. More... | |
CGUI & | GetGUI () |
const CGUI & | GetGUI () const |
void | SetFocus () |
Take focus! More... | |
void | ReleaseFocus () |
Release focus. More... | |
virtual void | Draw (CCanvas2D &canvas)=0 |
Draws the object. More... | |
virtual InReaction | PreemptEvent (const SDL_Event_ *ev) |
Some objects need to be able to pre-emptively process SDL_Event_. More... | |
virtual InReaction | ManuallyHandleKeys (const SDL_Event_ *ev) |
Some objects need to handle the text-related SDL_Event_ manually. More... | |
bool | ApplyStyle (const CStr &StyleName) |
Applies the given style to the object. More... | |
virtual float | GetBufferedZ () const |
Returns not the Z value, but the actual buffered Z value, i.e. More... | |
void | RegisterChild (IGUIObject *child) |
Add an object to the hierarchy. More... | |
void | UnregisterChild (IGUIObject *child) |
Remove an object from the hierarchy. More... | |
void | SetParent (IGUIObject *pParent) |
Set parent of this object. More... | |
bool | IsFocused () const |
Check if object is focused. More... | |
IGUIObject * | GetParent () const |
NOTE! This will not just return m_pParent, when that is need use it! There is one exception to it, when the parent is the top-node (the object that isn't a real object), this will return nullptr, so that the top-node's children are seemingly parentless. More... | |
virtual bool | HandleAdditionalChildren (const XMBData &file, const XMBElement &child) |
Handle additional children to the <object>-tag. More... | |
virtual void | AdditionalChildrenHandled () |
Allow the GUI object to process after all child items were handled. More... | |
void | ScriptEvent (const CStr &eventName) |
Execute the script for a particular action. More... | |
bool | ScriptEventWithReturn (const CStr &eventName) |
Execute the script for a particular action. More... | |
void | ScriptEvent (const CStr &eventName, const JS::HandleValueArray ¶mData) |
Execute the script for a particular action. More... | |
bool | ScriptEventWithReturn (const CStr &eventName, const JS::HandleValueArray ¶mData) |
Execute the script for a particular action. More... | |
void | SetScriptHandler (const CStr &eventName, JS::HandleObject Function) |
Assigns a JS function to the event name. More... | |
void | UnsetScriptHandler (const CStr &eventName) |
Deletes an event handler assigned to the given name, if such a handler exists. More... | |
void | UpdateMouseOver (IGUIObject *const &pMouseOver) |
Inputes the object that is currently hovered, this function updates this object accordingly (i.e. More... | |
Internal functions | |
CStr | m_Name |
std::vector< IGUIObject * > | m_Children |
IGUIObject * | m_pParent |
double | m_LastClickTime [6] |
bool | m_MouseHovering |
This variable is true if the mouse is hovering this object and this object is the topmost object shown in this location. More... | |
std::map< CStr, IGUISetting * > | m_Settings |
Settings pool, all an object's settings are located here. More... | |
CGUI & | m_pGUI |
std::map< CStr, JS::Heap< JSObject * > > | m_ScriptHandlers |
std::unique_ptr< IGUIProxyObject > | m_JSObject |
CGUISimpleSetting< bool > | m_Enabled |
CGUISimpleSetting< bool > | m_Hidden |
CGUISimpleSetting< CGUISize > | m_Size |
CGUISimpleSetting< CStr > | m_Style |
CGUIHotkey | m_Hotkey |
CGUISimpleSetting< float > | m_Z |
CGUISimpleSetting< bool > | m_Absolute |
CGUISimpleSetting< bool > | m_Ghost |
CGUISimpleSetting< float > | m_AspectRatio |
CGUISimpleSetting< CStrW > | m_Tooltip |
CGUISimpleSetting< CStr > | m_TooltipStyle |
static const CStr | EventNameMouseEnter = "MouseEnter" |
static const CStr | EventNameMouseMove = "MouseMove" |
static const CStr | EventNameMouseLeave = "MouseLeave" |
virtual void | CreateJSObject () |
Creates the JS object representing this page upon first use. More... | |
void | SettingChanged (const CStr &Setting, const bool SendMessage) |
Updates some internal data depending on the setting changed. More... | |
void | ChooseMouseOverAndClosest (IGUIObject *&pObject) |
Inputs a reference pointer, checks if the new inputted object if hovered, if so, then check if this's Z value is greater than the inputted object... If so then the object is closer and we'll replace the pointer with this. More... | |
bool | IsBaseObject () const |
Returns whether this is the object all other objects are descendants of. More... | |
bool | IsRootObject () const |
Returns whether this object is a child of the base object. More... | |
void | TraceMember (JSTracer *trc) |
static void | Trace (JSTracer *trc, void *data) |
GUI object such as a button or an input-box.
Abstract data type !
IGUIObject::IGUIObject | ( | CGUI & | pGUI | ) |
|
virtual |
|
inlineprotectedvirtual |
Allow the GUI object to process after all child items were handled.
Useful to avoid iterator invalidation with push_back calls.
Reimplemented in COList.
|
protected |
Applies the given style to the object.
Returns false if the style is not recognised (and thus has not been applied).
|
private |
Inputs a reference pointer, checks if the new inputted object if hovered, if so, then check if this's Z value is greater than the inputted object... If so then the object is closer and we'll replace the pointer with this.
Also Notice input can be nullptr, which means the Z value demand is out. NOTICE you can't input nullptr as const so you'll have to set an object to nullptr.
pObject | Object pointer, can be either the old one, or the new one. |
|
privatevirtual |
|
protectedpure virtual |
Draws the object.
Implemented in CButton, CChart, CCheckBox, CDropDown, CGUIDummyObject, CHotkeyPicker, CImage, CInput, CList, CMiniMap, CProgressBar, CSlider, CText, and CTooltip.
|
protectedvirtual |
|
inline |
Return all child objects of the current object.
CRect IGUIObject::GetComputedSize | ( | ) |
Updates and returns the size of the object.
|
inline |
|
inline |
JSObject * IGUIObject::GetJSObject | ( | ) |
Retrieves the JSObject representing this GUI object.
|
inline |
Get object name, name is unique.
|
protected |
NOTE! This will not just return m_pParent, when that is need use it! There is one exception to it, when the parent is the top-node (the object that isn't a real object), this will return nullptr, so that the top-node's children are seemingly parentless.
CStr IGUIObject::GetPresentableName | ( | ) | const |
|
inlinevirtual |
|
inlinevirtual |
Reimplemented in CText.
|
inlineprotectedvirtual |
Handle additional children to the <object>-tag.
In IGUIObject, this function does nothing. In CList and CDropDown, it handles the <item>, used to build the data.
Returning false means the object doesn't recognize the child. Should be reported. Notice 'false' is default, because an object not using this function, should not have any additional children (and this function should never be called).
|
inlinevirtual |
This function is called with different messages for instance when the mouse enters the object.
Message | GUI Message |
Reimplemented in CButton, CChart, CCheckBox, CDropDown, CHotkeyPicker, CInput, CList, CMiniMap, COList, CProgressBar, CRadioButton, CSlider, CText, and CTooltip.
|
private |
Returns whether this is the object all other objects are descendants of.
bool IGUIObject::IsEnabled | ( | ) | const |
Returns whether this object is set to be hidden or ghost.
|
protected |
Check if object is focused.
bool IGUIObject::IsHidden | ( | ) | const |
Returns whether this is object is set to be hidden.
bool IGUIObject::IsHiddenOrGhost | ( | ) | const |
Returns whether this object is set to be hidden or ghost.
|
inlinevirtual |
This function returns true if the mouse is hovering over this GUI object and if this GUI object is the topmost object in that screen location.
For example when hovering dropdown list items, the buttons beneath the list won't return true here.
|
virtual |
This function checks if the mouse is hovering the rectangle that the base setting "size" makes.
Although it is virtual, so one could derive an object from CButton, which changes only this to checking the circle that "size" makes.
This function also returns true if there is a different GUI object shown on top of this one.
Reimplemented in CButton, CDropDown, CGUIDummyObject, and CMiniMap.
|
private |
Returns whether this object is a child of the base object.
|
inlineprotectedvirtual |
Some objects need to handle the text-related SDL_Event_ manually.
For instance the input box.
Only the object with focus will have this function called.
Returns either IN_PASS or IN_HANDLED. If IN_HANDLED, then the key won't be passed on and processed by other handlers. This is used for keys that the GUI uses.
IGUIObject::NONCOPYABLE | ( | IGUIObject | ) |
void IGUIObject::PlaySound | ( | const CStrW & | soundPath | ) | const |
Retrieves the configured sound filename from the given setting name and plays that once.
|
inlineprotectedvirtual |
Some objects need to be able to pre-emptively process SDL_Event_.
Only the object with focus will have this function called.
Returns either IN_PASS or IN_HANDLED. If IN_HANDLED, then the event won't be passed on and processed by other handlers.
Reimplemented in CHotkeyPicker.
|
inline |
Calls an IGUIObject member function recursively on this object and its children.
Aborts recursion at IGUIObjects that have the isRestricted function return true. The arguments of the callback function must be references.
|
protected |
Add an object to the hierarchy.
void IGUIObject::RegisterScriptHandler | ( | const CStr & | eventName, |
const CStr & | Code, | ||
CGUI & | pGUI | ||
) |
Set the script handler for a particular object-specific action.
eventName | Name of action |
Code | Javascript code to execute when the action occurs |
pGUI | GUI instance to associate the script with |
void IGUIObject::RegisterSetting | ( | const CStr & | Name, |
IGUISetting * | setting | ||
) |
Registers the given setting with the GUI object.
Enable XML and JS to modify the given variable.
void IGUIObject::ReleaseFocus | ( | ) |
Release focus.
void IGUIObject::ReregisterSetting | ( | const CStr & | Name, |
IGUISetting * | setting | ||
) |
|
virtual |
|
protected |
Execute the script for a particular action.
Does nothing if no script has been registered for that action. The mouse coordinates will be passed as the first argument.
eventName | Name of action |
|
protected |
Execute the script for a particular action.
Does nothing if no script has been registered for that action.
eventName | Name of action |
paramData | JS::HandleValueArray arguments to pass to the event. |
|
protected |
Execute the script for a particular action.
Does nothing if no script has been registered for that action. The mouse coordinates will be passed as the first argument.
eventName | Name of action |
|
protected |
Execute the script for a particular action.
Does nothing if no script has been registered for that action.
eventName | Name of action |
paramData | JS::HandleValueArray arguments to pass to the event. |
InReaction IGUIObject::SendEvent | ( | EGUIMessageType | type, |
const CStr & | eventName | ||
) |
Send event to this GUI object (HandleMessage and ScriptEvent)
type | Type of GUI message to be handled |
eventName | String representation of event name |
InReaction IGUIObject::SendMouseEvent | ( | EGUIMessageType | type, |
const CStr & | eventName | ||
) |
Same as SendEvent, but passes mouse coordinates and button state as an argument.
void IGUIObject::SetFocus | ( | ) |
Take focus!
|
inline |
|
inline |
Get object name.
|
inlineprotected |
Set parent of this object.
|
protected |
Assigns a JS function to the event name.
bool IGUIObject::SetSettingFromString | ( | const CStr & | Setting, |
const CStrW & | Value, | ||
const bool | SendMessage | ||
) |
Set a setting by string, regardless of what type it is.
Used to parse setting values from XML files. For example a CRect(10,10,20,20) is created from "10 10 20 20".
|
private |
Updates some internal data depending on the setting changed.
bool IGUIObject::SettingExists | ( | const CStr & | Setting | ) | const |
Returns whether there is a setting with the given name registered.
Setting | setting name |
|
inlinevirtual |
Called on every GUI tick unless the object or one of its parent is hidden/ghost.
Reimplemented in CHotkeyPicker.
|
inlinestaticprivate |
|
private |
|
protected |
Remove an object from the hierarchy.
|
protected |
Deletes an event handler assigned to the given name, if such a handler exists.
|
virtual |
|
protected |
Inputes the object that is currently hovered, this function updates this object accordingly (i.e.
if it's the object being inputted one thing happens, and not, another).
pMouseOver | Object that is currently hovered, can be nullptr too! |
|
friend |
|
friend |
|
friend |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
protected |
|
protected |
|
protected |
Cached size, real size m_Size is actually dependent on resolution and can have different real outcomes, this is the real outcome cached to avoid slow calculations in real time.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
This variable is true if the mouse is hovering this object and this object is the topmost object shown in this location.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Settings pool, all an object's settings are located here.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |