// Copyright (C) 2023 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.Window import QtQuick.Controls import QtQuick.Layouts import QtQuick3D.MaterialEditor import QtQuick3D SplitView { id: editorView orientation: Qt.Vertical property alias vertexEditor: vertEdit property alias fragmentEditor: fragEdit property alias outputTextItem: outputTextItem property alias outputView: outputView property alias vertexTabText: vertexTabText.text property alias fragmentTabText: fragTabtext.text property alias infoStack: infoStack property alias tabBarInfoView: tabBarInfoView property alias tabButtonShaderOutput: tabButtonShaderOutput property alias uniformModel: uniformManagerPane.uniformModel required property MaterialAdapter materialAdapter required property InstanceListEntry instanceEntry required property Model targetModel ColumnLayout { SplitView.preferredHeight: parent.height * .8 TabBar { id: tabBarEditors Layout.fillWidth: true readonly property string defVertText: qsTr("Vertex") readonly property string defFragText: qsTr("Fragment") TabButton { id: vertexTabText onTextChanged: { if (text === "") text = tabBarEditors.defVertText } } TabButton { id: fragTabtext onTextChanged: { if (text === "") text = tabBarEditors.defFragText } } TabButton { id: matPropTabText text: qsTr("Material Properties") } TabButton { id: instPropTabText text: qsTr("Instancing Properties") } } // Editors StackLayout { id: editorStack currentIndex: tabBarEditors.currentIndex Layout.fillWidth: true ShaderEditor { id: vertEdit Layout.fillHeight: true Layout.fillWidth: true } ShaderEditor { id: fragEdit Layout.fillHeight: true Layout.fillWidth: true } MaterialPropertiesPane { id: matPropPane targetMaterial: editorView.materialAdapter Layout.fillHeight: true Layout.fillWidth: true } InstancingPropertiesPane { id: instPropPane instanceEntry: editorView.instanceEntry targetModel: editorView.targetModel Layout.fillHeight: true Layout.fillWidth: true } } } ColumnLayout { spacing: 0 TabBar { id: tabBarInfoView Layout.fillWidth: true TabButton { id: tabButtonUniforms text: qsTr("Uniforms") } TabButton { id: tabButtonShaderOutput text: qsTr("Shader Output") } } // Uniform, compile output etc. StackLayout { id: infoStack currentIndex: tabBarInfoView.currentIndex // Layout.preferredHeight: parent.height * .2 Layout.fillWidth: true UniformManagerPane { id: uniformManagerPane materialAdapter: editorView.materialAdapter Layout.fillHeight: true Layout.fillWidth: true } Rectangle { id: outputView Layout.fillHeight: true Layout.fillWidth: true color: palette.base ScrollView { anchors.fill: parent ScrollBar.horizontal.policy: ScrollBar.AlwaysOff ScrollBar.vertical.policy: ScrollBar.AlwaysOn TextArea { id: outputTextItem width: outputView.width padding: 2 color: palette.text wrapMode: Text.WordWrap readOnly: true text: " " } } Button { anchors.right: parent.right anchors.rightMargin: 25 anchors.bottom: parent.bottom anchors.bottomMargin: 5 text: qsTr("Clear") onClicked: { outputTextItem.text = ""; } } } } } }