Manage PCM loading with QtConcurrent.

This commit is contained in:
Teo Mrnjavac 2016-05-26 15:35:24 +02:00
parent 0666fb4977
commit c9fac9bc5c
2 changed files with 27 additions and 5 deletions

View File

@ -52,6 +52,8 @@
#include <QProcess>
#include <QStackedWidget>
#include <QTimer>
#include <QtConcurrent/QtConcurrent>
#include <QFutureWatcher>
PartitionViewStep::PartitionViewStep( QObject* parent )
: Calamares::ViewStep( parent )
@ -71,13 +73,19 @@ PartitionViewStep::PartitionViewStep( QObject* parent )
void
PartitionViewStep::continueLoading()
PartitionViewStep::initPartitionCoreModule()
{
Q_ASSERT( !m_core );
m_core = new PartitionCoreModule( this );
}
void
PartitionViewStep::continueLoading()
{
Q_ASSERT( !m_choicePage );
Q_ASSERT( !m_manualPartitionPage );
m_core = new PartitionCoreModule( this );
m_manualPartitionPage = new PartitionPage( m_core );
m_choicePage = new ChoicePage();
@ -468,7 +476,20 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap )
gs->insert( "drawNestedPartitions", false );
}
QTimer::singleShot( 0, this, &PartitionViewStep::continueLoading );
// Now that we have the config, we load the PartitionCoreModule in the background
// because it could take a while. Then when it's done, we can set up the widgets
// and remove the spinner.
QFutureWatcher< void >* watcher = new QFutureWatcher< void >();
connect( watcher, &QFutureWatcher< void >::finished,
this, [ this, watcher ]
{
continueLoading();
watcher->deleteLater();
} );
QFuture< void > future =
QtConcurrent::run( this, &PartitionViewStep::initPartitionCoreModule );
watcher->setFuture( future );
}

View File

@ -44,8 +44,6 @@ public:
explicit PartitionViewStep( QObject* parent = 0 );
virtual ~PartitionViewStep();
void continueLoading();
QString prettyName() const override;
QWidget* createSummaryWidget() const override;
@ -68,6 +66,9 @@ public:
QList< Calamares::job_ptr > jobs() const override;
private:
void initPartitionCoreModule();
void continueLoading();
PartitionCoreModule* m_core;
QStackedWidget* m_widget;
ChoicePage* m_choicePage;