aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_omod/src/implementations/CodeProgress.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/installer_omod/src/implementations/CodeProgress.cpp')
-rw-r--r--libs/installer_omod/src/implementations/CodeProgress.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/libs/installer_omod/src/implementations/CodeProgress.cpp b/libs/installer_omod/src/implementations/CodeProgress.cpp
new file mode 100644
index 0000000..7256592
--- /dev/null
+++ b/libs/installer_omod/src/implementations/CodeProgress.cpp
@@ -0,0 +1,85 @@
+#include <QApplication>
+
+#include "CodeProgress.h"
+
+CodeProgressHelper::CodeProgressHelper(QWidget* parentWidget) : mParentWidget{ parentWidget }, mProgressDialog(make_nullptr<QProgressDialog>()) {
+ moveToThread(QApplication::instance()->thread());
+ connect(this, &CodeProgressHelper::ShowProgressDialogSignal, this, &CodeProgressHelper::ShowProgressDialogSlot, Qt::QueuedConnection);
+ connect(this, &CodeProgressHelper::UpdateProgressValueSignal, this, &CodeProgressHelper::UpdateProgressValueSlot, Qt::BlockingQueuedConnection);
+ connect(this, &CodeProgressHelper::HideProgressDialogSignal, this, &CodeProgressHelper::HideProgressDialogSlot, Qt::QueuedConnection);
+
+}
+
+void CodeProgressHelper::ShowProgressDialog() {
+ emit ShowProgressDialogSignal();
+}
+
+void CodeProgressHelper::UpdateProgressValue(int percentage) {
+ emit UpdateProgressValueSignal(percentage);
+}
+
+void CodeProgressHelper::HideProgressDialog() {
+ emit HideProgressDialogSignal();
+}
+
+void CodeProgressHelper::ShowProgressDialogSlot() {
+ mProgressDialog.reset(new QProgressDialog(mParentWidget));
+ mProgressDialog->setWindowFlags(mProgressDialog->windowFlags() & ~Qt::WindowContextHelpButtonHint & ~Qt::WindowCloseButtonHint);
+ mProgressDialog->setWindowModality(Qt::WindowModal);
+ mProgressDialog->setCancelButton(nullptr);
+ mProgressDialog->setMinimum(0);
+ mProgressDialog->setMaximum(100);
+ mProgressDialog->setAutoReset(false);
+ mProgressDialog->setAutoClose(false);
+ mProgressDialog->show();
+}
+
+void CodeProgressHelper::UpdateProgressValueSlot(int percentage) {
+ mProgressDialog->setValue(percentage);
+}
+
+void CodeProgressHelper::HideProgressDialogSlot() {
+ mProgressDialog->hide();
+ mProgressDialog.reset();
+ }
+
+void CodeProgress::Init(__int64 totalSize, bool compressing)
+{
+ System::GC::ReRegisterForFinalize(this);
+
+ mTotalSize = totalSize;
+ mCompressing = compressing;
+ mPercentage = 0;
+
+ mHelper = new CodeProgressHelper(mParentWidget);
+ mHelper->ShowProgressDialog();
+}
+
+void CodeProgress::SetProgress(__int64 inSize, __int64 outSize)
+{
+ int newPercentage = (int)(100 * inSize / (double)mTotalSize);
+ if (newPercentage != mPercentage)
+ mHelper->UpdateProgressValue(newPercentage);
+ mPercentage = newPercentage;
+}
+
+CodeProgress::~CodeProgress()
+{
+ if (!mHelper)
+ return;
+
+ mHelper->HideProgressDialog();
+ this->!CodeProgress();
+}
+
+CodeProgress::!CodeProgress()
+{
+ if (mHelper)
+ mHelper->deleteLater();
+ mHelper = nullptr;
+}
+
+void CodeProgress::setParentWidget(QWidget* parentWidget)
+{
+ mParentWidget = parentWidget;
+}