Major ViewStep additions and changes.
Renamed ViewPlugin to ViewStep. Back/Next button status management. Subpages are now under a ViewStep's jurisdiction, we only forward back/ next signals if a ViewStep says it's got more pages to show. ViewStep exposes a QWidget* to ViewManager, this QWidget gets added to a stack. If a ViewStep wishes to show more than one page, it must manage more pages on its own inside its single QWidget*.
This commit is contained in:
parent
f1da3373a8
commit
20d5a37fef
@ -18,7 +18,7 @@ set( calamaresSources
|
|||||||
modulesystem/ModuleManager.cpp
|
modulesystem/ModuleManager.cpp
|
||||||
modulesystem/ViewModule.cpp
|
modulesystem/ViewModule.cpp
|
||||||
|
|
||||||
viewpages/ViewPlugin.cpp
|
viewpages/ViewStep.cpp
|
||||||
viewpages/AbstractPage.cpp
|
viewpages/AbstractPage.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -33,5 +33,5 @@ CalamaresWindow::CalamaresWindow( QWidget* parent )
|
|||||||
//should control the sidebar, next/back buttons and QSW.
|
//should control the sidebar, next/back buttons and QSW.
|
||||||
Calamares::ViewManager* vm = new Calamares::ViewManager( this );
|
Calamares::ViewManager* vm = new Calamares::ViewManager( this );
|
||||||
|
|
||||||
layout()->addWidget( vm->widget() );
|
layout()->addWidget( vm->centralWidget() );
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ ViewManager::instance()
|
|||||||
ViewManager::ViewManager( QObject* parent )
|
ViewManager::ViewManager( QObject* parent )
|
||||||
: QObject( parent )
|
: QObject( parent )
|
||||||
, m_widget( new QWidget() )
|
, m_widget( new QWidget() )
|
||||||
|
, m_currentStep( 0 )
|
||||||
{
|
{
|
||||||
s_instance = this;
|
s_instance = this;
|
||||||
QBoxLayout* mainLayout = new QVBoxLayout;
|
QBoxLayout* mainLayout = new QVBoxLayout;
|
||||||
@ -60,7 +61,11 @@ ViewManager::ViewManager( QObject* parent )
|
|||||||
bottomLayout->addWidget( m_next );
|
bottomLayout->addWidget( m_next );
|
||||||
bottomLayout->addSpacing( 12 );
|
bottomLayout->addSpacing( 12 );
|
||||||
bottomLayout->addWidget( m_quit );
|
bottomLayout->addWidget( m_quit );
|
||||||
|
|
||||||
connect( m_quit, &QPushButton::clicked, qApp, &QApplication::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*
|
QWidget*
|
||||||
ViewManager::widget()
|
ViewManager::centralWidget()
|
||||||
{
|
{
|
||||||
return m_widget;
|
return m_widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ViewManager::addViewPlugin( ViewPlugin* plugin )
|
ViewManager::addViewStep( ViewStep* step )
|
||||||
{
|
|
||||||
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 )
|
|
||||||
{
|
{
|
||||||
|
step->setParent( this );
|
||||||
|
m_steps.append( step );
|
||||||
|
m_stack->addWidget( step->widget() );
|
||||||
|
|
||||||
|
connect( step, &ViewStep::nextStatusChanged,
|
||||||
|
m_next, &QPushButton::setEnabled );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ViewManager::next()
|
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
|
void
|
||||||
ViewManager::back()
|
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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#define VIEWMANAGER_H
|
#define VIEWMANAGER_H
|
||||||
|
|
||||||
#include "UiDllMacro.h"
|
#include "UiDllMacro.h"
|
||||||
#include "viewpages/ViewPlugin.h"
|
#include "viewpages/ViewStep.h"
|
||||||
|
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QQueue>
|
#include <QQueue>
|
||||||
@ -39,13 +39,10 @@ public:
|
|||||||
explicit ViewManager( QObject* parent = nullptr );
|
explicit ViewManager( QObject* parent = nullptr );
|
||||||
virtual ~ViewManager();
|
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:
|
public slots:
|
||||||
void next();
|
void next();
|
||||||
@ -54,7 +51,8 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
static ViewManager* s_instance;
|
static ViewManager* s_instance;
|
||||||
|
|
||||||
QQueue< ViewPlugin* > m_steps;
|
QQueue< ViewStep* > m_steps;
|
||||||
|
int m_currentStep;
|
||||||
|
|
||||||
QWidget* m_widget;
|
QWidget* m_widget;
|
||||||
QStackedWidget* m_stack;
|
QStackedWidget* m_stack;
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#include "ViewModule.h"
|
#include "ViewModule.h"
|
||||||
|
|
||||||
#include "utils/Logger.h"
|
#include "utils/Logger.h"
|
||||||
#include "viewpages/ViewPlugin.h"
|
#include "viewpages/ViewStep.h"
|
||||||
#include "ViewManager.h"
|
#include "ViewManager.h"
|
||||||
|
|
||||||
#include <yaml-cpp/yaml.h>
|
#include <yaml-cpp/yaml.h>
|
||||||
@ -50,10 +50,10 @@ ViewModule::loadSelf()
|
|||||||
cDebug() << Q_FUNC_INFO << "for module" << name();
|
cDebug() << Q_FUNC_INFO << "for module" << name();
|
||||||
if ( m_loader )
|
if ( m_loader )
|
||||||
{
|
{
|
||||||
ViewPlugin *vp = qobject_cast< ViewPlugin* >( m_loader->instance() );
|
ViewStep *vs = qobject_cast< ViewStep* >( m_loader->instance() );
|
||||||
if ( vp )
|
if ( vs )
|
||||||
{
|
{
|
||||||
ViewManager::instance()->addViewPlugin( vp );
|
ViewManager::instance()->addViewStep( vs );
|
||||||
m_loaded = true;
|
m_loaded = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,14 +16,16 @@
|
|||||||
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ViewPlugin.h"
|
#include "ViewStep.h"
|
||||||
|
|
||||||
namespace Calamares
|
namespace Calamares
|
||||||
{
|
{
|
||||||
|
|
||||||
ViewPlugin::ViewPlugin( QObject* parent )
|
ViewStep::ViewStep( QObject* parent )
|
||||||
: QObject( parent )
|
: QObject( parent )
|
||||||
{
|
{}
|
||||||
}
|
|
||||||
|
ViewStep::~ViewStep()
|
||||||
|
{}
|
||||||
|
|
||||||
}
|
}
|
@ -26,24 +26,34 @@
|
|||||||
namespace Calamares
|
namespace Calamares
|
||||||
{
|
{
|
||||||
|
|
||||||
class AbstractPage;
|
class UIDLLEXPORT ViewStep : public QObject
|
||||||
|
|
||||||
class UIDLLEXPORT ViewPlugin : public QObject
|
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ViewPlugin( QObject *parent = nullptr );
|
explicit ViewStep( QObject *parent = nullptr );
|
||||||
virtual ~ViewPlugin() {}
|
virtual ~ViewStep();
|
||||||
|
|
||||||
virtual QString prettyName() = 0;
|
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:
|
signals:
|
||||||
|
void nextStatusChanged( bool status );
|
||||||
void done();
|
void done();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_DECLARE_INTERFACE( Calamares::ViewPlugin, "calamares.ViewPlugin/1.0" )
|
Q_DECLARE_INTERFACE( Calamares::ViewStep, "calamares.ViewModule/1.0" )
|
||||||
|
|
||||||
#endif // PAGEPLUGIN_H
|
#endif // PAGEPLUGIN_H
|
@ -4,7 +4,7 @@ calamares_add_plugin( greeting
|
|||||||
EXPORT_MACRO PLUGINDLLEXPORT_PRO
|
EXPORT_MACRO PLUGINDLLEXPORT_PRO
|
||||||
CONFIG_FILE module.conf
|
CONFIG_FILE module.conf
|
||||||
SOURCES
|
SOURCES
|
||||||
GreetingViewPlugin.cpp
|
GreetingViewStep.cpp
|
||||||
GreetingPage.cpp
|
GreetingPage.cpp
|
||||||
UI
|
UI
|
||||||
LINK_LIBRARIES
|
LINK_LIBRARIES
|
||||||
|
@ -18,8 +18,22 @@
|
|||||||
|
|
||||||
#include "GreetingPage.h"
|
#include "GreetingPage.h"
|
||||||
|
|
||||||
|
#include <QBoxLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
|
|
||||||
GreetingPage::GreetingPage( QWidget* parent )
|
GreetingPage::GreetingPage( QWidget* parent )
|
||||||
: Calamares::AbstractPage( parent )
|
: QWidget()
|
||||||
{
|
{
|
||||||
|
QBoxLayout *mainLayout = new QHBoxLayout;
|
||||||
|
setLayout( mainLayout );
|
||||||
|
|
||||||
|
QLabel* text = new QLabel( tr( "<h1>Welcome to Calamares.</h1><br/>"
|
||||||
|
"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();
|
||||||
}
|
}
|
||||||
|
@ -19,18 +19,14 @@
|
|||||||
#ifndef GREETINGPAGE_H
|
#ifndef GREETINGPAGE_H
|
||||||
#define GREETINGPAGE_H
|
#define GREETINGPAGE_H
|
||||||
|
|
||||||
#include "viewpages/AbstractPage.h"
|
#include <QWidget>
|
||||||
|
|
||||||
class GreetingPage : public Calamares::AbstractPage
|
class GreetingPage : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit GreetingPage( QWidget* parent = nullptr );
|
explicit GreetingPage( QWidget* parent = nullptr );
|
||||||
|
|
||||||
signals:
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GREETINGPAGE_H
|
#endif // GREETINGPAGE_H
|
||||||
|
@ -16,17 +16,68 @@
|
|||||||
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "GreetingViewPlugin.h"
|
#include "GreetingViewStep.h"
|
||||||
|
|
||||||
|
#include "GreetingPage.h"
|
||||||
|
|
||||||
GreetingViewPlugin::GreetingViewPlugin( QObject *parent )
|
GreetingViewStep::GreetingViewStep( QObject* parent )
|
||||||
: Calamares::ViewPlugin( parent )
|
: Calamares::ViewStep( parent )
|
||||||
|
, m_widget( new GreetingPage() )
|
||||||
{
|
{
|
||||||
|
emit nextStatusChanged( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GreetingViewStep::~GreetingViewStep()
|
||||||
|
{
|
||||||
|
if ( m_widget && m_widget->parent() == nullptr )
|
||||||
|
m_widget->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString
|
QString
|
||||||
GreetingViewPlugin::prettyName()
|
GreetingViewStep::prettyName()
|
||||||
{
|
{
|
||||||
return tr( "Welcome" );
|
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;
|
||||||
|
}
|
||||||
|
|
@ -21,20 +21,36 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include "viewpages/ViewPlugin.h"
|
#include "viewpages/ViewStep.h"
|
||||||
#include "PluginDllMacro.h"
|
#include "PluginDllMacro.h"
|
||||||
|
|
||||||
class PLUGINDLLEXPORT GreetingViewPlugin : public Calamares::ViewPlugin
|
class GreetingPage;
|
||||||
|
|
||||||
|
class PLUGINDLLEXPORT GreetingViewStep : public Calamares::ViewStep
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
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:
|
public:
|
||||||
explicit GreetingViewPlugin( QObject* parent = nullptr );
|
explicit GreetingViewStep( QObject* parent = nullptr );
|
||||||
|
virtual ~GreetingViewStep();
|
||||||
|
|
||||||
QString prettyName() override;
|
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
|
#endif // GREETINGPAGEPLUGIN_H
|
Loading…
Reference in New Issue
Block a user