User

Difference between revisions of "Sascha"

From Guiliani

(Blanked the page)
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 18: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;

}

  1. include "GUIStreamWriter.h"
  1. 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;

};

  1. include "GUIStreamWriterJSON.h"
  2. 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);

}