forked from qt-creator/qt-creator
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 <mahmoud.badri@qt.io>
This commit is contained in:
@@ -215,8 +215,6 @@ ItemLibraryAssetImportDialog::ItemLibraryAssetImportDialog(
|
|||||||
|
|
||||||
connect(ui->closeButton, &QPushButton::clicked,
|
connect(ui->closeButton, &QPushButton::clicked,
|
||||||
this, &ItemLibraryAssetImportDialog::onClose);
|
this, &ItemLibraryAssetImportDialog::onClose);
|
||||||
connect(ui->acceptButton, &QPushButton::clicked,
|
|
||||||
this, &ItemLibraryAssetImportDialog::onAccept);
|
|
||||||
connect(ui->tabWidget, &QTabWidget::currentChanged,
|
connect(ui->tabWidget, &QTabWidget::currentChanged,
|
||||||
this, &ItemLibraryAssetImportDialog::updateUi);
|
this, &ItemLibraryAssetImportDialog::updateUi);
|
||||||
connect(canvas(), &Import3dCanvas::requestImageUpdate,
|
connect(canvas(), &Import3dCanvas::requestImageUpdate,
|
||||||
@@ -239,14 +237,22 @@ ItemLibraryAssetImportDialog::ItemLibraryAssetImportDialog(
|
|||||||
connect(&m_importer, &ItemLibraryAssetImporter::importReadyForPreview,
|
connect(&m_importer, &ItemLibraryAssetImporter::importReadyForPreview,
|
||||||
this, &ItemLibraryAssetImportDialog::onImportReadyForPreview);
|
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,
|
connect(ui->advancedSettingsButton, &QPushButton::clicked,
|
||||||
this, &ItemLibraryAssetImportDialog::toggleAdvanced);
|
this, &ItemLibraryAssetImportDialog::toggleAdvanced);
|
||||||
|
|
||||||
QTimer::singleShot(0, this, &ItemLibraryAssetImportDialog::updateUi);
|
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()
|
ItemLibraryAssetImportDialog::~ItemLibraryAssetImportDialog()
|
||||||
@@ -495,6 +501,7 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid(
|
|||||||
QJsonValue value(optCheck->isChecked());
|
QJsonValue value(optCheck->isChecked());
|
||||||
optObj.insert("value", value);
|
optObj.insert("value", value);
|
||||||
m_importOptions[optionsIndex].insert(optKey, optObj);
|
m_importOptions[optionsIndex].insert(optKey, optObj);
|
||||||
|
updateImportButtonState();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Simple options also exist in advanced, so don't connect simple controls directly
|
// Simple options also exist in advanced, so don't connect simple controls directly
|
||||||
@@ -502,13 +509,17 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid(
|
|||||||
auto *advCheck = qobject_cast<QCheckBox *>(
|
auto *advCheck = qobject_cast<QCheckBox *>(
|
||||||
m_labelToControlWidgetMaps[optionsIndex].value(optKey));
|
m_labelToControlWidgetMaps[optionsIndex].value(optKey));
|
||||||
if (advCheck) {
|
if (advCheck) {
|
||||||
QObject::connect(optCheck, &QCheckBox::toggled, this, [optCheck, advCheck]() {
|
QObject::connect(optCheck, &QCheckBox::toggled, this, [this, optCheck, advCheck]() {
|
||||||
if (advCheck->isChecked() != optCheck->isChecked())
|
if (advCheck->isChecked() != optCheck->isChecked()) {
|
||||||
advCheck->setChecked(optCheck->isChecked());
|
advCheck->setChecked(optCheck->isChecked());
|
||||||
|
updateImportButtonState();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
QObject::connect(advCheck, &QCheckBox::toggled, this, [optCheck, advCheck]() {
|
QObject::connect(advCheck, &QCheckBox::toggled, this, [this, optCheck, advCheck]() {
|
||||||
if (advCheck->isChecked() != optCheck->isChecked())
|
if (advCheck->isChecked() != optCheck->isChecked()) {
|
||||||
optCheck->setChecked(advCheck->isChecked());
|
optCheck->setChecked(advCheck->isChecked());
|
||||||
|
updateImportButtonState();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -544,6 +555,7 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid(
|
|||||||
QJsonValue value(optSpin->value());
|
QJsonValue value(optSpin->value());
|
||||||
optObj.insert("value", value);
|
optObj.insert("value", value);
|
||||||
m_importOptions[optionsIndex].insert(optKey, optObj);
|
m_importOptions[optionsIndex].insert(optKey, optObj);
|
||||||
|
updateImportButtonState();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
auto *advSpin = qobject_cast<QDoubleSpinBox *>(
|
auto *advSpin = qobject_cast<QDoubleSpinBox *>(
|
||||||
@@ -551,14 +563,18 @@ QGridLayout *ItemLibraryAssetImportDialog::createOptionsGrid(
|
|||||||
if (advSpin) {
|
if (advSpin) {
|
||||||
// Connect corresponding advanced control
|
// Connect corresponding advanced control
|
||||||
QObject::connect(optSpin, &QDoubleSpinBox::valueChanged,
|
QObject::connect(optSpin, &QDoubleSpinBox::valueChanged,
|
||||||
this, [optSpin, advSpin] {
|
this, [this, optSpin, advSpin] {
|
||||||
if (advSpin->value() != optSpin->value())
|
if (advSpin->value() != optSpin->value()) {
|
||||||
advSpin->setValue(optSpin->value());
|
advSpin->setValue(optSpin->value());
|
||||||
|
updateImportButtonState();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
QObject::connect(advSpin, &QDoubleSpinBox::valueChanged,
|
QObject::connect(advSpin, &QDoubleSpinBox::valueChanged,
|
||||||
this, [optSpin, advSpin] {
|
this, [this, optSpin, advSpin] {
|
||||||
if (advSpin->value() != optSpin->value())
|
if (advSpin->value() != optSpin->value()) {
|
||||||
optSpin->setValue(advSpin->value());
|
optSpin->setValue(advSpin->value());
|
||||||
|
updateImportButtonState();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -994,6 +1010,11 @@ void ItemLibraryAssetImportDialog::setCloseButtonState(bool importing)
|
|||||||
ui->closeButton->setText(importing ? tr("Cancel") : tr("Close"));
|
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)
|
void ItemLibraryAssetImportDialog::addError(const QString &error, const QString &srcPath)
|
||||||
{
|
{
|
||||||
m_closeOnFinish = false;
|
m_closeOnFinish = false;
|
||||||
@@ -1013,8 +1034,14 @@ void ItemLibraryAssetImportDialog::addInfo(const QString &info, const QString &s
|
|||||||
|
|
||||||
void ItemLibraryAssetImportDialog::onImport()
|
void ItemLibraryAssetImportDialog::onImport()
|
||||||
{
|
{
|
||||||
ui->acceptButton->setEnabled(false);
|
|
||||||
ui->importButton->setEnabled(false);
|
ui->importButton->setEnabled(false);
|
||||||
|
|
||||||
|
if (!m_previewCompName.isEmpty() && m_previewOptions == m_importOptions) {
|
||||||
|
cleanupPreviewPuppet();
|
||||||
|
m_importer.finalizeQuick3DImport();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setCloseButtonState(true);
|
setCloseButtonState(true);
|
||||||
ui->progressBar->setValue(0);
|
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)
|
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_previewFile = Utils::FilePath::fromString(path).pathAppended(m_importer.previewFileName());
|
||||||
m_previewCompName = compName;
|
m_previewCompName = compName;
|
||||||
|
m_previewOptions = m_importOptions;
|
||||||
QTimer::singleShot(0, this, &ItemLibraryAssetImportDialog::startPreview);
|
QTimer::singleShot(0, this, &ItemLibraryAssetImportDialog::startPreview);
|
||||||
|
|
||||||
ui->acceptButton->setEnabled(true);
|
|
||||||
ui->importButton->setEnabled(true);
|
ui->importButton->setEnabled(true);
|
||||||
|
updateImportButtonState();
|
||||||
addInfo(tr("Import is ready for preview."));
|
|
||||||
addInfo(tr("Click \"Accept\" to finish the import or adjust options an click \"Import\" to import again."));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemLibraryAssetImportDialog::onRequestImageUpdate()
|
void ItemLibraryAssetImportDialog::onRequestImageUpdate()
|
||||||
@@ -1093,7 +1122,6 @@ void ItemLibraryAssetImportDialog::onImportFinished()
|
|||||||
void ItemLibraryAssetImportDialog::onClose()
|
void ItemLibraryAssetImportDialog::onClose()
|
||||||
{
|
{
|
||||||
ui->importButton->setEnabled(false);
|
ui->importButton->setEnabled(false);
|
||||||
ui->acceptButton->setEnabled(false);
|
|
||||||
m_explicitClose = true;
|
m_explicitClose = true;
|
||||||
doClose();
|
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()
|
void ItemLibraryAssetImportDialog::toggleAdvanced()
|
||||||
{
|
{
|
||||||
m_advancedMode = !m_advancedMode;
|
m_advancedMode = !m_advancedMode;
|
||||||
|
@@ -63,6 +63,7 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void setCloseButtonState(bool importing);
|
void setCloseButtonState(bool importing);
|
||||||
|
void updateImportButtonState();
|
||||||
|
|
||||||
void onImport();
|
void onImport();
|
||||||
void setImportProgress(int value, const QString &text);
|
void setImportProgress(int value, const QString &text);
|
||||||
@@ -73,7 +74,6 @@ private:
|
|||||||
void onImportFinished();
|
void onImportFinished();
|
||||||
void onClose();
|
void onClose();
|
||||||
void doClose();
|
void doClose();
|
||||||
void onAccept();
|
|
||||||
void toggleAdvanced();
|
void toggleAdvanced();
|
||||||
|
|
||||||
void createTab(const QString &tabLabel, int optionsIndex, const QJsonObject &groups);
|
void createTab(const QString &tabLabel, int optionsIndex, const QJsonObject &groups);
|
||||||
@@ -110,6 +110,7 @@ private:
|
|||||||
QString m_quick3DImportPath;
|
QString m_quick3DImportPath;
|
||||||
ItemLibraryAssetImporter m_importer;
|
ItemLibraryAssetImporter m_importer;
|
||||||
QVector<QJsonObject> m_importOptions;
|
QVector<QJsonObject> m_importOptions;
|
||||||
|
QVector<QJsonObject> m_previewOptions;
|
||||||
QHash<QString, int> m_extToImportOptionsMap;
|
QHash<QString, int> m_extToImportOptionsMap;
|
||||||
QSet<QString> m_preselectedFilesForOverwrite;
|
QSet<QString> m_preselectedFilesForOverwrite;
|
||||||
bool m_closeOnFinish = true;
|
bool m_closeOnFinish = true;
|
||||||
|
@@ -151,16 +151,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="acceptButton">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Accept</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
Reference in New Issue
Block a user