Revision control
++ // Copyright (C) 2022 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++
++ import QtQuick
++ import QtQuick.Layouts
++ import QtQuick.Controls
++ import QtQuick.Window
++ import QtQuick.Dialogs
++ import QtCore
++
++ CustomDialog {
++ id: root
++
++ property string defaultPath: "file:///" + effectManager.projectDirectory + "/export"
++ title: qsTr("Export Effect")
++ width: 540
++ height: 580
++ modal: true
++ focus: true
++ standardButtons: Dialog.Ok | Dialog.Cancel
++ closePolicy: Popup.NoAutoClose
++
++ onAboutToShow: {
++ root.initializeDialog();
++ }
++
++ function initialName() {
++ if (effectManager.exportFilename != "") {
++ return effectManager.exportFilename;
++ } else {
++ // Returns project name, making sure first letter is uppercase
++ var str = effectManager.projectName;
++ str = str.charAt(0).toUpperCase() + str.slice(1);
++ return str;
++ }
++ }
++
++ function initialPath() {
++ if (effectManager.exportDirectory != "")
++ return effectManager.stripFileFromURL(effectManager.exportDirectory);
++ else
++ return effectManager.stripFileFromURL(defaultPath);
++ }
++
++ function initializeDialog() {
++ nameTextEdit.text = initialName();
++ pathTextEdit.text = initialPath();
++ // Note: These must match with EffectManager ExportFlags
++ qmlComponentCheckBox.checked = (effectManager.exportFlags & 1);
++ qbsShadersCheckBox.checked = (effectManager.exportFlags & 2);
++ plainShadersCheckBox.checked = (effectManager.exportFlags & 4);
++ imagesCheckBox.checked = (effectManager.exportFlags & 8);
++ qrcCheckBox.checked = (effectManager.exportFlags & 16);
++ }
++
++ function exportEffect() {
++ var exportFlags = 0;
++ // Note: These must match with EffectManager ExportFlags
++ exportFlags += Number(qmlComponentCheckBox.checked) * 1;
++ exportFlags += Number(qbsShadersCheckBox.checked) * 2;
++ exportFlags += Number(plainShadersCheckBox.checked) * 4;
++ exportFlags += Number(imagesCheckBox.checked) * 8;
++ exportFlags += Number(qrcCheckBox.checked) * 16;
++ var qsbVersionIndex = qsbVersionSelector.currentIndex;
++ effectManager.exportEffect(pathTextEdit.text, nameTextEdit.text, exportFlags, qsbVersionIndex);
++ }
++
++ FolderDialog {
++ id: projectPathDialog
++ currentFolder: defaultPath
++ onAccepted: {
++ if (currentFolder) {
++ // Remove file start
++ var usedFolder = effectManager.stripFileFromURL(currentFolder.toString());
++ pathTextEdit.text = usedFolder;
++ }
++ }
++ }
++
++ GridLayout {
++ id: detailsArea
++ width: parent.width
++ columns: 3
++ columnSpacing: 20
++ Label {
++ text: qsTr("Name:")
++ font.bold: true
++ font.pixelSize: 14
++ color: mainView.foregroundColor2
++ }
++ CustomTextField {
++ id: nameTextEdit
++ Layout.columnSpan: 2
++ Layout.fillWidth: true
++ }
++ Label {
++ text: qsTr("Create in:")
++ font.bold: true
++ font.pixelSize: 14
++ color: mainView.foregroundColor2
++ }
++ CustomTextField {
++ id: pathTextEdit
++ Layout.fillWidth: true
++ }
++ Button {
++ Layout.preferredHeight: 40
++ text: qsTr("Browse");
++ onClicked: {
++ projectPathDialog.open();
++ }
++ }
++ }
++ Row {
++ id: qsbVersionArea
++ width: parent.width
++ anchors.top: detailsArea.bottom
++ anchors.topMargin: 20
++ spacing: 10
++ Label {
++ anchors.verticalCenter: parent.verticalCenter
++ text: qsTr("QSB version:")
++ font.bold: true
++ font.pixelSize: 14
++ color: mainView.foregroundColor2
++ }
++ ComboBox {
++ id: qsbVersionSelector
++ anchors.verticalCenter: parent.verticalCenter
++ width: 200
++ height: 40
++ currentIndex: 1
++ model: ["Latest", "Qt 6.5 compatibility", "Qt 6.4 compatibility"]
++ }
++ }
++ Column {
++ id: settingsArea
++ width: parent.width
++ anchors.top: qsbVersionArea.bottom
++ anchors.topMargin: 20
++ Label {
++ text: qsTr("Exported files:")
++ font.bold: true
++ font.pixelSize: 14
++ color: mainView.foregroundColor2
++ }
++ CheckBox {
++ id: qmlComponentCheckBox
++ text: "QML component"
++ checked: true
++ }
++ CheckBox {
++ id: qbsShadersCheckBox
++ text: "Binary shaders (qsb)"
++ checked: true
++ }
++ CheckBox {
++ id: plainShadersCheckBox
++ text: "Plain-text shaders"
++ checked: true
++ }
++ CheckBox {
++ id: imagesCheckBox
++ text: "Images"
++ checked: true
++ }
++ CheckBox {
++ id: qrcCheckBox
++ text: "Resource collection file (qrc)"
++ checked: true
++ }
++ }
++ onAccepted: {
++ root.exportEffect();
++ }
++ }