diff --git a/src/blackgui/components/configurationwizard.cpp b/src/blackgui/components/configurationwizard.cpp index 6f13dc374..c4d45bcaa 100644 --- a/src/blackgui/components/configurationwizard.cpp +++ b/src/blackgui/components/configurationwizard.cpp @@ -19,6 +19,12 @@ namespace BlackGui ui(new Ui::CConfigurationWizard) { ui->setupUi(this); + + // no other versions, skip copy pages + if (!ui->comp_CopySettings->hasOtherVersionData()) + { + this->setStartId(ConfigSimulator); + } ui->wp_CopyCaches->setConfigComponent(ui->comp_CopyCaches); ui->wp_CopySettings->setConfigComponent(ui->comp_CopySettings); ui->wp_Simulator->setConfigComponent(ui->comp_Simulator); @@ -30,7 +36,11 @@ namespace BlackGui void CConfigurationWizard::wizardCurrentIdChanged(int id) { - Q_UNUSED(id); + const int lastId = m_lastId; + m_lastId = id; // update + const bool backward = id < lastId; + Q_UNUSED(backward); + const QWizardPage *page = this->currentPage(); if (page == ui->wp_CopyCaches) { diff --git a/src/blackgui/components/configurationwizard.h b/src/blackgui/components/configurationwizard.h index 6c0af8bba..e190f0374 100644 --- a/src/blackgui/components/configurationwizard.h +++ b/src/blackgui/components/configurationwizard.h @@ -29,6 +29,14 @@ namespace BlackGui Q_OBJECT public: + //! Page ids + enum Pages + { + CopySettings, + CopyCaches, + ConfigSimulator + }; + //! Constructor explicit CConfigurationWizard(QWidget *parent = nullptr); @@ -40,6 +48,7 @@ namespace BlackGui void wizardCurrentIdChanged(int id); QScopedPointer ui; + int m_lastId = -1; }; } // ns } // ns diff --git a/src/blackgui/components/copyconfigurationcomponent.cpp b/src/blackgui/components/copyconfigurationcomponent.cpp index 13ddd176a..46855fd63 100644 --- a/src/blackgui/components/copyconfigurationcomponent.cpp +++ b/src/blackgui/components/copyconfigurationcomponent.cpp @@ -32,13 +32,16 @@ namespace BlackGui ui->setupUi(this); ui->cb_OtherVersions->clear(); ui->cb_OtherVersions->addItems(CDirectoryUtils::swiftApplicationDataDirectoryList(true, true)); - m_versionDirs = CDirectoryUtils::swiftApplicationDataDirectoryList(true, false); // not beautified + m_otherVersionDirs = CDirectoryUtils::swiftApplicationDataDirectoryList(true, false); // not beautified this->initCurrentDirectories(); this->preselectMissingOurOutdated(); connect(ui->rb_Cache, &QRadioButton::toggled, this, &CCopyConfigurationComponent::initCurrentDirectories); connect(ui->cb_OtherVersions, &QComboBox::currentTextChanged, this, &CCopyConfigurationComponent::initCurrentDirectories); + connect(ui->pb_SelectAll, &QPushButton::clicked, ui->tv_Source, &QTreeView::selectAll); + connect(ui->pb_ClearSelection, &QPushButton::clicked, ui->tv_Source, &QTreeView::clearSelection); + connect(ui->pb_CopyOver, &QPushButton::clicked, this, &CCopyConfigurationComponent::copySelectedFiles); } CCopyConfigurationComponent::~CCopyConfigurationComponent() @@ -65,15 +68,20 @@ namespace BlackGui const QString dirOther = this->getOtherVersionsSelectedDirectory(); const QString dirCurrent = this->getThisVersionDirectory(); + ui->tv_Source->clearSelection(); ui->tv_Destination->clearSelection(); + const CDirectoryUtils::DirComparison comp = CDirectoryUtils::compareTwoDirectories(dirOther, dirCurrent); const QFileSystemModel *model = qobject_cast(ui->tv_Destination->model()); + if (!model) { return; } QStringList select = comp.missingInTarget.toList(); select.append(comp.newerInSource.toList()); for (const QString &file : as_const(comp.missingInTarget)) { - ui->tv_Destination->setCurrentIndex(model->index(file)); + const QModelIndex index = model->index(file); + if (!index.isValid()) continue; + ui->tv_Destination->setCurrentIndex(index); } } @@ -82,7 +90,6 @@ namespace BlackGui ui->le_CurrentVersion->setText(CDirectoryUtils::applicationDirectoryPath()); this->setComboBoxWidth(); const QString dir = this->getOtherVersionsSelectedDirectory(); - if (dir.isEmpty()) { return; } // source QFileSystemModel *sourceModel = qobject_cast(ui->tv_Source->model()); @@ -99,9 +106,13 @@ namespace BlackGui ui->tv_Source->resizeColumnToContents(0); }); } - const QModelIndex sourceIndex = sourceModel->setRootPath(dir); - ui->tv_Source->setRootIndex(sourceIndex); - ui->tv_Source->setSortingEnabled(true); + + if (!dir.isEmpty()) + { + const QModelIndex sourceIndex = sourceModel->setRootPath(dir); + ui->tv_Source->setRootIndex(sourceIndex); + ui->tv_Source->setSortingEnabled(true); + } // destination QFileSystemModel *destinationModel = qobject_cast(ui->tv_Destination->model()); @@ -125,6 +136,11 @@ namespace BlackGui ui->tv_Destination->resizeColumnToContents(0); } + bool CCopyConfigurationComponent::hasOtherVersionData() const + { + return !m_otherVersionDirs.isEmpty(); + } + void CCopyConfigurationComponent::currentVersionChanged(const QString &text) { Q_UNUSED(text); @@ -138,9 +154,10 @@ namespace BlackGui QString CCopyConfigurationComponent::getOtherVersionsSelectedDirectory() const { - const QString s = m_versionDirs.at(ui->cb_OtherVersions->currentIndex()); + if (ui->cb_OtherVersions->count() < 1) { return ""; } const QFileInfoList dirs(CDirectoryUtils::swiftApplicationDataDirectories()); if (dirs.isEmpty()) { return ""; } + const QString s = m_otherVersionDirs.at(ui->cb_OtherVersions->currentIndex()); QString dir; for (const QFileInfo &info : dirs) { diff --git a/src/blackgui/components/copyconfigurationcomponent.h b/src/blackgui/components/copyconfigurationcomponent.h index 67623c890..89cf4dfd2 100644 --- a/src/blackgui/components/copyconfigurationcomponent.h +++ b/src/blackgui/components/copyconfigurationcomponent.h @@ -51,6 +51,9 @@ namespace BlackGui //! Init file content void initCurrentDirectories(); + //! Are there other versions to copy from + bool hasOtherVersionData() const; + private: //! The current version changed void currentVersionChanged(const QString &text); @@ -64,10 +67,10 @@ namespace BlackGui //! Get the selected files QStringList getSelectedFiles() const; - //! Combobox width + //! Set calculated combobox width void setComboBoxWidth(); - QStringList m_versionDirs; + QStringList m_otherVersionDirs; QScopedPointer ui; }; diff --git a/src/blackgui/components/copyconfigurationcomponent.ui b/src/blackgui/components/copyconfigurationcomponent.ui index 965d310dc..04e83405a 100644 --- a/src/blackgui/components/copyconfigurationcomponent.ui +++ b/src/blackgui/components/copyconfigurationcomponent.ui @@ -109,6 +109,27 @@ + + + + select all + + + + + + + clear selection + + + + + + + copy over + + +