From 9918dfb95ffc17fcf0885cb036356d76c7d1f201 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 13 Jun 2018 05:11:31 -0400 Subject: [PATCH] [libcalamaresui] Reporting on failures - Provide information on failed modules - Disallow further progress when configuration is borked --- src/libcalamaresui/CMakeLists.txt | 1 + src/libcalamaresui/ViewManager.cpp | 15 +++ src/libcalamaresui/ViewManager.h | 6 + .../modulesystem/ModuleManager.cpp | 3 + .../viewpages/BlankViewStep.cpp | 113 ++++++++++++++++++ src/libcalamaresui/viewpages/BlankViewStep.h | 70 +++++++++++ 6 files changed, 208 insertions(+) create mode 100644 src/libcalamaresui/viewpages/BlankViewStep.cpp create mode 100644 src/libcalamaresui/viewpages/BlankViewStep.h diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index 6bbb285bb..efd0ebb29 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -15,6 +15,7 @@ set( calamaresui_SOURCES utils/qjsonitem.cpp viewpages/AbstractPage.cpp + viewpages/BlankViewStep.cpp viewpages/ViewStep.cpp widgets/ClickableLabel.cpp diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp index e597bf6a3..8777f79d7 100644 --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -20,6 +20,7 @@ #include "ViewManager.h" #include "utils/Logger.h" +#include "viewpages/BlankViewStep.h" #include "viewpages/ViewStep.h" #include "ExecutionViewStep.h" #include "JobQueue.h" @@ -172,6 +173,20 @@ ViewManager::onInstallationFailed( const QString& message, const QString& detail } +void +ViewManager::onInitFailed( const QStringList& modules) +{ + QString title( tr( "Calamares Initialization Failed" ) ); + QString description( tr( "Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution. %1 can not be installed." ) ); + QStringList details; + details << QLatin1Literal(""); + + insertViewStep( 0, new BlankViewStep( title, description.arg( *Calamares::Branding::ShortProductName ), details.join( QString() ) ) ); +} + ViewStepList ViewManager::viewSteps() const { diff --git a/src/libcalamaresui/ViewManager.h b/src/libcalamaresui/ViewManager.h index e4f215f8f..ee199f725 100644 --- a/src/libcalamaresui/ViewManager.h +++ b/src/libcalamaresui/ViewManager.h @@ -117,6 +117,12 @@ public slots: */ void onInstallationFailed( const QString& message, const QString& details ); + /** @brief Replaces the stack with a view step stating that initialization failed. + * + * @param modules a list of failed modules. + */ + void onInitFailed( const QStringList& modules ); + signals: void currentStepChanged(); void enlarge( QSize enlarge ) const; // See ViewStep::enlarge() diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index 194db65a2..6361fa20b 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -296,7 +296,10 @@ ModuleManager::loadModules() } } if ( !failedModules.isEmpty() ) + { + ViewManager::instance()->onInitFailed( failedModules ); emit modulesFailed( failedModules ); + } else emit modulesLoaded(); } ); diff --git a/src/libcalamaresui/viewpages/BlankViewStep.cpp b/src/libcalamaresui/viewpages/BlankViewStep.cpp new file mode 100644 index 000000000..093d19d8b --- /dev/null +++ b/src/libcalamaresui/viewpages/BlankViewStep.cpp @@ -0,0 +1,113 @@ +/* === This file is part of Calamares - === + * + * Copyright 2018, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ +#include "BlankViewStep.h" + +#include "utils/CalamaresUtilsGui.h" + +#include +#include +#include + +namespace Calamares +{ + +BlankViewStep::BlankViewStep( const QString& title, const QString& description, const QString& details, QObject* parent) + : Calamares::ViewStep( parent ) + , m_widget( new QWidget() ) +{ + QBoxLayout* layout = new QVBoxLayout(); + + auto* label = new QLabel( title ); + label->setAlignment( Qt::AlignHCenter ); + label->setFont( CalamaresUtils::largeFont() ); + layout->addWidget( label ); + + label = new QLabel( description ); + label->setWordWrap( true ); + layout->addSpacing( 10 ); + layout->addWidget( label ); + + if ( !details.isEmpty() ) + { + label = new QLabel( details ); + layout->addSpacing( 10 ); + layout->addWidget( label ); + } + + layout->addStretch( 10 ); + + m_widget->setLayout( layout ); +} + +BlankViewStep::~BlankViewStep() +{ +} + +QString +BlankViewStep::prettyName() const +{ + return tr( "Blank Page" ); +} + +void +BlankViewStep::back() +{ +} + +void +BlankViewStep::next() +{ +} + +bool +BlankViewStep::isBackEnabled() const +{ + return false; +} + +bool +BlankViewStep::isNextEnabled() const +{ + return false; +} + +bool +BlankViewStep::isAtBeginning() const +{ + return true; +} + +bool +BlankViewStep::isAtEnd() const +{ + return false; +} + +QWidget* +BlankViewStep::widget() +{ + return m_widget; +} + +Calamares::JobList +BlankViewStep::jobs() const +{ + return JobList(); +} + +} // namespace diff --git a/src/libcalamaresui/viewpages/BlankViewStep.h b/src/libcalamaresui/viewpages/BlankViewStep.h new file mode 100644 index 000000000..5e6938143 --- /dev/null +++ b/src/libcalamaresui/viewpages/BlankViewStep.h @@ -0,0 +1,70 @@ +/* === This file is part of Calamares - === + * + * Copyright 2018, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef BLANKVIEWSTEP_H +#define BLANKVIEWSTEP_H + +#include + +#include +#include + +class QWidget; + +namespace Calamares +{ + +/** @brief A "blank" view step, used for error and status reporting + * + * + */ +class BlankViewStep : public Calamares::ViewStep +{ + Q_OBJECT + +public: + explicit BlankViewStep( const QString& title, const QString& description, const QString& details = QString(), QObject* parent = nullptr ); + virtual ~BlankViewStep() override; + + QString prettyName() const override; + + QWidget* widget() override; + + void next() override; + void back() override; + + bool isNextEnabled() const override; + bool isBackEnabled() const override; + + bool isAtBeginning() const override; + bool isAtEnd() const override; + + Calamares::JobList jobs() const override; +#if 0 + void onActivate() override; + + + void setConfigurationMap( const QVariantMap& configurationMap ) override; +#endif + +private: + QWidget* m_widget; +}; + +} // namespace +#endif // BLANKVIEWSTEP_H