mirror of
https://github.com/parchlinux/calamares.git
synced 2025-02-24 02:45:44 -05:00
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
12 changed files with 168 additions and 67 deletions
|
@ -18,7 +18,7 @@ set( calamaresSources
|
|||
modulesystem/ModuleManager.cpp
|
||||
modulesystem/ViewModule.cpp
|
||||
|
||||
viewpages/ViewPlugin.cpp
|
||||
viewpages/ViewStep.cpp
|
||||
viewpages/AbstractPage.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() );
|
||||
}
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#define VIEWMANAGER_H
|
||||
|
||||
#include "UiDllMacro.h"
|
||||
#include "viewpages/ViewPlugin.h"
|
||||
#include "viewpages/ViewStep.h"
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QQueue>
|
||||
|
@ -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;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include "ViewModule.h"
|
||||
|
||||
#include "utils/Logger.h"
|
||||
#include "viewpages/ViewPlugin.h"
|
||||
#include "viewpages/ViewStep.h"
|
||||
#include "ViewManager.h"
|
||||
|
||||
#include <yaml-cpp/yaml.h>
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,14 +16,16 @@
|
|||
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ViewPlugin.h"
|
||||
#include "ViewStep.h"
|
||||
|
||||
namespace Calamares
|
||||
{
|
||||
|
||||
ViewPlugin::ViewPlugin( QObject* parent )
|
||||
ViewStep::ViewStep( QObject* parent )
|
||||
: QObject( parent )
|
||||
{
|
||||
}
|
||||
{}
|
||||
|
||||
ViewStep::~ViewStep()
|
||||
{}
|
||||
|
||||
}
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -18,8 +18,22 @@
|
|||
|
||||
#include "GreetingPage.h"
|
||||
|
||||
#include <QBoxLayout>
|
||||
#include <QLabel>
|
||||
|
||||
|
||||
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
|
||||
#define GREETINGPAGE_H
|
||||
|
||||
#include "viewpages/AbstractPage.h"
|
||||
#include <QWidget>
|
||||
|
||||
class GreetingPage : public Calamares::AbstractPage
|
||||
class GreetingPage : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit GreetingPage( QWidget* parent = nullptr );
|
||||
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
|
||||
};
|
||||
|
||||
#endif // GREETINGPAGE_H
|
||||
|
|
|
@ -16,17 +16,68 @@
|
|||
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#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;
|
||||
}
|
||||
|
|
@ -21,20 +21,36 @@
|
|||
|
||||
#include <QObject>
|
||||
|
||||
#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
|
Loading…
Add table
Reference in a new issue