//---------------------------------------------------------------
    void StreamWriter::closeElement()
    {
        COLLADABU_ASSERT ( !mOpenTags.empty() );

        mLevel--;

        if ( mOpenTags.back().mHasContents )
        {
            if ( !mOpenTags.back().mHasText )
            {
                appendNewLine();
                addWhiteSpace ( mLevel * mIndent );
            }

            appendChar ( '<' );

            appendChar ( '/' );
            appendNCNameString ( *mOpenTags.back().mName );
            appendChar ( '>' );
        }

        else
        {
            appendChar ( '/' );
            appendChar ( '>' );
        }

        mOpenTags.pop_back();
    }
LineOrientedVT100Client::LineOrientedVT100Client()
    : m_cursorColumn(-1)
    , m_cursorRow(-1)
    , m_previousCharacter('\0')
{
    appendNewLine(); // Ye olde first line.
}
    //---------------------------------------------------------------
    void StreamWriter::appendTextBlock ( const String &text )
    {
        if ( text.empty () ) return;

        prepareToAddContents();
        appendNewLine();
        addWhiteSpace ( mLevel * mIndent );
        appendString ( text );
    }
bool IncomingMessagesHandling::PingStuff(Message *msg)
{
	if(StringBeginEqual(msg->ParameterArray[0],"PING"))
	{
		//Ping works, no need to confirm it anymore. Also fairly sure that can only be send by the server
		//OutputMessage(msg,0);
		msg->ParameterArray[0].replace(1,1,"O");
		msg->MergeParameterArray();
		appendNewLine(msg->formatedMessage);
		send(pMainWindow->GetSocket(),msg->formatedMessage.c_str(),msg->formatedMessage.length(),0);
		return true;
	}else return false;
}
    //---------------------------------------------------------------
    TagCloser StreamWriter::openElement ( const String & name )
    {
        prepareToAddContents();
        appendNewLine();
        addWhiteSpace ( mLevel * mIndent );
        mLevel++;
        appendChar ( '<' );
        appendNCNameString ( name );
		ElementIndexType nextElementIndex = mNextElementIndex++;
        mOpenTags.push_back( OpenTag ( &name, nextElementIndex ) );

        return TagCloser ( this, nextElementIndex );
    }
void LineOrientedVT100Client::appendCharacter(char character)
{
    if (character == '\n' && m_previousCharacter == '\r') {
        appendNewLine();
        somethingLargeChanged();
    } else if (character == '\b') {
        moveCursor(Left, Character);
    } else if (character != '\r') {
        moveCursor(Right, Character);
        m_lines.back()->appendCharacter(character);
        characterAppended();
    }
    m_previousCharacter = character;
}