#pragma once #include #include #include #include #include namespace Ui { class ConnectingDialog; } namespace LtsUtils { class LTSUTILSGUICONNECTDIALOG_EXPORT ConnectingDialog : public LtsWidgets::LtsFramelessDialog { Q_OBJECT public: static int s_waitForHistoricalDataWaitTime; template explicit ConnectingDialog(DtcType dtc, WaitForHistoricalDataFunction waitForHistoricalDataFunction, const QString &serviceName, const QString &exerciseName, QWidget *parent = nullptr) : LtsWidgets::LtsFramelessDialog(parent, LtsWidgets::Behaviour::Modal) , m_serviceName(serviceName) , m_exerciseName(exerciseName) , m_ui(nullptr) { setWindowTitle(tr("Connecting ..")); setup(); show(); while (true) { if ((dtc.get()->*waitForHistoricalDataFunction)(s_waitForHistoricalDataWaitTime)) { deleteLater(); return; } if (s_waitForHistoricalDataWaitTime >= 999999) { deleteLater(); return; } else { failed(); } } } ~ConnectingDialog(); void failed(); private: QString m_serviceName; QString m_exerciseName; Ui::ConnectingDialog *m_ui; void reset(); void setup(); signals: void signalStopLoop(); }; }