summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/installer/constants.h1
-rw-r--r--src/libs/installer/packagemanagergui.cpp31
-rw-r--r--src/libs/installer/packagemanagergui.h3
-rw-r--r--src/libs/installer/performinstallationform.cpp42
-rw-r--r--src/libs/installer/performinstallationform.h6
-rw-r--r--src/libs/installer/settings.cpp23
-rw-r--r--src/libs/installer/settings.h2
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;