mitsuba/src/qtgui/loaddlg.cpp

140 lines
3.7 KiB
C++

/*
This file is part of Mitsuba, a physically based rendering system.
Copyright (c) 2007-2011 by Wenzel Jakob and others.
Mitsuba is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License Version 3
as published by the Free Software Foundation.
Mitsuba is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ui_loaddlg.h"
#include "loaddlg.h"
LoadDialog::LoadDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::LoadDialog) {
ui->setupUi(this);
ui->progressBar->setTextVisible(false);
// weird, Qt/Win needs this to get a busy indicator
ui->progressBar->setValue(1);
ui->progressBar->setRange(0, 0);
ui->console->hide();
resize(400,180);
m_consoleAppender = new QConsoleAppender();
Logger *logger = Thread::getThread()->getLogger();
m_oldLogLevel = logger->getLogLevel();
logger->setLogLevel(EDebug);
logger->addAppender(m_consoleAppender);
connect(m_consoleAppender, SIGNAL(textMessage(ELogLevel, const QString &)),
this, SLOT(onTextMessage(ELogLevel, const QString &)), Qt::QueuedConnection);
QFont font("Monospace");
font.setStyleHint(QFont::TypeWriter);
#if defined(__OSX__)
font.setPointSize(10);
QFont headingFont = ui->heading->font();
headingFont.setPointSize(14);
ui->heading->setFont(headingFont);
#else
font.setPointSize(8);
#endif
ui->console->setFont(font);
ui->console->setReadOnly(true);
QPalette palette;
palette.setColor(QPalette::Base, Qt::black);
ui->console->setPalette(palette);
}
void LoadDialog::on_toggleButton_clicked() {
if (ui->console->isVisible()) {
ui->console->hide();
updateGeometry();
adjustSize();
resize(400, 180);
ui->toggleButton->setText("+");
} else {
ui->console->show();
updateGeometry();
resize(std::max(width(), 800), 500);
ui->toggleButton->setText("-");
}
}
void LoadDialog::expand() {
if (!ui->console->isVisible()) {
ui->console->show();
updateGeometry();
resize(std::max(width(), 800), 500);
ui->toggleButton->setText("-");
}
}
void LoadDialog::close() {
Logger *logger = Thread::getThread()->getLogger();
logger->setLogLevel(m_oldLogLevel);
logger->removeAppender(m_consoleAppender);
disconnect(m_consoleAppender, SIGNAL(textMessage(ELogLevel, const QString &)),
this, SLOT(onTextMessage(ELogLevel, const QString &)));
m_consoleAppender = NULL;
if (ui->console->isVisible()) {
ui->statusLabel->setText(tr("Done."));
ui->closeButton->setEnabled(true);
ui->progressBar->setRange(1, 100);
ui->progressBar->setValue(100);
} else {
hide();
}
}
void LoadDialog::onTextMessage(ELogLevel level, const QString &message) {
QColor color;
int idx = message.indexOf("] ");
if (idx != -1 && ui->progressBar->value() != 100 && message.indexOf("\n") == -1) {
ui->statusLabel->setText(message.mid(idx+2));
}
switch (level) {
case ETrace:
case EDebug:
case EInfo:
color = Qt::gray;
break;
case EError:
color = Qt::red;
break;
case EWarn:
default:
color = QColor(255,180,180);
break;
}
ui->console->setTextColor(color);
ui->console->append(message);
QTextCursor c = ui->console->textCursor();
c.movePosition(QTextCursor::End);
ui->console->setTextCursor(c);
ui->console->ensureCursorVisible();
}
LoadDialog::~LoadDialog() {
delete ui;
delete m_consoleAppender;
}
void LoadDialog::changeEvent(QEvent *e) {
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}