diff options
Diffstat (limited to 'src/libs/installer')
-rw-r--r-- | src/libs/installer/constants.h | 1 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 31 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.h | 3 | ||||
-rw-r--r-- | src/libs/installer/performinstallationform.cpp | 42 | ||||
-rw-r--r-- | src/libs/installer/performinstallationform.h | 6 | ||||
-rw-r--r-- | src/libs/installer/settings.cpp | 23 | ||||
-rw-r--r-- | src/libs/installer/settings.h | 2 |
7 files changed, 105 insertions, 3 deletions
diff --git a/src/libs/installer/constants.h b/src/libs/installer/constants.h index 27b9c08ee..f600ed033 100644 --- a/src/libs/installer/constants.h +++ b/src/libs/installer/constants.h @@ -90,6 +90,7 @@ static const QLatin1String scTitleColor("TitleColor"); static const QLatin1String scWizardDefaultWidth("WizardDefaultWidth"); static const QLatin1String scWizardDefaultHeight("WizardDefaultHeight"); static const QLatin1String scWizardShowPageList("WizardShowPageList"); +static const QLatin1String scProductImages("ProductImages"); static const QLatin1String scUrlQueryString("UrlQueryString"); static const QLatin1String scProductUUID("ProductUUID"); static const QLatin1String scAllUsers("AllUsers"); diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 86038f5df..26af00bdc 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -2644,6 +2644,7 @@ PerformInstallationPage::PerformInstallationPage(PackageManagerCore *core) updatePageListTitle(); m_performInstallationForm->setupUi(this); + m_imageChangeTimer.setInterval(10000); connect(ProgressCoordinator::instance(), &ProgressCoordinator::detailTextChanged, m_performInstallationForm, &PerformInstallationForm::appendProgressDetails); @@ -2670,6 +2671,9 @@ PerformInstallationPage::PerformInstallationPage(PackageManagerCore *core) connect(core, &PackageManagerCore::installerBinaryMarkerChanged, this, &PerformInstallationPage::updatePageListTitle); + connect(&m_imageChangeTimer, &QTimer::timeout, + this, &PerformInstallationPage::changeCurrentImage); + m_performInstallationForm->setDetailsWidgetVisible(true); setCommitPage(true); @@ -2705,6 +2709,11 @@ void PerformInstallationPage::entering() m_performInstallationForm->enableDetails(); emit setAutomatedPageSwitchEnabled(true); + changeCurrentImage(); + // No need to start the timer if we only have one, or no images + if (packageManagerCore()->settings().productImages().count() > 1) + m_imageChangeTimer.start(); + if (isVerbose()) { m_performInstallationForm->toggleDetails(); } @@ -2733,6 +2742,7 @@ void PerformInstallationPage::entering() void PerformInstallationPage::leaving() { setButtonText(QWizard::CommitButton, gui()->defaultButtonText(QWizard::CommitButton)); + m_imageChangeTimer.stop(); } /*! @@ -2759,6 +2769,27 @@ void PerformInstallationPage::setTitleMessage(const QString &title) setColoredTitle(title); } +/*! + Changes the currently shown product image to the next available + image from installer configuration. +*/ +void PerformInstallationPage::changeCurrentImage() +{ + const QStringList productImages = packageManagerCore()->settings().productImages(); + if (productImages.isEmpty()) + return; + + const QString nextImage = (m_currentImage.isEmpty() || m_currentImage == productImages.last()) + ? productImages.first() + : productImages.at(productImages.indexOf(m_currentImage) + 1); + + // Do not update the pixmap if there was only one image available + if (nextImage != m_currentImage) { + m_performInstallationForm->setImageFromFileName(nextImage); + m_currentImage = nextImage; + } +} + // -- private slots void PerformInstallationPage::installationStarted() diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h index 166bd5225..b266b1109 100644 --- a/src/libs/installer/packagemanagergui.h +++ b/src/libs/installer/packagemanagergui.h @@ -441,6 +441,7 @@ protected: public Q_SLOTS: void setTitleMessage(const QString& title); + void changeCurrentImage(); Q_SIGNALS: void setAutomatedPageSwitchEnabled(bool request); @@ -457,6 +458,8 @@ private Q_SLOTS: private: PerformInstallationForm *m_performInstallationForm; + QTimer m_imageChangeTimer; + QString m_currentImage; }; diff --git a/src/libs/installer/performinstallationform.cpp b/src/libs/installer/performinstallationform.cpp index 28506bcde..2c5edf70f 100644 --- a/src/libs/installer/performinstallationform.cpp +++ b/src/libs/installer/performinstallationform.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -30,6 +30,7 @@ #include "lazyplaintextedit.h" #include "progresscoordinator.h" +#include "globals.h" #include <QApplication> #include <QLabel> @@ -37,6 +38,8 @@ #include <QPushButton> #include <QScrollBar> #include <QVBoxLayout> +#include <QImageReader> +#include <QScrollArea> #include <QtCore/QTimer> @@ -78,6 +81,8 @@ PerformInstallationForm::PerformInstallationForm(QObject *parent) : QObject(parent) , m_progressBar(nullptr) , m_progressLabel(nullptr) + , m_productImagesScrollArea(nullptr) + , m_productImagesLabel(nullptr) , m_detailsButton(nullptr) , m_detailsBrowser(nullptr) , m_updateTimer(nullptr) @@ -130,6 +135,19 @@ void PerformInstallationForm::setupUi(QWidget *widget) bottomLayout->setObjectName(QLatin1String("BottomLayout")); bottomLayout->addStretch(); + m_productImagesScrollArea = new QScrollArea(widget); + m_productImagesScrollArea->setObjectName(QLatin1String("ProductImagesScrollArea")); + m_productImagesScrollArea->setWidgetResizable(true); + m_productImagesScrollArea->setFrameShape(QFrame::NoFrame); + + m_productImagesLabel = new QLabel(widget); + m_productImagesLabel->setObjectName(QLatin1String("ProductImagesLabel")); + m_productImagesLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); + m_productImagesLabel->setScaledContents(true); + + m_productImagesScrollArea->setWidget(m_productImagesLabel); + bottomLayout->addWidget(m_productImagesScrollArea); + m_detailsBrowser = new LazyPlainTextEdit(widget); m_detailsBrowser->setReadOnly(true); m_detailsBrowser->setWordWrapMode(QTextOption::NoWrap); @@ -138,6 +156,7 @@ void PerformInstallationForm::setupUi(QWidget *widget) bottomLayout->addWidget(m_detailsBrowser); bottomLayout->setStretch(1, 10); + bottomLayout->setStretch(2, 10); baseLayout->addLayout(topLayout); baseLayout->addLayout(bottomLayout); @@ -200,6 +219,7 @@ void PerformInstallationForm::toggleDetails() const bool willShow = !isShowingDetails(); m_detailsButton->setText(willShow ? tr("&Hide Details") : tr("&Show Details")); m_detailsBrowser->setVisible(willShow); + m_productImagesScrollArea->setVisible(!willShow); emit showDetailsChanged(); } @@ -220,6 +240,7 @@ void PerformInstallationForm::enableDetails() m_detailsButton->setEnabled(true); m_detailsButton->setText(tr("&Show Details")); m_detailsBrowser->setVisible(false); + m_productImagesScrollArea->setVisible(true); } /*! @@ -273,3 +294,22 @@ void PerformInstallationForm::onDownloadStatusChanged(const QString &status) m_downloadStatus->setText(m_downloadStatus->fontMetrics().elidedText(status, Qt::ElideRight, m_downloadStatus->width())); } + +/*! + Sets currently shown form image specified by \a fileName. +*/ +void PerformInstallationForm::setImageFromFileName(const QString &fileName) +{ + if (!QFile::exists(fileName)) { + qCWarning(QInstaller::lcDeveloperBuild) << "Image file does not exist:" << fileName; + return; + } + QImageReader reader(fileName); + QPixmap pixmap = QPixmap::fromImageReader(&reader); + if (!pixmap.isNull()) { + m_productImagesLabel->setPixmap(pixmap); + } else { + qCWarning(QInstaller::lcDeveloperBuild) << + QString::fromLatin1("Failed to load image '%1' : %2.").arg(fileName, reader.errorString()); + } +} diff --git a/src/libs/installer/performinstallationform.h b/src/libs/installer/performinstallationform.h index 954b8e09b..db0a35ee8 100644 --- a/src/libs/installer/performinstallationform.h +++ b/src/libs/installer/performinstallationform.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -38,6 +38,7 @@ class QPushButton; class QTimer; class QWidget; class QWinTaskbarButton; +class QScrollArea; QT_END_NAMESPACE class LazyPlainTextEdit; @@ -69,11 +70,14 @@ public slots: void toggleDetails(); void clearDetailsBrowser(); void onDownloadStatusChanged(const QString &status); + void setImageFromFileName(const QString &fileName); private: QProgressBar *m_progressBar; QLabel *m_progressLabel; QLabel *m_downloadStatus; + QScrollArea *m_productImagesScrollArea; + QLabel *m_productImagesLabel; QPushButton *m_detailsButton; LazyPlainTextEdit *m_detailsBrowser; QTimer *m_updateTimer; diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index 19918c3f9..a8c0eece3 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -291,7 +291,7 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix, << scAllowSpaceInPath << scAllowNonAsciiCharacters << scDisableAuthorizationFallback << scDisableCommandLineInterface << scWizardStyle << scStyleSheet << scTitleColor - << scWizardDefaultWidth << scWizardDefaultHeight << scWizardShowPageList + << scWizardDefaultWidth << scWizardDefaultHeight << scWizardShowPageList << scProductImages << scRepositorySettingsPageVisible << scTargetConfigurationFile << scRemoteRepositories << scTranslations << scUrlQueryString << QLatin1String(scControlScript) << scCreateLocalRepository << scInstallActionColumnVisible << scSupportsModify << scAllowUnstableComponents @@ -316,6 +316,8 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix, s.setTranslations(readArgumentAttributes(reader, parseMode, QLatin1String("Translation"), true)); } else if (name == scRunProgramArguments) { s.setRunProgramArguments(readArgumentAttributes(reader, parseMode, QLatin1String("Argument"))); + } else if (name == scProductImages) { + s.setProductImages(readArgumentAttributes(reader, parseMode, QLatin1String("Image"))); } else if (name == scRemoteRepositories) { s.addDefaultRepositories(readRepositories(reader, true, parseMode)); } else if (name == scRepositoryCategories) { @@ -471,6 +473,25 @@ bool Settings::wizardShowPageList() const return d->m_data.value(scWizardShowPageList, true).toBool(); } +QStringList Settings::productImages() const +{ + const QVariant variant = d->m_data.value(scProductImages); + QStringList imagePaths; + if (variant.canConvert<QStringList>()) { + foreach (const QString &imagePath, variant.value<QStringList>()) { + QFileInfo(imagePath).isAbsolute() + ? imagePaths.append(imagePath) + : imagePaths.append(d->m_data.value(scPrefix).toString() + QLatin1Char('/') + imagePath); + } + } + return imagePaths; +} + +void Settings::setProductImages(const QStringList &images) +{ + d->m_data.insert(scProductImages, images); +} + QString Settings::installerApplicationIcon() const { return d->absolutePathFromKey(scInstallerApplicationIcon, systemIconSuffix()); diff --git a/src/libs/installer/settings.h b/src/libs/installer/settings.h index 82e10beb1..1e372d1f3 100644 --- a/src/libs/installer/settings.h +++ b/src/libs/installer/settings.h @@ -89,6 +89,8 @@ public: int wizardDefaultWidth() const; int wizardDefaultHeight() const; bool wizardShowPageList() const; + QStringList productImages() const; + void setProductImages(const QStringList &images); QString applicationName() const; QString version() const; |