summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;