summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/packagemanagergui.cpp44
-rw-r--r--src/libs/installer/packagemanagergui.h2
2 files changed, 33 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
diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h
index df47df44e..e08b366cd 100644
--- a/src/libs/installer/packagemanagergui.h
+++ b/src/libs/installer/packagemanagergui.h
@@ -237,6 +237,8 @@ private Q_SLOTS:
void setPackageManager(bool value);
private:
+ void initializePage();
+
void entering();
void leaving();