vmprotect-3.5.1/VMProtect/progress_dialog.cc

133 lines
3.0 KiB
C++

#include "../core/objects.h"
#include "../core/files.h"
#include "../core/lang.h"
#include "wait_cursor.h"
#include "progress_dialog.h"
#include "moc/moc_progress_dialog.cc"
#include "message_dialog.h"
/**
* ProgressDialog
*/
ProgressDialog::ProgressDialog(QWidget *parent)
: QDialog(parent, Qt::Dialog | Qt::FramelessWindowHint | Qt::CustomizeWindowHint)
{
progressBar = new QProgressBar(this);
progressBar->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
QFontMetrics fontMetrics = progressBar->fontMetrics();
QString spaces;
while (fontMetrics.width(spaces) < 58)
spaces += QLatin1Char(' ');
progressBar->setFormat(progressBar->format() + spaces);
label = new QLabel(this);
QToolButton *button = new QToolButton(this);
button->setObjectName("cancel");
button->setToolTip(QString::fromUtf8(language[lsCancel].c_str()));
QHBoxLayout *layout = new QHBoxLayout;
layout->setContentsMargins(20, 0, 20, 0);
layout->setSpacing(0);
layout->addWidget(label, 1);
layout->addWidget(button, 0, Qt::AlignRight);
progressBar->setLayout(layout);
layout = new QHBoxLayout();
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(progressBar);
setLayout(layout);
setModal(true);
connect(button, SIGNAL(clicked()), this, SLOT(cancelClicked()));
resize(320, 60);
}
void ProgressDialog::cancelClicked()
{
if(!wait_cursor_.get())
wait_cursor_.reset(new WaitCursor());
this->setDisabled(true);
emit cancel();
}
void ProgressDialog::startProgress(const QString &caption, unsigned long long max)
{
label->setText(caption);
progressBar->setValue(0);
progressBar->setMaximum(max);
}
void ProgressDialog::stepProgress(unsigned long long value)
{
progressBar->setValue(progressBar->value() + value);
}
void ProgressDialog::closeEvent(QCloseEvent *event)
{
event->ignore();
}
void ProgressDialog::notify(MessageType type, IObject * /*sender*/, const QString &message)
{
wait_cursor_.reset();
switch (type) {
case mtError:
MessageDialog::critical(this, message, QMessageBox::Ok);
break;
case mtWarning:
MessageDialog::warning(this, message, QMessageBox::Ok);
break;
case mtInformation:
MessageDialog::information(this, message, QMessageBox::Ok);
break;
}
}
/**
* GUILog
*/
GUILog::GUILog(QObject *parent)
: QObject(parent), is_canceled_(false)
{
qRegisterMetaType<MessageType>("MessageType");
}
void GUILog::Notify(MessageType type, IObject *sender, const std::string &message)
{
emit notify(type, sender, QString::fromUtf8(message.c_str()));
}
void GUILog::StartProgress(const std::string &caption, unsigned long long max)
{
checkCanceled();
emit startProgress(QString::fromUtf8(caption.c_str()), max);
}
void GUILog::StepProgress(unsigned long long value, bool /*is_project*/)
{
checkCanceled();
emit stepProgress(value);
}
void GUILog::EndProgress()
{
checkCanceled();
emit endProgress();
}
void GUILog::cancel()
{
is_canceled_ = true;
}
void GUILog::checkCanceled()
{
if (is_canceled_)
throw canceled_error(language[lsOperationCanceledByUser]);
}