QmlDesigner: Select the property type while adding a column

Task-number: QDS-11004
Change-Id: Ie2b8cb715efc2d530b2ce8dec2d7111b7fc318cc
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Ali Kianian
2023-10-20 10:39:59 +03:00
parent a8ac61328b
commit 1204ce35b9
4 changed files with 36 additions and 13 deletions

View File

@@ -2,6 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
import QtQuick import QtQuick
import QtQuick.Layouts
import Qt.labs.platform as PlatformWidgets import Qt.labs.platform as PlatformWidgets
import HelperWidgets 2.0 as HelperWidgets import HelperWidgets 2.0 as HelperWidgets
import StudioControls 1.0 as StudioControls import StudioControls 1.0 as StudioControls
@@ -43,7 +44,7 @@ Item {
IconButton { IconButton {
icon: StudioTheme.Constants.addcolumnleft_medium icon: StudioTheme.Constants.addcolumnleft_medium
tooltip: qsTr("Add property left %1").arg(leftSideToolbar.topPadding) tooltip: qsTr("Add property left %1").arg(leftSideToolbar.topPadding)
enabled: root.model.selectedColumn > 0 enabled: root.model.selectedColumn > -1
onClicked: addColumnDialog.popUp(root.model.selectedColumn - 1) onClicked: addColumnDialog.popUp(root.model.selectedColumn - 1)
} }
@@ -189,12 +190,15 @@ Item {
function popUp(index) function popUp(index)
{ {
addColumnDialog.clickedIndex = index addColumnDialog.clickedIndex = index
columnName.text = ""
addedPropertyType.currentIndex = addedPropertyType.find("String")
addColumnDialog.open() addColumnDialog.open()
} }
function addColumnName() { function addColumnName() {
if (addColumnDialog.nameIsValid) { if (addColumnDialog.nameIsValid) {
root.model.addColumn(addColumnDialog.clickedIndex, columnName.text) root.model.addColumn(addColumnDialog.clickedIndex, columnName.text, addedPropertyType.currentText)
addColumnDialog.accept() addColumnDialog.accept()
} else { } else {
addColumnDialog.reject() addColumnDialog.reject()
@@ -204,8 +208,10 @@ Item {
contentItem: Column { contentItem: Column {
spacing: 2 spacing: 2
Row { GridLayout {
spacing: 10 rowSpacing: 10
columnSpacing: 10
columns: 2
Text { Text {
text: qsTr("Column name:") text: qsTr("Column name:")
@@ -228,12 +234,25 @@ Item {
&& !root.model.isPropertyAvailable(columnName.text)) && !root.model.isPropertyAvailable(columnName.text))
} }
} }
}
Text { Text {
text: qsTr("The collection already contains \"%1\"!").arg(columnName.text) text: qsTr("The collection already contains \"%1\"!").arg(columnName.text)
visible: columnName.text !== "" && !addColumnDialog.nameIsValid visible: columnName.text !== "" && !addColumnDialog.nameIsValid
color: "red" color: StudioTheme.Values.themeRedLight
Layout.columnSpan: 2
}
Text {
text: qsTr("Type:")
color: StudioTheme.Values.themeTextColor
}
StudioControls.ComboBox {
id: addedPropertyType
model: root.model.typesList()
actionIndicatorVisible: false
}
} }
Item { // spacer Item { // spacer

View File

@@ -94,6 +94,7 @@ StudioControls.Dialog {
readonly property bool changed: propertyType.initialType !== propertyType.currentText readonly property bool changed: propertyType.initialType !== propertyType.currentText
model: root.model.typesList() model: root.model.typesList()
actionIndicatorVisible: false
onInitialTypeChanged: { onInitialTypeChanged: {
let propertyIndex = propertyType.find(initialType) let propertyIndex = propertyType.find(initialType)

View File

@@ -45,7 +45,7 @@ public:
static DataType typeFromString(const QString &dataType) static DataType typeFromString(const QString &dataType)
{ {
static const QHash<QString, DataType> stringTypeHash = stringToTypeHash(); static const QHash<QString, DataType> stringTypeHash = stringToTypeHash();
return stringTypeHash.value(dataType); return stringTypeHash.value(dataType, DataType::Unknown);
} }
static QStringList typesStringList() static QStringList typesStringList()
@@ -263,7 +263,7 @@ bool CollectionDetailsModel::isPropertyAvailable(const QString &name)
return m_currentCollection.containsPropertyName(name); return m_currentCollection.containsPropertyName(name);
} }
bool CollectionDetailsModel::addColumn(int column, const QString &name) bool CollectionDetailsModel::addColumn(int column, const QString &name, const QString &propertyType)
{ {
if (m_currentCollection.containsPropertyName(name)) if (m_currentCollection.containsPropertyName(name))
return false; return false;
@@ -272,7 +272,10 @@ bool CollectionDetailsModel::addColumn(int column, const QString &name)
column = columnCount(); column = columnCount();
beginInsertColumns({}, column, column); beginInsertColumns({}, column, column);
m_currentCollection.insertColumn(name, column); m_currentCollection.insertColumn(name,
column,
{},
CollectionDataTypeHelper::typeFromString(propertyType));
endInsertColumns(); endInsertColumns();
return m_currentCollection.containsPropertyName(name); return m_currentCollection.containsPropertyName(name);
} }

View File

@@ -52,7 +52,7 @@ public:
Q_INVOKABLE QString propertyType(int column) const; Q_INVOKABLE QString propertyType(int column) const;
Q_INVOKABLE bool isPropertyAvailable(const QString &name); Q_INVOKABLE bool isPropertyAvailable(const QString &name);
Q_INVOKABLE bool addColumn(int column, const QString &name); Q_INVOKABLE bool addColumn(int column, const QString &name, const QString &propertyType = {});
Q_INVOKABLE bool selectColumn(int section); Q_INVOKABLE bool selectColumn(int section);
Q_INVOKABLE bool renameColumn(int section, const QString &newValue); Q_INVOKABLE bool renameColumn(int section, const QString &newValue);
Q_INVOKABLE bool setPropertyType(int column, const QString &newValue, bool force = false); Q_INVOKABLE bool setPropertyType(int column, const QString &newValue, bool force = false);