Pyrogenesis
trunk
|
The main object that represents a whole GUI page. More...
#include <CGUI.h>
Public Member Functions | |
CGUI (const shared_ptr< ScriptRuntime > &runtime) | |
~CGUI () | |
void | Initialize () |
Initializes the GUI, needs to be called before the GUI is used. More... | |
void | TickObjects () |
Performs processing that should happen every frame (including sending the "Tick" event to scripts) More... | |
void | SendEventToAll (const CStr &EventName) |
Sends a specified script event to every object. More... | |
void | Draw () |
Displays the whole GUI. More... | |
void | DrawSprite (const CGUISpriteInstance &Sprite, int CellID, const float &Z, const CRect &Rect, const CRect &Clipping=CRect()) |
Draw GUI Sprite. More... | |
void | DrawText (SGUIText &Text, const CColor &DefaultColor, const CPos &pos, const float &z, const CRect &clipping) |
Draw a SGUIText object. More... | |
void | Destroy () |
Clean up, call this to clean up all memory allocated within the GUI. More... | |
InReaction | HandleEvent (const SDL_Event_ *ev) |
The replacement of Process(), handles an SDL_Event_. More... | |
void | LoadXmlFile (const VfsPath &Filename, boost::unordered_set< VfsPath > &Paths) |
Load a GUI XML file into the GUI. More... | |
bool | ObjectExists (const CStr &Name) const |
Checks if object exists and return true or false accordingly. More... | |
IGUIObject * | FindObjectByName (const CStr &Name) const |
Returns the GUI object with the desired name, or NULL if no match is found,. More... | |
IGUIObject * | FindObjectUnderMouse () const |
Returns the GUI object under the mouse, or NULL if none. More... | |
void | AddObjectType (const CStr &str, ConstructObjectFunction pFunc) |
The GUI needs to have all object types inputted and their constructors. More... | |
void | UpdateResolution () |
Update Resolution, should be called every time the resolution of the OpenGL screen has been changed, this is because it needs to re-cache all its actual sizes. More... | |
SGUIText | GenerateText (const CGUIString &Text, const CStrW &Font, const float &Width, const float &BufferZone, const IGUIObject *pObject=NULL) |
Generate a SGUIText object from the inputted string. More... | |
bool | IconExists (const CStr &str) const |
Check if an icon exists. More... | |
SGUIIcon | GetIcon (const CStr &str) const |
Get Icon (a copy, can never be changed) More... | |
bool | GetPreDefinedColor (const CStr &name, CColor &Output) const |
Get pre-defined color (if it exists) Returns false if it fails. More... | |
shared_ptr< ScriptInterface > | GetScriptInterface () |
jsval | GetGlobalObject () |
void | SetFocusedObject (IGUIObject *pObject) |
Change focus to new object. More... | |
Private Types | |
typedef IGUIObject *(* | ConstructObjectFunction) () |
Private Member Functions | |
NONCOPYABLE (CGUI) | |
void | UpdateObjects () |
Updates the object pointers, needs to be called each time an object has been added or removed. More... | |
void | AddObject (IGUIObject *pObject) |
Adds an object to the GUI's object database Private, since you can only add objects through XML files. More... | |
IGUIObject * | ConstructObject (const CStr &str) |
You input the name of the object type, and let's say you input "button", then it will construct a CGUIObjet* as a CButton. More... | |
IGUIObject * | GetFocusedObject () |
Get Focused Object. More... | |
XML Reading Xeromyces specific subroutines | |
These does not throw! Because when reading in XML files, it won't be fatal if an error occurs, perhaps one particular object fails, but it'll still continue reading in the next. All Error are reported with ReportParseError | |
void | Xeromyces_ReadRootObjects (XMBElement Element, CXeromyces *pFile, boost::unordered_set< VfsPath > &Paths) |
Reads in the root element <objects> (the DOMElement). More... | |
void | Xeromyces_ReadRootSprites (XMBElement Element, CXeromyces *pFile) |
Reads in the root element <sprites> (the DOMElement). More... | |
void | Xeromyces_ReadRootStyles (XMBElement Element, CXeromyces *pFile) |
Reads in the root element <styles> (the DOMElement). More... | |
void | Xeromyces_ReadRootSetup (XMBElement Element, CXeromyces *pFile) |
Reads in the root element <setup> (the DOMElement). More... | |
void | Xeromyces_ReadObject (XMBElement Element, CXeromyces *pFile, IGUIObject *pParent, std::vector< std::pair< CStr, CStr > > &NameSubst, boost::unordered_set< VfsPath > &Paths, u32 nesting_depth) |
Notice! Recursive function! More... | |
void | Xeromyces_ReadRepeat (XMBElement Element, CXeromyces *pFile, IGUIObject *pParent, std::vector< std::pair< CStr, CStr > > &NameSubst, boost::unordered_set< VfsPath > &Paths, u32 nesting_depth) |
Reads in the element <repeat>, which repeats its child <object>s 'count' times, replacing the string "[n]" (or the value of the attribute 'var' enclosed in square brackets) in its descendants' names with "[0]", "[1]", etc. More... | |
void | Xeromyces_ReadScript (XMBElement Element, CXeromyces *pFile, boost::unordered_set< VfsPath > &Paths) |
Reads in the element <script> (the XMBElement) and executes the script's code. More... | |
void | Xeromyces_ReadSprite (XMBElement Element, CXeromyces *pFile) |
Reads in the element <sprite> (the XMBElement) and stores the result in a new CGUISprite. More... | |
void | Xeromyces_ReadImage (XMBElement Element, CXeromyces *pFile, CGUISprite &parent) |
Reads in the element <image> (the XMBElement) and stores the result within the CGUISprite. More... | |
void | Xeromyces_ReadEffects (XMBElement Element, CXeromyces *pFile, SGUIImageEffects &effects) |
Reads in the element <effect> (the XMBElement) and stores the result within the SGUIImageEffects. More... | |
void | Xeromyces_ReadStyle (XMBElement Element, CXeromyces *pFile) |
Reads in the element <style> (the XMBElement) and stores the result in m_Styles. More... | |
void | Xeromyces_ReadScrollBarStyle (XMBElement Element, CXeromyces *pFile) |
Reads in the element <scrollbar> (the XMBElement) and stores the result in m_ScrollBarStyles. More... | |
void | Xeromyces_ReadIcon (XMBElement Element, CXeromyces *pFile) |
Reads in the element <icon> (the XMBElement) and stores the result in m_Icons. More... | |
void | Xeromyces_ReadTooltip (XMBElement Element, CXeromyces *pFile) |
Reads in the element <tooltip> (the XMBElement) and stores the result as an object with the name __tooltip_#. More... | |
void | Xeromyces_ReadColor (XMBElement Element, CXeromyces *pFile) |
Reads in the element <color> (the XMBElement) and stores the result in m_PreDefinedColors. More... | |
Private Attributes | |
Miscellaneous | |
shared_ptr< ScriptInterface > | m_ScriptInterface |
CPos | m_MousePos |
don't want to pass this around with the ChooseMouseOverAndClosest broadcast - we'd need to pack this and pNearest in a struct More... | |
unsigned int | m_MouseButtons |
Indicates which buttons are pressed (bit 0 = LMB, bit 1 = RMB, bit 2 = MMB) More... | |
GUITooltip | m_Tooltip |
std::map< CStr, CColor > | m_PreDefinedColors |
This is a bank of custom colors, it is simply a look up table that will return a color object when someone inputs the name of that color. More... | |
Objects | |
IGUIObject * | m_BaseObject |
Base Object, all its children are considered parentless because this is not a real object per se. More... | |
IGUIObject * | m_FocusedObject |
Focused object! Say an input box that is selected. More... | |
map_pObjects | m_pAllObjects |
Just pointers for fast name access, each object is really constructed within its parent for easy recursive management. More... | |
int | m_InternalNameNumber |
Number of object that has been given name automatically. More... | |
std::map< CStr, ConstructObjectFunction > | m_ObjectTypes |
Function pointers to functions that constructs IGUIObjects by name... More... | |
std::map< CStr, std::vector< IGUIObject * > > | m_HotkeyObjects |
Map from hotkey names to objects that listen to the hotkey. More... | |
std::map< CStr, CGUISprite * > | m_Sprites |
std::map< CStr, SGUIStyle > | m_Styles |
std::map< CStr, SGUIScrollBarStyle > | m_ScrollBarStyles |
std::map< CStr, SGUIIcon > | m_Icons |
Friends | |
class | IGUIObject |
class | IGUIScrollBarOwner |
class | CInternalCGUIAccessorBase |
The main object that represents a whole GUI page.
No interfacial functions throws.
|
private |
CGUI::CGUI | ( | const shared_ptr< ScriptRuntime > & | runtime | ) |
CGUI::~CGUI | ( | ) |
|
private |
Adds an object to the GUI's object database Private, since you can only add objects through XML files.
Why? Because it enables the GUI to be much more encapsulated and safe.
Rethrows | PSERROR_GUI from IGUIObject::AddChild(). |
|
inline |
The GUI needs to have all object types inputted and their constructors.
Also it needs to associate a type by a string name of the type.
To add a type:
str | Reference name of object type |
pFunc | Pointer of function ConstuctObject() in the object |
|
private |
You input the name of the object type, and let's say you input "button", then it will construct a CGUIObjet* as a CButton.
str | Name of object type |
void CGUI::Destroy | ( | ) |
Clean up, call this to clean up all memory allocated within the GUI.
void CGUI::Draw | ( | ) |
Displays the whole GUI.
void CGUI::DrawSprite | ( | const CGUISpriteInstance & | Sprite, |
int | CellID, | ||
const float & | Z, | ||
const CRect & | Rect, | ||
const CRect & | Clipping = CRect() |
||
) |
Draw GUI Sprite.
Sprite | Object referring to the sprite (which also caches calculations for faster rendering) |
CellID | Number of the icon cell to use. (Ignored if this sprite doesn't have any images with "cell-size") |
Z | Drawing order, depth value |
Rect | Position and Size |
Clipping | The sprite shouldn't be drawn outside this rectangle |
void CGUI::DrawText | ( | SGUIText & | Text, |
const CColor & | DefaultColor, | ||
const CPos & | pos, | ||
const float & | z, | ||
const CRect & | clipping | ||
) |
Draw a SGUIText object.
Text | Text object. |
DefaultColor | Color used if no tag applied. |
pos | position |
z | z value. |
clipping |
IGUIObject * CGUI::FindObjectByName | ( | const CStr & | Name | ) | const |
Returns the GUI object with the desired name, or NULL if no match is found,.
Name | String name of object |
IGUIObject * CGUI::FindObjectUnderMouse | ( | ) | const |
Returns the GUI object under the mouse, or NULL if none.
SGUIText CGUI::GenerateText | ( | const CGUIString & | Text, |
const CStrW & | Font, | ||
const float & | Width, | ||
const float & | BufferZone, | ||
const IGUIObject * | pObject = NULL |
||
) |
Generate a SGUIText object from the inputted string.
The function will break down the string and its tags to calculate exactly which rendering queries will be sent to the Renderer. Also, horizontal alignment is taken into acount in this method but NOT vertical alignment.
Done through the CGUI since it can communicate with
Text | Text to generate SGUIText object from |
Font | Default font, notice both Default color and default font can be changed by tags. |
Width | Width, 0 if no word-wrapping. |
BufferZone | space between text and edge, and space between text and images. |
pObject | Optional parameter for error output. Used only if error parsing fails, and we need to be able to output which object the error occured in to aid the user. |
|
inlineprivate |
Get Focused Object.
|
inline |
|
inline |
Get Icon (a copy, can never be changed)
bool CGUI::GetPreDefinedColor | ( | const CStr & | name, |
CColor & | Output | ||
) | const |
Get pre-defined color (if it exists) Returns false if it fails.
|
inline |
InReaction CGUI::HandleEvent | ( | const SDL_Event_ * | ev | ) |
The replacement of Process(), handles an SDL_Event_.
ev | SDL Event, like mouse/keyboard input |
|
inline |
Check if an icon exists.
|
private |
bool CGUI::ObjectExists | ( | const CStr & | Name | ) | const |
Checks if object exists and return true or false accordingly.
Name | String name of object |
void CGUI::SendEventToAll | ( | const CStr & | EventName | ) |
Sends a specified script event to every object.
EventName | String representation of event name |
void CGUI::SetFocusedObject | ( | IGUIObject * | pObject | ) |
Change focus to new object.
Will send LOST_FOCUS/GOT_FOCUS messages as appropriate. pObject can be NULL to remove all focus.
void CGUI::TickObjects | ( | ) |
Performs processing that should happen every frame (including sending the "Tick" event to scripts)
|
private |
Updates the object pointers, needs to be called each time an object has been added or removed.
This function is atomic, meaning if it throws anything, it will have seen it through that nothing was ultimately changed.
PSERROR_GUI | that is thrown from IGUIObject::AddToPointersMap(). |
void CGUI::UpdateResolution | ( | ) |
Update Resolution, should be called every time the resolution of the OpenGL screen has been changed, this is because it needs to re-cache all its actual sizes.
Needs no input since screen resolution is global.
|
private |
Reads in the element <color> (the XMBElement) and stores the result in m_PreDefinedColors.
Element | The Xeromyces object that represents the scrollbar-tag. |
pFile | The Xeromyces object for the file being read |
|
private |
Reads in the element <effect> (the XMBElement) and stores the result within the SGUIImageEffects.
Element | The Xeromyces object that represents the image-tag. |
pFile | The Xeromyces object for the file being read |
effects | Effects object to add this effect to. |
|
private |
Reads in the element <icon> (the XMBElement) and stores the result in m_Icons.
Element | The Xeromyces object that represents the scrollbar-tag. |
pFile | The Xeromyces object for the file being read |
|
private |
Reads in the element <image> (the XMBElement) and stores the result within the CGUISprite.
Element | The Xeromyces object that represents the image-tag. |
pFile | The Xeromyces object for the file being read |
parent | Parent sprite. |
|
private |
Notice! Recursive function!
Read in an <object> (the XMBElement) and stores it as a child in the pParent.
It will also check the object's children and call this function on them too. Also it will call all other functions that reads in other stuff that can be found within an object. Check the tree in the beginning of this class' Xeromyces_* section.
Element | The Xeromyces object that represents the object-tag. |
pFile | The Xeromyces object for the file being read |
pParent | Parent to add this object as child in. |
NameSubst | A set of substitution strings that will be applied to all object names within this object. |
Paths | Output set of file paths that this GUI object relies on. |
|
private |
Reads in the element <repeat>, which repeats its child <object>s 'count' times, replacing the string "[n]" (or the value of the attribute 'var' enclosed in square brackets) in its descendants' names with "[0]", "[1]", etc.
|
private |
Reads in the root element <objects> (the DOMElement).
Element | The Xeromyces object that represents the objects-tag. |
pFile | The Xeromyces object for the file being read |
Paths | Collects the set of all XML/JS files that are loaded |
|
private |
Reads in the root element <setup> (the DOMElement).
Element | The Xeromyces object that represents the setup-tag. |
pFile | The Xeromyces object for the file being read |
|
private |
Reads in the root element <sprites> (the DOMElement).
Element | The Xeromyces object that represents the sprites-tag. |
pFile | The Xeromyces object for the file being read |
|
private |
Reads in the root element <styles> (the DOMElement).
Element | The Xeromyces object that represents the styles-tag. |
pFile | The Xeromyces object for the file being read |
|
private |
Reads in the element <script> (the XMBElement) and executes the script's code.
Element | The Xeromyces object that represents the script-tag. |
pFile | The Xeromyces object for the file being read |
Paths | Output set of file paths that this script is loaded from. |
|
private |
Reads in the element <scrollbar> (the XMBElement) and stores the result in m_ScrollBarStyles.
Element | The Xeromyces object that represents the scrollbar-tag. |
pFile | The Xeromyces object for the file being read |
|
private |
Reads in the element <sprite> (the XMBElement) and stores the result in a new CGUISprite.
Element | The Xeromyces object that represents the sprite-tag. |
pFile | The Xeromyces object for the file being read |
|
private |
Reads in the element <style> (the XMBElement) and stores the result in m_Styles.
Element | The Xeromyces object that represents the style-tag. |
pFile | The Xeromyces object for the file being read |
|
private |
Reads in the element <tooltip> (the XMBElement) and stores the result as an object with the name __tooltip_#.
Element | The Xeromyces object that represents the scrollbar-tag. |
pFile | The Xeromyces object for the file being read |
|
friend |
|
friend |
|
friend |
|
private |
Base Object, all its children are considered parentless because this is not a real object per se.
|
private |
Focused object! Say an input box that is selected.
That one is focused. There can only be one focused object.
|
private |
Map from hotkey names to objects that listen to the hotkey.
(This is an optimisation to avoid recursing over the whole GUI tree every time a hotkey is pressed). Currently this is only set at load time - dynamic changes to an object's hotkey property will be ignored.
|
private |
|
private |
Number of object that has been given name automatically.
the name given will be '__internal(#)', the number (#) being this variable. When an object's name has been set as followed, the value will increment.
|
private |
Indicates which buttons are pressed (bit 0 = LMB, bit 1 = RMB, bit 2 = MMB)
|
private |
don't want to pass this around with the ChooseMouseOverAndClosest broadcast - we'd need to pack this and pNearest in a struct
|
private |
Function pointers to functions that constructs IGUIObjects by name...
For instance m_ObjectTypes["button"] is filled with a function that will "return new CButton();"
|
private |
Just pointers for fast name access, each object is really constructed within its parent for easy recursive management.
Notice m_BaseObject won't belong here since it's not considered a real object.
|
private |
This is a bank of custom colors, it is simply a look up table that will return a color object when someone inputs the name of that color.
Of course the colors have to be declared in XML, there are no hard-coded values.
|
private |
|
private |
|
private |
|
private |
|
private |