You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegraphics/kpovmodeler/pmoutputdevice.h

160 lines
4.5 KiB

//-*-C++-*-
/*
**************************************************************************
description
--------------------
copyright : (C) 2000-2003 by Andreas Zehender
email : zehender@kde.org
**************************************************************************
**************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
**************************************************************************/
#ifndef PMOUTPUTDEVICE_H
#define PMOUTPUTDEVICE_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "pmserializer.h"
#include <tqstring.h>
class TQTextStream;
class PMPovrayFormat;
/**
* Output class for povray code.
*
* The class @ref PMPovrayFormat or a base class has factory methods
* to create an instance of this class. The output device uses the
* registered serialization methods of this povray format to serialize
* objects.
*
* This class handles the indentation and position of brackets
*/
class PMOutputDevice : public PMSerializer
{
public:
/**
* Creates an PMOutputDevice that serializes the povray code
* to the device
*/
PMOutputDevice( TQIODevice* dev, PMPovrayFormat* format );
/** */
virtual ~PMOutputDevice( );
/** */
virtual TQString description( ) const;
/** */
virtual void serialize( PMObject* o );
/** */
virtual void close( );
/**
* Writes the povray object type, an open bracket to the text stream
* and indents the next lines
*/
void objectBegin( const TQString& type );
/**
* Begins a declare with the identifier id
*/
void declareBegin( const TQString& id );
/**
* Writes an closing bracket to the text stream
* and decreases the indentation
*/
void objectEnd( );
/**
* Writes a single line to the text stream. Don't include
* newlines in the string or indentation will not work properly.
*
* Adds a newline before the string.
*/
void writeLine( const TQString& str );
/**
* Writes the string to the text stream
*/
void write( const TQString& str );
/**
* Writes a new line to the text stream and indents the next line.
*/
void newLine( );
/**
* Writes a comment string to the text stream
*/
void writeComment( const TQString& text );
/**
* Writes a semicolon after a call to objectEnd( )
*/
void writeSemicolon( );
/**
* Writes a special name comment to the text stream, if the
* name is not empty
*/
void writeName( const TQString& name );
/**
* Returns the basic indentation offset
*/
static unsigned int indentationOffset( ) { return s_indentOffset; }
/**
* Sets the basic indentation offset
*/
static void setIndentationOffset( unsigned int offset )
{ s_indentOffset = offset; }
/**
* If set to true, the open bracket after an object begin will be
* written behind the object type, otherwise in a new line.
*/
static void setBracketBehindType( bool yes ) { s_bracketBehindType = yes; }
/**
* Returns true if the open bracket after an object begin will be
* written behind the object type
*/
static bool bracketBehindType( ) { return s_bracketBehindType; }
/**
* Correctly escapes the string and puts quotation marks at the begin
* and end of the string.
*
* Escapes only not escaped characters. "\"" and "\\" in the string
* are not escaped.
*/
static TQString escapeAndQuoteString( const TQString& s );
/**
* Calls the serialization method for the object o and class
* given by the meta object.
*
* If no method for this class was registered in the corresponding
* @ref PMPovrayFormat, an error is added the message list.
*/
void callSerialization( const PMObject* o, const PMMetaObject* mo );
private:
static unsigned int s_indentOffset;
static bool s_bracketBehindType;
PMPovrayFormat* m_pFormat;
unsigned int m_indentation;
TQString m_indentString;
TQTextStream m_stream;
bool m_lastWasComment;
bool m_pendingNewLine;
bool m_objectSeparation;
};
#endif