forked from qt-creator/qt-creator
A header component is defined in PropertyEditorPane. This header can be docked to the top. A header is defined for MaterialEditorPane Task-number: QDS-12851 Change-Id: Ie5393f917803241da1f286bd05c226fd055b1174 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
232 lines
7.1 KiB
QML
232 lines
7.1 KiB
QML
// 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.Controls
|
|
import QtQuick.Layouts
|
|
import HelperWidgets as HelperWidgets
|
|
import StudioControls as StudioControls
|
|
import StudioTheme as StudioTheme
|
|
|
|
Column {
|
|
id: root
|
|
|
|
property string previewEnv
|
|
property string previewModel
|
|
|
|
property real __horizontalSpacing: 5
|
|
|
|
property StudioTheme.ControlStyle buttonStyle: StudioTheme.ViewBarButtonStyle {
|
|
//This is how you can override stuff from the control styles
|
|
controlSize: Qt.size(previewOptions.width, previewOptions.width)
|
|
baseIconFontSize: StudioTheme.Values.bigIconFontSize
|
|
}
|
|
|
|
function refreshPreview()
|
|
{
|
|
materialPreview.source = ""
|
|
materialPreview.source = "image://materialEditor/preview"
|
|
}
|
|
|
|
// Called from C++ to close context menu on focus out
|
|
function closeContextMenu()
|
|
{
|
|
modelMenu.close()
|
|
envMenu.close()
|
|
}
|
|
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
|
|
Item { width: 1; height: 5 } // spacer
|
|
|
|
StudioControls.Menu {
|
|
id: modelMenu
|
|
closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
|
|
|
|
ListModel {
|
|
id: modelMenuModel
|
|
ListElement {
|
|
modelName: qsTr("Cone")
|
|
modelStr: "#Cone"
|
|
}
|
|
ListElement {
|
|
modelName: qsTr("Cube")
|
|
modelStr: "#Cube"
|
|
}
|
|
ListElement {
|
|
modelName: qsTr("Cylinder")
|
|
modelStr: "#Cylinder"
|
|
}
|
|
ListElement {
|
|
modelName: qsTr("Sphere")
|
|
modelStr: "#Sphere"
|
|
}
|
|
}
|
|
|
|
Repeater {
|
|
model: modelMenuModel
|
|
StudioControls.MenuItemWithIcon {
|
|
text: modelName
|
|
onClicked: {
|
|
// Force property change notifications to keep check mark when reselected
|
|
root.previewModel = ""
|
|
root.previewModel = modelStr
|
|
}
|
|
checkable: true
|
|
checked: root.previewModel === modelStr
|
|
}
|
|
}
|
|
}
|
|
|
|
StudioControls.Menu {
|
|
id: envMenu
|
|
closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
|
|
|
|
ListModel {
|
|
id: envMenuModel
|
|
ListElement {
|
|
envName: qsTr("Basic")
|
|
envStr: "Basic"
|
|
}
|
|
ListElement {
|
|
envName: qsTr("Color")
|
|
envStr: "Color"
|
|
}
|
|
ListElement {
|
|
envName: qsTr("Studio")
|
|
envStr: "SkyBox=preview_studio"
|
|
}
|
|
ListElement {
|
|
envName: qsTr("Landscape")
|
|
envStr: "SkyBox=preview_landscape"
|
|
}
|
|
}
|
|
|
|
Repeater {
|
|
model: envMenuModel
|
|
StudioControls.MenuItemWithIcon {
|
|
text: envName
|
|
onClicked: {
|
|
// Force property change notifications to keep check mark when reselected
|
|
root.previewEnv = ""
|
|
root.previewEnv = envStr
|
|
}
|
|
checkable: true
|
|
checked: root.previewEnv === envStr
|
|
}
|
|
}
|
|
}
|
|
|
|
Item {
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
width: parent.width
|
|
height: previewRect.height
|
|
|
|
StudioControls.AbstractButton {
|
|
id: pinButton
|
|
|
|
x: root.__horizontalSpacing
|
|
|
|
style: root.buttonStyle
|
|
iconSize: StudioTheme.Values.bigFont
|
|
buttonIcon: pinButton.checked ? StudioTheme.Constants.pin : StudioTheme.Constants.unpin
|
|
checkable: true
|
|
checked: itemPane.headerDocked
|
|
onCheckedChanged: itemPane.headerDocked = pinButton.checked
|
|
}
|
|
|
|
Rectangle {
|
|
id: previewRect
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
width: 152
|
|
height: 152
|
|
color: "#000000"
|
|
|
|
Image {
|
|
id: materialPreview
|
|
width: 150
|
|
height: 150
|
|
anchors.centerIn: parent
|
|
source: "image://materialEditor/preview"
|
|
cache: false
|
|
smooth: true
|
|
}
|
|
}
|
|
|
|
Item {
|
|
id: previewOptions
|
|
width: 40
|
|
height: previewRect.height
|
|
anchors.top: previewRect.top
|
|
anchors.left: previewRect.right
|
|
anchors.leftMargin: root.__horizontalSpacing
|
|
|
|
Column {
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
HelperWidgets.AbstractButton {
|
|
style: root.buttonStyle
|
|
buttonIcon: StudioTheme.Constants.textures_medium
|
|
tooltip: qsTr("Select preview environment.")
|
|
onClicked: envMenu.popup()
|
|
}
|
|
|
|
HelperWidgets.AbstractButton {
|
|
style: root.buttonStyle
|
|
buttonIcon: StudioTheme.Constants.cube_medium
|
|
tooltip: qsTr("Select preview model.")
|
|
onClicked: modelMenu.popup()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
HelperWidgets.Section {
|
|
// Section with hidden header is used so properties are aligned with the other sections' properties
|
|
hideHeader: true
|
|
width: parent.width
|
|
collapsible: false
|
|
|
|
HelperWidgets.SectionLayout {
|
|
HelperWidgets.PropertyLabel { text: qsTr("Name") }
|
|
|
|
HelperWidgets.SecondColumnLayout {
|
|
HelperWidgets.Spacer { implicitWidth: StudioTheme.Values.actionIndicatorWidth }
|
|
|
|
HelperWidgets.LineEdit {
|
|
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
|
width: StudioTheme.Values.singleControlColumnWidth
|
|
backendValue: backendValues.objectName
|
|
placeholderText: qsTr("Material name")
|
|
|
|
text: backendValues.id.value
|
|
showTranslateCheckBox: false
|
|
showExtendedFunctionButton: false
|
|
|
|
// allow only alphanumeric characters, underscores, no space at start, and 1 space between words
|
|
validator: HelperWidgets.RegExpValidator { regExp: /^(\w+\s)*\w+$/ }
|
|
}
|
|
|
|
HelperWidgets.ExpandingSpacer {}
|
|
}
|
|
|
|
HelperWidgets.PropertyLabel { text: qsTr("Type") }
|
|
|
|
HelperWidgets.SecondColumnLayout {
|
|
HelperWidgets.Spacer { implicitWidth: StudioTheme.Values.actionIndicatorWidth }
|
|
|
|
HelperWidgets.ComboBox {
|
|
currentIndex: possibleTypeIndex
|
|
model: possibleTypes
|
|
showExtendedFunctionButton: false
|
|
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
|
enabled: possibleTypes.length > 1
|
|
|
|
onActivated: changeTypeName(currentValue)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|