overte-lubosz/scripts/system/create/qml/NewPolyVoxDialog.qml

560 lines
18 KiB
QML

//
// NewPolyVoxDialog.qml
// Created by dr Karol Suprynowicz on 2022.05.17.
// based on NewModelDialog.qml
// qml/hifi
//
// Copyright 2017 High Fidelity, Inc.
// Copyright 2020 Vircadia contributors
// Copyright 2022 Overte e.V.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
import QtQuick 2.5
import QtQuick.Dialogs 1.2 as OriginalDialogs
import stylesUit 1.0
import controlsUit 1.0
import hifi.dialogs 1.0
Rectangle {
id: newPolyVoxDialog
// width: parent.width
// height: parent.height
HifiConstants { id: hifi }
color: hifi.colors.baseGray;
signal sendToScript(var message);
property bool keyboardEnabled: false
property bool keyboardRaised: false
property bool punctuationMode: false
property bool keyboardRasied: false
function errorMessageBox(message) {
try {
return desktop.messageBox({
icon: hifi.icons.warning,
defaultButton: OriginalDialogs.StandardButton.Ok,
title: "Error",
text: message
});
} catch(e) {
Window.alert(message);
}
}
Item {
id: column1
anchors.rightMargin: 10
anchors.leftMargin: 10
anchors.bottomMargin: 10
anchors.topMargin: 0
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: keyboard.top
ComboBox {
id: texturePreset
currentIndex: 0
property var texturePresetArray: ["Material presets",
"Grass + ground",
"Bricks",
"Stone",
"Concrete",
"Rock"]
width: 200
z: 100
transformOrigin: Item.Center
model: texturePresetArray
onCurrentIndexChanged: {
switch (currentIndex) {
// Clear texture entries
case 0:
xTextureURL.text = "";
yTextureURL.text = "";
zTextureURL.text = "";
break;
// Grass + ground
case 1:
xTextureURL.text = "qrc:///serverless/Textures/ground_5-2K/2K-ground_5-diffuse.jpg";
yTextureURL.text = "qrc:///serverless/Textures/ground_grass_gen_05.png";
zTextureURL.text = "qrc:///serverless/Textures/ground_5-2K/2K-ground_5-diffuse.jpg";
break;
// Bricks
case 2:
xTextureURL.text = "qrc:///serverless/Textures/2K-wall_stone_2-diffuse_l.jpg";
yTextureURL.text = "qrc:///serverless/Textures/2K-stone_floor_3-diffuse_l.jpg";
zTextureURL.text = "qrc:///serverless/Textures/2K-wall_stone_2-diffuse_l.jpg";
break;
// Stone
case 3:
xTextureURL.text = "qrc:///serverless/Textures/wall_l.png";
yTextureURL.text = "qrc:///serverless/Textures/floor_l.png";
zTextureURL.text = "qrc:///serverless/Textures/wall_l.png";
break;
// Concrete
case 4:
xTextureURL.text = "qrc:///serverless/Textures/concrete_12-2K/2K-concrete_12-diffuse.jpg";
yTextureURL.text = "qrc:///serverless/Textures/concrete_12-2K/2K-concrete_12-diffuse.jpg";
zTextureURL.text = "qrc:///serverless/Textures/concrete_12-2K/2K-concrete_12-diffuse.jpg";
break;
// Rock
case 5:
xTextureURL.text = "qrc:///serverless/Textures/Rock026_2K-JPG/Rock026_2K_Color.jpg";
yTextureURL.text = "qrc:///serverless/Textures/Rock026_2K-JPG/Rock026_2K_Color.jpg";
zTextureURL.text = "qrc:///serverless/Textures/Rock026_2K-JPG/Rock026_2K_Color.jpg";
break;
}
}
}
Text {
id: text1
anchors.top: texturePreset.bottom
anchors.topMargin: 5
text: qsTr("X Texture URL")
color: "#ffffff"
font.pixelSize: 12
}
TextInput {
id: xTextureURL
height: 20
text: qsTr("")
color: "white"
anchors.top: text1.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
anchors.right: parent.right
anchors.rightMargin: 0
font.pixelSize: 12
onAccepted: {
newPolyVoxDialog.keyboardEnabled = false;
}
onTextChanged : {
if (xTextureURL.text.length === 0){
button1.enabled = false;
} else {
button1.enabled = true;
}
}
MouseArea {
anchors.fill: parent
onClicked: {
newPolyVoxDialog.keyboardEnabled = HMD.active
parent.focus = true;
parent.forceActiveFocus();
xTextureURL.cursorPosition = xTextureURL.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
}
}
}
Rectangle {
id: textInputBox1
color: "white"
anchors.fill: xTextureURL
opacity: 0.1
}
Text {
id: text2
text: qsTr("Y Texture URL")
color: "#ffffff"
font.pixelSize: 12
anchors.top: textInputBox1.bottom
anchors.topMargin: 5
}
TextInput {
id: yTextureURL
height: 20
text: qsTr("")
color: "white"
anchors.top: text2.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
anchors.right: parent.right
anchors.rightMargin: 0
font.pixelSize: 12
onAccepted: {
newPolyVoxDialog.keyboardEnabled = false;
}
onTextChanged : {
if (yTextureURL.text.length === 0){
button1.enabled = false;
} else {
button1.enabled = true;
}
}
MouseArea {
anchors.fill: parent
onClicked: {
newPolyVoxDialog.keyboardEnabled = HMD.active
parent.focus = true;
parent.forceActiveFocus();
yTextureURL.cursorPosition = yTextureURL.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
}
}
}
Rectangle {
id: textInputBox2
color: "white"
anchors.fill: yTextureURL
opacity: 0.1
}
Text {
id: text3
text: qsTr("Z Texture URL")
color: "#ffffff"
font.pixelSize: 12
anchors.top: textInputBox2.bottom
anchors.topMargin: 5
}
TextInput {
id: zTextureURL
height: 20
text: qsTr("")
color: "white"
anchors.top: text3.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
anchors.right: parent.right
anchors.rightMargin: 0
font.pixelSize: 12
onAccepted: {
newPolyVoxDialog.keyboardEnabled = false;
}
onTextChanged : {
if (zTextureURL.text.length === 0){
button1.enabled = false;
} else {
button1.enabled = true;
}
}
MouseArea {
anchors.fill: parent
onClicked: {
newPolyVoxDialog.keyboardEnabled = HMD.active
parent.focus = true;
parent.forceActiveFocus();
zTextureURL.cursorPosition = zTextureURL.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
}
}
}
Rectangle {
id: textInputBox3
color: "white"
anchors.fill: zTextureURL
opacity: 0.1
}
Text {
id: textVolumeSize
text: qsTr("Volume Size (number of voxels along the edge)")
color: "#ffffff"
font.pixelSize: 12
anchors.top: zTextureURL.bottom
anchors.topMargin: 5
}
Row {
id: rowVolumeSize
height: 50
spacing: 30
anchors.top: textVolumeSize.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
anchors.right: parent.right
anchors.rightMargin: 0
Text {
id: textVolumeSizeX
text: qsTr("X")
color: "#ffffff"
font.pixelSize: 12
}
TextInput {
id: volumeSizeX
height: 20
width: 50
anchors.left: textVolumeSizeX.right
anchors.leftMargin: 3
text: qsTr("20")
color: "white"
font.pixelSize: 12
validator: IntValidator{bottom: 8; top: 64;}
onAccepted: {
newPolyVoxDialog.keyboardEnabled = false;
}
MouseArea {
anchors.fill: parent
onClicked: {
newPolyVoxDialog.keyboardEnabled = HMD.active
parent.focus = true;
parent.forceActiveFocus();
volumeSizeX.cursorPosition = volumeSizeX.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
}
}
}
Rectangle {
id: textInputBoxVolumeSizeX
color: "white"
anchors.fill: volumeSizeX
opacity: 0.1
}
Text {
id: textVolumeSizeY
text: qsTr("Y")
color: "#ffffff"
font.pixelSize: 12
anchors.left: volumeSizeX.right
anchors.leftMargin: 5
}
TextInput {
id: volumeSizeY
height: 20
width: 50
anchors.left: textVolumeSizeY.right
anchors.leftMargin: 3
text: qsTr("20")
color: "white"
font.pixelSize: 12
validator: IntValidator{bottom: 8; top: 64;}
onAccepted: {
newPolyVoxDialog.keyboardEnabled = false;
}
MouseArea {
anchors.fill: parent
onClicked: {
newPolyVoxDialog.keyboardEnabled = HMD.active
parent.focus = true;
parent.forceActiveFocus();
volumeSizeY.cursorPosition = volumeSizeY.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
}
}
}
Rectangle {
id: textInputBoxVolumeSizeY
color: "white"
anchors.fill: volumeSizeY
opacity: 0.1
}
Text {
id: textVolumeSizeZ
text: qsTr("X")
color: "#ffffff"
font.pixelSize: 12
anchors.left: volumeSizeY.right
anchors.leftMargin: 5
}
TextInput {
id: volumeSizeZ
height: 20
width: 50
anchors.left: textVolumeSizeZ.right
anchors.leftMargin: 3
text: qsTr("20")
color: "white"
font.pixelSize: 12
validator: IntValidator{bottom: 8; top: 64;}
onAccepted: {
newPolyVoxDialog.keyboardEnabled = false;
}
MouseArea {
anchors.fill: parent
onClicked: {
newPolyVoxDialog.keyboardEnabled = HMD.active
parent.focus = true;
parent.forceActiveFocus();
volumeSizeZ.cursorPosition = volumeSizeZ.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
}
}
}
Rectangle {
id: textInputBoxVolumeSizeZ
color: "white"
anchors.fill: volumeSizeZ
opacity: 0.1
}
}
Row {
id: row1
height: 400
spacing: 30
anchors.top: rowVolumeSize.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
anchors.right: parent.right
anchors.rightMargin: 0
Column {
id: column2
width: 200
height: 600
spacing: 10
CheckBox {
id: grabbable
text: qsTr("Grabbable")
}
CheckBox {
id: collisions
text: qsTr("Collisions")
}
Row {
id: row2
width: 200
height: 400
spacing: 20
}
}
Column {
id: column3
height: 400
spacing: 10
Text {
id: text4
text: qsTr("Voxel type")
color: "#ffffff"
font.pixelSize: 12
}
ComboBox {
id: surfaceStyle
currentIndex: 3
property var surfaceStyleArray: ["Marching Cubes",
"Cubic",
"Edged Cubic",
"Edged Marching Cubes"]
width: 200
z: 100
transformOrigin: Item.Center
model: surfaceStyleArray
}
Text {
id: textInitialShape
text: qsTr("Initial shape")
color: "#ffffff"
font.pixelSize: 12
}
ComboBox {
id: initialShape
currentIndex: 0
property var initialShapeArray: ["Box",
"Plane, 1/4 full",
"Plane, 3/4 full",
"Single voxel",
]
width: 200
z: 100
transformOrigin: Item.Center
model: initialShapeArray
}
Row {
id: row3
width: 200
height: 400
spacing: 5
anchors.horizontalCenter: column3.horizontalCenter
anchors.horizontalCenterOffset: -20
Button {
id: button1
text: qsTr("Create")
z: -1
enabled: false
onClicked: {
newPolyVoxDialog.sendToScript({
method: "newPolyVoxDialogAdd",
params: {
xTextureURL: xTextureURL.text,
yTextureURL: yTextureURL.text,
zTextureURL: zTextureURL.text,
volumeSizeX: volumeSizeX.text,
volumeSizeY: volumeSizeY.text,
volumeSizeZ: volumeSizeZ.text,
surfaceStyleIndex: surfaceStyle.currentIndex,
initialShapeIndex: initialShape.currentIndex,
grabbable: grabbable.checked,
collisions: collisions.checked,
}
});
}
}
Button {
id: button2
z: -1
text: qsTr("Cancel")
onClicked: {
newPolyVoxDialog.sendToScript({method: "newPolyVoxDialogCancel"})
}
}
}
}
}
}
Keyboard {
id: keyboard
raised: parent.keyboardEnabled && parent.keyboardRaised
numeric: parent.punctuationMode
anchors {
bottom: parent.bottom
bottomMargin: 40
left: parent.left
right: parent.right
}
}
}