--- qsampler/trunk/src/qsamplerMessages.cpp 2007/12/06 09:35:33 1558 +++ qsampler/trunk/src/qsamplerMessages.cpp 2008/05/14 15:24:22 1738 @@ -1,7 +1,7 @@ // qsamplerMessages.cpp // /**************************************************************************** - Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2004-2008, rncbc aka Rui Nuno Capela. All rights reserved. Copyright (C) 2007, Christian Schoenebeck This program is free software; you can redistribute it and/or @@ -24,8 +24,11 @@ #include "qsamplerMessages.h" #include + +#include #include #include +#include #include #include #include @@ -63,21 +66,23 @@ m_fdStdout[QSAMPLER_MESSAGES_FDWRITE] = QSAMPLER_MESSAGES_FDNIL; // Create local text view widget. - m_pTextView = new QTextEdit(this); -// QFont font(m_pTextView->font()); + m_pMessagesTextView = new QTextEdit(this); +// QFont font(m_pMessagesTextView->font()); // font.setFamily("Fixed"); -// m_pTextView->setFont(font); - m_pTextView->setLineWrapMode(QTextEdit::NoWrap); - m_pTextView->setReadOnly(true); - m_pTextView->setUndoRedoEnabled(false); -// m_pTextView->setTextFormat(Qt::LogText); +// m_pMessagesTextView->setFont(font); + m_pMessagesTextView->setLineWrapMode(QTextEdit::NoWrap); + m_pMessagesTextView->setReadOnly(true); + m_pMessagesTextView->setUndoRedoEnabled(false); +// m_pMessagesTextView->setTextFormat(Qt::LogText); // Initialize default message limit. m_iMessagesLines = 0; setMessagesLimit(QSAMPLER_MESSAGES_MAXLINES); + m_pMessagesLog = NULL; + // Prepare the dockable window stuff. - QDockWidget::setWidget(m_pTextView); + QDockWidget::setWidget(m_pMessagesTextView); QDockWidget::setFeatures(QDockWidget::AllDockWidgetFeatures); QDockWidget::setAllowedAreas( Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea); @@ -95,6 +100,8 @@ // Destructor. Messages::~Messages (void) { + setLogging(false); + // No more notifications. if (m_pStdoutNotifier) delete m_pStdoutNotifier; @@ -103,9 +110,9 @@ } -void Messages::showEvent (QShowEvent* event) +void Messages::showEvent ( QShowEvent *pEvent ) { - QDockWidget::showEvent(event); + QDockWidget::showEvent(pEvent); emit visibilityChanged(isVisible()); } @@ -194,12 +201,12 @@ // Message font accessors. QFont Messages::messagesFont (void) { - return m_pTextView->font(); + return m_pMessagesTextView->font(); } -void Messages::setMessagesFont( const QFont& font ) +void Messages::setMessagesFont ( const QFont& font ) { - m_pTextView->setFont(font); + m_pMessagesTextView->setFont(font); } @@ -215,26 +222,51 @@ m_iMessagesHigh = iMessagesLimit + (iMessagesLimit / 3); } +// Messages logging stuff. +bool Messages::isLogging (void) const +{ + return (m_pMessagesLog != NULL); +} -// The main utility methods. -void Messages::appendMessages ( const QString& s ) +void Messages::setLogging ( bool bEnabled, const QString& sFilename ) { - appendMessagesColor(s, "#999999"); + if (m_pMessagesLog) { + appendMessages(tr("Logging stopped --- %1 ---") + .arg(QDateTime::currentDateTime().toString())); + m_pMessagesLog->close(); + delete m_pMessagesLog; + m_pMessagesLog = NULL; + } + + if (bEnabled) { + m_pMessagesLog = new QFile(sFilename); + if (m_pMessagesLog->open(QIODevice::Text | QIODevice::Append)) { + appendMessages(tr("Logging started --- %1 ---") + .arg(QDateTime::currentDateTime().toString())); + } else { + delete m_pMessagesLog; + m_pMessagesLog = NULL; + } + } } -void Messages::appendMessagesColor ( const QString& s, const QString &c ) + +// Messages log output method. +void Messages::appendMessagesLog ( const QString& s ) { - appendMessagesText("" - + QTime::currentTime().toString("hh:mm:ss.zzz") - + ' ' + s + ""); + if (m_pMessagesLog) { + QTextStream(m_pMessagesLog) << s << endl; + m_pMessagesLog->flush(); + } } -void Messages::appendMessagesText ( const QString& s ) +// Messages widget output method. +void Messages::appendMessagesLine ( const QString& s ) { - // Check for message line limit... - if (m_iMessagesLines > m_iMessagesHigh) { - m_pTextView->setUpdatesEnabled(false); - QTextCursor textCursor(m_pTextView->document()->begin()); + // Check for message line limit... + if (m_iMessagesLines > m_iMessagesHigh) { + m_pMessagesTextView->setUpdatesEnabled(false); + QTextCursor textCursor(m_pMessagesTextView->document()->begin()); while (m_iMessagesLines > m_iMessagesLimit) { // Move cursor extending selection // from start to next line-block... @@ -244,20 +276,40 @@ } // Remove the excessive line-blocks... textCursor.removeSelectedText(); - m_pTextView->setUpdatesEnabled(true); - } + m_pMessagesTextView->setUpdatesEnabled(true); + } - // Count always as a new line out there... - m_pTextView->append(s); + m_pMessagesTextView->append(s); m_iMessagesLines++; } +// The main utility methods. +void Messages::appendMessages ( const QString& s ) +{ + appendMessagesColor(s, "#999999"); +} + +void Messages::appendMessagesColor ( const QString& s, const QString &c ) +{ + QString sText = QTime::currentTime().toString("hh:mm:ss.zzz") + ' ' + s; + + appendMessagesLine("" + sText + ""); + appendMessagesLog(sText); +} + +void Messages::appendMessagesText ( const QString& s ) +{ + appendMessagesLine(s); + appendMessagesLog(s); +} + + // History reset. void Messages::clear (void) { m_iMessagesLines = 0; - m_pTextView->clear(); + m_pMessagesTextView->clear(); } } // namespace QSampler