Added MyTextField and overhauled Playspace page.

This commit is contained in:
2016-12-13 20:28:57 +01:00
parent 7fafebcd47
commit 7949ad4f43
5 changed files with 227 additions and 72 deletions
+37
View File
@@ -0,0 +1,37 @@
import QtQuick 2.7
import QtQuick.Controls 2.0
import matzman666.advsettings 1.0
TextField {
property int keyBoardUID: 0
id: myTextField
color: "#cccccc"
text: ""
font.pointSize: 20
background: Rectangle {
color: parent.activeFocus ? "#2c435d" : "#1b2939"
border.color: "#cccccc"
border.width: 2
}
onEditingFinished: {
if (OverlayController.desktopMode) {
myTextField.onInputEvent(text)
}
}
onActiveFocusChanged: {
if (activeFocus && !OverlayController.desktopMode) {
OverlayController.showKeyboard(text, keyBoardUID)
}
}
function onInputEvent(input) {
text = input
}
Connections {
target: OverlayController
onKeyBoardInputSignal: {
if (userValue == keyBoardUID) {
myTextField.onInputEvent(input)
}
}
}
}
+95 -39
View File
@@ -61,15 +61,25 @@ MyStackViewPage {
onClicked: {
MoveCenterTabController.modOffsetX(-0.5)
}
KeyNavigation.down: playSpaceMoveXPlusButton
focus : true
}
MyText {
MyTextField {
id: playSpaceMoveXText
text: "0.00"
keyBoardUID: 101
Layout.preferredWidth: 100
Layout.leftMargin: 10
Layout.rightMargin: 10
horizontalAlignment: Text.AlignHCenter
text: "0.0"
Layout.preferredWidth: 120
function onInputEvent(input) {
var val = parseFloat(input)
if (!isNaN(val)) {
MoveCenterTabController.offsetX = val.toFixed(2)
text = MoveCenterTabController.offsetX.toFixed(2)
} else {
text = MoveCenterTabController.offsetX.toFixed(2)
}
}
}
MyPushButton2 {
@@ -79,7 +89,6 @@ MyStackViewPage {
onClicked: {
MoveCenterTabController.modOffsetX(0.5)
}
KeyNavigation.up: playSpaceMoveXMinusButton
}
MyText {
@@ -95,11 +104,23 @@ MyStackViewPage {
}
}
MyText {
MyTextField {
id: playSpaceMoveYText
text: "0.00"
keyBoardUID: 102
Layout.preferredWidth: 100
Layout.leftMargin: 10
Layout.rightMargin: 10
horizontalAlignment: Text.AlignHCenter
text: "0.0"
Layout.preferredWidth: 120
function onInputEvent(input) {
var val = parseFloat(input)
if (!isNaN(val)) {
MoveCenterTabController.offsetY = val.toFixed(2)
text = MoveCenterTabController.offsetY.toFixed(2)
} else {
text = MoveCenterTabController.offsetY.toFixed(2)
}
}
}
MyPushButton2 {
@@ -123,11 +144,23 @@ MyStackViewPage {
}
}
MyText {
MyTextField {
id: playSpaceMoveZText
text: "0.00"
keyBoardUID: 103
Layout.preferredWidth: 100
Layout.leftMargin: 10
Layout.rightMargin: 10
horizontalAlignment: Text.AlignHCenter
text: "0.0"
Layout.preferredWidth: 120
function onInputEvent(input) {
var val = parseFloat(input)
if (!isNaN(val)) {
MoveCenterTabController.offsetZ = val.toFixed(2)
text = MoveCenterTabController.offsetZ.toFixed(2)
} else {
text = MoveCenterTabController.offsetZ.toFixed(2)
}
}
}
MyPushButton2 {
@@ -165,22 +198,24 @@ MyStackViewPage {
}
ColumnLayout {
RowLayout {
MyPushButton2 {
id: playSpaceRotationMinusButton
Layout.preferredWidth: 40
text: "-"
onClicked: {
playspaceRotationSlider.value -= 45
var val = (MoveCenterTabController.rotation - 45) % 360
if (val < 0) {
val = 360 + val;
}
MoveCenterTabController.rotation = val
}
}
MySlider {
id: playspaceRotationSlider
from: -360
to: 360
from: 0
to: 359
stepSize: 1
value: 0
Layout.fillWidth: true
@@ -188,6 +223,10 @@ MyStackViewPage {
var val = this.from + ( this.position * (this.to - this.from))
playspaceRotationText.text = Math.round(val) + "°"
}
onValueChanged: {
MoveCenterTabController.rotation = playspaceRotationSlider.value
playspaceRotationText.text = Math.round(playspaceRotationSlider.value) + "°"
}
}
MyPushButton2 {
@@ -195,27 +234,34 @@ MyStackViewPage {
Layout.preferredWidth: 40
text: "+"
onClicked: {
playspaceRotationSlider.value += 45
var val = (MoveCenterTabController.rotation + 45) % 360
if (val < 0) {
val = 360 + val;
}
MoveCenterTabController.rotation = val
}
}
MyText {
MyTextField {
id: playspaceRotationText
Layout.preferredWidth: 85
horizontalAlignment: Text.AlignRight
text: "-360°"
}
}
RowLayout {
Item {
Layout.fillWidth: true
}
MyPushButton {
id: playspaceApplyButton
text: "Apply"
Layout.preferredWidth: 250
onClicked: {
MoveCenterTabController.rotation = playspaceRotationSlider.value
text: "0°"
keyBoardUID: 104
Layout.preferredWidth: 100
Layout.leftMargin: 10
Layout.rightMargin: 10
horizontalAlignment: Text.AlignHCenter
function onInputEvent(input) {
var val = parseInt(input)
if (!isNaN(val)) {
val = val % 360
if (val < 0) {
val = 360 + val;
}
MoveCenterTabController.rotation = val
text = MoveCenterTabController.rotation + "°"
} else {
text = MoveCenterTabController.rotation + "°"
}
}
}
}
@@ -223,6 +269,14 @@ MyStackViewPage {
}
}
MyToggleButton {
id: playspaceAdjustChaperoneToggle
text: "Adjust Chaperone"
onCheckedChanged: {
MoveCenterTabController.adjustChaperone = this.checked
}
}
Item { Layout.fillHeight: true; Layout.fillWidth: true}
MyPushButton {
@@ -235,20 +289,19 @@ MyStackViewPage {
}
Component.onCompleted: {
playspaceAdjustChaperoneToggle.checked = MoveCenterTabController.adjustChaperone
playSpaceMoveXText.text = MoveCenterTabController.offsetX.toFixed(1)
playSpaceMoveYText.text = MoveCenterTabController.offsetY.toFixed(1)
playSpaceMoveZText.text = MoveCenterTabController.offsetZ.toFixed(1)
playspaceRotationSlider.value = MoveCenterTabController.rotation
if (MoveCenterTabController.trackingUniverse === 0) {
playspaceModeText.text = "Sitting"
playspaceApplyButton.enabled = false
playSpaceRotationPlusButton.enabled = false
playSpaceRotationMinusButton.enabled = false
playspaceRotationSlider.enabled = false
playspaceRotationText.text = "-"
} else if (MoveCenterTabController.trackingUniverse === 1) {
playspaceModeText.text = "Standing"
playspaceApplyButton.enabled = true
playSpaceRotationPlusButton.enabled = true
playSpaceRotationMinusButton.enabled = true
playspaceRotationSlider.enabled = true
@@ -261,17 +314,20 @@ MyStackViewPage {
Connections {
target: MoveCenterTabController
onOffsetXChanged: {
playSpaceMoveXText.text = MoveCenterTabController.offsetX.toFixed(1)
playSpaceMoveXText.text = MoveCenterTabController.offsetX.toFixed(2)
}
onOffsetYChanged: {
playSpaceMoveYText.text = MoveCenterTabController.offsetY.toFixed(1)
playSpaceMoveYText.text = MoveCenterTabController.offsetY.toFixed(2)
}
onOffsetZChanged: {
playSpaceMoveZText.text = MoveCenterTabController.offsetZ.toFixed(1)
playSpaceMoveZText.text = MoveCenterTabController.offsetZ.toFixed(2)
}
onRotationChanged: {
playspaceRotationSlider.value = MoveCenterTabController.rotation
}
onAdjustChaperoneChanged: {
playspaceAdjustChaperoneToggle = value
}
onTrackingUniverseChanged: {
if (MoveCenterTabController.trackingUniverse === 0) {
playspaceModeText.text = "Sitting"
+3
View File
@@ -37,6 +37,7 @@ namespace advsettings {
class OverlayController : public QObject {
Q_OBJECT
Q_PROPERTY(bool desktopMode READ isDesktopMode)
public:
static constexpr const char* applicationKey = "matzman666.AdvancedSettings";
@@ -93,6 +94,8 @@ public:
void AddOffsetToCollisionBounds(unsigned axisId, float offset, bool commit = true);
void RotateCollisionBounds(float angle, bool commit = true); // around y axis
bool isDesktopMode() { return desktopMode; };
Q_INVOKABLE QString getVersionString();
Q_INVOKABLE QUrl getVRRuntimePathUrl();
+83 -30
View File
@@ -7,6 +7,13 @@ namespace advsettings {
void MoveCenterTabController::initStage1() {
setTrackingUniverse(vr::VRCompositor()->GetTrackingSpace());
auto settings = OverlayController::appSettings();
settings->beginGroup("playspaceSettings");
auto value = settings->value("adjustChaperone", m_adjustChaperone);
settings->endGroup();
if (value.isValid() && !value.isNull()) {
m_adjustChaperone = value.toBool();
}
}
void MoveCenterTabController::initStage2(OverlayController * parent, QQuickWindow * widget) {
@@ -35,10 +42,7 @@ float MoveCenterTabController::offsetX() const {
void MoveCenterTabController::setOffsetX(float value, bool notify) {
if (m_offsetX != value) {
m_offsetX = value;
if (notify) {
emit offsetXChanged(m_offsetX);
}
modOffsetX(value - m_offsetX, notify);
}
}
@@ -48,10 +52,7 @@ float MoveCenterTabController::offsetY() const {
void MoveCenterTabController::setOffsetY(float value, bool notify) {
if (m_offsetY != value) {
m_offsetY = value;
if (notify) {
emit offsetYChanged(m_offsetY);
}
modOffsetY(value - m_offsetY, notify);
}
}
@@ -61,10 +62,7 @@ float MoveCenterTabController::offsetZ() const {
void MoveCenterTabController::setOffsetZ(float value, bool notify) {
if (m_offsetZ != value) {
m_offsetZ = value;
if (notify) {
emit offsetZChanged(m_offsetZ);
}
modOffsetZ(value - m_offsetZ, notify);
}
}
@@ -75,7 +73,7 @@ int MoveCenterTabController::rotation() const {
void MoveCenterTabController::setRotation(int value, bool notify) {
if (m_rotation != value) {
float angle = (value - m_rotation) * 2 * M_PI / 360.0;
parent->RotateUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, angle);
parent->RotateUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, angle, m_adjustChaperone);
m_rotation = value;
if (notify) {
emit rotationChanged(m_rotation);
@@ -83,46 +81,101 @@ void MoveCenterTabController::setRotation(int value, bool notify) {
}
}
void MoveCenterTabController::modOffsetX(float value) {
bool MoveCenterTabController::adjustChaperone() const {
return m_adjustChaperone;
}
void MoveCenterTabController::setAdjustChaperone(bool value, bool notify) {
if (m_adjustChaperone != value) {
m_adjustChaperone = value;
if (m_trackingUniverse == vr::TrackingUniverseStanding) {
vr::VRChaperoneSetup()->RevertWorkingCopy();
if (m_adjustChaperone) {
if (m_offsetX != 0.0f) {
parent->AddOffsetToCollisionBounds(0, -m_offsetX, false);
}
if (m_offsetY != 0.0f) {
parent->AddOffsetToCollisionBounds(0, -m_offsetY, false);
}
if (m_offsetZ != 0.0f) {
parent->AddOffsetToCollisionBounds(0, -m_offsetZ, false);
}
if (m_rotation != 0) {
parent->RotateCollisionBounds(-m_rotation, false);
}
} else {
if (m_offsetX != 0.0f) {
parent->AddOffsetToCollisionBounds(0, m_offsetX, false);
}
if (m_offsetY != 0.0f) {
parent->AddOffsetToCollisionBounds(0, m_offsetY, false);
}
if (m_offsetZ != 0.0f) {
parent->AddOffsetToCollisionBounds(0, m_offsetZ, false);
}
if (m_rotation != 0) {
parent->RotateCollisionBounds(m_rotation, false);
}
}
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
}
auto settings = OverlayController::appSettings();
settings->beginGroup("playspaceSettings");
settings->setValue("adjustChaperone", m_adjustChaperone);
settings->endGroup();
settings->sync();
if (notify) {
emit adjustChaperoneChanged(m_adjustChaperone);
}
}
}
void MoveCenterTabController::modOffsetX(float value, bool notify) {
if (m_rotation == 0) {
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, value);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, value, m_adjustChaperone);
} else {
auto angle = m_rotation * 2 * M_PI / 360.0;
vr::VRChaperoneSetup()->RevertWorkingCopy();
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, value * std::cos(angle), true, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value * std::sin(angle), true, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, value * std::cos(angle), m_adjustChaperone, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value * std::sin(angle), m_adjustChaperone, false);
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
}
m_offsetX += value;
emit offsetXChanged(m_offsetX);
if (notify) {
emit offsetXChanged(m_offsetX);
}
}
void MoveCenterTabController::modOffsetY(float value) {
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, value);
void MoveCenterTabController::modOffsetY(float value, bool notify) {
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, value, m_adjustChaperone);
m_offsetY += value;
emit offsetYChanged(m_offsetY);
if (notify) {
emit offsetYChanged(m_offsetY);
}
}
void MoveCenterTabController::modOffsetZ(float value) {
void MoveCenterTabController::modOffsetZ(float value, bool notify) {
if (m_rotation == 0) {
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value, m_adjustChaperone);
} else {
auto angle = m_rotation * 2 * M_PI / 360.0;
vr::VRChaperoneSetup()->RevertWorkingCopy();
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value * std::cos(angle), true, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, -value * std::sin(angle), true, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, value * std::cos(angle), m_adjustChaperone, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, -value * std::sin(angle), m_adjustChaperone, false);
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
}
m_offsetZ += value;
emit offsetZChanged(m_offsetZ);
if (notify) {
emit offsetZChanged(m_offsetZ);
}
}
void MoveCenterTabController::reset() {
vr::VRChaperoneSetup()->RevertWorkingCopy();
parent->RotateUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, -m_rotation * 2 * M_PI / 360.0);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, -m_offsetX, true, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, -m_offsetY, true, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, -m_offsetZ, true, false);
parent->RotateUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, -m_rotation * 2 * M_PI / 360.0, m_adjustChaperone, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, -m_offsetX, m_adjustChaperone, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, -m_offsetY, m_adjustChaperone, false);
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 2, -m_offsetZ, m_adjustChaperone, false);
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
m_offsetX = 0.0f;
m_offsetY = 0.0f;
+9 -3
View File
@@ -19,6 +19,7 @@ class MoveCenterTabController : public QObject {
Q_PROPERTY(float offsetY READ offsetY WRITE setOffsetY NOTIFY offsetYChanged)
Q_PROPERTY(float offsetZ READ offsetZ WRITE setOffsetZ NOTIFY offsetZChanged)
Q_PROPERTY(int rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
Q_PROPERTY(bool adjustChaperone READ adjustChaperone WRITE setAdjustChaperone NOTIFY adjustChaperoneChanged)
private:
OverlayController* parent;
@@ -29,6 +30,7 @@ private:
float m_offsetY = 0.0f;
float m_offsetZ = 0.0f;
int m_rotation = 0;
bool m_adjustChaperone = true;
unsigned settingsUpdateCounter = 0;
@@ -42,6 +44,7 @@ public:
float offsetY() const;
float offsetZ() const;
int rotation() const;
bool adjustChaperone() const;
public slots:
int trackingUniverse() const;
@@ -53,9 +56,11 @@ public slots:
void setRotation(int value, bool notify = true);
void modOffsetX(float value);
void modOffsetY(float value);
void modOffsetZ(float value);
void setAdjustChaperone(bool value, bool notify = true);
void modOffsetX(float value, bool notify = true);
void modOffsetY(float value, bool notify = true);
void modOffsetZ(float value, bool notify = true);
void reset();
signals:
@@ -64,6 +69,7 @@ signals:
void offsetYChanged(float value);
void offsetZChanged(float value);
void rotationChanged(int value);
void adjustChaperoneChanged(bool value);
};
} // namespace advsettings