mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 20:55:10 +02:00
252 lines
7.6 KiB
QML
252 lines
7.6 KiB
QML
//
|
|
// NewModelDialog.qml
|
|
// qml/hifi
|
|
//
|
|
// Created by Seth Alves on 2017-2-10
|
|
// Copyright 2017 High Fidelity, Inc.
|
|
// Copyright 2020 Vircadia contributors
|
|
//
|
|
// 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: newModelDialog
|
|
// 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: 10
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.bottom: keyboard.top
|
|
|
|
Text {
|
|
id: text1
|
|
text: qsTr("Model URL")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
}
|
|
|
|
TextInput {
|
|
id: modelURL
|
|
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: {
|
|
newModelDialog.keyboardEnabled = false;
|
|
}
|
|
|
|
onTextChanged : {
|
|
if (modelURL.text.length === 0){
|
|
button1.enabled = false;
|
|
} else {
|
|
button1.enabled = true;
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
newModelDialog.keyboardEnabled = HMD.active
|
|
parent.focus = true;
|
|
parent.forceActiveFocus();
|
|
modelURL.cursorPosition = modelURL.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: textInputBox
|
|
color: "white"
|
|
anchors.fill: modelURL
|
|
opacity: 0.1
|
|
}
|
|
|
|
Row {
|
|
id: row1
|
|
height: 400
|
|
spacing: 30
|
|
anchors.top: modelURL.top
|
|
anchors.topMargin: 25
|
|
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: dynamic
|
|
text: qsTr("Dynamic")
|
|
}
|
|
|
|
Row {
|
|
id: row2
|
|
width: 200
|
|
height: 400
|
|
spacing: 20
|
|
|
|
Text {
|
|
id: text2
|
|
width: 160
|
|
x: dynamic.width / 2
|
|
color: "#ffffff"
|
|
text: qsTr("Models with automatic collisions set to 'Exact' cannot be dynamic.")
|
|
wrapMode: Text.WordWrap
|
|
font.pixelSize: 12
|
|
}
|
|
}
|
|
}
|
|
|
|
Column {
|
|
id: column3
|
|
height: 400
|
|
spacing: 10
|
|
|
|
Text {
|
|
id: text3
|
|
text: qsTr("Automatic Collisions")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
}
|
|
|
|
ComboBox {
|
|
id: collisionType
|
|
|
|
property int priorIndex: 0
|
|
property string staticMeshCollisionText: "Exact - All polygons"
|
|
property var collisionArray: ["No Collision",
|
|
"Basic - Whole model",
|
|
"Good - Sub-meshes",
|
|
staticMeshCollisionText,
|
|
"Box",
|
|
"Sphere"]
|
|
|
|
width: 200
|
|
z: 100
|
|
transformOrigin: Item.Center
|
|
model: collisionArray
|
|
|
|
onCurrentIndexChanged: {
|
|
if (collisionArray[currentIndex] === staticMeshCollisionText) {
|
|
|
|
if (dynamic.checked) {
|
|
currentIndex = priorIndex;
|
|
|
|
errorMessageBox("Models with Automatic Collisions set to \""
|
|
+ staticMeshCollisionText + "\" cannot be dynamic.");
|
|
//--EARLY EXIT--( Can't have a static mesh model that's dynamic )
|
|
return;
|
|
}
|
|
|
|
dynamic.enabled = false;
|
|
} else {
|
|
dynamic.enabled = true;
|
|
}
|
|
|
|
priorIndex = currentIndex;
|
|
}
|
|
}
|
|
|
|
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: {
|
|
newModelDialog.sendToScript({
|
|
method: "newModelDialogAdd",
|
|
params: {
|
|
url: modelURL.text,
|
|
dynamic: dynamic.checked,
|
|
collisionShapeIndex: collisionType.currentIndex,
|
|
grabbable: grabbable.checked
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
Button {
|
|
id: button2
|
|
z: -1
|
|
text: qsTr("Cancel")
|
|
onClicked: {
|
|
newModelDialog.sendToScript({method: "newModelDialogCancel"})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Keyboard {
|
|
id: keyboard
|
|
raised: parent.keyboardEnabled && parent.keyboardRaised
|
|
numeric: parent.punctuationMode
|
|
anchors {
|
|
bottom: parent.bottom
|
|
bottomMargin: 40
|
|
left: parent.left
|
|
right: parent.right
|
|
}
|
|
}
|
|
}
|