/[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 2459 by capela, Mon Jul 8 10:06:57 2013 UTC revision 2669 by capela, Sun Aug 3 16:56:18 2014 UTC
# Line 1  Line 1 
1  // qsamplerMessages.cpp  // qsamplerMessages.cpp
2  //  //
3  /****************************************************************************  /****************************************************************************
4     Copyright (C) 2004-2013, rncbc aka Rui Nuno Capela. All rights reserved.     Copyright (C) 2004-2014, 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 36  Line 36 
36    
37  #if !defined(WIN32)  #if !defined(WIN32)
38  #include <unistd.h>  #include <unistd.h>
39    #include <fcntl.h>
40  #endif  #endif
41    
42    
# Line 49  namespace QSampler { Line 50  namespace QSampler {
50  #define QSAMPLER_MESSAGES_FDREAD    0  #define QSAMPLER_MESSAGES_FDREAD    0
51  #define QSAMPLER_MESSAGES_FDWRITE   1  #define QSAMPLER_MESSAGES_FDWRITE   1
52    
53    
54  //-------------------------------------------------------------------------  //-------------------------------------------------------------------------
55  // QSampler::Messages - Messages log dockable window.  // QSampler::Messages - Messages log dockable window.
56  //  //
# Line 115  Messages::~Messages (void) Line 117  Messages::~Messages (void)
117  void Messages::stdoutNotify ( int fd )  void Messages::stdoutNotify ( int fd )
118  {  {
119  #if !defined(WIN32)  #if !defined(WIN32)
120            // Set non-blocking reads, if not already...
121            const int iFlags = ::fcntl(fd, F_GETFL, 0);
122            int iBlock = ((iFlags & O_NONBLOCK) == 0);
123            if (iBlock)
124                    iBlock = ::fcntl(fd, F_SETFL, iFlags | O_NONBLOCK);
125            // Read as much as is available...
126            QString sTemp;
127          char achBuffer[1024];          char achBuffer[1024];
128          int  cchBuffer = ::read(fd, achBuffer, sizeof(achBuffer) - 1);          const int cchBuffer = sizeof(achBuffer) - 1;
129          if (cchBuffer > 0) {          int cchRead = ::read(fd, achBuffer, cchBuffer);
130                  achBuffer[cchBuffer] = (char) 0;          while (cchRead > 0) {
131                  appendStdoutBuffer(achBuffer);                  achBuffer[cchRead] = (char) 0;
132                    sTemp.append(achBuffer);
133                    cchRead = (iBlock ? 0 : ::read(fd, achBuffer, cchBuffer));
134          }          }
135            // Needs to be non-empty...
136            if (!sTemp.isEmpty())
137                    appendStdoutBuffer(sTemp);
138  #endif  #endif
139  }  }
140    
# Line 130  void Messages::appendStdoutBuffer ( cons Line 144  void Messages::appendStdoutBuffer ( cons
144  {  {
145          m_sStdoutBuffer.append(s);          m_sStdoutBuffer.append(s);
146    
147          int iLength = m_sStdoutBuffer.lastIndexOf('\n');          const int iLength = m_sStdoutBuffer.lastIndexOf('\n');
148          if (iLength > 0) {          if (iLength > 0) {
149                  QString sTemp = m_sStdoutBuffer.left(iLength);                  const QString& sTemp = m_sStdoutBuffer.left(iLength);
150                  m_sStdoutBuffer.remove(0, iLength + 1);                  m_sStdoutBuffer.remove(0, iLength + 1);
151                  QStringList list = sTemp.split('\n');                  QStringList list = sTemp.split('\n');
152                  QStringListIterator iter(list);                  QStringListIterator iter(list);
# Line 147  void Messages::flushStdoutBuffer (void) Line 161  void Messages::flushStdoutBuffer (void)
161  {  {
162          if (!m_sStdoutBuffer.isEmpty()) {          if (!m_sStdoutBuffer.isEmpty()) {
163                  appendMessagesText(m_sStdoutBuffer);                  appendMessagesText(m_sStdoutBuffer);
164                  m_sStdoutBuffer.truncate(0);                  m_sStdoutBuffer.clear();
165          }          }
166  }  }
167    
# Line 155  void Messages::flushStdoutBuffer (void) Line 169  void Messages::flushStdoutBuffer (void)
169  // Stdout capture accessors.  // Stdout capture accessors.
170  bool Messages::isCaptureEnabled (void)  bool Messages::isCaptureEnabled (void)
171  {  {
172          return (bool) (m_pStdoutNotifier != NULL);          return (m_pStdoutNotifier != NULL);
173  }  }
174    
175  void Messages::setCaptureEnabled ( bool bCapture )  void Messages::setCaptureEnabled ( bool bCapture )
# Line 173  void Messages::setCaptureEnabled ( bool Line 187  void Messages::setCaptureEnabled ( bool
187                          ::close(m_fdStdout[QSAMPLER_MESSAGES_FDREAD]);                          ::close(m_fdStdout[QSAMPLER_MESSAGES_FDREAD]);
188                          m_fdStdout[QSAMPLER_MESSAGES_FDREAD]  = QSAMPLER_MESSAGES_FDNIL;                          m_fdStdout[QSAMPLER_MESSAGES_FDREAD]  = QSAMPLER_MESSAGES_FDNIL;
189                  }                  }
                 if (m_fdStdout[QSAMPLER_MESSAGES_FDREAD] != QSAMPLER_MESSAGES_FDNIL) {  
                         ::close(m_fdStdout[QSAMPLER_MESSAGES_FDREAD]);  
                         m_fdStdout[QSAMPLER_MESSAGES_FDREAD]  = QSAMPLER_MESSAGES_FDNIL;  
                 }  
190          }          }
191          // Are we going to make up the capture?          // Are we going to make up the capture?
192          if (bCapture && m_pStdoutNotifier == NULL && ::pipe(m_fdStdout) == 0) {          if (bCapture && m_pStdoutNotifier == NULL && ::pipe(m_fdStdout) == 0) {
# Line 286  void Messages::appendMessages ( const QS Line 296  void Messages::appendMessages ( const QS
296    
297  void Messages::appendMessagesColor ( const QString& s, const QString &c )  void Messages::appendMessagesColor ( const QString& s, const QString &c )
298  {  {
299          QString sText = QTime::currentTime().toString("hh:mm:ss.zzz") + ' ' + s;          const QString& sText
300                    = QTime::currentTime().toString("hh:mm:ss.zzz") + ' ' + s;
301          appendMessagesLine("<font color=\"" + c + "\">" + sText + "</font>");          appendMessagesLine("<font color=\"" + c + "\">" + sText + "</font>");
302          appendMessagesLog(sText);          appendMessagesLog(sText);
303  }  }

Legend:
Removed from v.2459  
changed lines
  Added in v.2669

  ViewVC Help
Powered by ViewVC