diff options
-rw-r--r-- | src/libs/installer/componentselectionpage_p.cpp | 40 | ||||
-rw-r--r-- | src/libs/installer/componentselectionpage_p.h | 5 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 7 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 29 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.h | 4 |
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; |