From ecd7fdf878f61485e3a8d159dee9cf8c6ba48869 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Wed, 27 Nov 2019 08:50:49 +0200 Subject: Fix progressbar length in component selection page Also use QStackedLayout to transform between treeview and progressbar views. This simplifies the code as we hide the treeview, categories etc. and show progressbar instead when we are fetching a new category. QStackedLayout makes it easier as we then don't have to hide/show individual widgets we want to show. Change-Id: I405030e9629052c5ca773a91bc44b66d3d26e137 Reviewed-by: Jani Heikkinen --- src/libs/installer/componentselectionpage_p.cpp | 104 ++++++++++-------------- src/libs/installer/componentselectionpage_p.h | 5 +- 2 files changed, 47 insertions(+), 62 deletions(-) diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp index 917dae4c1..cb8f321d0 100644 --- a/src/libs/installer/componentselectionpage_p.cpp +++ b/src/libs/installer/componentselectionpage_p.cpp @@ -47,6 +47,8 @@ #include #include #include +#include +#include namespace QInstaller { @@ -62,18 +64,13 @@ ComponentSelectionPagePrivate::ComponentSelectionPagePrivate(ComponentSelectionP { m_treeView->setObjectName(QLatin1String("ComponentsTreeView")); - connect(m_allModel, SIGNAL(checkStateChanged(QInstaller::ComponentModel::ModelState)), this, - SLOT(onModelStateChanged(QInstaller::ComponentModel::ModelState))); - connect(m_updaterModel, SIGNAL(checkStateChanged(QInstaller::ComponentModel::ModelState)), - this, SLOT(onModelStateChanged(QInstaller::ComponentModel::ModelState))); + QVBoxLayout *descriptionVLayout = new QVBoxLayout; + descriptionVLayout->setObjectName(QLatin1String("DescriptionLayout")); - m_descriptionVLayout = new QVBoxLayout; - m_descriptionVLayout->setObjectName(QLatin1String("DescriptionLayout")); - - m_descriptionScrollArea = new QScrollArea(q); - m_descriptionScrollArea->setWidgetResizable(true); - m_descriptionScrollArea->setFrameShape(QFrame::NoFrame); - m_descriptionScrollArea->setObjectName(QLatin1String("DescriptionScrollArea")); + QScrollArea *descriptionScrollArea = new QScrollArea(q); + descriptionScrollArea->setWidgetResizable(true); + descriptionScrollArea->setFrameShape(QFrame::NoFrame); + descriptionScrollArea->setObjectName(QLatin1String("DescriptionScrollArea")); m_descriptionLabel = new QLabel(q); m_descriptionLabel->setWordWrap(true); @@ -81,17 +78,14 @@ ComponentSelectionPagePrivate::ComponentSelectionPagePrivate(ComponentSelectionP m_descriptionLabel->setOpenExternalLinks(true); m_descriptionLabel->setObjectName(QLatin1String("ComponentDescriptionLabel")); m_descriptionLabel->setAlignment(Qt::AlignTop); - m_descriptionScrollArea->setWidget(m_descriptionLabel); - m_descriptionVLayout->addWidget(m_descriptionScrollArea); + descriptionScrollArea->setWidget(m_descriptionLabel); + descriptionVLayout->addWidget(descriptionScrollArea); m_sizeLabel = new QLabel(q); m_sizeLabel->setMargin(5); m_sizeLabel->setWordWrap(true); m_sizeLabel->setObjectName(QLatin1String("ComponentSizeLabel")); - m_descriptionVLayout->addWidget(m_sizeLabel); - - m_treeViewVLayout = new QVBoxLayout; - m_treeViewVLayout->setObjectName(QLatin1String("TreeviewLayout")); + descriptionVLayout->addWidget(m_sizeLabel); QHBoxLayout *buttonHLayout = new QHBoxLayout; m_checkDefault = new QPushButton; @@ -129,34 +123,48 @@ ComponentSelectionPagePrivate::ComponentSelectionPagePrivate(ComponentSelectionP m_uncheckAll->setText(ComponentSelectionPage::tr("&Deselect All")); buttonHLayout->addWidget(m_uncheckAll); - m_metadataProgressLabel = new QLabel(); - m_metadataProgressLabel->hide(); - m_treeViewVLayout->addWidget(m_metadataProgressLabel); - - m_progressBar = new QProgressBar(); + QWidget *progressStackedWidget = new QWidget(); + QVBoxLayout *metaLayout = new QVBoxLayout(progressStackedWidget); + m_metadataProgressLabel = new QLabel(progressStackedWidget); + m_progressBar = new QProgressBar(progressStackedWidget); m_progressBar->setRange(0, 0); - m_progressBar->hide(); m_progressBar->setObjectName(QLatin1String("CompressedInstallProgressBar")); - m_treeViewVLayout->addWidget(m_progressBar); + metaLayout->addSpacing(20); + metaLayout->addWidget(m_metadataProgressLabel); + metaLayout->addWidget(m_progressBar); + metaLayout->addSpacerItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding)); + + QVBoxLayout *treeViewVLayout = new QVBoxLayout; + treeViewVLayout->setObjectName(QLatin1String("TreeviewLayout")); + treeViewVLayout->addWidget(m_treeView, 3); + + QWidget *mainStackedWidget = new QWidget(); + m_mainGLayout = new QGridLayout(mainStackedWidget); + m_mainGLayout->addLayout(buttonHLayout, 0, 1); + m_mainGLayout->addLayout(treeViewVLayout, 1, 1); + m_mainGLayout->addLayout(descriptionVLayout, 1, 2); + m_mainGLayout->setColumnStretch(1, 3); + m_mainGLayout->setColumnStretch(2, 2); + + m_stackedLayout = new QStackedLayout(q); + m_stackedLayout->addWidget(mainStackedWidget); + m_stackedLayout->addWidget(progressStackedWidget); + m_stackedLayout->setCurrentIndex(0); + + connect(m_allModel, SIGNAL(checkStateChanged(QInstaller::ComponentModel::ModelState)), this, + SLOT(onModelStateChanged(QInstaller::ComponentModel::ModelState))); + connect(m_updaterModel, SIGNAL(checkStateChanged(QInstaller::ComponentModel::ModelState)), + this, SLOT(onModelStateChanged(QInstaller::ComponentModel::ModelState))); connect(m_core, SIGNAL(metaJobProgress(int)), this, SLOT(onProgressChanged(int))); connect(m_core, SIGNAL(metaJobInfoMessage(QString)), this, SLOT(setMessage(QString))); connect(m_core, &PackageManagerCore::metaJobTotalProgress, this, &ComponentSelectionPagePrivate::setTotalProgress); - m_treeViewVLayout->addWidget(m_treeView, 3); - // force a recalculation of components to install to keep the state correct connect(q, &ComponentSelectionPage::left, m_core, &PackageManagerCore::clearComponentsToInstallCalculated); - m_mainGLayout = new QGridLayout(q); - m_mainGLayout->addLayout(buttonHLayout, 0, 1); - m_mainGLayout->addLayout(m_treeViewVLayout, 1, 1); - m_mainGLayout->addLayout(m_descriptionVLayout, 1, 2); - m_mainGLayout->setColumnStretch(1, 3); - m_mainGLayout->setColumnStretch(2, 2); - #ifdef INSTALLCOMPRESSED allowCompressedRepositoryInstall(); #endif @@ -371,32 +379,10 @@ void ComponentSelectionPagePrivate::enableRepositoryCategory(const QString &repo void ComponentSelectionPagePrivate::updateWidgetVisibility(bool show) { - if (show) { - QSpacerItem *verticalSpacer2 = new QSpacerItem(0, 0, QSizePolicy::Minimum, - QSizePolicy::Expanding); - m_treeViewVLayout->addSpacerItem(verticalSpacer2); - m_mainGLayout->removeItem(m_descriptionVLayout); - //Hide next button during category fetch - QPushButton *const b = qobject_cast(q->gui()->button(QWizard::NextButton)); - b->setEnabled(!show); - } else { - QSpacerItem *item = m_treeViewVLayout->spacerItem(); - m_treeViewVLayout->removeItem(item); - m_mainGLayout->addLayout(m_descriptionVLayout, 1, 2); - //Call completeChanged() to determine if NextButton should be shown or not after category fetch. - q->completeChanged(); - } - if (m_categoryWidget) - m_categoryWidget->setVisible(!show); - m_progressBar->setVisible(show); - m_metadataProgressLabel->setVisible(show); - - m_treeView->setVisible(!show); - m_checkDefault->setVisible(!show); - m_checkAll->setVisible(!show); - m_uncheckAll->setVisible(!show); - m_descriptionScrollArea->setVisible(!show); - m_sizeLabel->setVisible(!show); + if (show) + m_stackedLayout->setCurrentIndex(1); + else + m_stackedLayout->setCurrentIndex(0); if (QAbstractButton *bspButton = q->gui()->button(QWizard::CustomButton2)) bspButton->setEnabled(!show); diff --git a/src/libs/installer/componentselectionpage_p.h b/src/libs/installer/componentselectionpage_p.h index 591cd08f7..bce13246b 100644 --- a/src/libs/installer/componentselectionpage_p.h +++ b/src/libs/installer/componentselectionpage_p.h @@ -45,6 +45,7 @@ class QProgressBar; class QVBoxLayout; class QHBoxLayout; class QGridLayout; +class QStackedLayout; namespace QInstaller { @@ -89,9 +90,7 @@ private: PackageManagerCore *m_core; QTreeView *m_treeView; QLabel *m_sizeLabel; - QScrollArea *m_descriptionScrollArea; QLabel *m_descriptionLabel; - QVBoxLayout *m_descriptionVLayout; QPushButton *m_checkAll; QPushButton *m_uncheckAll; QPushButton *m_checkDefault; @@ -100,11 +99,11 @@ private: QLabel *m_metadataProgressLabel; QProgressBar *m_progressBar; QGridLayout *m_mainGLayout; - QVBoxLayout *m_treeViewVLayout; bool m_allowCompressedRepositoryInstall; ComponentModel *m_allModel; ComponentModel *m_updaterModel; ComponentModel *m_currentModel; + QStackedLayout *m_stackedLayout; }; } // namespace QInstaller -- cgit v1.2.3