diff options
Diffstat (limited to 'src/libs/installer/packagemanagergui.cpp')
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 451 |
1 files changed, 4 insertions, 447 deletions
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 8961e3a19..a7a0aa45e 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -40,6 +40,7 @@ #include "scriptengine.h" #include "productkeycheck.h" #include "repositorycategory.h" +#include "componentselectionpage_p.h" #include "sysinfo.h" @@ -57,7 +58,6 @@ #include <QFileDialog> #include <QGridLayout> #include <QHBoxLayout> -#include <QHeaderView> #include <QLabel> #include <QLineEdit> #include <QListWidget> @@ -68,7 +68,7 @@ #include <QRadioButton> #include <QStringListModel> #include <QTextBrowser> -#include <QTreeView> + #include <QVBoxLayout> #include <QShowEvent> #include <QFileDialog> @@ -1849,444 +1849,6 @@ void LicenseAgreementPage::updateUi() } - -// -- ComponentSelectionPage::Private - -class ComponentSelectionPage::Private : public QObject -{ - Q_OBJECT - -public: - Private(ComponentSelectionPage *qq, PackageManagerCore *core) - : q(qq) - , m_core(core) - , m_treeView(new QTreeView(q)) - , m_allModel(m_core->defaultComponentModel()) - , m_updaterModel(m_core->updaterComponentModel()) - , m_currentModel(m_allModel) - , m_compressedButtonVisible(false) - , m_allowCompressedRepositoryInstall(false) - , m_categoryLayoutVisible(false) - { - 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))); - - m_descriptionVLayout = new QVBoxLayout; - m_descriptionVLayout->setObjectName(QLatin1String("DescriptionLayout")); - - m_descriptionLabel = new QLabel(q); - m_descriptionLabel->setWordWrap(true); - m_descriptionLabel->setObjectName(QLatin1String("ComponentDescriptionLabel")); - m_descriptionVLayout->addWidget(m_descriptionLabel); - - m_sizeLabel = new QLabel(q); - m_sizeLabel->setWordWrap(true); - m_sizeLabel->setObjectName(QLatin1String("ComponentSizeLabel")); - m_descriptionVLayout->addWidget(m_sizeLabel); - m_descriptionVLayout->addSpacerItem(new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, - QSizePolicy::MinimumExpanding)); - - m_mainHLayout = new QHBoxLayout; - - m_treeViewVLayout = new QVBoxLayout; - m_treeViewVLayout->setObjectName(QLatin1String("TreeviewLayout")); - - m_bspLabel = new QLabel(); - m_bspLabel->hide(); - m_treeViewVLayout->addWidget(m_bspLabel); - - m_progressBar = new QProgressBar(); - m_progressBar->setRange(0, 0); - m_progressBar->hide(); - m_progressBar->setObjectName(QLatin1String("CompressedInstallProgressBar")); - m_treeViewVLayout->addWidget(m_progressBar); - - 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, - &ComponentSelectionPage::Private::setTotalProgress); - - m_buttonHLayout = new QHBoxLayout; - m_checkDefault = new QPushButton; - connect(m_checkDefault, &QAbstractButton::clicked, - this, &ComponentSelectionPage::Private::selectDefault); - if (m_core->isInstaller()) { - m_checkDefault->setObjectName(QLatin1String("SelectDefaultComponentsButton")); - m_checkDefault->setShortcut(QKeySequence(ComponentSelectionPage::tr("Alt+A", - "select default components"))); - m_checkDefault->setText(ComponentSelectionPage::tr("Def&ault")); - } else { - m_checkDefault->setEnabled(false); - m_checkDefault->setObjectName(QLatin1String("ResetComponentsButton")); - m_checkDefault->setShortcut(QKeySequence(ComponentSelectionPage::tr("Alt+R", - "reset to already installed components"))); - m_checkDefault->setText(ComponentSelectionPage::tr("&Reset")); - } - m_buttonHLayout->addWidget(m_checkDefault); - - m_checkAll = new QPushButton; - connect(m_checkAll, &QAbstractButton::clicked, - this, &ComponentSelectionPage::Private::selectAll); - m_checkAll->setObjectName(QLatin1String("SelectAllComponentsButton")); - m_checkAll->setShortcut(QKeySequence(ComponentSelectionPage::tr("Alt+S", - "select all components"))); - m_checkAll->setText(ComponentSelectionPage::tr("&Select All")); - m_buttonHLayout->addWidget(m_checkAll); - - m_uncheckAll = new QPushButton; - connect(m_uncheckAll, &QAbstractButton::clicked, - this, &ComponentSelectionPage::Private::deselectAll); - m_uncheckAll->setObjectName(QLatin1String("DeselectAllComponentsButton")); - m_uncheckAll->setShortcut(QKeySequence(ComponentSelectionPage::tr("Alt+D", - "deselect all components"))); - m_uncheckAll->setText(ComponentSelectionPage::tr("&Deselect All")); - m_buttonHLayout->addWidget(m_uncheckAll); - - m_treeViewVLayout->addLayout(m_buttonHLayout); - m_treeViewVLayout->addWidget(m_treeView, 3); - - m_mainHLayout->addLayout(m_treeViewVLayout, 3); - m_mainHLayout->addLayout(m_descriptionVLayout, 2); - QVBoxLayout *layout = new QVBoxLayout(q); - layout->addLayout(m_mainHLayout, 1); - -#ifdef INSTALLCOMPRESSED - allowCompressedRepositoryInstall(); -#endif - } - - void allowCompressedRepositoryInstall() - { - m_allowCompressedRepositoryInstall = true; - } - - void showCompressedRepositoryButton() - { - if (m_compressedButtonVisible || !m_allowCompressedRepositoryInstall) { - return; - } - connect(m_core, SIGNAL(metaJobProgress(int)), this, SLOT(onProgressChanged(int))); - connect(m_core, SIGNAL(metaJobInfoMessage(QString)), this, SLOT(setMessage(QString))); - - QWizard *wizard = qobject_cast<QWizard*>(m_core->guiObject()); - if (wizard) { - wizard->setOption(QWizard::HaveCustomButton2, true); - wizard->setButtonText(QWizard::CustomButton2, - ComponentSelectionPage::tr("&Browse QBSP files")); - connect(wizard, &QWizard::customButtonClicked, - this, &ComponentSelectionPage::Private::selectCompressedPackage); - q->gui()->updateButtonLayout(); - } - m_compressedButtonVisible = true; - } - - void setupCategoryLayout() - { - if (m_categoryLayoutVisible) - return; - QVBoxLayout *vLayout = new QVBoxLayout; - m_categoryVLayout = new QVBoxLayout; - m_categoryGroupBox = new QGroupBox(q); - m_categoryGroupBox->setTitle(m_core->settings().repositoryCategoryDisplayName()); - m_categoryGroupBox->setObjectName(QLatin1String("CategoryGroupBox")); - QVBoxLayout *categoryLayout = new QVBoxLayout(m_categoryGroupBox); - m_fetchCategoryButton = new QPushButton(tr("Fetch")); - m_fetchCategoryButton->setObjectName(QLatin1String("FetchCategoryButton")); - connect(m_fetchCategoryButton, &QPushButton::clicked, this, - &ComponentSelectionPage::Private::fetchRepositoryCategories); - - foreach (RepositoryCategory repository, m_core->settings().repositoryCategories()) { - QCheckBox *checkBox = new QCheckBox; - checkBox->setObjectName(repository.displayname()); - connect(checkBox, &QCheckBox::stateChanged, this, - &ComponentSelectionPage::Private::checkboxStateChanged); - checkBox->setText(repository.displayname()); - categoryLayout->addWidget(checkBox); - } - m_categoryVLayout->insertWidget(0, m_categoryGroupBox); - - m_metadataProgressLabel = new QLabel(q); - m_categoryVLayout->addWidget(m_metadataProgressLabel); - vLayout->addWidget(m_categoryGroupBox); - vLayout->addWidget(m_fetchCategoryButton); - vLayout->addStretch(); - m_mainHLayout->insertLayout(0, vLayout); - m_categoryLayoutVisible = true; - } - - void updateTreeView() - { - m_checkDefault->setVisible(m_core->isInstaller() || m_core->isPackageManager()); - if (m_treeView->selectionModel()) { - disconnect(m_treeView->selectionModel(), &QItemSelectionModel::currentChanged, - this, &ComponentSelectionPage::Private::currentSelectedChanged); - } - - m_currentModel = m_core->isUpdater() ? m_updaterModel : m_allModel; - m_treeView->setModel(m_currentModel); - m_treeView->setExpanded(m_currentModel->index(0, 0), true); - foreach (Component *component, m_core->components(PackageManagerCore::ComponentType::All)) { - if (component->isExpandedByDefault()) { - const QModelIndex index = m_currentModel->indexFromComponentName(component->name()); - m_treeView->setExpanded(index, true); - } - } - - const bool installActionColumnVisible = m_core->settings().installActionColumnVisible(); - if (!installActionColumnVisible) - m_treeView->hideColumn(ComponentModelHelper::ActionColumn); - - m_treeView->header()->setSectionResizeMode( - ComponentModelHelper::NameColumn, QHeaderView::ResizeToContents); - if (m_core->isInstaller()) { - m_treeView->setHeaderHidden(true); - for (int i = ComponentModelHelper::InstalledVersionColumn; i < m_currentModel->columnCount(); ++i) - m_treeView->hideColumn(i); - - if (installActionColumnVisible) { - m_treeView->header()->setStretchLastSection(false); - m_treeView->header()->setSectionResizeMode( - ComponentModelHelper::NameColumn, QHeaderView::Stretch); - m_treeView->header()->setSectionResizeMode( - ComponentModelHelper::ActionColumn, QHeaderView::ResizeToContents); - } - } else { - m_treeView->header()->setStretchLastSection(true); - if (installActionColumnVisible) { - m_treeView->header()->setSectionResizeMode( - ComponentModelHelper::NameColumn, QHeaderView::Interactive); - m_treeView->header()->setSectionResizeMode( - ComponentModelHelper::ActionColumn, QHeaderView::Interactive); - } - for (int i = 0; i < m_currentModel->columnCount(); ++i) - m_treeView->resizeColumnToContents(i); - } - - bool hasChildren = false; - const int rowCount = m_currentModel->rowCount(); - for (int row = 0; row < rowCount && !hasChildren; ++row) - hasChildren = m_currentModel->hasChildren(m_currentModel->index(row, 0)); - m_treeView->setRootIsDecorated(hasChildren); - - connect(m_treeView->selectionModel(), &QItemSelectionModel::currentChanged, - this, &ComponentSelectionPage::Private::currentSelectedChanged); - - m_treeView->setCurrentIndex(m_currentModel->index(0, 0)); - } - -public slots: - void currentSelectedChanged(const QModelIndex ¤t) - { - if (!current.isValid()) - return; - - m_sizeLabel->setText(QString()); - m_descriptionLabel->setText(m_currentModel->data(m_currentModel->index(current.row(), - ComponentModelHelper::NameColumn, current.parent()), Qt::ToolTipRole).toString()); - - Component *component = m_currentModel->componentFromIndex(current); - if ((m_core->isUninstaller()) || (!component)) - return; - - if (component->isSelected() && (component->value(scUncompressedSizeSum).toLongLong() > 0)) { - m_sizeLabel->setText(ComponentSelectionPage::tr("This component " - "will occupy approximately %1 on your hard disk drive.") - .arg(humanReadableSize(component->value(scUncompressedSizeSum).toLongLong()))); - } - } - - void selectAll() - { - m_currentModel->setCheckedState(ComponentModel::AllChecked); - } - - void deselectAll() - { - m_currentModel->setCheckedState(ComponentModel::AllUnchecked); - } - - void checkboxStateChanged() - { - QList<QCheckBox*> checkboxes = m_categoryGroupBox->findChildren<QCheckBox *>(); - bool enableFetchButton = false; - foreach (QCheckBox *checkbox, checkboxes) { - if (checkbox->isChecked()) { - enableFetchButton = true; - break; - } - } - } - - void enableRepositoryCategory(int index, bool enable) { - RepositoryCategory repoCategory = m_core->settings().repositoryCategories().toList().at(index); - RepositoryCategory replacement = repoCategory; - replacement.setEnabled(enable); - QSet<RepositoryCategory> tmpRepoCategories = m_core->settings().repositoryCategories(); - if (tmpRepoCategories.contains(repoCategory)) { - tmpRepoCategories.remove(repoCategory); - tmpRepoCategories.insert(replacement); - m_core->settings().addRepositoryCategories(tmpRepoCategories); - } - } - - void updateWidgetVisibility(bool show) - { - if (show) { - QSpacerItem *verticalSpacer2 = new QSpacerItem(0, 0, QSizePolicy::Minimum, - QSizePolicy::Expanding); - m_treeViewVLayout->addSpacerItem(verticalSpacer2); - } else { - QSpacerItem *item = m_treeViewVLayout->spacerItem(); - m_treeViewVLayout->removeItem(item); - } - m_fetchCategoryButton->setDisabled(show); - m_progressBar->setVisible(show); - m_bspLabel->setVisible(show); - m_categoryGroupBox->setDisabled(show); - - m_treeView->setVisible(!show); - m_checkDefault->setVisible(!show); - m_checkAll->setVisible(!show); - m_uncheckAll->setVisible(!show); - m_descriptionLabel->setVisible(!show); - QPushButton *const b = qobject_cast<QPushButton *>(q->gui()->button(QWizard::NextButton)); - b->setEnabled(!show); - - if (QAbstractButton *bspButton = q->gui()->button(QWizard::CustomButton2)) - bspButton->setEnabled(!show); - } - - void fetchRepositoryCategories() - { - updateWidgetVisibility(true); - - QCheckBox *checkbox; - QList<QCheckBox*> checkboxes = m_categoryGroupBox->findChildren<QCheckBox *>(); - for (int i = 0; i < checkboxes.count(); i++) { - checkbox = checkboxes.at(i); - enableRepositoryCategory(i, checkbox->isChecked()); - } - - if (!m_core->fetchRemotePackagesTree()) { - m_metadataProgressLabel->setText(m_core->error()); - } else { - updateTreeView(); - m_metadataProgressLabel->setText(QLatin1String()); - } - updateWidgetVisibility(false); - } - - void selectCompressedPackage() - { - QString defaultDownloadDirectory = - QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QStringList fileNames = QFileDialog::getOpenFileNames(NULL, - ComponentSelectionPage::tr("Open File"),defaultDownloadDirectory, - QLatin1String("QBSP or 7z Files (*.qbsp *.7z)")); - - QSet<Repository> set; - foreach (QString fileName, fileNames) { - Repository repository = Repository::fromUserInput(fileName, true); - repository.setEnabled(true); - set.insert(repository); - } - if (set.count() > 0) { - updateWidgetVisibility(true); - m_core->settings().addTemporaryRepositories(set, false); - if (!m_core->fetchCompressedPackagesTree()) { - setMessage(m_core->error()); - } - else { - updateTreeView(); - setMessage(ComponentSelectionPage::tr("To install new "\ - "compressed repository, browse the repositories from your computer")); - } - } - updateWidgetVisibility(false); - } - - /*! - Updates the value of \a progress on the progress bar. - */ - void onProgressChanged(int progress) - { - m_progressBar->setValue(progress); - } - - /*! - Displays the message \a msg on the page. - */ - void setMessage(const QString &msg) - { - QWizardPage *page = q->gui()->currentPage(); - if (m_bspLabel && page && page->objectName() == QLatin1String("ComponentSelectionPage")) - m_bspLabel->setText(msg); - } - - void setTotalProgress(int totalProgress) - { - if (m_progressBar) - m_progressBar->setRange(0, totalProgress); - } - - void selectDefault() - { - m_currentModel->setCheckedState(ComponentModel::DefaultChecked); - } - - void onModelStateChanged(QInstaller::ComponentModel::ModelState state) - { - q->setModified(state.testFlag(ComponentModel::DefaultChecked) == false); - // If all components in the checked list are only checkable when run without forced - // installation, set ComponentModel::AllUnchecked as well, as we cannot uncheck anything. - // Helps to keep the UI correct. - if ((!m_core->noForceInstallation()) - && (m_currentModel->checked() == m_currentModel->uncheckable())) { - state |= ComponentModel::AllUnchecked; - } - // enable the button if the corresponding flag is not set - m_checkAll->setEnabled(state.testFlag(ComponentModel::AllChecked) == false); - m_uncheckAll->setEnabled(state.testFlag(ComponentModel::AllUnchecked) == false); - m_checkDefault->setEnabled(state.testFlag(ComponentModel::DefaultChecked) == false); - - // update the current selected node (important to reflect possible sub-node changes) - if (m_treeView->selectionModel()) - currentSelectedChanged(m_treeView->selectionModel()->currentIndex()); - } - -public: - ComponentSelectionPage *q; - PackageManagerCore *m_core; - QTreeView *m_treeView; - ComponentModel *m_allModel; - ComponentModel *m_updaterModel; - ComponentModel *m_currentModel; - QLabel *m_sizeLabel; - QLabel *m_descriptionLabel; - QPushButton *m_checkAll; - QPushButton *m_uncheckAll; - QPushButton *m_checkDefault; - QPushButton *m_installCompressButton; - QGroupBox *m_categoryGroupBox; - QPushButton *m_fetchCategoryButton; - QLabel *m_bspLabel; - QLabel *m_metadataProgressLabel; - QProgressBar *m_progressBar; - QVBoxLayout *m_descriptionVLayout; - QHBoxLayout *m_mainHLayout; - QVBoxLayout *m_treeViewVLayout; - QVBoxLayout *m_categoryVLayout; - QHBoxLayout *m_buttonHLayout; - bool m_compressedButtonVisible; - bool m_allowCompressedRepositoryInstall; - bool m_categoryLayoutVisible; -}; - - // -- ComponentSelectionPage /*! @@ -2301,7 +1863,7 @@ public: */ ComponentSelectionPage::ComponentSelectionPage(PackageManagerCore *core) : PackageManagerPage(core) - , d(new Private(this, core)) + , d(new ComponentSelectionPagePrivate(this, core)) { setPixmap(QWizard::WatermarkPixmap, QPixmap()); setObjectName(QLatin1String("ComponentSelectionPage")); @@ -2348,12 +1910,7 @@ void ComponentSelectionPage::entering() void ComponentSelectionPage::leaving() { - QWizard *wizard = qobject_cast<QWizard*>(d->m_core->guiObject()); - if (wizard && (gui()->options() & QWizard::HaveCustomButton2)) { - wizard->setOption(QWizard::HaveCustomButton2, false); - gui()->updateButtonLayout(); - d->m_compressedButtonVisible = false; - } + d->hideCompressedRepositoryButton(); } /*! |