A simple Qt based browser with no bullshit that supports PKCS#11 tokens (such as the SuisseID).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

112 lines
2.8 KiB

/*! @file
@id $Id$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#include <qbrowserlib/log.hxx>
namespace qbrowserlib {
bool Log::DEBUG(false);
LogDialog* Log::_dialog(0);
unsigned int Log::_level(0);
Log::Log(const void* addr, const std::string& name,
const std::string& file, unsigned long line,
bool traceOpenClose):
_debug(DEBUG), _close(traceOpenClose),
_addr(addr), _name(name), _file(file), _line(line), _clean(true) {
if (!_debug) return;
if (_close) {
++_level;
indent(_ss)<<"\\ "<<_name;
close(init(std::clog)<<_ss.str())<<std::endl;
if (!_dialog) _dialog = new LogDialog;
_dialog->append(*this, _ss.str());
_ss.str(std::string());
}
indent(_ss)<<"";
}
Log::~Log() throw() {
if (!_debug) return;
if (!_clean) {
close(init(std::clog)<<_ss.str())<<std::endl;
if (!_dialog) _dialog = new LogDialog;
_dialog->append(*this, _ss.str());
}
if (!_close) return;
_ss.str(std::string());
indent(_ss)<<"/ "<<_name;
close(init(std::clog)<<_ss.str())<<std::endl;
--_level;
_dialog->append(*this, _ss.str());
}
void Log::show(QWidget* p) {
if (!_dialog)
_dialog = new LogDialog(p);
_dialog->_logs->resizeColumnsToContents();
_dialog->_logs->resizeRowsToContents();
_dialog->show();
}
std::ostream& Log::init(std::ostream& ss) {
if (_addr)
ss<<std::hex<<std::setw(15)<<_addr<<": "<<std::dec;
else
ss<<std::setw(17)<<' ';
return ss;
}
std::ostream& Log::indent(std::ostream& ss) {
ss<<std::setw(2+_level)<<std::setfill(' ');
return ss;
}
std::ostream& Log::close(std::ostream& ss) {
ss<<" ("<<_file<<':'<<_line<<')';
return ss;
}
template<> LogDialog& LogDialog::append
(const Log& log, std::string arg) {
return append(log, QString::fromStdString(arg));
}
template<> LogDialog& LogDialog::append
(const Log& log, const char* arg) {
return append(log, QString(arg));
}
template<> LogDialog& LogDialog::append
(const Log& log, unsigned long arg) {
return append(log, (qulonglong)arg);
}
std::ostream& operator<<(std::ostream& ss, QString arg) {
ss<<'"'<<arg.toStdString()<<'"';
return ss;
}
std::ostream& operator<<(std::ostream& ss, QStringList arg) {
ss<<"{ ";
for (QStringList::iterator item(arg.begin()); item!=arg.end();) {
ss<<*item;
if (++item!=arg.end()) ss<<", ";
}
ss<<" }";
return ss;
}
std::ostream& operator<<(std::ostream& ss, QUrl arg) {
ss<<arg.toString();
return ss;
}
std::ostream& operator<<(std::ostream& ss, QByteArray arg) {
ss<<QString::fromUtf8(arg);
return ss;
}
}