diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 53838275c..e66d538be 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -18,7 +18,7 @@ set( calamaresSources modulesystem/ModuleManager.cpp modulesystem/ViewModule.cpp - viewpages/ViewPlugin.cpp + viewpages/ViewStep.cpp viewpages/AbstractPage.cpp ) diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp index 0f3186dbe..c13fc08d0 100644 --- a/src/calamares/CalamaresWindow.cpp +++ b/src/calamares/CalamaresWindow.cpp @@ -33,5 +33,5 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) //should control the sidebar, next/back buttons and QSW. Calamares::ViewManager* vm = new Calamares::ViewManager( this ); - layout()->addWidget( vm->widget() ); + layout()->addWidget( vm->centralWidget() ); } diff --git a/src/calamares/ViewManager.cpp b/src/calamares/ViewManager.cpp index ec9b29fef..d41a0eb65 100644 --- a/src/calamares/ViewManager.cpp +++ b/src/calamares/ViewManager.cpp @@ -36,6 +36,7 @@ ViewManager::instance() ViewManager::ViewManager( QObject* parent ) : QObject( parent ) , m_widget( new QWidget() ) + , m_currentStep( 0 ) { s_instance = this; QBoxLayout* mainLayout = new QVBoxLayout; @@ -60,7 +61,11 @@ ViewManager::ViewManager( QObject* parent ) bottomLayout->addWidget( m_next ); bottomLayout->addSpacing( 12 ); bottomLayout->addWidget( m_quit ); + connect( m_quit, &QPushButton::clicked, qApp, &QApplication::quit ); + connect( m_next, &QPushButton::clicked, this, &ViewManager::next ); + connect( m_back, &QPushButton::clicked, this, &ViewManager::back ); + m_back->setEnabled( false ); } @@ -71,53 +76,62 @@ ViewManager::~ViewManager() QWidget* -ViewManager::widget() +ViewManager::centralWidget() { return m_widget; } void -ViewManager::addViewPlugin( ViewPlugin* plugin ) -{ - plugin->setParent( this ); - m_steps.append( plugin ); - m_stack->addWidget( new QLabel( plugin->prettyName(), m_stack ) ); -} - - -void -ViewManager::insertPage( AbstractPage* page ) -{ - -} - - -void -ViewManager::setNext( AbstractPage* page ) -{ - -} - - -void -ViewManager::removePage( AbstractPage* page ) +ViewManager::addViewStep( ViewStep* step ) { + step->setParent( this ); + m_steps.append( step ); + m_stack->addWidget( step->widget() ); + connect( step, &ViewStep::nextStatusChanged, + m_next, &QPushButton::setEnabled ); } void ViewManager::next() { - Q_ASSERT( 0 ); + ViewStep* step = m_steps.at( m_currentStep ); + if ( step->isAtEnd() && m_currentStep < m_steps.length() -1 ) + { + m_currentStep++; + m_stack->setCurrentIndex( m_currentStep ); + } + else if ( !step->isAtEnd() ) + { + step->next(); + } + else return; + + m_next->setEnabled( step->isNextEnabled() ); + m_back->setEnabled( true ); } void ViewManager::back() { - Q_ASSERT( 0 ); + ViewStep* step = m_steps.at( m_currentStep ); + if ( step->isAtBeginning() && m_currentStep > 0 ) + { + m_currentStep--; + m_stack->setCurrentIndex( m_currentStep ); + } + else if ( !step->isAtBeginning() ) + { + step->back(); + } + else return; + + m_next->setEnabled( step->isNextEnabled() ); + if ( m_currentStep == 0 && m_steps.first()->isAtBeginning() ) + m_back->setEnabled( false ); } } diff --git a/src/calamares/ViewManager.h b/src/calamares/ViewManager.h index 548beffcc..23e162a84 100644 --- a/src/calamares/ViewManager.h +++ b/src/calamares/ViewManager.h @@ -20,7 +20,7 @@ #define VIEWMANAGER_H #include "UiDllMacro.h" -#include "viewpages/ViewPlugin.h" +#include "viewpages/ViewStep.h" #include #include @@ -39,13 +39,10 @@ public: explicit ViewManager( QObject* parent = nullptr ); virtual ~ViewManager(); - QWidget* widget(); + QWidget* centralWidget(); - void addViewPlugin( ViewPlugin* plugin ); + void addViewStep( ViewStep* step ); - void insertPage( AbstractPage* page ); - void setNext( AbstractPage* page ); - void removePage( AbstractPage* page ); public slots: void next(); @@ -54,7 +51,8 @@ public slots: private: static ViewManager* s_instance; - QQueue< ViewPlugin* > m_steps; + QQueue< ViewStep* > m_steps; + int m_currentStep; QWidget* m_widget; QStackedWidget* m_stack; diff --git a/src/calamares/modulesystem/ViewModule.cpp b/src/calamares/modulesystem/ViewModule.cpp index fe8b460aa..e1639dcc9 100644 --- a/src/calamares/modulesystem/ViewModule.cpp +++ b/src/calamares/modulesystem/ViewModule.cpp @@ -19,7 +19,7 @@ #include "ViewModule.h" #include "utils/Logger.h" -#include "viewpages/ViewPlugin.h" +#include "viewpages/ViewStep.h" #include "ViewManager.h" #include @@ -50,10 +50,10 @@ ViewModule::loadSelf() cDebug() << Q_FUNC_INFO << "for module" << name(); if ( m_loader ) { - ViewPlugin *vp = qobject_cast< ViewPlugin* >( m_loader->instance() ); - if ( vp ) + ViewStep *vs = qobject_cast< ViewStep* >( m_loader->instance() ); + if ( vs ) { - ViewManager::instance()->addViewPlugin( vp ); + ViewManager::instance()->addViewStep( vs ); m_loaded = true; } } diff --git a/src/calamares/viewpages/ViewPlugin.cpp b/src/calamares/viewpages/ViewStep.cpp similarity index 90% rename from src/calamares/viewpages/ViewPlugin.cpp rename to src/calamares/viewpages/ViewStep.cpp index fefb2b3f4..beedfb3bd 100644 --- a/src/calamares/viewpages/ViewPlugin.cpp +++ b/src/calamares/viewpages/ViewStep.cpp @@ -16,14 +16,16 @@ * along with Calamares. If not, see . */ -#include "ViewPlugin.h" +#include "ViewStep.h" namespace Calamares { -ViewPlugin::ViewPlugin( QObject* parent ) +ViewStep::ViewStep( QObject* parent ) : QObject( parent ) -{ -} +{} + +ViewStep::~ViewStep() +{} } diff --git a/src/calamares/viewpages/ViewPlugin.h b/src/calamares/viewpages/ViewStep.h similarity index 67% rename from src/calamares/viewpages/ViewPlugin.h rename to src/calamares/viewpages/ViewStep.h index e71141279..8d9a0ae3e 100644 --- a/src/calamares/viewpages/ViewPlugin.h +++ b/src/calamares/viewpages/ViewStep.h @@ -26,24 +26,34 @@ namespace Calamares { -class AbstractPage; - -class UIDLLEXPORT ViewPlugin : public QObject +class UIDLLEXPORT ViewStep : public QObject { Q_OBJECT public: - explicit ViewPlugin( QObject *parent = nullptr ); - virtual ~ViewPlugin() {} + explicit ViewStep( QObject *parent = nullptr ); + virtual ~ViewStep(); virtual QString prettyName() = 0; + //TODO: we might want to make this a QSharedPointer + virtual QWidget* widget() = 0; + + virtual void next() = 0; + virtual void back() = 0; + + virtual bool isNextEnabled() = 0; + + virtual bool isAtBeginning() = 0; + virtual bool isAtEnd() = 0; + signals: + void nextStatusChanged( bool status ); void done(); }; } -Q_DECLARE_INTERFACE( Calamares::ViewPlugin, "calamares.ViewPlugin/1.0" ) +Q_DECLARE_INTERFACE( Calamares::ViewStep, "calamares.ViewModule/1.0" ) #endif // PAGEPLUGIN_H diff --git a/src/modules/greeting/CMakeLists.txt b/src/modules/greeting/CMakeLists.txt index b466e054d..5b4290a94 100644 --- a/src/modules/greeting/CMakeLists.txt +++ b/src/modules/greeting/CMakeLists.txt @@ -4,7 +4,7 @@ calamares_add_plugin( greeting EXPORT_MACRO PLUGINDLLEXPORT_PRO CONFIG_FILE module.conf SOURCES - GreetingViewPlugin.cpp + GreetingViewStep.cpp GreetingPage.cpp UI LINK_LIBRARIES diff --git a/src/modules/greeting/GreetingPage.cpp b/src/modules/greeting/GreetingPage.cpp index db4558535..80dacc05f 100644 --- a/src/modules/greeting/GreetingPage.cpp +++ b/src/modules/greeting/GreetingPage.cpp @@ -18,8 +18,22 @@ #include "GreetingPage.h" +#include +#include + GreetingPage::GreetingPage( QWidget* parent ) - : Calamares::AbstractPage( parent ) + : QWidget() { + QBoxLayout *mainLayout = new QHBoxLayout; + setLayout( mainLayout ); + + QLabel* text = new QLabel( tr( "

Welcome to Calamares.


" + "This is some random welcome text. " + "It should change depending on the branding config." ), this ); + text->setAlignment( Qt::AlignCenter ); + + mainLayout->addStretch(); + mainLayout->addWidget( text ); + mainLayout->addStretch(); } diff --git a/src/modules/greeting/GreetingPage.h b/src/modules/greeting/GreetingPage.h index d4697cd12..01b75f88f 100644 --- a/src/modules/greeting/GreetingPage.h +++ b/src/modules/greeting/GreetingPage.h @@ -19,18 +19,14 @@ #ifndef GREETINGPAGE_H #define GREETINGPAGE_H -#include "viewpages/AbstractPage.h" +#include -class GreetingPage : public Calamares::AbstractPage +class GreetingPage : public QWidget { Q_OBJECT public: explicit GreetingPage( QWidget* parent = nullptr ); -signals: - -public slots: - }; #endif // GREETINGPAGE_H diff --git a/src/modules/greeting/GreetingViewPlugin.cpp b/src/modules/greeting/GreetingViewStep.cpp similarity index 54% rename from src/modules/greeting/GreetingViewPlugin.cpp rename to src/modules/greeting/GreetingViewStep.cpp index bc62c6176..bcd9d77c0 100644 --- a/src/modules/greeting/GreetingViewPlugin.cpp +++ b/src/modules/greeting/GreetingViewStep.cpp @@ -16,17 +16,68 @@ * along with Calamares. If not, see . */ -#include "GreetingViewPlugin.h" +#include "GreetingViewStep.h" +#include "GreetingPage.h" -GreetingViewPlugin::GreetingViewPlugin( QObject *parent ) - : Calamares::ViewPlugin( parent ) +GreetingViewStep::GreetingViewStep( QObject* parent ) + : Calamares::ViewStep( parent ) + , m_widget( new GreetingPage() ) { + emit nextStatusChanged( true ); +} + + +GreetingViewStep::~GreetingViewStep() +{ + if ( m_widget && m_widget->parent() == nullptr ) + m_widget->deleteLater(); } QString -GreetingViewPlugin::prettyName() +GreetingViewStep::prettyName() { return tr( "Welcome" ); } + + +QWidget* +GreetingViewStep::widget() +{ + return m_widget; +} + + +void +GreetingViewStep::next() +{ + emit done(); +} + + +void +GreetingViewStep::back() +{} + + +bool +GreetingViewStep::isNextEnabled() +{ + return true; +} + + +bool +GreetingViewStep::isAtBeginning() +{ + return true; +} + + +bool +GreetingViewStep::isAtEnd() +{ + return true; +} + diff --git a/src/modules/greeting/GreetingViewPlugin.h b/src/modules/greeting/GreetingViewStep.h similarity index 64% rename from src/modules/greeting/GreetingViewPlugin.h rename to src/modules/greeting/GreetingViewStep.h index 128bad2c8..45d8caa28 100644 --- a/src/modules/greeting/GreetingViewPlugin.h +++ b/src/modules/greeting/GreetingViewStep.h @@ -21,20 +21,36 @@ #include -#include "viewpages/ViewPlugin.h" +#include "viewpages/ViewStep.h" #include "PluginDllMacro.h" -class PLUGINDLLEXPORT GreetingViewPlugin : public Calamares::ViewPlugin +class GreetingPage; + +class PLUGINDLLEXPORT GreetingViewStep : public Calamares::ViewStep { Q_OBJECT - Q_PLUGIN_METADATA( IID "calamares.ViewPlugin/1.0" ) + Q_PLUGIN_METADATA( IID "calamares.ViewModule/1.0" ) - Q_INTERFACES( Calamares::ViewPlugin ) + Q_INTERFACES( Calamares::ViewStep ) public: - explicit GreetingViewPlugin( QObject* parent = nullptr ); + explicit GreetingViewStep( QObject* parent = nullptr ); + virtual ~GreetingViewStep(); QString prettyName() override; + + QWidget* widget() override; + + void next() override; + void back() override; + + bool isNextEnabled() override; + + bool isAtBeginning() override; + bool isAtEnd() override; + +private: + GreetingPage* m_widget; }; #endif // GREETINGPAGEPLUGIN_H