summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nxmaccessmanager.cpp58
-rw-r--r--src/nxmaccessmanager.h12
2 files changed, 39 insertions, 31 deletions
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp
index d6f6290e..a68dea54 100644
--- a/src/nxmaccessmanager.cpp
+++ b/src/nxmaccessmanager.cpp
@@ -46,63 +46,72 @@ const QString NexusBaseUrl("https://api.nexusmods.com/v1");
const auto ValidationTimeout = 10s;
-ValidationProgressDialog::ValidationProgressDialog(std::chrono::seconds t)
- : m_timeout(t), m_dialog(nullptr), m_bar(nullptr), m_timer(nullptr)
+ValidationProgressDialog::ValidationProgressDialog(std::chrono::seconds t) :
+ m_timeout(t), m_bar(nullptr), m_buttons(nullptr),
+ m_timer(nullptr)
{
- m_dialogHolder.reset(new QDialog);
- m_dialog = m_dialogHolder.get();
-
m_bar = new QProgressBar;
m_bar->setTextVisible(false);
auto* label = new QLabel(tr("Validating Nexus Connection"));
label->setAlignment(Qt::AlignHCenter);
- auto* vbox = new QVBoxLayout(m_dialog);
+ auto* vbox = new QVBoxLayout(this);
vbox->addWidget(label);
vbox->addWidget(m_bar);
- auto* buttons = new QDialogButtonBox(QDialogButtonBox::Cancel);
- connect(buttons, &QDialogButtonBox::clicked, [&](auto* b){ onButton(b); });
- vbox->addWidget(buttons);
+ m_buttons = new QDialogButtonBox;
+ m_buttons->addButton(tr("Hide"), QDialogButtonBox::RejectRole);
+ connect(m_buttons, &QDialogButtonBox::clicked, [&](auto* b){ onButton(b); });
+ vbox->addWidget(m_buttons);
}
void ValidationProgressDialog::setParentWidget(QWidget* w)
{
- // will be deleted by the parent
- m_dialogHolder.release();
-
- const auto wasVisible = m_dialog->isVisible();
+ const auto wasVisible = isVisible();
- m_dialog->hide();
- m_dialog->setParent(w, m_dialog->windowFlags() | Qt::Dialog);
- m_dialog->setModal(false);
- m_dialog->setVisible(wasVisible);
+ hide();
+ setParent(w, windowFlags() | Qt::Dialog);
+ setModal(false);
+ setVisible(wasVisible);
}
void ValidationProgressDialog::start()
{
if (!m_timer) {
- m_timer = new QTimer(m_dialog);
+ m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, [&]{ onTimer(); });
m_timer->setInterval(100ms);
}
m_bar->setRange(0, m_timeout.count());
+ m_bar->setValue(0);
+
m_elapsed.start();
m_timer->start();
- m_dialog->show();
+ show();
}
void ValidationProgressDialog::stop()
{
m_timer->stop();
- m_dialog->hide();
+ hide();
+}
+
+void ValidationProgressDialog::closeEvent(QCloseEvent* e)
+{
+ hide();
+ e->ignore();
}
void ValidationProgressDialog::onButton(QAbstractButton* b)
{
+ if (m_buttons->buttonRole(b) == QDialogButtonBox::RejectRole) {
+ hide();
+ } else {
+ qCritical() << "validation dialog: unknown button pressed";
+ }
}
void ValidationProgressDialog::onTimer()
@@ -212,14 +221,7 @@ void NXMAccessManager::startValidationCheck()
bool NXMAccessManager::validated() const
{
if (m_ValidateState == VALIDATE_CHECKING) {
- m_ProgressDialog.start();
-
- while (m_ValidateState == VALIDATE_CHECKING) {
- QCoreApplication::processEvents();
- QThread::msleep(100);
- }
-
- m_ProgressDialog.stop();
+ m_ProgressDialog.show();
}
return m_ValidateState == VALIDATE_VALID;
diff --git a/src/nxmaccessmanager.h b/src/nxmaccessmanager.h
index b20cb6e8..4467ea8d 100644
--- a/src/nxmaccessmanager.h
+++ b/src/nxmaccessmanager.h
@@ -26,11 +26,12 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QNetworkReply>
#include <QProgressDialog>
#include <QElapsedTimer>
+#include <QDialogButtonBox>
#include <set>
namespace MOBase { class IPluginGame; }
-class ValidationProgressDialog : QObject
+class ValidationProgressDialog : private QDialog
{
Q_OBJECT;
@@ -38,14 +39,19 @@ public:
ValidationProgressDialog(std::chrono::seconds timeout);
void setParentWidget(QWidget* w);
+
void start();
void stop();
+ using QDialog::show;
+
+protected:
+ void closeEvent(QCloseEvent* e) override;
+
private:
std::chrono::seconds m_timeout;
- std::unique_ptr<QDialog> m_dialogHolder;
- QDialog* m_dialog;
QProgressBar* m_bar;
+ QDialogButtonBox* m_buttons;
QTimer* m_timer;
QElapsedTimer m_elapsed;