1 /* KStars Asynchronous Message Box Implementation for Desktop/Android and EkosLive 2 Based on QMessageBox. 3 4 SPDX-FileCopyrightText: 2019 Jasem Mutlaq <mutlaqja@ikarustech.com> 5 6 SPDX-License-Identifier: GPL-2.0-or-later 7 */ 8 9 #pragma once 10 11 #include <KLocalizedString> 12 13 #include <QMessageBox> 14 #include <QPointer> 15 #include <QTimer> 16 #include <QRoundProgressBar.h> 17 #include <QJsonObject> 18 #include <QJsonArray> 19 #include <QHBoxLayout> 20 21 /** 22 * @class KSMessageBox 23 * KStars Message Box implementation. 24 * 25 * @author Jasem Mutlaq 26 */ 27 class KSMessageBox: public QMessageBox 28 { 29 Q_OBJECT 30 Q_PROPERTY(quint32 timeout MEMBER m_Timeout) 31 32 public: 33 static KSMessageBox *Instance(); 34 35 void questionYesNo(const QString &message, const QString &title = i18n("Question"), quint32 timeout = 0, 36 bool defaultToYes = true, const QString &yesText = i18n("Yes"), const QString &noText = i18n("No")); 37 void warningContinueCancel(const QString &message, const QString &title = i18n("Warning"), quint32 timeout = 0, 38 bool defaultToContinue = true, const QString &continueText = i18n("Continue"), const QString &cancelText = i18n("Cancel")); 39 void error(const QString &message, const QString &title = i18n("Error"), quint32 timeout = 0); 40 void sorry(const QString &message, const QString &title = i18n("Sorry"), quint32 timeout = 0); 41 void info(const QString &message, const QString &title = i18n("Info"), quint32 timeout = 0); 42 /** 43 * @brief transient Non modal message box that gets deleted on close. 44 * @param message message content 45 * @param title message title 46 */ 47 void transient(const QString &message, const QString &title); 48 49 /** 50 * @brief selectResponse Programatically select one the buttons in the dialog. 51 * @param button text of button to click 52 * @return True if button is found and clicked, false otherwise. 53 */ 54 bool selectResponse(const QString &button); 55 56 signals: 57 void newMessage(const QJsonObject &message); 58 59 protected: 60 void timerTick(); 61 62 private: 63 // Dialog timeout in seconds 64 quint32 m_Timeout {60}; 65 66 static KSMessageBox *m_Instance; 67 68 void reset(); 69 void addOKButton(); 70 void setupTimeout(quint32 timeout); resetTimeout()71 void resetTimeout() 72 { 73 m_Timeout = 0; 74 } 75 QJsonObject createMessageObject(); 76 KSMessageBox(); 77 78 QPointer<QRoundProgressBar> m_ProgressIndicator; 79 QPointer<QLabel> m_ProgressLabel; 80 QPointer<QHBoxLayout> m_ProgressLayout; 81 82 QTimer m_ProgressTimer; 83 }; 84 85