From cb6a25c2cebfc2715da6d286ad6a338c46b0e5d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20G=C3=A2teau?= Date: Tue, 8 Jul 2014 15:23:30 +0200 Subject: [PATCH 1/4] Show an InstallationStep at the end of the preparation process --- .../progresstree/ProgressTreeDelegate.cpp | 26 +++---- .../progresstree/ProgressTreeModel.cpp | 4 +- src/libcalamaresui/CMakeLists.txt | 1 + src/libcalamaresui/InstallationViewStep.cpp | 73 +++++++++++++++++++ src/libcalamaresui/InstallationViewStep.h | 50 +++++++++++++ src/libcalamaresui/ViewManager.cpp | 42 ++++++++--- src/libcalamaresui/ViewManager.h | 8 +- 7 files changed, 176 insertions(+), 28 deletions(-) create mode 100644 src/libcalamaresui/InstallationViewStep.cpp create mode 100644 src/libcalamaresui/InstallationViewStep.h diff --git a/src/calamares/progresstree/ProgressTreeDelegate.cpp b/src/calamares/progresstree/ProgressTreeDelegate.cpp index 5c9d472d1..20e5146da 100644 --- a/src/calamares/progresstree/ProgressTreeDelegate.cpp +++ b/src/calamares/progresstree/ProgressTreeDelegate.cpp @@ -44,19 +44,18 @@ QSize ProgressTreeDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const { - ProgressTreeModel::RowType type = - static_cast< ProgressTreeModel::RowType >( - index.data( ProgressTreeModel::ProgressTreeItemTypeRole ).toInt() ); - if ( type == ProgressTreeModel::Invalid ) + if ( !index.isValid() ) return option.rect.size(); + bool isFirstLevel = !index.parent().isValid(); + QFont font = qApp->font(); - if ( type == ProgressTreeModel::Category ) + if ( isFirstLevel ) { font.setPointSize( CAT_FONTSIZE ); } - else if ( type == ProgressTreeModel::ViewStep ) + else { font.setPointSize( VS_FONTSIZE ); } @@ -74,25 +73,21 @@ ProgressTreeDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { + bool isFirstLevel = !index.parent().isValid(); + QStyleOptionViewItemV4 opt = option; painter->save(); - ProgressTreeModel::RowType type = - static_cast< ProgressTreeModel::RowType >( - index.data( ProgressTreeModel::ProgressTreeItemTypeRole ).toInt() ); - if ( type == ProgressTreeModel::Invalid ) - return; - initStyleOption( &opt, index ); opt.text.clear(); painter->setBrush( CalamaresStyle::SIDEBAR_BACKGROUND ); painter->setPen( CalamaresStyle::SIDEBAR_TEXT ); - if ( type == ProgressTreeModel::Category ) + if ( isFirstLevel ) paintCategory( painter, opt, index ); - else if ( type == ProgressTreeModel::ViewStep ) + else paintViewStep( painter, opt, index ); painter->restore(); @@ -109,9 +104,12 @@ ProgressTreeDelegate::paintCategory( QPainter* painter, ITEM_MARGIN, ITEM_MARGIN ); + bool isCurrent = index.data( ProgressTreeModel::ProgressTreeItemCurrentRole ).toBool(); + QFont font = qApp->font(); font.setPointSize( CAT_FONTSIZE ); font.setBold( false ); + font.setUnderline( isCurrent ); // FIXME: Figure out a nicer way to highlight the current category step painter->setFont( font ); painter->drawText( textRect, index.data().toString() ); diff --git a/src/calamares/progresstree/ProgressTreeModel.cpp b/src/calamares/progresstree/ProgressTreeModel.cpp index 6ac44261e..bc62d1339 100644 --- a/src/calamares/progresstree/ProgressTreeModel.cpp +++ b/src/calamares/progresstree/ProgressTreeModel.cpp @@ -136,12 +136,12 @@ ProgressTreeModel::setupModelData() CategoryItem* prepare = new CategoryItem( tr( "Prepare" ), m_rootItem ); m_rootItem->appendChild( prepare ); - foreach ( const Calamares::ViewStep* step, vm->steps() ) + foreach ( const Calamares::ViewStep* step, vm->prepareSteps() ) { prepare->appendChild( new ViewStepItem( step, prepare ) ); } - m_rootItem->appendChild( new CategoryItem( tr( "Install" ), m_rootItem ) ); + m_rootItem->appendChild( new ViewStepItem( vm->installationStep(), m_rootItem ) ); m_rootItem->appendChild( new CategoryItem( tr( "Finish" ), m_rootItem ) ); } diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index 1b2ee1430..491b41b59 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -11,6 +11,7 @@ list( APPEND ${CALAMARESUI_LIBRARY_TARGET}_SOURCES viewpages/AbstractPage.cpp viewpages/ViewStep.cpp + InstallationViewStep.cpp Settings.cpp ViewManager.cpp ) diff --git a/src/libcalamaresui/InstallationViewStep.cpp b/src/libcalamaresui/InstallationViewStep.cpp new file mode 100644 index 000000000..b6fe05437 --- /dev/null +++ b/src/libcalamaresui/InstallationViewStep.cpp @@ -0,0 +1,73 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014, Aurélien Gâteau + * + * 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 + +#include + +namespace Calamares +{ + +InstallationViewStep::InstallationViewStep( QObject* parent ) + : ViewStep( parent ) + , m_widget( new QLabel( "[Installation Progress]" ) ) +{ +} + +QString +InstallationViewStep::prettyName() const +{ + return tr( "Install" ); +} + +QWidget* +InstallationViewStep::widget() +{ + return m_widget; +} + + +void +InstallationViewStep::next() +{ +} + +void +InstallationViewStep::back() +{ +} + +bool +InstallationViewStep::isNextEnabled() const +{ + return false; +} + +bool +InstallationViewStep::isAtBeginning() const +{ + return false; +} + +bool +InstallationViewStep::isAtEnd() const +{ + return false; +} + +} // namespace diff --git a/src/libcalamaresui/InstallationViewStep.h b/src/libcalamaresui/InstallationViewStep.h new file mode 100644 index 000000000..cac14f53c --- /dev/null +++ b/src/libcalamaresui/InstallationViewStep.h @@ -0,0 +1,50 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014, Aurélien Gâteau + * + * 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 INSTALLATIONVIEWSTEP_H +#define INSTALLATIONVIEWSTEP_H + +#include + +namespace Calamares +{ + +class InstallationViewStep : public ViewStep +{ +public: + explicit InstallationViewStep( QObject* parent = nullptr ); + + QString prettyName() const override; + + QWidget* widget() override; + + void next() override; + void back() override; + + bool isNextEnabled() const override; + + bool isAtBeginning() const override; + bool isAtEnd() const override; + +private: + QWidget* m_widget; +}; + +} + +#endif /* INSTALLATIONVIEWSTEP_H */ diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp index 8b390149c..23e7abed3 100644 --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -19,6 +19,7 @@ #include "ViewManager.h" #include "viewpages/ViewStep.h" +#include "InstallationViewStep.h" #include #include @@ -64,6 +65,9 @@ ViewManager::ViewManager( QObject* parent ) connect( m_next, &QPushButton::clicked, this, &ViewManager::next ); connect( m_back, &QPushButton::clicked, this, &ViewManager::back ); m_back->setEnabled( false ); + + m_installationViewStep = new InstallationViewStep( this ); + insertViewStep( 0, m_installationViewStep ); } @@ -83,26 +87,41 @@ ViewManager::centralWidget() void ViewManager::addViewStep( ViewStep* step ) { - step->setParent( this ); - m_steps.append( step ); + m_prepareSteps.append( step ); + + insertViewStep( m_steps.size() - 1, step ); +} + + +void +ViewManager::insertViewStep( int before, ViewStep* step) +{ + m_steps.insert( before, step ); QLayout* layout = step->widget()->layout(); if ( layout ) { layout->setContentsMargins( 0, 0, 0, 0 ); } - m_stack->addWidget( step->widget() ); + m_stack->insertWidget( before, step->widget() ); connect( step, &ViewStep::nextStatusChanged, m_next, &QPushButton::setEnabled ); - emit currentStepChanged(); + m_stack->setCurrentIndex( 0 ); } QList< ViewStep* > -ViewManager::steps() const +ViewManager::prepareSteps() const { - return m_steps; + return m_prepareSteps; +} + + +ViewStep* +ViewManager::installationStep() const +{ + return m_installationViewStep; } @@ -124,20 +143,21 @@ void ViewManager::next() { ViewStep* step = m_steps.at( m_currentStep ); - if ( step->isAtEnd() && m_currentStep < m_steps.length() -1 ) + bool installing = false; + if ( step->isAtEnd() ) { m_currentStep++; m_stack->setCurrentIndex( m_currentStep ); + installing = m_steps.at( m_currentStep ) == m_installationViewStep; emit currentStepChanged(); } - else if ( !step->isAtEnd() ) + else { step->next(); } - else return; - m_next->setEnabled( m_steps.at( m_currentStep )->isNextEnabled() ); - m_back->setEnabled( true ); + m_next->setEnabled( !installing && m_steps.at( m_currentStep )->isNextEnabled() ); + m_back->setEnabled( !installing ); } diff --git a/src/libcalamaresui/ViewManager.h b/src/libcalamaresui/ViewManager.h index a9bd04a2c..6c47464e7 100644 --- a/src/libcalamaresui/ViewManager.h +++ b/src/libcalamaresui/ViewManager.h @@ -30,6 +30,7 @@ namespace Calamares { class ViewStep; +class InstallationViewStep; class UIDLLEXPORT ViewManager : public QObject { @@ -44,7 +45,8 @@ public: void addViewStep( ViewStep* step ); - QList< ViewStep* > steps() const; + QList< ViewStep* > prepareSteps() const; + ViewStep* installationStep() const; ViewStep* currentStep() const; int currentStepIndex() const; @@ -59,6 +61,8 @@ private: static ViewManager* s_instance; QList< ViewStep* > m_steps; + QList< ViewStep* > m_prepareSteps; + InstallationViewStep* m_installationViewStep; int m_currentStep; QWidget* m_widget; @@ -66,6 +70,8 @@ private: QPushButton* m_back; QPushButton* m_next; QPushButton* m_quit; + + void insertViewStep( int before, ViewStep* step ); }; } From a84b551ab029d69a7c9ca015584c2e94a26ce9a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20G=C3=A2teau?= Date: Tue, 8 Jul 2014 15:26:55 +0200 Subject: [PATCH 2/4] Rename CategoryItem to TextTreeItem --- src/calamares/CMakeLists.txt | 2 +- src/calamares/progresstree/ProgressTreeModel.cpp | 6 +++--- .../{CategoryItem.cpp => TextTreeItem.cpp} | 6 +++--- .../progresstree/{CategoryItem.h => TextTreeItem.h} | 10 +++++----- 4 files changed, 12 insertions(+), 12 deletions(-) rename src/calamares/progresstree/{CategoryItem.cpp => TextTreeItem.cpp} (90%) rename src/calamares/progresstree/{CategoryItem.h => TextTreeItem.h} (83%) diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 4d11469de..b618c6418 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -11,11 +11,11 @@ set( calamaresSources CalamaresApplication.cpp CalamaresWindow.cpp - progresstree/CategoryItem.cpp progresstree/ProgressTreeDelegate.cpp progresstree/ProgressTreeItem.cpp progresstree/ProgressTreeModel.cpp progresstree/ProgressTreeView.cpp + progresstree/TextTreeItem.cpp progresstree/ViewStepItem.cpp ) diff --git a/src/calamares/progresstree/ProgressTreeModel.cpp b/src/calamares/progresstree/ProgressTreeModel.cpp index bc62d1339..bece777bb 100644 --- a/src/calamares/progresstree/ProgressTreeModel.cpp +++ b/src/calamares/progresstree/ProgressTreeModel.cpp @@ -18,7 +18,7 @@ #include "ProgressTreeModel.h" -#include "progresstree/CategoryItem.h" +#include "progresstree/TextTreeItem.h" #include "progresstree/ViewStepItem.h" #include "ViewManager.h" @@ -133,7 +133,7 @@ ProgressTreeModel::setupModelData() m_rootItem = new ProgressTreeRoot(); const Calamares::ViewManager* vm = Calamares::ViewManager::instance(); - CategoryItem* prepare = new CategoryItem( tr( "Prepare" ), m_rootItem ); + TextTreeItem* prepare = new TextTreeItem( tr( "Prepare" ), m_rootItem ); m_rootItem->appendChild( prepare ); foreach ( const Calamares::ViewStep* step, vm->prepareSteps() ) @@ -142,7 +142,7 @@ ProgressTreeModel::setupModelData() } m_rootItem->appendChild( new ViewStepItem( vm->installationStep(), m_rootItem ) ); - m_rootItem->appendChild( new CategoryItem( tr( "Finish" ), m_rootItem ) ); + m_rootItem->appendChild( new TextTreeItem( tr( "Finish" ), m_rootItem ) ); } diff --git a/src/calamares/progresstree/CategoryItem.cpp b/src/calamares/progresstree/TextTreeItem.cpp similarity index 90% rename from src/calamares/progresstree/CategoryItem.cpp rename to src/calamares/progresstree/TextTreeItem.cpp index 396849815..8c6f8d692 100644 --- a/src/calamares/progresstree/CategoryItem.cpp +++ b/src/calamares/progresstree/TextTreeItem.cpp @@ -16,18 +16,18 @@ * along with Calamares. If not, see . */ -#include "CategoryItem.h" +#include "TextTreeItem.h" #include "ProgressTreeModel.h" -CategoryItem::CategoryItem( const QString& text, ProgressTreeItem* parent ) +TextTreeItem::TextTreeItem( const QString& text, ProgressTreeItem* parent ) : ProgressTreeItem( parent ) , m_text( text ) {} QVariant -CategoryItem::data( int role ) const +TextTreeItem::data( int role ) const { if ( role == ProgressTreeModel::ProgressTreeItemTypeRole ) return ProgressTreeModel::Category; diff --git a/src/calamares/progresstree/CategoryItem.h b/src/calamares/progresstree/TextTreeItem.h similarity index 83% rename from src/calamares/progresstree/CategoryItem.h rename to src/calamares/progresstree/TextTreeItem.h index d15e55d02..ba69b34b2 100644 --- a/src/calamares/progresstree/CategoryItem.h +++ b/src/calamares/progresstree/TextTreeItem.h @@ -16,16 +16,16 @@ * along with Calamares. If not, see . */ -#ifndef CATEGORYITEM_H -#define CATEGORYITEM_H +#ifndef TEXTTREEITEM_H +#define TEXTTREEITEM_H #include "ProgressTreeItem.h" -class CategoryItem : public ProgressTreeItem +class TextTreeItem : public ProgressTreeItem { public: - explicit CategoryItem( const QString& text, ProgressTreeItem* parent = nullptr ); + explicit TextTreeItem( const QString& text, ProgressTreeItem* parent = nullptr ); virtual QVariant data( int role ) const override; @@ -33,4 +33,4 @@ private: QString m_text; }; -#endif // CATEGORYITEM_H +#endif // TEXTTREEITEM_H From b465121e265eb55dbbdadecdab13881254b926ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20G=C3=A2teau?= Date: Tue, 8 Jul 2014 15:30:02 +0200 Subject: [PATCH 3/4] Remove RowType enum and associated role --- src/calamares/progresstree/ProgressTreeItem.cpp | 2 -- src/calamares/progresstree/ProgressTreeModel.h | 10 +--------- src/calamares/progresstree/TextTreeItem.cpp | 2 -- src/calamares/progresstree/ViewStepItem.cpp | 2 -- 4 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/calamares/progresstree/ProgressTreeItem.cpp b/src/calamares/progresstree/ProgressTreeItem.cpp index 5d0dd9789..9ab84d1e5 100644 --- a/src/calamares/progresstree/ProgressTreeItem.cpp +++ b/src/calamares/progresstree/ProgressTreeItem.cpp @@ -86,8 +86,6 @@ ProgressTreeRoot::ProgressTreeRoot() QVariant ProgressTreeRoot::data( int role ) const { - if ( role == ProgressTreeModel::ProgressTreeItemTypeRole ) - return ProgressTreeModel::Invalid; if ( role == ProgressTreeModel::ProgressTreeItemRole ) return this; return QVariant(); diff --git a/src/calamares/progresstree/ProgressTreeModel.h b/src/calamares/progresstree/ProgressTreeModel.h index fade29de3..e37242220 100644 --- a/src/calamares/progresstree/ProgressTreeModel.h +++ b/src/calamares/progresstree/ProgressTreeModel.h @@ -28,18 +28,10 @@ class ProgressTreeModel : public QAbstractItemModel { Q_OBJECT public: - enum RowType - { - Invalid = -1, - Category = 0, - ViewStep = 1 - }; - enum Role { ProgressTreeItemRole = Qt::UserRole + 10, - ProgressTreeItemTypeRole = Qt::UserRole + 11, - ProgressTreeItemCurrentRole = Qt::UserRole + 12 + ProgressTreeItemCurrentRole = Qt::UserRole + 11 }; explicit ProgressTreeModel( QObject* parent = nullptr ); diff --git a/src/calamares/progresstree/TextTreeItem.cpp b/src/calamares/progresstree/TextTreeItem.cpp index 8c6f8d692..16a7a41eb 100644 --- a/src/calamares/progresstree/TextTreeItem.cpp +++ b/src/calamares/progresstree/TextTreeItem.cpp @@ -29,8 +29,6 @@ TextTreeItem::TextTreeItem( const QString& text, ProgressTreeItem* parent ) QVariant TextTreeItem::data( int role ) const { - if ( role == ProgressTreeModel::ProgressTreeItemTypeRole ) - return ProgressTreeModel::Category; if ( role == ProgressTreeModel::ProgressTreeItemRole ) return this; if ( role == Qt::DisplayRole ) diff --git a/src/calamares/progresstree/ViewStepItem.cpp b/src/calamares/progresstree/ViewStepItem.cpp index 6310e8589..b056cdaa5 100644 --- a/src/calamares/progresstree/ViewStepItem.cpp +++ b/src/calamares/progresstree/ViewStepItem.cpp @@ -40,8 +40,6 @@ ViewStepItem::appendChild( ProgressTreeItem* item ) QVariant ViewStepItem::data( int role ) const { - if ( role == ProgressTreeModel::ProgressTreeItemTypeRole ) - return ProgressTreeModel::ViewStep; if ( role == ProgressTreeModel::ProgressTreeItemRole ) return this; if ( role == Qt::DisplayRole ) From 4fe50d4569dd14ad01eeb1391173c7363c32e404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20G=C3=A2teau?= Date: Tue, 8 Jul 2014 15:51:45 +0200 Subject: [PATCH 4/4] Add InstallationViewStep::jobs() --- src/libcalamaresui/InstallationViewStep.cpp | 6 ++++++ src/libcalamaresui/InstallationViewStep.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/libcalamaresui/InstallationViewStep.cpp b/src/libcalamaresui/InstallationViewStep.cpp index b6fe05437..851218423 100644 --- a/src/libcalamaresui/InstallationViewStep.cpp +++ b/src/libcalamaresui/InstallationViewStep.cpp @@ -70,4 +70,10 @@ InstallationViewStep::isAtEnd() const return false; } +QList< Calamares::job_ptr > +InstallationViewStep::jobs() const +{ + return QList< Calamares::job_ptr >(); +} + } // namespace diff --git a/src/libcalamaresui/InstallationViewStep.h b/src/libcalamaresui/InstallationViewStep.h index cac14f53c..74381b1d1 100644 --- a/src/libcalamaresui/InstallationViewStep.h +++ b/src/libcalamaresui/InstallationViewStep.h @@ -41,6 +41,8 @@ public: bool isAtBeginning() const override; bool isAtEnd() const override; + QList< Calamares::job_ptr > jobs() const override; + private: QWidget* m_widget; };