2 * This file is part of the vng project
3 * Copyright (C) 2008 Thomas Zander <tzander@trolltech.com>
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 LoggerPrivate::LoggerPrivate()
24 : verbosity(Logger::Chatty
),
25 dummy(new NullDevice()),
32 LoggerPrivate::~LoggerPrivate() {
36 void LoggerPrivate::insertPager()
39 return; // already present.
40 pager
= new QProcess();
41 connect(pager
, SIGNAL(finished(int )), this, SLOT(pagerFinished()));
42 pager
->setProcessChannelMode(QProcess::ForwardedChannels
);
44 if (! startPager("less", QStringList() << "-R" << "-E")) {
46 if (! startPager("less", QStringList() << "-E")) {
47 if (! startPager("more")) {
54 pagerStream
= new QTextStream(pager
);
57 void LoggerPrivate::removePager()
62 pager
->closeWriteChannel();
63 pager
->waitForFinished(-1);
70 bool LoggerPrivate::startPager(const QString
&program
, const QStringList
&arguments
)
73 pager
->start(program
, arguments
, QIODevice::ReadWrite
);
74 if (! pager
->waitForStarted()) {
75 if (pager
->state() != QProcess::NotRunning
) { // time out
76 standardOut() << "ERROR: the pager failed to start" << endl
;
81 if (pager
->state() != QProcess::Running
) // it already 'finished'
86 void LoggerPrivate::pagerFinished()
93 Q_GLOBAL_STATIC(LoggerPrivate
, _vng_logger_private
)
97 : d(_vng_logger_private())
101 void Logger::setVerbosity(Verbosity verbosity
)
103 _vng_logger_private()->verbosity
= verbosity
;
106 Logger::Verbosity
Logger::verbosity()
108 return _vng_logger_private()->verbosity
;
111 QTextStream
& Logger::standardOut()
113 LoggerPrivate
*self
= _vng_logger_private();
114 if (self
->pagerStream
)
115 return *self
->pagerStream
;
116 return self
->standardOut();
119 QTextStream
&Logger::log(Verbosity verbosity
)
121 LoggerPrivate
*self
= _vng_logger_private();
122 if (self
->verbosity
>= verbosity
) {
123 if (self
->pagerStream
) {
124 self
->pager
->waitForBytesWritten();
125 return *self
->pagerStream
;
127 return self
->standardOut();
133 QTextStream
& Logger::debug()
138 QTextStream
& Logger::info()
143 QTextStream
& Logger::warn()
148 QTextStream
& Logger::error()
153 void Logger::startPager()
155 _vng_logger_private()->insertPager();
158 void Logger::stopPager()
160 _vng_logger_private()->removePager();
163 void Logger::flushPager()
165 QProcess
*pager
= _vng_logger_private()->pager
;
167 pager
->waitForBytesWritten();
171 bool Logger::hasNonColorPager()
173 if (_vng_logger_private()->pager
== 0)
175 return ! _vng_logger_private()->colorPager
;