Sascha: Difference between revisions
From Guiliani
Blanked the page |
No edit summary |
||
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); | |||
} |
Revision as of 17:26, 18 July 2019
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);
}