From 411d74cbce981c4c4b18e96c6da5af47b0d13b48 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 23 May 2024 16:22:52 +0300 Subject: [PATCH] QmlDesigner: Improve 3D import dialog logic Got rid of the separate accept button. Now the import button turns into accept button after preview is shown, as long as user hasn't changed any options. Import preview is also generated automatically using default options. Fixes: QDS-12822 Change-Id: I5f1080f855cf1ba09e917cef7741534c0fb16d8c Reviewed-by: Mahmoud Badri --- .../itemlibraryassetimportdialog.cpp | 78 ++++++++++++------- .../itemlibraryassetimportdialog.h | 3 +- .../itemlibraryassetimportdialog.ui | 10 --- 3 files changed, 50 insertions(+), 41 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp index 8af81a7b82e..1cbced4dfac 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.cpp @@ -215,8 +215,6 @@ ItemLibraryAssetImportDialog::ItemLibraryAssetImportDialog( connect(ui->closeButton, &QPushButton::clicked, this, &ItemLibraryAssetImportDialog::onClose); - connect(ui->acceptButton, &QPushButton::clicked, - this, &ItemLibraryAssetImportDialog::onAccept); connect(ui->tabWidget, &QTabWidget::currentChanged, this, &ItemLibraryAssetImportDialog::updateUi); connect(canvas(), &Import3dCanvas::requestImageUpdate, @@ -239,14 +237,22 @@ ItemLibraryAssetImportDialog::ItemLibraryAssetImportDialog( connect(&m_importer, &ItemLibraryAssetImporter::importReadyForPreview, this, &ItemLibraryAssetImportDialog::onImportReadyForPreview); - addInfo(tr("Select import options and press \"Import\" to import the following files:")); - for (const auto &file : std::as_const(m_quick3DFiles)) - addInfo(file); - connect(ui->advancedSettingsButton, &QPushButton::clicked, this, &ItemLibraryAssetImportDialog::toggleAdvanced); QTimer::singleShot(0, this, &ItemLibraryAssetImportDialog::updateUi); + + if (m_quick3DFiles.size() != 1) { + addInfo(tr("Select import options and press \"Import\" to import the following files:")); + } else { + addInfo(tr("Importing:")); + QTimer::singleShot(0, this, &ItemLibraryAssetImportDialog::onImport); + } + + for (const auto &file : std::as_const(m_quick3DFiles)) + addInfo(file); + + updateImportButtonState(); } ItemLibraryAssetImportDialog::~ItemLibraryAssetImportDialog() @@ -495,6 +501,7 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid( QJsonValue value(optCheck->isChecked()); optObj.insert("value", value); m_importOptions[optionsIndex].insert(optKey, optObj); + updateImportButtonState(); }); } else { // Simple options also exist in advanced, so don't connect simple controls directly @@ -502,13 +509,17 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid( auto *advCheck = qobject_cast( m_labelToControlWidgetMaps[optionsIndex].value(optKey)); if (advCheck) { - QObject::connect(optCheck, &QCheckBox::toggled, this, [optCheck, advCheck]() { - if (advCheck->isChecked() != optCheck->isChecked()) + QObject::connect(optCheck, &QCheckBox::toggled, this, [this, optCheck, advCheck]() { + if (advCheck->isChecked() != optCheck->isChecked()) { advCheck->setChecked(optCheck->isChecked()); + updateImportButtonState(); + } }); - QObject::connect(advCheck, &QCheckBox::toggled, this, [optCheck, advCheck]() { - if (advCheck->isChecked() != optCheck->isChecked()) + QObject::connect(advCheck, &QCheckBox::toggled, this, [this, optCheck, advCheck]() { + if (advCheck->isChecked() != optCheck->isChecked()) { optCheck->setChecked(advCheck->isChecked()); + updateImportButtonState(); + } }); } } @@ -544,6 +555,7 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid( QJsonValue value(optSpin->value()); optObj.insert("value", value); m_importOptions[optionsIndex].insert(optKey, optObj); + updateImportButtonState(); }); } else { auto *advSpin = qobject_cast( @@ -551,14 +563,18 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid( if (advSpin) { // Connect corresponding advanced control QObject::connect(optSpin, &QDoubleSpinBox::valueChanged, - this, [optSpin, advSpin] { - if (advSpin->value() != optSpin->value()) + this, [this, optSpin, advSpin] { + if (advSpin->value() != optSpin->value()) { advSpin->setValue(optSpin->value()); + updateImportButtonState(); + } }); QObject::connect(advSpin, &QDoubleSpinBox::valueChanged, - this, [optSpin, advSpin] { - if (advSpin->value() != optSpin->value()) + this, [this, optSpin, advSpin] { + if (advSpin->value() != optSpin->value()) { optSpin->setValue(advSpin->value()); + updateImportButtonState(); + } }); } } @@ -994,6 +1010,11 @@ void ItemLibraryAssetImportDialog::setCloseButtonState(bool importing) ui->closeButton->setText(importing ? tr("Cancel") : tr("Close")); } +void ItemLibraryAssetImportDialog::updateImportButtonState() +{ + ui->importButton->setText(m_previewOptions == m_importOptions ? tr("Accept") : tr("Import")); +} + void ItemLibraryAssetImportDialog::addError(const QString &error, const QString &srcPath) { m_closeOnFinish = false; @@ -1013,8 +1034,14 @@ void ItemLibraryAssetImportDialog::addInfo(const QString &info, const QString &s void ItemLibraryAssetImportDialog::onImport() { - ui->acceptButton->setEnabled(false); ui->importButton->setEnabled(false); + + if (!m_previewCompName.isEmpty() && m_previewOptions == m_importOptions) { + cleanupPreviewPuppet(); + m_importer.finalizeQuick3DImport(); + return; + } + setCloseButtonState(true); ui->progressBar->setValue(0); @@ -1041,15 +1068,17 @@ void ItemLibraryAssetImportDialog::setImportProgress(int value, const QString &t void ItemLibraryAssetImportDialog::onImportReadyForPreview(const QString &path, const QString &compName) { + addInfo(tr("Import is ready for preview.")); + if (m_previewCompName.isEmpty()) + addInfo(tr("Click \"Accept\" to finish the import or adjust options and click \"Import\" to import again.")); + m_previewFile = Utils::FilePath::fromString(path).pathAppended(m_importer.previewFileName()); m_previewCompName = compName; + m_previewOptions = m_importOptions; QTimer::singleShot(0, this, &ItemLibraryAssetImportDialog::startPreview); - ui->acceptButton->setEnabled(true); ui->importButton->setEnabled(true); - - addInfo(tr("Import is ready for preview.")); - addInfo(tr("Click \"Accept\" to finish the import or adjust options an click \"Import\" to import again.")); + updateImportButtonState(); } void ItemLibraryAssetImportDialog::onRequestImageUpdate() @@ -1093,7 +1122,6 @@ void ItemLibraryAssetImportDialog::onImportFinished() void ItemLibraryAssetImportDialog::onClose() { ui->importButton->setEnabled(false); - ui->acceptButton->setEnabled(false); m_explicitClose = true; doClose(); } @@ -1113,16 +1141,6 @@ void ItemLibraryAssetImportDialog::doClose() } } -void ItemLibraryAssetImportDialog::onAccept() -{ - cleanupPreviewPuppet(); - - ui->importButton->setEnabled(false); - ui->acceptButton->setEnabled(false); - - m_importer.finalizeQuick3DImport(); -} - void ItemLibraryAssetImportDialog::toggleAdvanced() { m_advancedMode = !m_advancedMode; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.h index 635be6db696..e7c49330561 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.h @@ -63,6 +63,7 @@ private slots: private: void setCloseButtonState(bool importing); + void updateImportButtonState(); void onImport(); void setImportProgress(int value, const QString &text); @@ -73,7 +74,6 @@ private: void onImportFinished(); void onClose(); void doClose(); - void onAccept(); void toggleAdvanced(); void createTab(const QString &tabLabel, int optionsIndex, const QJsonObject &groups); @@ -110,6 +110,7 @@ private: QString m_quick3DImportPath; ItemLibraryAssetImporter m_importer; QVector m_importOptions; + QVector m_previewOptions; QHash m_extToImportOptionsMap; QSet m_preselectedFilesForOverwrite; bool m_closeOnFinish = true; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.ui b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.ui index a35875a5eb7..e0b9d925fca 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.ui +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimportdialog.ui @@ -151,16 +151,6 @@ - - - - false - - - Accept - - -