From 3d6e5c5df7b260dfb0819c32e2c1b0dfa079ca71 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 30 Apr 2020 13:30:59 +0200 Subject: [PATCH] [calamares] Implement productWallpaper setting - If we have a wallpaper, bung in an extra QWidget between the main window and the panels (sidebar, nav and main) where we set a stylesheet that displays the chosen image. --- src/calamares/CalamaresWindow.cpp | 60 +++++++++++++++++++++---------- src/calamares/CalamaresWindow.h | 10 +++--- 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp index 57fffd1bb..7dda0cbd3 100644 --- a/src/calamares/CalamaresWindow.cpp +++ b/src/calamares/CalamaresWindow.cpp @@ -61,11 +61,11 @@ windowDimensionToPixels( const Calamares::Branding::WindowDimension& u ) QWidget* -CalamaresWindow::getWidgetSidebar( int desiredWidth ) +CalamaresWindow::getWidgetSidebar( QWidget* parent, int desiredWidth ) { const Calamares::Branding* const branding = Calamares::Branding::instance(); - QWidget* sideBox = new QWidget( this ); + QWidget* sideBox = new QWidget( parent ); sideBox->setObjectName( "sidebarApp" ); QBoxLayout* sideLayout = new QVBoxLayout; @@ -107,12 +107,12 @@ CalamaresWindow::getWidgetSidebar( int desiredWidth ) sideLayout->addWidget( debugWindowBtn ); debugWindowBtn->setFlat( true ); debugWindowBtn->setCheckable( true ); - connect( debugWindowBtn, &QPushButton::clicked, this, [=]( bool checked ) { + connect( debugWindowBtn, &QPushButton::clicked, this, [ = ]( bool checked ) { if ( checked ) { m_debugWindow = new Calamares::DebugWindow(); m_debugWindow->show(); - connect( m_debugWindow.data(), &Calamares::DebugWindow::closed, this, [=]() { + connect( m_debugWindow.data(), &Calamares::DebugWindow::closed, this, [ = ]() { m_debugWindow->deleteLater(); debugWindowBtn->setChecked( false ); } ); @@ -132,10 +132,10 @@ CalamaresWindow::getWidgetSidebar( int desiredWidth ) } QWidget* -CalamaresWindow::getQmlSidebar( int ) +CalamaresWindow::getQmlSidebar( QWidget* parent, int ) { CalamaresUtils::registerCalamaresModels(); - QQuickWidget* w = new QQuickWidget( this ); + QQuickWidget* w = new QQuickWidget( parent ); w->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); w->setResizeMode( QQuickWidget::SizeRootObjectToView ); w->setSource( QUrl( @@ -161,9 +161,9 @@ setButtonIcon( QPushButton* button, const QString& name ) } QWidget* -CalamaresWindow::getWidgetNavigation() +CalamaresWindow::getWidgetNavigation( QWidget* parent ) { - QWidget* navigation = new QWidget( this ); + QWidget* navigation = new QWidget( parent ); QBoxLayout* bottomLayout = new QHBoxLayout; bottomLayout->addStretch(); @@ -175,7 +175,7 @@ CalamaresWindow::getWidgetNavigation() connect( back, &QPushButton::clicked, m_viewManager, &Calamares::ViewManager::back ); connect( m_viewManager, &Calamares::ViewManager::backEnabledChanged, back, &QPushButton::setEnabled ); connect( m_viewManager, &Calamares::ViewManager::backLabelChanged, back, &QPushButton::setText ); - connect( m_viewManager, &Calamares::ViewManager::backIconChanged, this, [=]( QString n ) { + connect( m_viewManager, &Calamares::ViewManager::backIconChanged, this, [ = ]( QString n ) { setButtonIcon( back, n ); } ); bottomLayout->addWidget( back ); @@ -187,7 +187,7 @@ CalamaresWindow::getWidgetNavigation() connect( next, &QPushButton::clicked, m_viewManager, &Calamares::ViewManager::next ); connect( m_viewManager, &Calamares::ViewManager::nextEnabledChanged, next, &QPushButton::setEnabled ); connect( m_viewManager, &Calamares::ViewManager::nextLabelChanged, next, &QPushButton::setText ); - connect( m_viewManager, &Calamares::ViewManager::nextIconChanged, this, [=]( QString n ) { + connect( m_viewManager, &Calamares::ViewManager::nextIconChanged, this, [ = ]( QString n ) { setButtonIcon( next, n ); } ); bottomLayout->addWidget( next ); @@ -199,7 +199,7 @@ CalamaresWindow::getWidgetNavigation() connect( quit, &QPushButton::clicked, m_viewManager, &Calamares::ViewManager::quit ); connect( m_viewManager, &Calamares::ViewManager::quitEnabledChanged, quit, &QPushButton::setEnabled ); connect( m_viewManager, &Calamares::ViewManager::quitLabelChanged, quit, &QPushButton::setText ); - connect( m_viewManager, &Calamares::ViewManager::quitIconChanged, this, [=]( QString n ) { + connect( m_viewManager, &Calamares::ViewManager::quitIconChanged, this, [ = ]( QString n ) { setButtonIcon( quit, n ); } ); connect( m_viewManager, &Calamares::ViewManager::quitTooltipChanged, quit, &QPushButton::setToolTip ); @@ -213,10 +213,10 @@ CalamaresWindow::getWidgetNavigation() } QWidget* -CalamaresWindow::getQmlNavigation() +CalamaresWindow::getQmlNavigation( QWidget* parent ) { CalamaresUtils::registerCalamaresModels(); - QQuickWidget* w = new QQuickWidget( this ); + QQuickWidget* w = new QQuickWidget( parent ); w->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); w->setResizeMode( QQuickWidget::SizeRootObjectToView ); w->setSource( QUrl( @@ -234,6 +234,7 @@ template < typename widgetMaker, typename... args > QWidget* flavoredWidget( Calamares::Branding::PanelFlavor flavor, CalamaresWindow* w, + QWidget* parent, widgetMaker widget, widgetMaker qml, args... a ) @@ -242,9 +243,9 @@ flavoredWidget( Calamares::Branding::PanelFlavor flavor, switch ( flavor ) { case Calamares::Branding::PanelFlavor::Widget: - return ( w->*widget )( a... ); + return ( w->*widget )( parent, a... ); case Calamares::Branding::PanelFlavor::Qml: - return ( w->*qml )( a... ); + return ( w->*qml )( parent, a... ); case Calamares::Branding::PanelFlavor::None: return nullptr; } @@ -281,6 +282,7 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) : tr( "%1 Installer" ).arg( *Calamares::Branding::ProductName ) ); ) const Calamares::Branding* const branding = Calamares::Branding::instance(); + using ImageEntry = Calamares::Branding::ImageEntry; using CalamaresUtils::windowMinimumHeight; using CalamaresUtils::windowMinimumWidth; @@ -307,7 +309,23 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) cDebug() << Logger::SubEntry << "Proposed window size:" << w << h; resize( w, h ); - m_viewManager = Calamares::ViewManager::instance( this ); + QWidget* baseWidget = this; + if ( !( branding->imagePath( ImageEntry::ProductWallpaper ).isEmpty() ) ) + { + QWidget* label = new QWidget( this ); + QVBoxLayout* l = new QVBoxLayout; + CalamaresUtils::unmarginLayout( l ); + l->addWidget( label ); + setLayout( l ); + label->setObjectName( "backgroundWidget" ); + label->setStyleSheet( + QStringLiteral( "#backgroundWidget { background-image: url(%1); background-repeat: repeat-xy; }" ) + .arg( branding->imagePath( ImageEntry::ProductWallpaper ) ) ); + + baseWidget = label; + } + + m_viewManager = Calamares::ViewManager::instance( baseWidget ); if ( branding->windowExpands() ) { connect( m_viewManager, &Calamares::ViewManager::ensureSize, this, &CalamaresWindow::ensureSize ); @@ -328,11 +346,15 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) QWidget* sideBox = flavoredWidget( branding->sidebarFlavor(), this, + baseWidget, &CalamaresWindow::getWidgetSidebar, &CalamaresWindow::getQmlSidebar, qBound( 100, CalamaresUtils::defaultFontHeight() * 12, w < windowPreferredWidth ? 100 : 190 ) ); - QWidget* navigation = flavoredWidget( - branding->navigationFlavor(), this, &CalamaresWindow::getWidgetNavigation, &CalamaresWindow::getQmlNavigation ); + QWidget* navigation = flavoredWidget( branding->navigationFlavor(), + this, + baseWidget, + &CalamaresWindow::getWidgetNavigation, + &CalamaresWindow::getQmlNavigation ); // Build up the contentsLayout (a VBox) top-to-bottom // .. note that the bottom is mirrored wrt. the top @@ -351,7 +373,7 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) CalamaresUtils::unmarginLayout( mainLayout ); CalamaresUtils::unmarginLayout( contentsLayout ); - setLayout( mainLayout ); + baseWidget->setLayout( mainLayout ); setStyleSheet( Calamares::Branding::instance()->stylesheet() ); } diff --git a/src/calamares/CalamaresWindow.h b/src/calamares/CalamaresWindow.h index 1d3162b86..e6c27fd3f 100644 --- a/src/calamares/CalamaresWindow.h +++ b/src/calamares/CalamaresWindow.h @@ -37,7 +37,7 @@ class CalamaresWindow : public QWidget Q_OBJECT public: CalamaresWindow( QWidget* parent = nullptr ); - virtual ~CalamaresWindow() override {} + virtual ~CalamaresWindow() override { } public slots: /** @@ -52,12 +52,12 @@ protected: private: // Two variations on sidebar (the progress view) - QWidget* getWidgetSidebar( int desiredWidth ); - QWidget* getQmlSidebar( int desiredWidth ); + QWidget* getWidgetSidebar( QWidget* parent, int desiredWidth ); + QWidget* getQmlSidebar( QWidget* parent, int desiredWidth ); // Two variations on navigation (buttons at bottom) - QWidget* getWidgetNavigation(); - QWidget* getQmlNavigation(); + QWidget* getWidgetNavigation( QWidget* parent ); + QWidget* getQmlNavigation( QWidget* parent ); QPointer< Calamares::DebugWindow > m_debugWindow; // Managed by self Calamares::ViewManager* m_viewManager;