itom 1.3.0
D:/git-itom/sources/itom/Qitom/python/qDebugStream.h
00001 /* ********************************************************************
00002     itom software
00003     URL: http://www.uni-stuttgart.de/ito
00004     Copyright (C) 2013, Institut für Technische Optik (ITO),
00005     Universität Stuttgart, Germany
00006 
00007     This file is part of itom.
00008   
00009     itom is free software; you can redistribute it and/or modify it
00010     under the terms of the GNU Library General Public Licence as published by
00011     the Free Software Foundation; either version 2 of the Licence, or (at
00012     your option) any later version.
00013 
00014     itom is distributed in the hope that it will be useful, but
00015     WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
00017     General Public Licence for more details.
00018 
00019     You should have received a copy of the GNU Library General Public License
00020     along with itom. If not, see <http://www.gnu.org/licenses/>.
00021 *********************************************************************** */
00022 
00023 //################
00024 //# qdebugstream.h  #
00025 //################
00026 
00027 #ifndef Q_DEBUG_STREAM_H
00028 #define Q_DEBUG_STREAM_H
00029 
00030 #include "../../common/typeDefs.h"
00031 #include <iostream>
00032 #include <qobject.h>
00033 
00034 namespace ito {
00035 
00038 class QDebugStream : public QObject, public std::basic_streambuf<char>
00039 {
00040     Q_OBJECT
00041 
00042 public:
00043     QDebugStream(std::ostream &stream, tMsgType type, QString lineBreak = "\n");
00044     ~QDebugStream();
00045 
00046 
00047 signals:
00048     void flushStream( QString, tMsgType ); 
00050 protected:
00051 
00053     virtual int_type overflow(int_type v)
00054     {
00055         if (v == '\n')
00056         {
00057             emit flushStream(QString(m_string.c_str()), msg_type);
00058             m_string.erase(m_string.begin(), m_string.end());
00059         }
00060         else
00061         {
00062             m_string += v;
00063         }
00064 
00065         return v;
00066     };
00067 
00068     virtual std::streamsize xsputn(const char *p, std::streamsize n);
00069 
00070 private:
00071     std::ostream &m_stream;     
00072     std::streambuf *m_old_buf;  
00073     std::string m_string;       
00074     tMsgType msg_type;          
00075     QString line_break;         
00076 };
00077 
00078 }; // namespace ito
00079 
00080 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends