diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index d6080f4e90f..393f6840c9d 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -1157,12 +1157,16 @@ QStandardItemModel *ListField::itemModel() return m_itemModel; } -void ListField::selectRow(int row) +bool ListField::selectRow(int row) { - auto index = itemModel()->index(row, 0); + QModelIndex index = itemModel()->index(row, 0); + if (!index.isValid()) + return false; + selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect); this->updateIndex(); + return true; } QItemSelectionModel *ListField::selectionModel() const @@ -1271,12 +1275,15 @@ QVariant ComboBoxField::toSettings() const return {}; } -void ComboBoxField::selectRow(int row) +bool ComboBoxField::selectRow(int row) { - ListField::selectRow(row); + if (!ListField::selectRow(row)) + return false; auto w = qobject_cast(widget()); w->setCurrentIndex(row); + + return true; } int ComboBoxField::selectedRow() const diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h index ed89746d0b2..db8a1b06fb7 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h @@ -282,7 +282,7 @@ public: ~ListField() override; QStandardItemModel *model() { return m_itemModel; } - virtual void selectRow(int row); + virtual bool selectRow(int row); protected: bool parseData(const QVariant &data, QString *errorMessage) override; @@ -351,7 +351,7 @@ private: } public: - void selectRow(int row) override; + bool selectRow(int row) override; int selectedRow() const; }; diff --git a/src/plugins/studiowelcome/createproject.cpp b/src/plugins/studiowelcome/createproject.cpp index 1b6dd93e9d7..ce3b83945fb 100644 --- a/src/plugins/studiowelcome/createproject.cpp +++ b/src/plugins/studiowelcome/createproject.cpp @@ -68,6 +68,7 @@ void CreateProject::processFieldPage(ProjectExplorer::JsonFieldPage *page) auto widthField = dynamic_cast(page->jsonField("CustomScreenWidth")); auto heightField = dynamic_cast(page->jsonField("CustomScreenHeight")); + // TODO: use m_wizard to set these text items? if (widthField && heightField) { if (!m_customWidth.isEmpty() && !m_customHeight.isEmpty()) { widthField->setText(m_customWidth); diff --git a/src/plugins/studiowelcome/qdsnewdialog.cpp b/src/plugins/studiowelcome/qdsnewdialog.cpp index 83a966caeb0..0324a7de93c 100644 --- a/src/plugins/studiowelcome/qdsnewdialog.cpp +++ b/src/plugins/studiowelcome/qdsnewdialog.cpp @@ -170,17 +170,26 @@ void QdsNewDialog::onProjectCanBeCreatedChanged(bool value) emit fieldsValidChanged(); } +void QdsNewDialog::updateScreenSizes() +{ + int index = m_wizard.screenSizeIndex(m_currentPreset->screenSizeName); + if (index > -1) { + setScreenSizeIndex(index); + } else { + index = m_screenSizeModel->appendItem(m_currentPreset->screenSizeName); + setScreenSizeIndex(index); + } + + m_screenSizeModel->reset(); +} + void QdsNewDialog::onWizardCreated(QStandardItemModel *screenSizeModel, QStandardItemModel *styleModel) { m_screenSizeModel->setBackendModel(screenSizeModel); m_styleModel->setBackendModel(styleModel); if (m_qmlDetailsLoaded) { - int index = m_wizard.screenSizeIndex(m_currentPreset->screenSizeName); - if (index > -1) - setScreenSizeIndex(index); - - m_screenSizeModel->reset(); + updateScreenSizes(); emit haveVirtualKeyboardChanged(); emit haveTargetQtVersionChanged(); @@ -288,11 +297,7 @@ void QdsNewDialog::setWizardFactories(QList factories_, emit projectLocationChanged(); // So that QML knows to update the field if (m_qmlDetailsLoaded) { - int index = m_wizard.screenSizeIndex(m_currentPreset->screenSizeName); - if (index > -1) - setScreenSizeIndex(index); - - m_screenSizeModel->reset(); + updateScreenSizes(); } if (m_qmlStylesLoaded) @@ -334,9 +339,9 @@ void QdsNewDialog::accept() .execute(); PresetItem item = m_wizard.preset(); - QString screenSize = m_wizard.screenSizeName(m_qmlScreenSizeIndex); + QString customSizeName = m_qmlCustomWidth + " x " + m_qmlCustomHeight; - m_recentsStore.add(item.categoryId, item.name, screenSize); + m_recentsStore.add(item.categoryId, item.name, customSizeName); m_dialog->close(); m_dialog->deleteLater(); diff --git a/src/plugins/studiowelcome/qdsnewdialog.h b/src/plugins/studiowelcome/qdsnewdialog.h index 476750e5408..a4afa69e927 100644 --- a/src/plugins/studiowelcome/qdsnewdialog.h +++ b/src/plugins/studiowelcome/qdsnewdialog.h @@ -131,6 +131,8 @@ private: QString projectDescription() const { return m_qmlProjectDescription; } + void updateScreenSizes(); + private slots: void onDeletingWizard(); void onWizardCreated(QStandardItemModel *screenSizeModel, QStandardItemModel *styleModel); diff --git a/src/plugins/studiowelcome/screensizemodel.h b/src/plugins/studiowelcome/screensizemodel.h index 597811146e7..0bde90c2690 100644 --- a/src/plugins/studiowelcome/screensizemodel.h +++ b/src/plugins/studiowelcome/screensizemodel.h @@ -87,6 +87,12 @@ public: return {}; } + int appendItem(const QString &text) + { + m_backendModel->appendRow(new QStandardItem{text}); + return rowCount(QModelIndex{}) - 1; + } + QHash roleNames() const override { if (m_backendModel)