Add project files.
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
#ifndef _ENUMS_HPP_
|
||||
#define _ENUMS_HPP_
|
||||
|
||||
/*** DLL Header File ***/
|
||||
#include "dllExport.h"
|
||||
|
||||
namespace GUIHelpers {
|
||||
enum EXPORT_FROM_MYDLL eLayout: unsigned int
|
||||
{
|
||||
DEFAULT_LAYOUT = 0,
|
||||
FILL_PARENT,
|
||||
MATCH_PARENT,
|
||||
WRAP_CONTENT
|
||||
};/// END enum DEFINITION eLayout
|
||||
|
||||
enum EXPORT_FROM_MYDLL eType: unsigned int
|
||||
{
|
||||
COBJECT,
|
||||
CWINDOW,
|
||||
CPANEL,
|
||||
CLAYOUT,
|
||||
CBOXSIZER,
|
||||
CBUTTON,
|
||||
CTEXTBUTTON,
|
||||
CLABEL,
|
||||
};/// END enum DEFINITION eType
|
||||
|
||||
enum EXPORT_FROM_MYDLL eOrientation: unsigned int
|
||||
{
|
||||
DEFAULT_ORIENTATION = 0,
|
||||
NONE,
|
||||
VERTICAL,
|
||||
HORIZONTAL
|
||||
};/// END enum DEFINITION eOrientation
|
||||
|
||||
enum EXPORT_FROM_MYDLL eAlign: unsigned int
|
||||
{
|
||||
DEFAULT_ALIGN = 0,
|
||||
CENTER,
|
||||
TOP,
|
||||
RIGHT,
|
||||
BOTTOM,
|
||||
LEFT
|
||||
};/// END enum DEFINITION eAlign
|
||||
}/// END NAMESPACE DEFINITION GUIEngine
|
||||
#endif/// END IFNDEF _ENUMS_HPP_
|
||||
@@ -0,0 +1,33 @@
|
||||
#include "GUIUtility.hpp"
|
||||
|
||||
using namespace GUIHelpers;
|
||||
|
||||
const RGBA GUIHelpers::StringtoRGBA( const cString& colour )
|
||||
{
|
||||
RGBA rtn = DEFAULT;
|
||||
cString check = colour.upper();
|
||||
if (check == "WHITE")
|
||||
rtn = WHITE;
|
||||
if (check == "BLACK")
|
||||
rtn = BLACK;
|
||||
if (check == "RED")
|
||||
rtn = RED;
|
||||
if (check == "ORANGE")
|
||||
rtn = ORANGE;
|
||||
if (check == "YELLOW")
|
||||
rtn = YELLOW;
|
||||
if (check == "GREEN")
|
||||
rtn = GREEN;
|
||||
if (check == "CYAN")
|
||||
rtn = CYAN;
|
||||
if (check == "BLUE")
|
||||
rtn = BLUE;
|
||||
if (check == "VIOLET")
|
||||
rtn = VIOLET;
|
||||
if (check == "MAGENTA")
|
||||
rtn = MAGENTA;
|
||||
if (check == "ROSE")
|
||||
rtn = ROSE;
|
||||
|
||||
return rtn;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef _GUIUTILITY_HPP_
|
||||
#define _GUIUTILITY_HPP_
|
||||
|
||||
/*** SDL Header Files ***/
|
||||
#include <SDL.h>
|
||||
|
||||
/*** Custom Header Files ***/
|
||||
#include "../../MathEngine/iVector/iVector2.hpp"
|
||||
#include "../../MathEngine/iVector/iVector4.hpp"
|
||||
|
||||
#include "../../UtilityEngine/cString.hpp"
|
||||
|
||||
using UtilityEngine::cString;
|
||||
|
||||
namespace GUIHelpers {
|
||||
typedef struct MathEngine::iVector2 Size, Position;
|
||||
typedef struct MathEngine::iVector4 Padding;
|
||||
typedef struct SDL_Colour RGBA;
|
||||
typedef struct SDL_Rect Area;
|
||||
|
||||
static const RGBA DEFAULT = { 0, 0, 0, 0 };
|
||||
|
||||
static const RGBA WHITE = { 255, 255, 255, 255 };
|
||||
static const RGBA BLACK = { 0, 0, 0, 255 };
|
||||
|
||||
static const RGBA RED = { 255, 0, 0, 255 };
|
||||
|
||||
static const RGBA ORANGE = { 255, 128, 0, 255 };
|
||||
static const RGBA YELLOW = { 255, 255, 0, 255 };
|
||||
|
||||
static const RGBA GREEN = { 0, 255, 0, 255 };
|
||||
|
||||
static const RGBA CYAN = { 0, 255, 255, 255 };
|
||||
|
||||
static const RGBA BLUE = { 0, 0, 255, 255 };
|
||||
|
||||
static const RGBA VIOLET = { 128, 0, 255, 255 };
|
||||
static const RGBA MAGENTA = { 255, 0, 255, 255 };
|
||||
static const RGBA ROSE = { 255, 0, 128, 255 };
|
||||
|
||||
|
||||
const RGBA StringtoRGBA(const cString& colour);
|
||||
|
||||
|
||||
}/// END NAMESPACE DEFINITION GUIHelpers
|
||||
#endif/// END IFNDEF _GUIUTILITY_HPP_
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
#include "cObject.hpp"
|
||||
|
||||
#include "../cGUI.hpp"
|
||||
|
||||
using GUIHelpers::cObject;
|
||||
|
||||
cObject::cObject( const signed int id )
|
||||
: m_id(id)
|
||||
{
|
||||
//GUIEngine::cGUI::Inst().AddObject(this);
|
||||
}
|
||||
|
||||
/*virtual*/ cObject::~cObject()
|
||||
{}
|
||||
|
||||
bool cObject::operator == (const cObject& other)
|
||||
{
|
||||
if (m_id == other.getID())
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
///Functions
|
||||
|
||||
///Sets
|
||||
const void cObject::setID( const signed int id )
|
||||
{
|
||||
m_id = id;
|
||||
}
|
||||
|
||||
///Gets
|
||||
const signed int cObject::getID() const
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
/*virtual*/ const GUIHelpers::eType cObject::getType() const
|
||||
{
|
||||
return GUIHelpers::eType::COBJECT;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
#ifndef _COBJECT_HPP_
|
||||
#define _COBJECT_HPP_
|
||||
|
||||
/*** Custom Header Files ***/
|
||||
#include "Enums.hpp"
|
||||
|
||||
/*** DLL Header File ***/
|
||||
#include "dllExport.h"
|
||||
|
||||
namespace GUIHelpers {
|
||||
class EXPORT_FROM_MYDLL cObject
|
||||
{
|
||||
public:
|
||||
cObject( const signed int id );
|
||||
virtual ~cObject();
|
||||
|
||||
bool operator == (const cObject& other);
|
||||
|
||||
///Functions
|
||||
|
||||
///Sets
|
||||
const void setID( const signed int id );
|
||||
|
||||
///Gets
|
||||
const signed int getID() const;
|
||||
virtual const GUIHelpers::eType getType() const;
|
||||
|
||||
private:
|
||||
signed int m_id;// = 0
|
||||
};/// END CLASS DEFINITION cObject
|
||||
}/// END NAMESPACE DEFINITION GUIEngine
|
||||
#endif/// END IFNDEF _COBJECT_HPP_
|
||||
@@ -0,0 +1,81 @@
|
||||
#include "cTexture.hpp"
|
||||
|
||||
/*** Custom Header Files ***/
|
||||
#include "../../VideoEngine/cRenderer.hpp"
|
||||
#include "../../FXEngine/cGFX.hpp"
|
||||
#include "GUIUtility.hpp"
|
||||
|
||||
using GUIHelpers::cTexture;
|
||||
|
||||
cTexture::cTexture()
|
||||
{}
|
||||
|
||||
cTexture::~cTexture()
|
||||
{}
|
||||
|
||||
///Functions
|
||||
|
||||
//private
|
||||
SDL_Texture* cTexture::GenerateTexture( const SDL_Rect& dimensions, TextTypeEngine::cText* text /*= nullptr*/ )
|
||||
{
|
||||
SDL_Rect t = text->getWH();
|
||||
SDL_Rect centerText = { 0, 0, 0, 0 };
|
||||
SDL_Rect centerButton = { 0, 0, 0, 0 };
|
||||
SDL_Rect dim = dimensions;
|
||||
|
||||
///Find the min padding around the text.
|
||||
// if (dim.w < (t.w + GUIHelpers::default::text::PADDING.x + GUIHelpers::default::text::PADDING.w) )
|
||||
// dim.w += (t.w + GUIHelpers::default::text::PADDING.x + GUIHelpers::default::text::PADDING.w);
|
||||
//
|
||||
// if (dim.h < (t.h + GUIHelpers::default::text::PADDING.y + GUIHelpers::default::text::PADDING.z) )
|
||||
// dim.h += (t.h + GUIHelpers::default::text::PADDING.y + GUIHelpers::default::text::PADDING.z);
|
||||
|
||||
///Find the center of the button
|
||||
centerButton.x = dim.w / 2;
|
||||
centerButton.y = dim.h / 2;
|
||||
|
||||
///Find the center of the text
|
||||
centerText.x = t.w / 2;
|
||||
centerText.y = t.h / 2;
|
||||
|
||||
if (centerText.x < centerButton.x)
|
||||
t.x = centerButton.x - centerText.x;
|
||||
|
||||
if (centerText.y < centerButton.y)
|
||||
t.y = centerButton.y - centerText.y;
|
||||
|
||||
SDL_Texture* temptext = VideoEngine::cRenderer::Inst().NewTexture(dim.w, dim.h, SDL_TEXTUREACCESS_TARGET );
|
||||
|
||||
GUIHelpers::RGBA colour = { 100, 100, 100, 255 };
|
||||
|
||||
FXEngine::cGFX::Inst().RoundedBox(dim, 0, colour, temptext);
|
||||
|
||||
|
||||
VideoEngine::cRenderer::Inst().RenderToTexture(text->getImage(), nullptr, temptext, &t);
|
||||
|
||||
|
||||
//cRenderer::Inst().Render(temptext, nullptr, nullptr);
|
||||
|
||||
//cRenderer::Inst().RenderToTexture(temptext, nullptr, text->getImage(), nullptr);
|
||||
|
||||
/*SDL_Surface* tempsurface = SDL_CreateRGBSurface(cVideo::Inst().getVideoSettings(), dimensions.w, dimensions.h, cVideo::Inst().getColour(),
|
||||
0, 0, 0, 0);
|
||||
|
||||
SDL_FillRect(tempsurface, nullptr, SDL_MapRGB(tempsurface->format, 0, 255, 0));
|
||||
|
||||
/*if (roundedBoxRGBA(tempsurface, dimensions.x, dimensions.y, dimensions.w, dimensions.h, 10, 255, 255, 0, 255) != 0)
|
||||
cerr << "Unable to generate GUI Texture." << endl << SDL_GetError() << endl;*/
|
||||
|
||||
|
||||
/*if (text != nullptr) {
|
||||
SDL_Rect srcrect, dstrect = dimensions;
|
||||
cVideo::Inst().Render(text->getImage(), &srcrect, temptext, &dstrect);
|
||||
}
|
||||
|
||||
this->setImage(temptext);
|
||||
this->setTransparent();*/
|
||||
|
||||
setImage(temptext);
|
||||
|
||||
return temptext;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef _CTEXTURE_HPP_
|
||||
#define _CTEXTURE_HPP_
|
||||
|
||||
/*** SDL Header Files ***/
|
||||
#include <SDL.h>
|
||||
|
||||
/*** Custom Header Files ***/
|
||||
#include "../../VideoEngine/cImage.hpp"
|
||||
#include "../../TextTypeEngine/cText.hpp"
|
||||
|
||||
/*** DLL Header File ***/
|
||||
#include "dllExport.h"
|
||||
|
||||
namespace GUIHelpers {
|
||||
class EXPORT_FROM_MYDLL cTexture : public VideoEngine::cImage
|
||||
{
|
||||
public:
|
||||
cTexture();
|
||||
~cTexture();
|
||||
|
||||
///Functions
|
||||
SDL_Texture* GenerateTexture( const SDL_Rect& dimensions, TextTypeEngine::cText* text = nullptr );
|
||||
|
||||
private:
|
||||
|
||||
};/// END CLASS DEFINITION cTexture
|
||||
}/// END NAMESPACE DEFINITION GUIEngine
|
||||
#endif/// END IFNDEF _CTEXTURE_HPP_
|
||||
@@ -0,0 +1,451 @@
|
||||
#include "cXMLoader.hpp"
|
||||
|
||||
/*** Custom Header Files ***/
|
||||
#include "../../UtilityEngine/cUtility.hpp"
|
||||
|
||||
#include "../cGUI.hpp"
|
||||
#include "../cLayout.hpp"
|
||||
|
||||
using GUIHelpers::cXMLoader;
|
||||
|
||||
using UtilityEngine::cUtility;
|
||||
|
||||
|
||||
cXMLoader::cXMLoader()
|
||||
{
|
||||
m_loadDef = false;
|
||||
m_orientation = GUIHelpers::eOrientation::DEFAULT_ORIENTATION;
|
||||
m_align = GUIHelpers::eAlign::DEFAULT_ALIGN;
|
||||
m_layout = GUIHelpers::eLayout::DEFAULT_LAYOUT;
|
||||
m_pos = { -1, -1 };
|
||||
m_size = { -1, -1 };
|
||||
m_pad = { -1, -1, -1, -1 };
|
||||
}
|
||||
|
||||
cXMLoader::~cXMLoader()
|
||||
{}
|
||||
|
||||
///Functions
|
||||
|
||||
void cXMLoader::Load( const cString& filename, const cString& dir /*= ""*/, GUIEngine::cWindow* parent /*= nullptr*/ )
|
||||
{
|
||||
cString file = dir + filename;
|
||||
tinyxml2::XMLDocument doc;
|
||||
|
||||
if (doc.LoadFile(file.c_str()) != tinyxml2::XMLError::XML_NO_ERROR)
|
||||
cUtility::Inst().Message("Could not load file. " + file + " Error='" + doc.ErrorName() + "'.");
|
||||
else {
|
||||
tinyxml2::XMLElement* element = doc.FirstChildElement();
|
||||
|
||||
if (element == nullptr)
|
||||
cUtility::Inst().Message("No tag found.");
|
||||
else {
|
||||
//OK check for defaults
|
||||
tinyxml2::XMLElement* defaultEl = element->FirstChildElement("default");
|
||||
if (defaultEl != nullptr)
|
||||
Default(*defaultEl);
|
||||
tinyxml2::XMLElement* debugEl = element->FirstChildElement("debug");
|
||||
if (debugEl != nullptr)
|
||||
Debug(*debugEl);
|
||||
GetElement(*element, parent);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void cXMLoader::GetElement( tinyxml2::XMLElement& element, GUIEngine::cWindow* parent /*= nullptr*/ ) const
|
||||
{
|
||||
cString name = element.Name();
|
||||
name = name.lower();
|
||||
GUIEngine::cWindow* tmp = nullptr;
|
||||
if (name == "include")
|
||||
Include(element, parent);
|
||||
if (name == "gui")
|
||||
GUISetup(element);
|
||||
if (name == "panel")
|
||||
tmp = PanelBuild(element, parent);
|
||||
if (name == "layout")
|
||||
tmp = LayoutBuild(element, parent);
|
||||
if (name == "label")
|
||||
tmp = LabelBuild(element, parent);
|
||||
if (name == "boxsizer")
|
||||
tmp = BoxSizerBuild(element, parent);
|
||||
|
||||
tinyxml2::XMLElement* child = element.FirstChildElement();
|
||||
if (child != nullptr)
|
||||
GetElement(*child, tmp);
|
||||
|
||||
tinyxml2::XMLElement* sibling = element.NextSiblingElement();
|
||||
if (sibling != nullptr)
|
||||
GetElement(*sibling, parent);
|
||||
|
||||
if ((parent == nullptr) && (tmp != nullptr))
|
||||
tmp->Resize();
|
||||
}
|
||||
|
||||
const cString cXMLoader::GetAttribute( const tinyxml2::XMLElement& element, const cString& attribute ) const
|
||||
{
|
||||
cString rtn = "";
|
||||
const char* str = element.Attribute(attribute.c_str());
|
||||
if ((str == nullptr) && (m_debugXML == true))
|
||||
cUtility::Inst().Message("Error no attribute: " + attribute + " found in tag <" + element.Value() + ">");
|
||||
else
|
||||
rtn = str;
|
||||
return rtn;
|
||||
}
|
||||
|
||||
void cXMLoader::Include(const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent) const
|
||||
{
|
||||
cString dir = getDir(element);
|
||||
cString filename = getFileName(element);
|
||||
|
||||
cXMLoader include;
|
||||
include.Load(filename, dir, parent);
|
||||
|
||||
LoadDefault();
|
||||
}
|
||||
|
||||
void cXMLoader::GUISetup( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
unsigned long int debug = getDebug(element);
|
||||
|
||||
GUIEngine::cGUI::Inst().setDebugLevel(debug);
|
||||
}
|
||||
|
||||
void cXMLoader::Default( const tinyxml2::XMLElement& element )
|
||||
{
|
||||
m_orientation = getOrientation(element);
|
||||
m_align = getAlign(element);
|
||||
m_layout = getLayout(element);
|
||||
m_pos = getPosition(element);
|
||||
m_size = getSize(element);
|
||||
m_pos = getPadding(element);
|
||||
|
||||
m_loadDef = true;
|
||||
|
||||
LoadDefault();
|
||||
}
|
||||
|
||||
void cXMLoader::Debug(const tinyxml2::XMLElement& element)
|
||||
{
|
||||
unsigned long int debug = getDebug(element);
|
||||
m_debugXML = getDebugXML(element);
|
||||
|
||||
GUIEngine::cGUI::Inst().setDebugLevel(debug);
|
||||
}
|
||||
|
||||
GUIEngine::cPanel* cXMLoader::PanelBuild(const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent) const
|
||||
{
|
||||
signed long int id = getID(element);
|
||||
GUIHelpers::eOrientation orientation = getOrientation(element);
|
||||
GUIHelpers::eAlign align = getAlign(element);
|
||||
GUIHelpers::eLayout layout = getLayout(element);
|
||||
GUIHelpers::Position pos = getPosition(element);
|
||||
GUIHelpers::Size size = getSize(element);
|
||||
GUIHelpers::Padding pad = getPadding(element);
|
||||
|
||||
GUIEngine::cPanel* rtn = new GUIEngine::cPanel(parent, id, orientation, align, layout, pos, size, pad);
|
||||
|
||||
if (parent == nullptr)
|
||||
GUIEngine::cGUI::Inst().AddObject(rtn);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
GUIEngine::cLayout* cXMLoader::LayoutBuild( const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent ) const
|
||||
{
|
||||
signed long int id = getID(element);
|
||||
GUIHelpers::eOrientation orientation = getOrientation(element);
|
||||
GUIHelpers::eAlign align = getAlign(element);
|
||||
GUIHelpers::eLayout layout = getLayout(element);
|
||||
GUIHelpers::Position pos = getPosition(element);
|
||||
GUIHelpers::Size size = { -1, -1 };// getSize(element);
|
||||
GUIHelpers::Padding pad = getPadding(element);
|
||||
|
||||
|
||||
GUIEngine::cLayout* rtn = new GUIEngine::cLayout(parent, id, orientation, align, layout, pos, size, pad);
|
||||
|
||||
|
||||
if (parent == nullptr)
|
||||
GUIEngine::cGUI::Inst().AddObject(rtn);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
GUIEngine::cLabel* cXMLoader::LabelBuild( const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent ) const
|
||||
{
|
||||
signed long int id = getID(element);
|
||||
//GUIHelpers::eOrientation orientation = getOrientation(element);
|
||||
GUIHelpers::eAlign align = getAlign(element);
|
||||
GUIHelpers::eLayout layout = getLayout(element);
|
||||
GUIHelpers::Position pos = getPosition(element);
|
||||
GUIHelpers::Size size = { -1, -1 };//getSize(element);
|
||||
GUIHelpers::Padding pad = getPadding(element);
|
||||
GUIHelpers::RGBA colour = getColour(element);
|
||||
signed long int fontSize = getFontSize(element);
|
||||
|
||||
cString txt = getText(element);
|
||||
|
||||
GUIEngine::cLabel* rtn = new GUIEngine::cLabel(parent, id, txt, align, layout, pos, size, pad);
|
||||
rtn->setFontColour(colour);
|
||||
if (fontSize > 0)
|
||||
rtn->setFontSize((unsigned long int)fontSize);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
GUIEngine::cBoxSizer* cXMLoader::BoxSizerBuild(const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent) const
|
||||
{
|
||||
signed long int id = getID(element);
|
||||
//GUIHelpers::eOrientation orientation = getOrientation(element);
|
||||
GUIHelpers::eAlign align = getAlign(element);
|
||||
GUIHelpers::eLayout layout = getLayout(element);
|
||||
GUIHelpers::Position pos = getPosition(element);
|
||||
GUIHelpers::Size size = getSize(element);
|
||||
GUIHelpers::Padding pad = getPadding(element);
|
||||
|
||||
cString txt = getText(element);
|
||||
|
||||
GUIEngine::cBoxSizer* rtn = new GUIEngine::cBoxSizer(parent, id, align, layout, pos, size, pad);
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const cString cXMLoader::getDir(const tinyxml2::XMLElement& element) const
|
||||
{
|
||||
cString rtn = GetAttribute(element, "dir");
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const cString cXMLoader::getFileName(const tinyxml2::XMLElement& element) const
|
||||
{
|
||||
cString rtn = GetAttribute(element, "filename");
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const unsigned long int cXMLoader::getDebug( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
unsigned long int rtn = 99;
|
||||
cString str = GetAttribute(element, "level").lower();
|
||||
|
||||
if (str != "") {
|
||||
if (str == "true")
|
||||
rtn = 1;
|
||||
else {
|
||||
if (str != "false")
|
||||
rtn = 0;
|
||||
else
|
||||
rtn = str.ToInt();
|
||||
}
|
||||
}
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const bool cXMLoader::getDebugXML(const tinyxml2::XMLElement& element) const
|
||||
{
|
||||
bool rtn = false;
|
||||
cString str = GetAttribute(element, "xml").lower();
|
||||
|
||||
if ((str != "") && (str != "false")) {
|
||||
if (str == "true")
|
||||
rtn = true;
|
||||
else {
|
||||
if (str.ToInt() > 0)
|
||||
rtn = true;
|
||||
}
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const signed long int cXMLoader::getID( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
cString rtn = GetAttribute(element, "id");
|
||||
return rtn.ToInt();
|
||||
}
|
||||
|
||||
const GUIHelpers::eOrientation cXMLoader::getOrientation( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
GUIHelpers::eOrientation rtn = GUIHelpers::eOrientation::DEFAULT_ORIENTATION;
|
||||
|
||||
cString str = GetAttribute(element, "orientation").lower();
|
||||
|
||||
if (str == "none")
|
||||
rtn = GUIHelpers::eOrientation::NONE;
|
||||
if (str == "horizontal")
|
||||
rtn = GUIHelpers::eOrientation::HORIZONTAL;
|
||||
if (str == "vertical")
|
||||
rtn = GUIHelpers::eOrientation::VERTICAL;
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const GUIHelpers::eAlign cXMLoader::getAlign( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
GUIHelpers::eAlign rtn = GUIHelpers::eAlign::DEFAULT_ALIGN;
|
||||
|
||||
cString str = GetAttribute(element, "align").lower();
|
||||
|
||||
if (str == "center")
|
||||
rtn = GUIHelpers::eAlign::CENTER;
|
||||
if (str == "top")
|
||||
rtn = GUIHelpers::eAlign::TOP;
|
||||
if (str == "right")
|
||||
rtn = GUIHelpers::eAlign::RIGHT;
|
||||
if (str == "bottom")
|
||||
rtn = GUIHelpers::eAlign::BOTTOM;
|
||||
if (str == "left")
|
||||
rtn = GUIHelpers::eAlign::LEFT;
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const GUIHelpers::eLayout cXMLoader::getLayout( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
GUIHelpers::eLayout rtn = GUIHelpers::eLayout::DEFAULT_LAYOUT;
|
||||
|
||||
cString str = GetAttribute(element, "layout").lower();
|
||||
|
||||
if (str == "fill_parent")
|
||||
rtn = GUIHelpers::eLayout::FILL_PARENT;
|
||||
if (str == "match_parent")
|
||||
rtn = GUIHelpers::eLayout::MATCH_PARENT;
|
||||
if (str == "wrap_content")
|
||||
rtn = GUIHelpers::eLayout::WRAP_CONTENT;
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const GUIHelpers::Position cXMLoader::getPosition( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
GUIHelpers::Position rtn = { -1, -1 };
|
||||
|
||||
cString str = GetAttribute(element, "position");
|
||||
|
||||
if (str != "") {
|
||||
rtn = { 0, 0 };
|
||||
std::vector<cString> strV = str.split(",");
|
||||
|
||||
switch (strV.size())
|
||||
{
|
||||
case 2:
|
||||
rtn.y = strV[1].ToInt();
|
||||
case 1:
|
||||
rtn.x = strV[0].ToInt();
|
||||
}
|
||||
}
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const GUIHelpers::Size cXMLoader::getSize( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
GUIHelpers::Size rtn = { -1, -1 };
|
||||
|
||||
cString str = GetAttribute(element, "size");
|
||||
|
||||
if (str != "") {
|
||||
rtn = { 0, 0 };
|
||||
std::vector<cString> strV = str.split(",");
|
||||
|
||||
switch (strV.size())
|
||||
{
|
||||
case 2:
|
||||
rtn.y = strV[1].ToInt();
|
||||
case 1:
|
||||
rtn.x = strV[0].ToInt();
|
||||
}
|
||||
}
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const GUIHelpers::Padding cXMLoader::getPadding( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
GUIHelpers::Padding rtn = { -1, -1, -1, -1 };
|
||||
|
||||
cString str = GetAttribute(element, "padding");
|
||||
|
||||
if (str != "") {
|
||||
rtn = { 0, 0, 0, 0 };
|
||||
std::vector<cString> strV = str.split(",");
|
||||
|
||||
switch (strV.size())
|
||||
{
|
||||
case 4:
|
||||
rtn.z = strV[3].ToInt();
|
||||
case 3:
|
||||
rtn.w = strV[2].ToInt();
|
||||
case 2:
|
||||
rtn.y = strV[1].ToInt();
|
||||
case 1:
|
||||
rtn.x = strV[0].ToInt();
|
||||
}
|
||||
}
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const cString cXMLoader::getText( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
return GetAttribute(element, "text");
|
||||
}
|
||||
|
||||
const GUIHelpers::RGBA cXMLoader::getColour( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
GUIHelpers::RGBA rtn = GUIHelpers::DEFAULT;
|
||||
cString str = GetAttribute(element, "colour");
|
||||
|
||||
if (str == "")
|
||||
str = GetAttribute(element, "color");
|
||||
|
||||
if (str != "") {
|
||||
std::vector<cString> strV = str.split(",");
|
||||
|
||||
switch (strV.size())
|
||||
{
|
||||
case 4:
|
||||
rtn.a = strV[3].ToInt();
|
||||
case 3:
|
||||
rtn.b = strV[2].ToInt();
|
||||
case 2:
|
||||
rtn.g = strV[1].ToInt();
|
||||
case 1:
|
||||
if (strV[0].IsInt() == true) {
|
||||
rtn.r = strV[0].ToInt();
|
||||
if (strV.size() < 4)
|
||||
rtn.a = 255;
|
||||
}
|
||||
else
|
||||
rtn = GUIHelpers::StringtoRGBA(str);
|
||||
break;
|
||||
default:
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
|
||||
const signed long int cXMLoader::getFontSize( const tinyxml2::XMLElement& element ) const
|
||||
{
|
||||
signed long int rtn = -1;
|
||||
cString str = GetAttribute(element, "fontsize");
|
||||
|
||||
if (str != "")
|
||||
rtn = str.ToInt();
|
||||
|
||||
return rtn;
|
||||
}
|
||||
|
||||
void cXMLoader::LoadDefault() const
|
||||
{
|
||||
if (m_loadDef == false)
|
||||
return;
|
||||
GUIEngine::cWindow::OrientationDefault(m_orientation);
|
||||
GUIEngine::cWindow::AlignDefault(m_align);
|
||||
GUIEngine::cWindow::LayoutDefault(m_layout);
|
||||
GUIEngine::cWindow::PositionDefault(m_pos);
|
||||
GUIEngine::cWindow::SizeDefault(m_size);
|
||||
GUIEngine::cWindow::PaddingDefault(m_pad);
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
#ifndef _CXMLOADER_HPP_
|
||||
#define _CXMLOADER_HPP_
|
||||
|
||||
/*** TinyXML Header File ***/
|
||||
#include "tinyxml2.h"
|
||||
|
||||
/*** DLL Header File ***/
|
||||
#include "dllExport.h"
|
||||
|
||||
/*** Custom Header Files ***/
|
||||
#include "GUIUtility.hpp"
|
||||
|
||||
#include "../cWindow.hpp"
|
||||
#include "../cPanel.hpp"
|
||||
#include "../cLayout.hpp"
|
||||
#include "../cLabel.hpp"
|
||||
#include "../cBoxSizer.hpp"
|
||||
|
||||
#include "../../UtilityEngine/cString.hpp"
|
||||
|
||||
using UtilityEngine::cString;
|
||||
|
||||
namespace GUIHelpers {
|
||||
class EXPORT_FROM_MYDLL cXMLoader
|
||||
{
|
||||
public:
|
||||
cXMLoader();
|
||||
~cXMLoader();
|
||||
|
||||
void Load( const cString& filename, const cString& dir = "", GUIEngine::cWindow* parent = nullptr );
|
||||
|
||||
private:
|
||||
void GetElement( tinyxml2::XMLElement& element, GUIEngine::cWindow* parent = nullptr ) const;
|
||||
const cString GetAttribute( const tinyxml2::XMLElement& element, const cString& attribute ) const;
|
||||
|
||||
void Include( const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent ) const;
|
||||
void GUISetup( const tinyxml2::XMLElement& element ) const;
|
||||
void Default( const tinyxml2::XMLElement& element );
|
||||
void Debug( const tinyxml2::XMLElement& element );
|
||||
|
||||
GUIEngine::cPanel* PanelBuild( const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent ) const;
|
||||
GUIEngine::cLayout* LayoutBuild( const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent ) const;
|
||||
GUIEngine::cLabel* LabelBuild( const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent ) const;
|
||||
GUIEngine::cBoxSizer* BoxSizerBuild( const tinyxml2::XMLElement& element, GUIEngine::cWindow* parent ) const;
|
||||
|
||||
const cString getDir( const tinyxml2::XMLElement& element ) const;
|
||||
const cString getFileName( const tinyxml2::XMLElement& element ) const;
|
||||
const unsigned long int getDebug( const tinyxml2::XMLElement& element ) const;
|
||||
const bool cXMLoader::getDebugXML(const tinyxml2::XMLElement& element) const;
|
||||
const signed long int getID( const tinyxml2::XMLElement& element ) const;
|
||||
const GUIHelpers::eOrientation getOrientation( const tinyxml2::XMLElement& element ) const;
|
||||
const GUIHelpers::eAlign getAlign( const tinyxml2::XMLElement& element ) const;
|
||||
const GUIHelpers::eLayout getLayout( const tinyxml2::XMLElement& element ) const;
|
||||
const GUIHelpers::Position getPosition( const tinyxml2::XMLElement& element ) const;
|
||||
const GUIHelpers::Size getSize( const tinyxml2::XMLElement& element ) const;
|
||||
const GUIHelpers::Padding getPadding( const tinyxml2::XMLElement& element ) const;
|
||||
const cString getText( const tinyxml2::XMLElement& element ) const;
|
||||
|
||||
const GUIHelpers::RGBA getColour( const tinyxml2::XMLElement& element ) const;
|
||||
const signed long int getFontSize( const tinyxml2::XMLElement& element ) const;
|
||||
|
||||
void LoadDefault() const;
|
||||
|
||||
private:
|
||||
bool m_loadDef;// = false;
|
||||
bool m_debugXML;
|
||||
|
||||
GUIHelpers::eOrientation m_orientation;// = GUIHelpers::eOrientation::DEFAULT_ORIENTATION;
|
||||
GUIHelpers::eAlign m_align;// = GUIHelpers::eAlign::DEFAULT_ALIGN;
|
||||
GUIHelpers::eLayout m_layout;// = GUIHelpers::eLayout::DEFAULT_LAYOUT;
|
||||
GUIHelpers::Position m_pos;// = { -1, -1 };
|
||||
GUIHelpers::Size m_size;// = { -1, -1 };
|
||||
GUIHelpers::Padding m_pad;// = { -1, -1, -1, -1 };
|
||||
};/// END CLASS DEFINITION cXMLoader
|
||||
}/// END NAMESPACE DEFINITION GUIHelpers
|
||||
#endif/// END IFNDEF _CXMLOADER_HPP_
|
||||
Reference in New Issue
Block a user