Initial commit.

This commit is contained in:
2018-12-06 16:01:56 +01:00
parent 10867b60c2
commit 18eb3f6047
1011 changed files with 345688 additions and 10 deletions

View File

@@ -0,0 +1,21 @@
#ifndef _XSDEFS_H
#define _XSDEFS_H
#ifdef USING_SOURCE_XS
#define WXDLLIMPEXP_XS
#define WXDLLIMPEXP_DATA_XS(type) type
#elif defined( LIB_USINGDLL )
#define WXDLLIMPEXP_XS
#define WXDLLIMPEXP_DATA_XS(type)
#elif defined( WXMAKINGDLL_WXXS )
#define WXDLLIMPEXP_XS WXEXPORT
#define WXDLLIMPEXP_DATA_XS(type) WXEXPORT type
#elif defined(WXUSINGDLL)
#define WXDLLIMPEXP_XS WXIMPORT
#define WXDLLIMPEXP_DATA_XS(type) WXIMPORT type
#else // not making nor using DLL
#define WXDLLIMPEXP_XS
#define WXDLLIMPEXP_DATA_XS(type) type
#endif
#endif//_XSDEFS_H

View File

@@ -0,0 +1,321 @@
/***************************************************************
* Name: PropertyIO.cpp
* Purpose: Declares data types I/O and conversion functions
* Author: Michal Bližňák (michal.bliznak@tiscali.cz)
* Created: 2007-10-28
* Copyright: Michal Bližňák
* License: wxWidgets license (www.wxwidgets.org)
* Notes:
**************************************************************/
#ifndef _XSPROPERTYIO_H
#define _XSPROPERTYIO_H
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include <wx/hashmap.h>
#include <wx/xml/xml.h>
#include <wx/tokenzr.h>
#include <wx/list.h>
#include <wx/wxxmlserializer/Defs.h>
class WXDLLIMPEXP_XS xsProperty;
class WXDLLIMPEXP_XS xsSerializable;
class WXDLLIMPEXP_XS SerializableList;
namespace wxXS
{
WX_DECLARE_OBJARRAY_WITH_DECL(wxRealPoint, RealPointArray, class WXDLLIMPEXP_XS);
WX_DECLARE_LIST_WITH_DECL(wxRealPoint, RealPointList, class WXDLLIMPEXP_XS);
WX_DEFINE_USER_EXPORTED_ARRAY_CHAR(char, CharArray, class WXDLLIMPEXP_XS);
WX_DEFINE_USER_EXPORTED_ARRAY_INT(int, IntArray, class WXDLLIMPEXP_XS);
WX_DEFINE_USER_EXPORTED_ARRAY_LONG(long, LongArray, class WXDLLIMPEXP_XS);
WX_DEFINE_USER_EXPORTED_ARRAY_DOUBLE(double, DoubleArray, class WXDLLIMPEXP_XS);
WX_DECLARE_STRING_HASH_MAP_WITH_DECL(wxString, StringMap, class WXDLLIMPEXP_XS);
}
/*!
* \brief Base class encapsulating a property I/O handler. The class is used by
* the xsSerializable class and is responsiblefor reading and writing of an XML node
* containing property information. Each supported property (data) type should have
* its own I/O handler class. Moreover, all derived classes must provide public functions
* 'static wxString classname::ToString(datatype value)' and 'static datatype classname::
* FromString( const wxString& value )' responsible for conversion between datatype and
* and its string representation (these functions are used internally by class virtual functions.
*/
class WXDLLIMPEXP_XS xsPropertyIO : public wxObject
{
public:
DECLARE_DYNAMIC_CLASS(xsProperty);
/*! \brief Constructor. */
xsPropertyIO(){;}
/*! \brief Destructor. */
virtual ~xsPropertyIO(){;}
/*!
* \brief Read content of the property XML node and store it to given property object.
* \param property Pointer to the target property object
* \param source Pointer to the source XML node
*/
virtual void Read(xsProperty *property, wxXmlNode *source){wxUnusedVar(property);wxUnusedVar(source);}
/*!
* \brief Write content of given property object to target XML node.
* \param property Pointer to the source property object
* \param target Pointer to the target XML node
*/
virtual void Write(xsProperty *property, wxXmlNode *target){wxUnusedVar(property);wxUnusedVar(target);}
/*!
* \brief Get textual representation of current property value.
* \param property Pointer to the source property object
* \return Textual representation of property's value
*/
virtual wxString GetValueStr(xsProperty *property){wxUnusedVar(property);return wxT("");}
/*!
* \brief Set value defined by its textual representation to given property.
* \param property Pointer to the target property object
* \param valstr Textual representation of given value
*/
virtual void SetValueStr(xsProperty *property, const wxString& valstr){wxUnusedVar(property); wxUnusedVar(valstr);}
/*!
* \brief Create new XML node of given name and value and assign it to the given
* parent XML node.
* \param parent Pointer to parent XML node
* \param name Name of new XML node
* \param value Content of new XML node
* \param type Type of new XML (content) node
*/
static wxXmlNode* AddPropertyNode(wxXmlNode* parent, const wxString& name, const wxString& value, wxXmlNodeType type = wxXML_TEXT_NODE );
protected:
/*!
* \brief Append info about the source property to given XML node.
* \param source Pointer to the source property
* \param target Pointer to modified XML node
*/
void AppendPropertyType(xsProperty *source, wxXmlNode *target);
};
/*!
* \brief Macro suitable for declaration of new property I/O handler
* \param datatype Property's data type
* \param name Handler class name
*/
#define XS_DECLARE_IO_HANDLER(datatype, name) \
class name : public xsPropertyIO \
{ \
public: \
DECLARE_DYNAMIC_CLASS(name); \
name(){;} \
virtual ~name(){;} \
\
virtual void Read(xsProperty *property, wxXmlNode *source); \
virtual void Write(xsProperty *property, wxXmlNode *target); \
virtual wxString GetValueStr(xsProperty *property); \
virtual void SetValueStr(xsProperty *property, const wxString& valstr); \
static wxString ToString(const datatype& value); \
static datatype FromString(const wxString& value); \
}; \
/*!
* \brief Macro suitable for declaration of exported new property I/O handler
* \param datatype Property's data type
* \param name Handler class name
* \param decoration Class decoration
*/
#define XS_DECLARE_EXPORTED_IO_HANDLER(datatype, name, decoration) \
class decoration name : public xsPropertyIO \
{ \
public: \
DECLARE_DYNAMIC_CLASS(name); \
name(){;} \
virtual ~name(){;} \
\
virtual void Read(xsProperty *property, wxXmlNode *source); \
virtual void Write(xsProperty *property, wxXmlNode *target); \
virtual wxString GetValueStr(xsProperty *property); \
virtual void SetValueStr(xsProperty *property, const wxString& valstr); \
static wxString ToString(const datatype& value); \
static datatype FromString(const wxString& value); \
}; \
/*!
* \brief Macro suitable for implementation of new property I/O handler
* \param datatype Property's data type
* \param name Handler class name
*/
#define XS_DEFINE_IO_HANDLER(datatype, name) \
IMPLEMENT_DYNAMIC_CLASS(name, xsPropertyIO); \
\
void name::Read(xsProperty *property, wxXmlNode *source) \
{ \
*((datatype*)property->m_pSourceVariable) = FromString(source->GetNodeContent()); \
} \
\
void name::Write(xsProperty *property, wxXmlNode *target) \
{ \
wxString val = ToString(*((datatype*)property->m_pSourceVariable)); \
\
if(val != property->m_sDefaultValueStr) \
{ \
wxXmlNode *newNode = AddPropertyNode(target, wxT("property"), val); \
AppendPropertyType(property, newNode); \
} \
} \
\
wxString name::GetValueStr(xsProperty *property) \
{ \
return ToString(*((datatype*)property->m_pSourceVariable)); \
} \
\
void name::SetValueStr(xsProperty *property, const wxString& valstr) \
{ \
*((datatype*)property->m_pSourceVariable) = FromString(valstr); \
} \
/*!
* \brief Property class encapsulating I/O functions used by 'wxString' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxString, xsStringPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxChar' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxChar, xsCharPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'long' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(long, xsLongPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'int' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(int, xsIntPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'bool' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(bool, xsBoolPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'double' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(double, xsDoublePropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'float' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(float, xsFloatPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxPoint' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxPoint, xsPointPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxSize' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxSize, xsSizePropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxRealPoint' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxRealPoint, xsRealPointPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxColour' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxColour, xsColourPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxPen' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxPen, xsPenPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxBrush' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxBrush, xsBrushPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxFont' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxFont, xsFontPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'wxArrayString' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxArrayString, xsArrayStringPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'CharArray' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxXS::CharArray, xsArrayCharPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'IntArray' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxXS::IntArray, xsArrayIntPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'LongArray' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxXS::LongArray, xsArrayLongPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'DoubleArray' properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxXS::DoubleArray, xsArrayDoublePropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'RealPointArray' (array of
* integer values) properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxXS::RealPointArray, xsArrayRealPointPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'ListRealPoint' (list of
* wxRealPoint objects) properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxXS::RealPointList, xsListRealPointPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'SerializableList' (list of
* xsSerializable objects) properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(SerializableList, xsListSerializablePropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'serializabledynamic' (xsSerializable
* dynamic class objects which are created during the deserialization process) properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(xsSerializable, xsDynObjPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'serializabledynamicnocreate' (already
* existing xsSerializable dynamic class objects) properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(xsSerializable, xsDynNCObjPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'serializablestatic' (static
* xsSerializable class objects) properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(xsSerializable, xsStaticObjPropIO, WXDLLIMPEXP_XS);
/*!
* \brief Property class encapsulating I/O functions used by 'mapstring' (string hash map) properties.
*/
XS_DECLARE_EXPORTED_IO_HANDLER(wxXS::StringMap, xsMapStringPropIO, WXDLLIMPEXP_XS);
WX_DECLARE_HASH_MAP( wxString, xsPropertyIO*, wxStringHash, wxStringEqual, PropertyIOMap );
#endif //_XSPROPERTYIO_H

File diff suppressed because it is too large Load Diff