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 class NullDevice
: public QIODevice
{
25 virtual qint64
readData (char *data
, qint64 maxlen
) {
30 virtual qint64
writeData (const char *data
, qint64 len
) {
39 : verbosity(Logger::Chatty
),
40 dummy(new NullDevice()),
56 return; // already present.
57 pager
= new QProcess();
58 pager
->setProcessChannelMode(QProcess::ForwardedChannels
);
60 if (! startPager("less", QStringList() << "-R" << "-E")) {
62 if (! startPager("less", QStringList() << "-E")) {
63 if (! startPager("more")) {
70 pagerStream
= new QTextStream(pager
);
78 pager
->closeWriteChannel();
79 pager
->waitForFinished(-1);
86 bool startPager(const QString
&program
, const QStringList
&arguments
= QStringList())
89 pager
->start(program
, arguments
, QIODevice::ReadWrite
);
90 if (! pager
->waitForStarted()) {
91 if (pager
->state() != QProcess::NotRunning
) { // time out
92 standardOut
<< "ERROR: the pager failed to start" << endl
;
97 if (pager
->state() != QProcess::Running
) // it already 'finished'
102 Logger::Verbosity verbosity
;
104 QTextStream standardOut
;
105 QTextStream
*pagerStream
;
110 Q_GLOBAL_STATIC(LoggerPrivate
, _vng_logger_private
)
114 : d(_vng_logger_private())
118 void Logger::setVerbosity(Verbosity verbosity
)
120 _vng_logger_private()->verbosity
= verbosity
;
123 Logger::Verbosity
Logger::verbosity()
125 return _vng_logger_private()->verbosity
;
128 QTextStream
& Logger::standardOut()
130 LoggerPrivate
*self
= _vng_logger_private();
131 if (self
->pagerStream
)
132 return *self
->pagerStream
;
133 return self
->standardOut
;
136 QTextStream
&Logger::log(Verbosity verbosity
)
138 LoggerPrivate
*self
= _vng_logger_private();
139 if (self
->verbosity
>= verbosity
) {
140 if (self
->pagerStream
)
141 return *self
->pagerStream
;
142 return self
->standardOut
;
148 QTextStream
& Logger::debug()
153 QTextStream
& Logger::info()
158 QTextStream
& Logger::warn()
163 QTextStream
& Logger::error()
168 void Logger::startPager()
170 _vng_logger_private()->insertPager();
173 void Logger::stopPager()
175 _vng_logger_private()->removePager();
179 bool Logger::hasNonColorPager()
181 if (_vng_logger_private()->pager
== 0)
183 return ! _vng_logger_private()->colorPager
;