#include "informationbox.h" #include #include #include void InformationBox::ShowMessage(QString title, QString message, QString messageID, bool block) { // check if the user still wants to see this message unsigned int hash; if(messageID.isEmpty()) { hash = qHash(message); } else { hash = qHash(messageID); } QSettings s; if(!s.contains(hashToSettingsKey(hash))) { auto box = new InformationBox(title, message, QMessageBox::Information, hash, nullptr); if(block) { box->exec(); } else { box->show(); } } } void InformationBox::ShowMessageBlocking(QString title, QString message, QString messageID) { ShowMessage(title, message, messageID, true); } void InformationBox::ShowError(QString title, QString message) { auto box = new InformationBox(title, message, QMessageBox::Information, 0, nullptr); box->show(); } bool InformationBox::AskQuestion(QString title, QString question, bool defaultAnswer, QString messageID) { // check if the user still wants to see this message unsigned int hash; if(messageID.isEmpty()) { hash = qHash(question); } else { hash = qHash(messageID); } QSettings s; if(!s.contains(hashToSettingsKey(hash))) { auto box = new InformationBox(title, question, QMessageBox::Question, hash, nullptr); box->setStandardButtons(QMessageBox::Yes | QMessageBox::No); int ret = box->exec(); if(ret == QMessageBox::Yes) { return true; } else { return false; } } else { // don't show this question anymore return defaultAnswer; } } InformationBox::InformationBox(QString title, QString message, Icon icon, unsigned int hash, QWidget *parent) : QMessageBox(parent), hash(hash) { setWindowTitle(title); setText(message); setAttribute(Qt::WA_DeleteOnClose, true); setIcon(icon); auto cb = new QCheckBox("Do not show this message again"); setCheckBox(cb); if(hash == 0) { cb->setVisible(false); } } InformationBox::~InformationBox() { auto cb = checkBox(); if(cb->isChecked()) { QSettings s; s.setValue(hashToSettingsKey(hash), true); } } QString InformationBox::hashToSettingsKey(unsigned int hash) { return QString("DoNotShowDialog/") + QString::number(hash); }