/[svn]/qsampler/trunk/src/qsamplerMessages.cpp
ViewVC logotype

Diff of /qsampler/trunk/src/qsamplerMessages.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1474 by schoenebeck, Mon Nov 5 20:47:38 2007 UTC revision 2441 by capela, Wed Apr 10 09:11:37 2013 UTC
# Line 1  Line 1 
1  // qsamplerMessages.cpp  // qsamplerMessages.cpp
2  //  //
3  /****************************************************************************  /****************************************************************************
4     Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved.     Copyright (C) 2004-2013, rncbc aka Rui Nuno Capela. All rights reserved.
5     Copyright (C) 2007, Christian Schoenebeck     Copyright (C) 2007, Christian Schoenebeck
6    
7     This program is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or
# Line 24  Line 24 
24  #include "qsamplerMessages.h"  #include "qsamplerMessages.h"
25    
26  #include <QSocketNotifier>  #include <QSocketNotifier>
27    
28    #include <QFile>
29  #include <QTextEdit>  #include <QTextEdit>
30  #include <QTextCursor>  #include <QTextCursor>
31    #include <QTextStream>
32  #include <QTextBlock>  #include <QTextBlock>
33  #include <QScrollBar>  #include <QScrollBar>
34  #include <QDateTime>  #include <QDateTime>
# Line 35  Line 38 
38  #include <unistd.h>  #include <unistd.h>
39  #endif  #endif
40    
41    
42    namespace QSampler {
43    
44  // The default maximum number of message lines.  // The default maximum number of message lines.
45  #define QSAMPLER_MESSAGES_MAXLINES  1000  #define QSAMPLER_MESSAGES_MAXLINES  1000
46    
# Line 43  Line 49 
49  #define QSAMPLER_MESSAGES_FDREAD    0  #define QSAMPLER_MESSAGES_FDREAD    0
50  #define QSAMPLER_MESSAGES_FDWRITE   1  #define QSAMPLER_MESSAGES_FDWRITE   1
51    
   
52  //-------------------------------------------------------------------------  //-------------------------------------------------------------------------
53  // qsamplerMessages - Messages log dockable window.  // QSampler::Messages - Messages log dockable window.
54  //  //
55    
56  // Constructor.  // Constructor.
57  qsamplerMessages::qsamplerMessages ( QWidget *pParent )  Messages::Messages ( QWidget *pParent )
58      : QDockWidget(pParent)          : QDockWidget(pParent)
59  {  {
60          // Surely a name is crucial (e.g.for storing geometry settings)          // Surely a name is crucial (e.g.for storing geometry settings)
61          QDockWidget::setObjectName("qsamplerMessages");          QDockWidget::setObjectName("qsamplerMessages");
62    
63      // Intialize stdout capture stuff.          // Intialize stdout capture stuff.
64      m_pStdoutNotifier = NULL;          m_pStdoutNotifier = NULL;
65      m_fdStdout[QSAMPLER_MESSAGES_FDREAD]  = QSAMPLER_MESSAGES_FDNIL;          m_fdStdout[QSAMPLER_MESSAGES_FDREAD]  = QSAMPLER_MESSAGES_FDNIL;
66      m_fdStdout[QSAMPLER_MESSAGES_FDWRITE] = QSAMPLER_MESSAGES_FDNIL;          m_fdStdout[QSAMPLER_MESSAGES_FDWRITE] = QSAMPLER_MESSAGES_FDNIL;
67    
68          // Create local text view widget.          // Create local text view widget.
69          m_pTextView = new QTextEdit(this);          m_pMessagesTextView = new QTextEdit(this);
70  //  QFont font(m_pTextView->font());  //  QFont font(m_pMessagesTextView->font());
71  //  font.setFamily("Fixed");  //  font.setFamily("Fixed");
72  //  m_pTextView->setFont(font);  //  m_pMessagesTextView->setFont(font);
73          m_pTextView->setLineWrapMode(QTextEdit::NoWrap);          m_pMessagesTextView->setLineWrapMode(QTextEdit::NoWrap);
74          m_pTextView->setReadOnly(true);          m_pMessagesTextView->setReadOnly(true);
75          m_pTextView->setUndoRedoEnabled(false);          m_pMessagesTextView->setUndoRedoEnabled(false);
76  //      m_pTextView->setTextFormat(Qt::LogText);  //      m_pMessagesTextView->setTextFormat(Qt::LogText);
77    
78          // Initialize default message limit.          // Initialize default message limit.
79          m_iMessagesLines = 0;          m_iMessagesLines = 0;
80          setMessagesLimit(QSAMPLER_MESSAGES_MAXLINES);          setMessagesLimit(QSAMPLER_MESSAGES_MAXLINES);
81    
82            m_pMessagesLog = NULL;
83    
84          // Prepare the dockable window stuff.          // Prepare the dockable window stuff.
85          QDockWidget::setWidget(m_pTextView);          QDockWidget::setWidget(m_pMessagesTextView);
86          QDockWidget::setFeatures(QDockWidget::AllDockWidgetFeatures);          QDockWidget::setFeatures(QDockWidget::AllDockWidgetFeatures);
87          QDockWidget::setAllowedAreas(          QDockWidget::setAllowedAreas(
88                  Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);                  Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
# Line 91  qsamplerMessages::qsamplerMessages ( QWi Line 98  qsamplerMessages::qsamplerMessages ( QWi
98    
99    
100  // Destructor.  // Destructor.
101  qsamplerMessages::~qsamplerMessages (void)  Messages::~Messages (void)
102  {  {
103      // No more notifications.          // Turn off and close logging.
104      if (m_pStdoutNotifier)          setLogging(false);
         delete m_pStdoutNotifier;  
105    
106      // No need to delete child widgets, Qt does it all for us.          // No more notifications.
107            if (m_pStdoutNotifier)
108                    delete m_pStdoutNotifier;
109    
110            // No need to delete child widgets, Qt does it all for us.
111  }  }
112    
113    
114  void qsamplerMessages::showEvent (QShowEvent* event)  #if QT_VERSION < 0x040300
115    void Messages::showEvent ( QShowEvent *pEvent )
116  {  {
117      QDockWidget::showEvent(event);          QDockWidget::showEvent(pEvent);
118      emit visibilityChanged(isVisible());          emit visibilityChanged(isVisible());
119  }  }
120    #endif
121    
122  // Own stdout/stderr socket notifier slot.  // Own stdout/stderr socket notifier slot.
123  void qsamplerMessages::stdoutNotify ( int fd )  void Messages::stdoutNotify ( int fd )
124  {  {
125  #if !defined(WIN32)  #if !defined(WIN32)
126      char achBuffer[1024];          char achBuffer[1024];
127      int  cchBuffer = ::read(fd, achBuffer, sizeof(achBuffer) - 1);          int  cchBuffer = ::read(fd, achBuffer, sizeof(achBuffer) - 1);
128      if (cchBuffer > 0) {          if (cchBuffer > 0) {
129          achBuffer[cchBuffer] = (char) 0;                  achBuffer[cchBuffer] = (char) 0;
130          appendStdoutBuffer(achBuffer);                  appendStdoutBuffer(achBuffer);
131      }          }
132  #endif  #endif
133  }  }
134    
135    
136  // Stdout buffer handler -- now splitted by complete new-lines...  // Stdout buffer handler -- now splitted by complete new-lines...
137  void qsamplerMessages::appendStdoutBuffer ( const QString& s )  void Messages::appendStdoutBuffer ( const QString& s )
138  {  {
139          m_sStdoutBuffer.append(s);          m_sStdoutBuffer.append(s);
140    
# Line 140  void qsamplerMessages::appendStdoutBuffe Line 151  void qsamplerMessages::appendStdoutBuffe
151    
152    
153  // Stdout flusher -- show up any unfinished line...  // Stdout flusher -- show up any unfinished line...
154  void qsamplerMessages::flushStdoutBuffer (void)  void Messages::flushStdoutBuffer (void)
155  {  {
156      if (!m_sStdoutBuffer.isEmpty()) {          if (!m_sStdoutBuffer.isEmpty()) {
157          appendMessagesText(m_sStdoutBuffer);                  appendMessagesText(m_sStdoutBuffer);
158          m_sStdoutBuffer.truncate(0);                  m_sStdoutBuffer.truncate(0);
159      }          }
160  }  }
161    
162    
163  // Stdout capture accessors.  // Stdout capture accessors.
164  bool qsamplerMessages::isCaptureEnabled (void)  bool Messages::isCaptureEnabled (void)
165  {  {
166      return (bool) (m_pStdoutNotifier != NULL);          return (bool) (m_pStdoutNotifier != NULL);
167  }  }
168    
169  void qsamplerMessages::setCaptureEnabled ( bool bCapture )  void Messages::setCaptureEnabled ( bool bCapture )
170  {  {
171      // Flush current buffer.          // Flush current buffer.
172      flushStdoutBuffer();          flushStdoutBuffer();
173    
174  #if !defined(WIN32)  #if !defined(WIN32)
175          // Destroy if already enabled.          // Destroy if already enabled.
# Line 190  void qsamplerMessages::setCaptureEnabled Line 201  void qsamplerMessages::setCaptureEnabled
201    
202    
203  // Message font accessors.  // Message font accessors.
204  QFont qsamplerMessages::messagesFont (void)  QFont Messages::messagesFont (void)
205  {  {
206      return m_pTextView->font();          return m_pMessagesTextView->font();
207  }  }
208    
209  void qsamplerMessages::setMessagesFont( const QFont& font )  void Messages::setMessagesFont ( const QFont& font )
210  {  {
211      m_pTextView->setFont(font);          m_pMessagesTextView->setFont(font);
212  }  }
213    
214    
215  // Maximum number of message lines accessors.  // Maximum number of message lines accessors.
216  int qsamplerMessages::messagesLimit (void)  int Messages::messagesLimit (void)
217  {  {
218      return m_iMessagesLimit;          return m_iMessagesLimit;
219  }  }
220    
221  void qsamplerMessages::setMessagesLimit ( int iMessagesLimit )  void Messages::setMessagesLimit ( int iMessagesLimit )
222  {  {
223      m_iMessagesLimit = iMessagesLimit;          m_iMessagesLimit = iMessagesLimit;
224      m_iMessagesHigh  = iMessagesLimit + (iMessagesLimit / 3);          m_iMessagesHigh  = iMessagesLimit + (iMessagesLimit / 3);
225  }  }
226    
227    // Messages logging stuff.
228    bool Messages::isLogging (void) const
229    {
230            return (m_pMessagesLog != NULL);
231    }
232    
233  // The main utility methods.  void Messages::setLogging ( bool bEnabled, const QString& sFilename )
 void qsamplerMessages::appendMessages ( const QString& s )  
234  {  {
235      appendMessagesColor(s, "#999999");          if (m_pMessagesLog) {
236                    appendMessages(tr("Logging stopped --- %1 ---")
237                            .arg(QDateTime::currentDateTime().toString()));
238                    m_pMessagesLog->close();
239                    delete m_pMessagesLog;
240                    m_pMessagesLog = NULL;
241            }
242    
243            if (bEnabled) {
244                    m_pMessagesLog = new QFile(sFilename);
245                    if (m_pMessagesLog->open(QIODevice::Text | QIODevice::Append)) {
246                            appendMessages(tr("Logging started --- %1 ---")
247                                    .arg(QDateTime::currentDateTime().toString()));
248                    } else {
249                            delete m_pMessagesLog;
250                            m_pMessagesLog = NULL;
251                    }
252            }
253  }  }
254    
255  void qsamplerMessages::appendMessagesColor ( const QString& s, const QString &c )  
256    // Messages log output method.
257    void Messages::appendMessagesLog ( const QString& s )
258  {  {
259          appendMessagesText("<font color=\"" + c + "\">"          if (m_pMessagesLog) {
260                  + QTime::currentTime().toString("hh:mm:ss.zzz")                  QTextStream(m_pMessagesLog) << s << endl;
261                  + ' ' + s + "</font>");                  m_pMessagesLog->flush();
262            }
263  }  }
264    
265  void qsamplerMessages::appendMessagesText ( const QString& s )  // Messages widget output method.
266    void Messages::appendMessagesLine ( const QString& s )
267  {  {
268      // Check for message line limit...          // Check for message line limit...
269      if (m_iMessagesLines > m_iMessagesHigh) {          if (m_iMessagesLines > m_iMessagesHigh) {
270                  m_pTextView->setUpdatesEnabled(false);                  m_pMessagesTextView->setUpdatesEnabled(false);
271                  QTextCursor textCursor(m_pTextView->document()->begin());                  QTextCursor textCursor(m_pMessagesTextView->document()->begin());
272                  while (m_iMessagesLines > m_iMessagesLimit) {                  while (m_iMessagesLines > m_iMessagesLimit) {
273                          // Move cursor extending selection                          // Move cursor extending selection
274                          // from start to next line-block...                          // from start to next line-block...
# Line 242  void qsamplerMessages::appendMessagesTex Line 278  void qsamplerMessages::appendMessagesTex
278                  }                  }
279                  // Remove the excessive line-blocks...                  // Remove the excessive line-blocks...
280                  textCursor.removeSelectedText();                  textCursor.removeSelectedText();
281                  m_pTextView->setUpdatesEnabled(true);                  m_pMessagesTextView->setUpdatesEnabled(true);
282      }          }
283    
284          // Count always as a new line out there...          m_pMessagesTextView->append(s);
         m_pTextView->append(s);  
285          m_iMessagesLines++;          m_iMessagesLines++;
286  }  }
287    
288    
289    // The main utility methods.
290    void Messages::appendMessages ( const QString& s )
291    {
292            appendMessagesColor(s, "#999999");
293    }
294    
295    void Messages::appendMessagesColor ( const QString& s, const QString &c )
296    {
297            QString sText = QTime::currentTime().toString("hh:mm:ss.zzz") + ' ' + s;
298            appendMessagesLine("<font color=\"" + c + "\">" + sText + "</font>");
299            appendMessagesLog(sText);
300    }
301    
302    void Messages::appendMessagesText ( const QString& s )
303    {
304            appendMessagesLine(s);
305            appendMessagesLog(s);
306    }
307    
308    
309  // History reset.  // History reset.
310  void qsamplerMessages::clear (void)  void Messages::clear (void)
311  {  {
312          m_iMessagesLines = 0;          m_iMessagesLines = 0;
313          m_pTextView->clear();          m_pMessagesTextView->clear();
314  }  }
315    
316    } // namespace QSampler
317    
318    
319  // end of qsamplerMessages.cpp  // end of qsamplerMessages.cpp

Legend:
Removed from v.1474  
changed lines
  Added in v.2441

  ViewVC Help
Powered by ViewVC