diff options
Diffstat (limited to 'Swift/QtUI/QtAboutWidget.cpp')
-rw-r--r-- | Swift/QtUI/QtAboutWidget.cpp | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/Swift/QtUI/QtAboutWidget.cpp b/Swift/QtUI/QtAboutWidget.cpp index d90e35a..9047525 100644 --- a/Swift/QtUI/QtAboutWidget.cpp +++ b/Swift/QtUI/QtAboutWidget.cpp @@ -20,10 +20,13 @@ #include <Swiften/Base/Platform.h> #include <Swift/QtUI/QtSwiftUtil.h> +#include <Swift/QtUI/QtUISettingConstants.h> +#include <Swift/QtUI/QtUpdateFeedSelectionDialog.h> +#include <Swift/QtUI/SwiftUpdateFeeds.h> namespace Swift { -QtAboutWidget::QtAboutWidget() : QDialog() { +QtAboutWidget::QtAboutWidget(SettingsProvider* settingsProvider) : QDialog(), settingsProvider_(settingsProvider) { #ifndef Q_OS_MAC setWindowTitle(QString(tr("About %1")).arg("Swift")); #endif @@ -46,6 +49,19 @@ QtAboutWidget::QtAboutWidget() : QDialog() { versionLabel->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard); mainLayout->addWidget(versionLabel); + settingsChangedConnection_ = settingsProvider_->onSettingChanged.connect([&](const std::string& path) { + if (path == QtUISettingConstants::SOFTWARE_UPDATE_CHANNEL.getKey() || path == QtUISettingConstants::ENABLE_SOFTWARE_UPDATES.getKey()) { + updateUpdateInfoLabel(); + } + }); + + updateInfoLabel_ = new QLabel("", this); + updateInfoLabel_->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard | Qt::LinksAccessibleByMouse); + connect(updateInfoLabel_, SIGNAL(linkActivated(const QString &)), this, SLOT(handleChangeUpdateChannelClicked())); + mainLayout->addWidget(updateInfoLabel_); + + updateUpdateInfoLabel(); + if (QCoreApplication::translate("TRANSLATION_INFO", "TRANSLATION_AUTHOR") != "TRANSLATION_AUTHOR") { mainLayout->addWidget(new QLabel(QString("<center><font size='-1'>") + QString(tr("Using the English translation by\n%1")).arg(QCoreApplication::translate("TRANSLATION_INFO", "TRANSLATION_AUTHOR")).replace("\n", "<br/>") + "</font></center>", this)); } @@ -89,6 +105,11 @@ void QtAboutWidget::handleChangelogClicked() { openPlainTextWindow(":/ChangeLog.md"); } +void QtAboutWidget::handleChangeUpdateChannelClicked() { + auto feedSelectionDialog = new QtUpdateFeedSelectionDialog(settingsProvider_); + feedSelectionDialog->show(); +} + void QtAboutWidget::openPlainTextWindow(const QString& path) { QTextEdit* text = new QTextEdit(); text->setAttribute(Qt::WA_DeleteOnClose); @@ -108,4 +129,35 @@ void QtAboutWidget::openPlainTextWindow(const QString& path) { } } +void QtAboutWidget::updateUpdateInfoLabel() { + if (settingsProvider_->getSetting(QtUISettingConstants::ENABLE_SOFTWARE_UPDATES)) { + if (!settingsProvider_->getSetting(QtUISettingConstants::SOFTWARE_UPDATE_CHANNEL).empty()) { + QString updateFeedDescription; + auto addUpdateFeedDialogLink = false; + if (settingsProvider_->getSetting(QtUISettingConstants::SOFTWARE_UPDATE_CHANNEL) == UpdateFeeds::StableChannel) { + updateFeedDescription = tr("You are receiving updates from the Stable update channel."); + addUpdateFeedDialogLink = true; + } + else if (settingsProvider_->getSetting(QtUISettingConstants::SOFTWARE_UPDATE_CHANNEL) == UpdateFeeds::DevelopmentChannel) { + updateFeedDescription = tr("You are receiving updates from the Development update channel."); + addUpdateFeedDialogLink = true; + } + else if (settingsProvider_->getSetting(QtUISettingConstants::SOFTWARE_UPDATE_CHANNEL) == UpdateFeeds::TestingChannel) { + updateFeedDescription = tr("You are receiving updates from the Testing update channel."); + addUpdateFeedDialogLink = true; + } + auto updateFeedDialogLink = QString( addUpdateFeedDialogLink ? "<a href=\"#\">%1</a>" : "" ).arg(tr("Change the update channel.")); + updateInfoLabel_->setText(QString("<center><font size='-1'>%1<br/>%2</font></center>").arg(updateFeedDescription, updateFeedDialogLink)); + updateInfoLabel_->show(); + } + else { + updateInfoLabel_->hide(); + } + } + else { + updateInfoLabel_->hide(); + } + +} + } |