aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_omod/src/implementations/CodeProgress.cpp
blob: 725659203902c87a153a34dfece82d4facf17056 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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;
}