summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagergui.cpp
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-02-17 11:19:07 +0200
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-02-18 10:17:27 +0000
commit276d8aafe9410f82c6c342f060332e5bba44fecd (patch)
tree6e061b081c4d9391889a383470b2d08d69221f35 /src/libs/installer/packagemanagergui.cpp
parent814a46420b372a81d8deb176807fac6654aa4980 (diff)
Change IntroductionPage radio button handling in maintenance tool
If magic binary marker is set to either updater or package manager, act as before. If the marker is set to uninstaller (default for maintenance tool), decide the default checked button based on if any valid repositories are available - a prerequisite for package manager and updater actions to succeed. If repositories are available the default is "Add or remove components", otherwise "Remove all components". Modify validRepositoriesAvailable() implementation to suit this change and better match its function name. Task-number: QTIFW-349 Change-Id: Idf92ad3a2b294cc1ecb939d716f2852ad1872f15 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/packagemanagergui.cpp')
-rw-r--r--src/libs/installer/packagemanagergui.cpp44
1 files changed, 31 insertions, 13 deletions
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp
index 7686e6c46..f754987f7 100644
--- a/src/libs/installer/packagemanagergui.cpp
+++ b/src/libs/installer/packagemanagergui.cpp
@@ -1296,19 +1296,16 @@ IntroductionPage::IntroductionPage(PackageManagerCore *core)
m_packageManager = new QRadioButton(tr("&Add or remove components"), this);
m_packageManager->setObjectName(QLatin1String("PackageManagerRadioButton"));
boxLayout->addWidget(m_packageManager);
- m_packageManager->setChecked(core->isPackageManager());
connect(m_packageManager, &QAbstractButton::toggled, this, &IntroductionPage::setPackageManager);
m_updateComponents = new QRadioButton(tr("&Update components"), this);
m_updateComponents->setObjectName(QLatin1String("UpdaterRadioButton"));
boxLayout->addWidget(m_updateComponents);
- m_updateComponents->setChecked(core->isUpdater());
connect(m_updateComponents, &QAbstractButton::toggled, this, &IntroductionPage::setUpdater);
m_removeAllComponents = new QRadioButton(tr("&Remove all components"), this);
m_removeAllComponents->setObjectName(QLatin1String("UninstallerRadioButton"));
boxLayout->addWidget(m_removeAllComponents);
- m_removeAllComponents->setChecked(core->isUninstaller());
connect(m_removeAllComponents, &QAbstractButton::toggled,
this, &IntroductionPage::setUninstaller);
connect(m_removeAllComponents, &QAbstractButton::toggled,
@@ -1338,8 +1335,6 @@ IntroductionPage::IntroductionPage(PackageManagerCore *core)
layout->addWidget(widget);
layout->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
- core->setCompleteUninstallation(core->isUninstaller());
-
connect(core, &PackageManagerCore::metaJobProgress, this, &IntroductionPage::onProgressChanged);
connect(core, &PackageManagerCore::metaJobTotalProgress, this, &IntroductionPage::setTotalProgress);
connect(core, &PackageManagerCore::metaJobInfoMessage, this, &IntroductionPage::setMessage);
@@ -1386,7 +1381,9 @@ bool IntroductionPage::validatePage()
return true;
setComplete(false);
- if (!validRepositoriesAvailable()) {
+ bool isOfflineOnlyInstaller = core->isInstaller() && core->isOfflineOnly();
+ // If not offline only installer, at least one valid repository needs to be available
+ if (!isOfflineOnlyInstaller && !validRepositoriesAvailable()) {
setErrorMessage(QLatin1String("<font color=\"red\">") + tr("At least one valid and enabled "
"repository required for this action to succeed.") + QLatin1String("</font>"));
return isComplete();
@@ -1573,14 +1570,12 @@ void IntroductionPage::setErrorMessage(const QString &error)
bool IntroductionPage::validRepositoriesAvailable() const
{
const PackageManagerCore *const core = packageManagerCore();
- bool valid = (core->isInstaller() && core->isOfflineOnly()) || core->isUninstaller();
+ bool valid = false;
- if (!valid) {
- foreach (const Repository &repo, core->settings().repositories()) {
- if (repo.isEnabled() && repo.isValid()) {
- valid = true;
- break;
- }
+ foreach (const Repository &repo, core->settings().repositories()) {
+ if (repo.isEnabled() && repo.isValid()) {
+ valid = true;
+ break;
}
}
return valid;
@@ -1617,6 +1612,29 @@ void IntroductionPage::setPackageManager(bool value)
emit packageManagerCoreTypeChanged();
}
}
+/*!
+ Initializes the page.
+*/
+void IntroductionPage::initializePage()
+{
+ PackageManagerCore *core = packageManagerCore();
+ if (core->isPackageManager()) {
+ m_packageManager->setChecked(true);
+ } else if (core->isUpdater()) {
+ m_updateComponents->setChecked(true);
+ } else if (core->isUninstaller()) {
+ // If we are running maintenance tool and the default uninstaller
+ // marker is not overridden, set the default checked radio button
+ // based on if we have valid repositories available.
+ if (validRepositoriesAvailable()) {
+ m_packageManager->setChecked(true);
+ } else {
+ // No repositories available, default to complete uninstallation.
+ m_removeAllComponents->setChecked(true);
+ core->setCompleteUninstallation(true);
+ }
+ }
+}
/*!
Resets the internal page state, so that on clicking \uicontrol Next the metadata needs to be