// 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
import QQEMLib 1.0
CustomDialog {
id: root
function setQsbFile(qsbFile) {
qsbInspectorHelper.loadQsb(qsbFile);
}
title: qsTr("QSB Inspector")
width: 800
height: 680
modal: true
focus: true
standardButtons: Dialog.Close
closePolicy: Popup.NoAutoClose
QsbInspectorHelper {
id: qsbInspectorHelper
}
FileDialog {
id: qsbFileDialog
title: "Open an QSB File"
nameFilters: ["Qt Shader Baker File (*.qsb)"]
onAccepted: {
if (currentFile)
qsbInspectorHelper.loadQsb(currentFile);
}
}
GridLayout {
id: detailsArea
width: parent.width
columns: 4
columnSpacing: 10
rowSpacing: 0
Text {
text: qsTr("FILE:")
font.bold: true
font.pixelSize: 14
color: mainView.foregroundColor2
}
Text {
id: fileTextEdit
Layout.fillWidth: true
text: qsbInspectorHelper.shaderData.currentFile
font.pixelSize: 16
color: mainView.foregroundColor1
elide: Text.ElideLeft
MouseArea {
id: fileMouseArea
anchors.fill: parent
hoverEnabled: true
}
ToolTip {
parent: fileTextEdit
visible: fileMouseArea.containsMouse && text
delay: 1000
text: fileTextEdit.text
}
}
Button {
Layout.preferredHeight: 40
text: qsTr("Browse");
onClicked: {
if (qsbInspectorHelper.shaderData.currentFile !== "") {
qsbFileDialog.currentFolder = effectManager.getDirectory(qsbInspectorHelper.shaderData.currentFile);
qsbFileDialog.currentFile = effectManager.addFileToURL(qsbInspectorHelper.shaderData.currentFile);
}
qsbFileDialog.open();
}
}
ComboBox {
Layout.preferredWidth: 160
Layout.preferredHeight: 40
textRole: "name"
valueRole: "sourceIndex"
enabled: count > 0
model: qsbInspectorHelper.sourceSelectorModel
onCurrentValueChanged: {
qsbInspectorHelper.currentSourceIndex = currentValue;
}
}
}
Item {
id: codeArea
width: parent.width
anchors.top: detailsArea.bottom
anchors.bottom: parent.bottom
CodeEditor {
id: shaderSourceEdit
anchors.fill: parent
showLineNumbers: true
editable: false
contentType: 0
text: qsbInspectorHelper.currentSourceCode
visible: text != ""
}
Rectangle {
anchors.fill: shaderSourceEdit
color: "#40000000"
border.width: 1
border.color: mainView.foregroundColor1
z: -1
visible: shaderSourceEdit.visible
}
Column {
id: infoTexts
width: parent.width
visible: !shaderSourceEdit.visible && qsbInspectorHelper.shaderData.currentFile !== ""
// Returns more informative QSB version text
function qsbToQtVersion(qsbVersion) {
if (qsbVersion === 5) {
return qsbVersion + " (Qt 6.0 - 6.3)";
} else if (qsbVersion === 6) {
return qsbVersion + " (Qt 6.4)";
} else if (qsbVersion === 8) {
return qsbVersion + " (Qt 6.5 or newer)";
}
return qsbVersion;
}
Text {
font.pixelSize: 14
color: mainView.foregroundColor2
text: "QSB VERSION: " + infoTexts.qsbToQtVersion(qsbInspectorHelper.shaderData.qsbVersion)
}
Text {
font.pixelSize: 14
color: mainView.foregroundColor2
text: "TYPE: " + qsbInspectorHelper.shaderData.stage
}
Text {
font.pixelSize: 14
color: mainView.foregroundColor2
text: "SHADERS: " + qsbInspectorHelper.shaderData.shaderCount
}
Text {
font.pixelSize: 14
color: mainView.foregroundColor2
text: "SIZE: " + (qsbInspectorHelper.shaderData.size / 1000).toFixed(1) + " kb"
}
}
Item {
width: parent.width
anchors.top: infoTexts.bottom
anchors.topMargin: 10
anchors.bottom: parent.bottom
visible: infoTexts.visible && qsbInspectorHelper.shaderData.reflectionInfo !== ""
Text {
id: reflectionInfoText
font.pixelSize: 14
color: mainView.foregroundColor2
text: "REFLECTION INFO:"
}
CodeEditor {
id: reflectionInfoTextEdit
width: parent.width
anchors.top: reflectionInfoText.bottom
anchors.topMargin: 8
anchors.bottom: parent.bottom
showLineNumbers: false
editable: false
contentType: 0
text: qsbInspectorHelper.shaderData.reflectionInfo
}
Rectangle {
anchors.fill: reflectionInfoTextEdit
color: "#40000000"
border.width: 1
border.color: mainView.foregroundColor1
z: -1
}
}
}
}