summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmoutputdevice.h
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmoutputdevice.h')
-rw-r--r--kpovmodeler/pmoutputdevice.h159
1 files changed, 159 insertions, 0 deletions
diff --git a/kpovmodeler/pmoutputdevice.h b/kpovmodeler/pmoutputdevice.h
new file mode 100644
index 00000000..25b3c58b
--- /dev/null
+++ b/kpovmodeler/pmoutputdevice.h
@@ -0,0 +1,159 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2003 by Andreas Zehender
+**************************************************************************
+
+**************************************************************************
+* *
+* 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 <qstring.h>
+
+class QTextStream;
+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( QIODevice* dev, PMPovrayFormat* format );
+ /** */
+ virtual ~PMOutputDevice( );
+
+ /** */
+ virtual QString 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 QString& type );
+ /**
+ * Begins a declare with the identifier id
+ */
+ void declareBegin( const QString& 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 QString& str );
+ /**
+ * Writes the string to the text stream
+ */
+ void write( const QString& 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 QString& 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 QString& 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 QString escapeAndQuoteString( const QString& 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;
+ QString m_indentString;
+ QTextStream m_stream;
+ bool m_lastWasComment;
+ bool m_pendingNewLine;
+ bool m_objectSeparation;
+};
+
+
+#endif