diff options
Diffstat (limited to 'share/qtcreator/qmldesigner/assetsLibraryQmlSources/NewEffectDialog.qml')
-rw-r--r-- | share/qtcreator/qmldesigner/assetsLibraryQmlSources/NewEffectDialog.qml | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/share/qtcreator/qmldesigner/assetsLibraryQmlSources/NewEffectDialog.qml b/share/qtcreator/qmldesigner/assetsLibraryQmlSources/NewEffectDialog.qml new file mode 100644 index 0000000000..a5a1235587 --- /dev/null +++ b/share/qtcreator/qmldesigner/assetsLibraryQmlSources/NewEffectDialog.qml @@ -0,0 +1,120 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Controls +import HelperWidgets as HelperWidgets +import StudioControls as StudioControls +import StudioTheme as StudioTheme +import AssetsLibraryBackend + +Dialog { + id: root + + title: qsTr("Create New Effect") + anchors.centerIn: parent + closePolicy: Popup.CloseOnEscape + modal: true + + required property string dirPath + readonly property int __maxPath: 32 + + property var rootView: AssetsLibraryBackend.rootView + + ErrorDialog { + id: creationFailedDialog + title: qsTr("Could not create effect") + message: qsTr("An error occurred while trying to create the effect.") + } + + contentItem: Column { + spacing: 2 + + Row { + Text { + text: qsTr("Effect name: ") + anchors.verticalCenter: parent.verticalCenter + color: StudioTheme.Values.themeTextColor + } + + StudioControls.TextField { + id: effectName + + actionIndicator.visible: false + translationIndicator.visible: false + + Keys.onEnterPressed: btnCreate.onClicked() + Keys.onReturnPressed: btnCreate.onClicked() + Keys.onEscapePressed: root.reject() + + onTextChanged: { + let validator = /^[A-Z]\w{2,}[A-Za-z0-9_]*$/ + txtNameValidatorMsg.visible = text.length > 0 && !validator.test(text) + btnCreate.enabled = !txtNameValidatorMsg.visible + } + } + } + + Text { + text: qsTr("Effect name cannot be empty.") + color: "#ff0000" + anchors.right: parent.right + visible: effectName.text === "" + } + + Text { + text: qsTr("Effect path is too long.") + color: "#ff0000" + anchors.right: parent.right + visible: effectName.text.length > root.__maxPath + } + + Text { + id: txtNameValidatorMsg + text: qsTr('The name must start with a capital letter, ' + + 'contain at least three characters, ' + + 'and cannot have any special characters.') + color: "#ff0000" + anchors.right: parent.right + anchors.left: parent.left + wrapMode: "WordWrap" + } + + Item { // spacer + width: 1 + height: 20 + } + + Row { + anchors.right: parent.right + + HelperWidgets.Button { + id: btnCreate + + text: qsTr("Create") + enabled: effectName.text !== "" + && effectName.length >=3 + && effectName.text.length <= root.__maxPath + onClicked: { + const path = AssetsLibraryBackend.rootView.getUniqueEffectPath(root.dirPath, effectName.text) + if (AssetsLibraryBackend.rootView.createNewEffect(path)) + root.accept() + else + creationFailedDialog.open() + } + } + + HelperWidgets.Button { + text: qsTr("Cancel") + onClicked: root.reject() + } + } + } + + onOpened: { + const path = AssetsLibraryBackend.rootView.getUniqueEffectPath(root.dirPath, "Effect01") + effectName.text = path.split('/').pop().replace(".qep", '') + effectName.selectAll() + effectName.forceActiveFocus() + } +} |