|
|
Line 1: |
Line 1: |
| eC_Bool CMyGUI::DoClick(const eC_Value& vAbsX, const eC_Value& vAbsY)
| |
| {
| |
| CGUICompositeObject* pkComp = new CGUICompositeObject(NULL, 0, 0, 100, 100);
| |
| CGUIObject* pkObj = new CGUIObject(pkComp, 0, 0, 50, 50);
| |
|
| |
|
| CGUIStreamWriterJSON kWriter;
| |
| eC_PlatformFile* pkFile = new eC_PlatformFile("C:\\temp\\blabla.json", eC_PlatformFile::FS_WRITEACCESS);
| |
|
| |
| pkFile->Write8i('{');
| |
| pkFile->Write8i('\n');
| |
|
| |
| kWriter.SetStreamingFile(pkFile);
| |
| GETGUI.WriteToStream(true);
| |
|
| |
| pkFile->Write8i('\n');
| |
| pkFile->Write8i('}');
| |
|
| |
| delete pkComp;
| |
| delete pkFile;
| |
|
| |
| return false;
| |
| }
| |
|
| |
| #include "GUIStreamWriter.h"
| |
|
| |
| #include "eC_TList_doubleLinked.h"
| |
|
| |
| class CGUIStreamWriterJSON : public CGUIStreamWriter
| |
| {
| |
| public:
| |
| CGUIStreamWriterJSON();
| |
| ~CGUIStreamWriterJSON();
| |
|
| |
| virtual void WriteUByte(const eC_UByte ubByte, const eC_Char* const pcTag);
| |
| virtual void WriteByte(const eC_Byte bByte, const eC_Char* const pcTag);
| |
| virtual void WriteUInt(const eC_UInt uiInt, const eC_Char* const pcTag);
| |
| virtual void WriteUShort(const eC_UShort usShort, const eC_Char* const pcTag);
| |
| virtual void WriteInt(const eC_Int iInt, const eC_Char* const pcTag);
| |
| virtual void WriteHex(const eC_UInt uiInt, const eC_Char* const pcTag);
| |
| virtual void WriteColor(const ColorValue_t eColor, const eC_Char* const pcTag);
| |
| virtual void WriteFloat(const eC_Float fFloat, const eC_Char* const pcTag);
| |
| virtual void WriteString(const eC_String &pkString, const eC_Char* const pcTag);
| |
| virtual void WriteShort(const eC_Short iShort, const eC_Char* const pcTag);
| |
| virtual void WriteBool(const eC_Bool bBool, const eC_Char* const pcTag);
| |
| virtual void WriteBinary(const eC_TArray<eC_UByte>& aData, const eC_Char* const pcTag);
| |
|
| |
| virtual void WriteCommentTag(const eC_Char* const pcTag);
| |
| virtual void WriteCommentTag(const eC_String& kTag);
| |
|
| |
| virtual void WriteStreamingFileHeader(const eC_Int iFileVersion);
| |
| virtual eC_Bool SetFileEndianess(FileEndianess_t eFileEndianess);
| |
| virtual eC_Bool SetFileAlignment(FileAlignment_t eFileAlignment);
| |
|
| |
| void WriteNode(const eC_String& kName, const eC_String& kValue, const eC_Bool& bAddDoubleQuotes);
| |
| void WriteNodeName(const eC_String& kName);
| |
| void WriteNodeValue(const eC_String& kValue, const eC_Bool& bAddDoubleQuotes);
| |
|
| |
| void BeginObject(const eC_String& kName);
| |
| void EndObject();
| |
| void BeginArray(const eC_String& kName);
| |
| void EndArray();
| |
|
| |
| void WriteIndentation();
| |
| void WriteLineEnding();
| |
|
| |
| private:
| |
| enum TokenType_t
| |
| {
| |
| TT_OBJECT,
| |
| TT_ARRAY,
| |
| TT_NODE
| |
| };
| |
|
| |
| private:
| |
| CGUIStreamWriterJSON(const CGUIStreamWriterJSON& kSource);
| |
| CGUIStreamWriterJSON& operator=(const CGUIStreamWriterJSON& kSource);
| |
|
| |
| void WriteUnterminatedString(const eC_String& kString);
| |
|
| |
| private:
| |
| eC_TListDoubleLinked<TokenType_t> m_kTokenStack;
| |
| eC_UInt m_uiIdentation;
| |
| eC_UInt m_uiCurrentNumberOfElements;
| |
| };
| |
|
| |
| #include "GUIStreamWriterJSON.h"
| |
| #include "GUICompositeObject.h"
| |
|
| |
| CGUIStreamWriterJSON::CGUIStreamWriterJSON() :
| |
| CGUIStreamWriter(FileType_t::FILE_TYPE_CUSTOM, FileEndianess_t::FILE_ENDIANESS_LITTLE, FileAlignment_t::FILE_ALIGNMENT_8BIT),
| |
| m_uiIdentation(1),
| |
| m_uiCurrentNumberOfElements(0)
| |
| {
| |
| }
| |
|
| |
| CGUIStreamWriterJSON::~CGUIStreamWriterJSON()
| |
| {
| |
| //WriteUnterminatedString("}");
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteUByte(const eC_UByte ubByte, const eC_Char* const pcTag)
| |
| {
| |
| eC_String kValue(ubByte);
| |
| WriteNode(pcTag, kValue, false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteByte(const eC_Byte bByte, const eC_Char* const pcTag)
| |
| {
| |
| eC_String kValue(bByte);
| |
| WriteNode(pcTag, kValue, false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteUInt(const eC_UInt uiInt, const eC_Char* const pcTag)
| |
| {
| |
| eC_String kValue(uiInt);
| |
| WriteNode(pcTag, kValue, false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteUShort(const eC_UShort usShort, const eC_Char* const pcTag)
| |
| {
| |
| eC_String kValue(usShort);
| |
| WriteNode(pcTag, kValue, false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteInt(const eC_Int iInt, const eC_Char* const pcTag)
| |
| {
| |
| eC_String kValue(iInt);
| |
| WriteNode(pcTag, kValue, false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteHex(const eC_UInt uiInt, const eC_Char* const pcTag)
| |
| {
| |
| eC_String kValue(uiInt);
| |
| WriteNode(pcTag, kValue, false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteColor(const ColorValue_t eColor, const eC_Char* const pcTag)
| |
| {
| |
| WriteHex(eColor.uiColor, pcTag);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteFloat(const eC_Float fFloat, const eC_Char* const pcTag)
| |
| {
| |
| eC_String kValue(fFloat);
| |
| WriteNode(pcTag, kValue, false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteString(const eC_String &pkString, const eC_Char* const pcTag)
| |
| {
| |
| WriteNode(pcTag, pkString, true);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteShort(const eC_Short iShort, const eC_Char* const pcTag)
| |
| {
| |
| eC_String kValue(iShort);
| |
| WriteNode(pcTag, kValue, false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteBool(const eC_Bool bBool, const eC_Char* const pcTag)
| |
| {
| |
| WriteNode(pcTag, (bBool) ? "true" : "false", false);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteBinary(const eC_TArray<eC_UByte>& aData, const eC_Char* const pcTag)
| |
| {
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteCommentTag(const eC_Char* const pcTag)
| |
| {
| |
| WriteCommentTag(eC_String(pcTag));
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteCommentTag(const eC_String& kTag)
| |
| {
| |
| if (kTag.IsEmpty())
| |
| return;
| |
|
| |
| if (kTag == CGUICompositeObject::XMLTAG_CHILDREN)
| |
| {
| |
| BeginArray(kTag);
| |
| }
| |
| else if (kTag == CGUICompositeObject::XMLTAG_ENDCHILDREN)
| |
| {
| |
| EndArray();
| |
| }
| |
| else if (kTag == CGUIObject::XMLTAG_CLASSVERSION)
| |
| {
| |
| }
| |
| else
| |
| {
| |
| if (kTag.GetArray()[0] != '/')
| |
| BeginObject(kTag);
| |
| else
| |
| EndObject();
| |
| }
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteStreamingFileHeader(const eC_Int iFileVersion)
| |
| {
| |
| }
| |
|
| |
| eC_Bool CGUIStreamWriterJSON::SetFileEndianess(FileEndianess_t eFileEndianess)
| |
| {
| |
| m_eFileEndianess = eFileEndianess;
| |
|
| |
| return true;
| |
| }
| |
|
| |
| eC_Bool CGUIStreamWriterJSON::SetFileAlignment(FileAlignment_t eFileAlignment)
| |
| {
| |
| m_eFileAlignment = eFileAlignment;
| |
|
| |
| return true;
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteNode(const eC_String& kName, const eC_String& kValue, const eC_Bool& bAddDoubleQuotes)
| |
| {
| |
| if (kName == "ChildCount")
| |
| return;
| |
|
| |
| if (!kName.IsEmpty())
| |
| {
| |
| WriteLineEnding();
| |
| WriteNodeName(kName);
| |
| WriteNodeValue(kValue, bAddDoubleQuotes);
| |
|
| |
| ++m_uiCurrentNumberOfElements;
| |
| }
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteNodeName(const eC_String& kName)
| |
| {
| |
| WriteIndentation();
| |
| WriteUnterminatedString("\"" + kName + "\": ");
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteNodeValue(const eC_String& kValue, const eC_Bool& bAddDoubleQuotes)
| |
| {
| |
| //if (m_kTokenStack.GetQuantity() == 0)
| |
|
| |
| eC_String kText;
| |
| if (bAddDoubleQuotes)
| |
| kText += "\"";
| |
| kText += kValue;
| |
| if (bAddDoubleQuotes)
| |
| kText += "\"";
| |
|
| |
| WriteUnterminatedString(kText);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::BeginObject(const eC_String& kName)
| |
| {
| |
| WriteLineEnding();
| |
|
| |
| eC_Bool bWriteName = true;
| |
|
| |
| if ((m_kTokenStack.GetQuantity() > 0) &&
| |
| (*m_kTokenStack.GetAt(m_kTokenStack.GetQuantity() - 1) == TT_ARRAY)
| |
| )
| |
| bWriteName = false;
| |
|
| |
| if (bWriteName)
| |
| {
| |
| if (!kName.IsEmpty())
| |
| WriteNodeName(kName);
| |
| }
| |
| else
| |
| WriteIndentation();
| |
|
| |
| WriteUnterminatedString("{\n");
| |
|
| |
| m_uiCurrentNumberOfElements = 0;
| |
| ++m_uiIdentation;
| |
|
| |
| m_kTokenStack.AddAtEnd(TT_OBJECT);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::EndObject()
| |
| {
| |
| WriteUnterminatedString("\n");
| |
|
| |
| --m_uiIdentation;
| |
|
| |
| WriteIndentation();
| |
| WriteUnterminatedString("}");
| |
|
| |
| TokenType_t eTokenType;
| |
| m_kTokenStack.RemoveEnd(eTokenType);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::BeginArray(const eC_String& kName)
| |
| {
| |
| WriteLineEnding();
| |
|
| |
| if (!kName.IsEmpty())
| |
| WriteNodeName(kName);
| |
| WriteUnterminatedString("[\n");
| |
|
| |
| m_uiCurrentNumberOfElements = 0;
| |
| ++m_uiIdentation;
| |
|
| |
| m_kTokenStack.AddAtEnd(TT_ARRAY);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::EndArray()
| |
| {
| |
| WriteUnterminatedString("\n");
| |
| --m_uiIdentation;
| |
|
| |
| WriteIndentation();
| |
| WriteUnterminatedString("]");
| |
|
| |
| TokenType_t eTokenType;
| |
| m_kTokenStack.RemoveEnd(eTokenType);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteUnterminatedString(const eC_String& kString)
| |
| {
| |
| if (kString.IsEmpty())
| |
| return;
| |
|
| |
| eC_Char* pkString = kString.ToASCII_Alloc();
| |
| m_pkStreamingFile->Write8((eC_UByte*)pkString, kString.GetLength());
| |
|
| |
| delete pkString;
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteIndentation()
| |
| {
| |
| eC_String kText;
| |
|
| |
| for (eC_UInt uiIndent = 0; uiIndent < m_uiIdentation; ++uiIndent)
| |
| kText += " ";
| |
|
| |
| WriteUnterminatedString(kText);
| |
| }
| |
|
| |
| void CGUIStreamWriterJSON::WriteLineEnding()
| |
| {
| |
| eC_String kText;
| |
|
| |
| if (m_uiCurrentNumberOfElements > 0)
| |
| kText += ",\n";
| |
| WriteUnterminatedString(kText);
| |
| }
| |