#include "CProgressDialog.h" #include "ui_CProgressDialog.h" #include "CEditorApplication.h" #include CProgressDialog::CProgressDialog(QString OperationName, bool UseBusyIndicator, bool AlertOnFinish, QWidget *pParent) : IProgressNotifierUI(pParent) , mpUI(std::make_unique()) , mUseBusyIndicator(UseBusyIndicator) , mAlertOnFinish(AlertOnFinish) { mpUI->setupUi(this); mpUI->ProgressBar->setMinimum(0); mpUI->ProgressBar->setMaximum(UseBusyIndicator ? 0 : 10000); setWindowTitle(OperationName); connect(mpUI->CancelButton, &QPushButton::pressed, this, &CProgressDialog::CancelButtonClicked); } CProgressDialog::~CProgressDialog() = default; void CProgressDialog::DisallowCanceling() { mpUI->CancelButton->setHidden(true); } bool CProgressDialog::ShouldCancel() const { return mCanceled; } void CProgressDialog::closeEvent(QCloseEvent *pEvent) { if (!mFinished) { CancelButtonClicked(); pEvent->ignore(); } else { pEvent->accept(); } } void CProgressDialog::FinishAndClose() { mFinished = true; close(); } void CProgressDialog::CancelButtonClicked() { mCanceled = true; mpUI->CancelButton->setEnabled(false); } void CProgressDialog::UpdateUI(const QString& rkTaskDesc, const QString& rkStepDesc, float ProgressPercent) { mpUI->TaskLabel->setText(rkTaskDesc); mpUI->StepLabel->setText(rkStepDesc); if (rkStepDesc.isEmpty() && !mpUI->StepLabel->isHidden()) { mpUI->StepLabel->hide(); mpUI->TaskInfoBoxLayout->removeWidget(mpUI->StepLabel); mpUI->TaskInfoBoxLayout->removeItem(mpUI->LabelSpacer); } else if (!rkStepDesc.isEmpty() && mpUI->StepLabel->isHidden()) { mpUI->StepLabel->show(); mpUI->TaskInfoBoxLayout->addWidget(mpUI->StepLabel); mpUI->TaskInfoBoxLayout->addItem(mpUI->LabelSpacer); } if (!mUseBusyIndicator) { int ProgressValue = 10000 * ProgressPercent; mpUI->ProgressBar->setValue(ProgressValue); } }