summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2023-06-07 14:26:55 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2023-06-19 08:48:35 +0000
commit835ccf1766bc77e4ef581e9e6ba699a43338ecf3 (patch)
tree6a62aab1805bc8c1ad9888d6516cd277e5d1e27d
parent308c2a7fdeeef50096186ac5aff8d22ecd853fe0 (diff)
Allow generating offline installers from Gui
This was previously possible only from the CLI. The same methods can be used from the graphical installer, so we do not need to limit the feature for CLI users. Task-number: QTIFW-3072 Change-Id: I271aecf163528b922e6cc399d31f07218e2a1650 Reviewed-by: Katja Marttila <katja.marttila@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
-rw-r--r--src/libs/installer/componentselectionpage_p.cpp40
-rw-r--r--src/libs/installer/componentselectionpage_p.h5
-rw-r--r--src/libs/installer/packagemanagercore.cpp7
-rw-r--r--src/libs/installer/packagemanagergui.cpp29
-rw-r--r--src/libs/installer/packagemanagergui.h4
5 files changed, 79 insertions, 6 deletions
diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp
index db42cdfd1..a564f3458 100644
--- a/src/libs/installer/componentselectionpage_p.cpp
+++ b/src/libs/installer/componentselectionpage_p.cpp
@@ -75,6 +75,7 @@ ComponentSelectionPagePrivate::ComponentSelectionPagePrivate(ComponentSelectionP
, m_descriptionBaseWidget(nullptr)
, m_categoryWidget(Q_NULLPTR)
, m_allowCompressedRepositoryInstall(false)
+ , m_allowCreateOfflineInstaller(true)
, m_categoryLayoutVisible(false)
, m_allModel(m_core->defaultComponentModel())
, m_updaterModel(m_core->updaterComponentModel())
@@ -121,19 +122,35 @@ ComponentSelectionPagePrivate::ComponentSelectionPagePrivate(ComponentSelectionP
m_sizeLabel->setObjectName(QLatin1String("ComponentSizeLabel"));
descriptionVLayout->addWidget(m_sizeLabel);
+ QHBoxLayout *pushButtonHLayout = new QHBoxLayout;
+ pushButtonHLayout->setObjectName(QLatin1String("PushButtonHLayout"));
+
+ m_createOfflinePushButton = new QPushButton(q);
+ m_createOfflinePushButton->setVisible(false);
+ m_createOfflinePushButton->setText(ComponentSelectionPage::tr("Create Offline Installer"));
+ m_createOfflinePushButton->setToolTip(
+ ComponentSelectionPage::tr("Create offline installer from selected components, instead "
+ "of installing now."));
+ pushButtonHLayout->addWidget(m_createOfflinePushButton);
+
+ connect(m_createOfflinePushButton, &QPushButton::clicked,
+ this, &ComponentSelectionPagePrivate::createOfflineButtonClicked);
+ connect(q, &ComponentSelectionPage::completeChanged,
+ this, [&]() { m_createOfflinePushButton->setEnabled(q->isComplete()); });
+
m_qbspPushButton = new QPushButton(q);
m_qbspPushButton->setVisible(false);
m_qbspPushButton->setText(ComponentSelectionPage::tr("Browse &QBSP files"));
- m_qbspPushButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
m_qbspPushButton->setToolTip(
ComponentSelectionPage::tr("Select a Qt Board Support Package file to install "
"additional content that is not directly available from the online repositories."));
+ pushButtonHLayout->addWidget(m_qbspPushButton);
connect(m_qbspPushButton, &QPushButton::clicked,
this, &ComponentSelectionPagePrivate::qbspButtonClicked);
m_rightSideVLayout->addWidget(m_descriptionBaseWidget);
- m_rightSideVLayout->addWidget(m_qbspPushButton, 0, Qt::AlignRight | Qt::AlignBottom);
+ m_rightSideVLayout->addLayout(pushButtonHLayout);
QHBoxLayout *topHLayout = new QHBoxLayout;
@@ -240,6 +257,11 @@ void ComponentSelectionPagePrivate::allowCompressedRepositoryInstall()
m_allowCompressedRepositoryInstall = true;
}
+void ComponentSelectionPagePrivate::setAllowCreateOfflineInstaller(bool allow)
+{
+ m_allowCreateOfflineInstaller = allow;
+}
+
void ComponentSelectionPagePrivate::showCompressedRepositoryButton()
{
if (m_allowCompressedRepositoryInstall)
@@ -251,6 +273,14 @@ void ComponentSelectionPagePrivate::hideCompressedRepositoryButton()
m_qbspPushButton->setVisible(false);
}
+void ComponentSelectionPagePrivate::showCreateOfflineInstallerButton(bool show)
+{
+ if (show && m_allowCreateOfflineInstaller)
+ m_createOfflinePushButton->setVisible(m_core->isInstaller() && !m_core->isOfflineOnly());
+ else
+ m_createOfflinePushButton->setVisible(false);
+}
+
void ComponentSelectionPagePrivate::setupCategoryLayout()
{
if (m_categoryWidget)
@@ -531,6 +561,12 @@ void ComponentSelectionPagePrivate::fetchRepositoryCategories()
m_searchLineEdit->text().isEmpty() ? expandDefault() : expandSearchResults();
}
+void ComponentSelectionPagePrivate::createOfflineButtonClicked()
+{
+ m_core->setOfflineGenerator();
+ q->gui()->button(QWizard::NextButton)->click();
+}
+
void ComponentSelectionPagePrivate::qbspButtonClicked()
{
QString defaultDownloadDirectory =
diff --git a/src/libs/installer/componentselectionpage_p.h b/src/libs/installer/componentselectionpage_p.h
index 3667f000e..ee00347a8 100644
--- a/src/libs/installer/componentselectionpage_p.h
+++ b/src/libs/installer/componentselectionpage_p.h
@@ -67,8 +67,10 @@ public:
~ComponentSelectionPagePrivate();
void allowCompressedRepositoryInstall();
+ void setAllowCreateOfflineInstaller(bool allow);
void showCompressedRepositoryButton();
void hideCompressedRepositoryButton();
+ void showCreateOfflineInstallerButton(bool show);
void setupCategoryLayout();
void showCategoryLayout(bool show);
void updateTreeView();
@@ -84,6 +86,7 @@ public slots:
void enableRepositoryCategory(const QString &repositoryName, bool enable);
void updateWidgetVisibility(bool show);
void fetchRepositoryCategories();
+ void createOfflineButtonClicked();
void qbspButtonClicked();
void onProgressChanged(int progress);
void setMessage(const QString &msg);
@@ -105,6 +108,7 @@ private:
QWidget *m_descriptionBaseWidget;
QLabel *m_sizeLabel;
QLabel *m_descriptionLabel;
+ QPushButton *m_createOfflinePushButton;
QPushButton *m_qbspPushButton;
CustomComboBox *m_checkStateComboBox;
QWidget *m_categoryWidget;
@@ -114,6 +118,7 @@ private:
QGridLayout *m_mainGLayout;
QVBoxLayout *m_rightSideVLayout;
bool m_allowCompressedRepositoryInstall;
+ bool m_allowCreateOfflineInstaller;
bool m_categoryLayoutVisible;
ComponentModel *m_allModel;
ComponentModel *m_updaterModel;
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index ef27f6b53..0c4f13470 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -3129,7 +3129,10 @@ bool PackageManagerCore::checkAvailableSpace(QString &message) const
}
#endif
}
- message = QString::fromLatin1("%1 %2").arg(message, tr("Installation will use %1 of disk space.")
+ message = QString::fromLatin1("%1 %2").arg(message,
+ (isOfflineGenerator()
+ ? tr("Created installer will use %1 of disk space.")
+ : tr("Installation will use %1 of disk space."))
.arg(humanReadableSize(requiredDiskSpace()))).simplified();
return true;
@@ -3823,6 +3826,7 @@ bool PackageManagerCore::isPackageManager() const
void PackageManagerCore::setOfflineGenerator()
{
d->m_magicMarkerSupplement = BinaryContent::OfflineGenerator;
+ emit installerBinaryMarkerChanged(d->m_magicBinaryMarker);
}
/*!
@@ -3841,6 +3845,7 @@ bool PackageManagerCore::isOfflineGenerator() const
void PackageManagerCore::setPackageViewer()
{
d->m_magicMarkerSupplement = BinaryContent::PackageViewer;
+ emit installerBinaryMarkerChanged(d->m_magicBinaryMarker);
}
/*!
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp
index 976a05a0f..5ee382771 100644
--- a/src/libs/installer/packagemanagergui.cpp
+++ b/src/libs/installer/packagemanagergui.cpp
@@ -2227,6 +2227,7 @@ void ComponentSelectionPage::entering()
d->showCategoryLayout(false);
}
d->showCompressedRepositoryButton();
+ d->showCreateOfflineInstallerButton(true);
}
/*!
@@ -2236,6 +2237,7 @@ void ComponentSelectionPage::entering()
void ComponentSelectionPage::leaving()
{
d->hideCompressedRepositoryButton();
+ d->showCreateOfflineInstallerButton(false);
}
/*!
@@ -2348,6 +2350,11 @@ bool ComponentSelectionPage::addVirtualComponentToUninstall(const QString &name)
return false;
}
+void ComponentSelectionPage::setAllowCreateOfflineInstaller(bool allow)
+{
+ d->setAllowCreateOfflineInstaller(allow);
+}
+
void ComponentSelectionPage::setModified(bool modified)
{
setComplete(modified);
@@ -2710,6 +2717,10 @@ void ReadyForInstallationPage::entering()
setButtonText(QWizard::CommitButton, tr("U&pdate"));
setColoredTitle(tr("Ready to Update Packages"));
m_msgLabel->setText(tr("All required information is now available to begin updating your installation."));
+ } else if (packageManagerCore()->isOfflineGenerator()) {
+ setButtonText(QWizard::CommitButton, tr("Create Offline Installer"));
+ setColoredTitle(tr("Ready to Create Offline Installer"));
+ m_msgLabel->setText(tr("All required information is now available to create an offline installer for selected components."));
} else {
Q_ASSERT(packageManagerCore()->isInstaller());
setButtonText(QWizard::CommitButton, tr("&Install"));
@@ -2750,7 +2761,9 @@ void ReadyForInstallationPage::leaving()
void ReadyForInstallationPage::updatePageListTitle()
{
PackageManagerCore *core = packageManagerCore();
- if (core->isInstaller())
+ if (core->isOfflineGenerator())
+ setPageListTitle(tr("Ready to Create Offline Installer"));
+ else if (core->isInstaller())
setPageListTitle(tr("Ready to Install"));
else if (core->isMaintainer())
setPageListTitle(tr("Ready to Update"));
@@ -2808,6 +2821,11 @@ PerformInstallationPage::PerformInstallationPage(PackageManagerCore *core)
connect(core, &PackageManagerCore::installationFinished,
this, &PerformInstallationPage::installationFinished);
+ connect(core, &PackageManagerCore::offlineGenerationStarted,
+ this, &PerformInstallationPage::installationStarted);
+ connect(core, &PackageManagerCore::offlineGenerationFinished,
+ this, &PerformInstallationPage::installationFinished);
+
connect(core, &PackageManagerCore::uninstallationStarted,
this, &PerformInstallationPage::uninstallationStarted);
connect(core, &PackageManagerCore::uninstallationFinished,
@@ -2877,6 +2895,11 @@ void PerformInstallationPage::entering()
setColoredTitle(tr("Updating components of %1").arg(productName()));
QTimer::singleShot(30, packageManagerCore(), SLOT(runPackageUpdater()));
+ } else if (packageManagerCore()->isOfflineGenerator()) {
+ setButtonText(QWizard::CommitButton, tr("&Create Offline Installer"));
+ setColoredTitle(tr("Creating Offline Installer for %1").arg(productName()));
+
+ QTimer::singleShot(30, packageManagerCore(), SLOT(runOfflineGenerator()));
} else {
setButtonText(QWizard::CommitButton, tr("&Install"));
setColoredTitle(tr("Installing %1").arg(productName()));
@@ -2901,7 +2924,9 @@ void PerformInstallationPage::leaving()
void PerformInstallationPage::updatePageListTitle()
{
PackageManagerCore *core = packageManagerCore();
- if (core->isInstaller())
+ if (core->isOfflineGenerator())
+ setPageListTitle(tr("Creating Offline Installer"));
+ else if (core->isInstaller())
setPageListTitle(tr("Installing"));
else if (core->isMaintainer())
setPageListTitle(tr("Updating"));
diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h
index ba27c4af6..655dd9875 100644
--- a/src/libs/installer/packagemanagergui.h
+++ b/src/libs/installer/packagemanagergui.h
@@ -1,6 +1,6 @@
/**************************************************************************
**
-** Copyright (C) 2022 The Qt Company Ltd.
+** Copyright (C) 2023 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Installer Framework.
@@ -333,6 +333,8 @@ public:
Q_INVOKABLE void allowCompressedRepositoryInstall();
Q_INVOKABLE bool addVirtualComponentToUninstall(const QString &name);
+ void setAllowCreateOfflineInstaller(bool allow);
+
protected:
void entering() override;
void leaving() override;