Merge branch 'master' of github.com:highfidelity/hifi into yellow

This commit is contained in:
Sam Gateau 2019-08-20 09:41:08 -07:00
commit 6cd37ef73c
36 changed files with 2103 additions and 214 deletions

View file

@ -157,11 +157,6 @@ qint64 AvatarMixerSlave::addChangedTraitsToBulkPacket(AvatarMixerClientData* lis
++simpleReceivedIt;
}
if (bytesWritten > 0 && sendingAvatar->isCertifyFailed()) {
// Resend identity packet if certification failed:
sendingAvatar->setNeedsIdentityUpdate();
}
// enumerate the received instanced trait versions
auto instancedReceivedIt = lastReceivedVersions.instancedCBegin();
while (instancedReceivedIt != lastReceivedVersions.instancedCEnd()) {

View file

@ -632,8 +632,8 @@
],
"data": {
"currentState": "seatedTalk02",
"randomSwitchTimeMax": 10,
"randomSwitchTimeMin": 1,
"randomSwitchTimeMax": 12,
"randomSwitchTimeMin": 7,
"states": [
{
"id": "seatedTalk02",
@ -698,8 +698,8 @@
],
"data": {
"currentState": "seatedIdle01",
"randomSwitchTimeMax": 10,
"randomSwitchTimeMin": 1,
"randomSwitchTimeMax": 20,
"randomSwitchTimeMin": 10,
"states": [
{
"id": "seatedIdle01",
@ -779,8 +779,8 @@
"currentState": "seatedReactionPositiveHeadNod",
"endFrame": 30,
"loopFlag": false,
"randomSwitchTimeMax": 10,
"randomSwitchTimeMin": 1,
"randomSwitchTimeMax": 12,
"randomSwitchTimeMin": 7,
"startFrame": 0,
"states": [
{
@ -856,18 +856,22 @@
"startFrame": 0,
"states": [
{
"easingType": "easeInOutQuad",
"id": "seatedReactionNegativeDisagreeHeadshake",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionNegativeDisagreeDropHead",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@ -957,9 +961,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionRaiseHandOutro",
"interpDuration": 1,
"interpTarget": 1,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@ -1038,9 +1044,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionApplaudLoop",
"interpDuration": 5,
"interpTarget": 5,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@ -1051,9 +1059,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionApplaudOutro",
"interpDuration": 1,
"interpTarget": 1,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@ -1132,9 +1142,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionPointLoop",
"interpDuration": 5,
"interpTarget": 5,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@ -1145,9 +1157,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionPointOutro",
"interpDuration": 1,
"interpTarget": 1,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@ -1197,10 +1211,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionPositive",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedTalkOverlay",
@ -1233,10 +1248,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionNegative",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedReactionPositive",
@ -1265,10 +1281,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionRaiseHand",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedReactionNegative",
@ -1293,10 +1310,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionApplaud",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedReactionNegative",
@ -1321,10 +1339,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "seatedReactionPoint",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "seatedReactionNegative",
@ -1457,63 +1476,77 @@
"randomSwitchTimeMin": 7,
"states": [
{
"easingType": "easeInOutQuad",
"id": "talk",
"interpDuration": 20,
"interpTarget": 20,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "talk02",
"interpDuration": 20,
"interpTarget": 20,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "talk03",
"interpDuration": 20,
"interpTarget": 20,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "talk04",
"interpDuration": 20,
"interpTarget": 20,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "talk_armsdown",
"interpDuration": 20,
"interpTarget": 20,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "talk_lefthand",
"interpDuration": 20,
"interpTarget": 20,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "talk_righthand",
"interpDuration": 20,
"interpTarget": 20,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.33,
"resume": true,
"transitions": [
@ -1588,36 +1621,44 @@
"randomSwitchTimeMin": 10,
"states": [
{
"easingType": "easeInOutQuad",
"id": "masterIdle1",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 30,
"interpTarget": 30,
"interpType": "evaluateBoth",
"priority": 0.25,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "masterIdle2",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 30,
"interpTarget": 30,
"interpType": "evaluateBoth",
"priority": 0.25,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "masterIdle3",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 30,
"interpTarget": 30,
"interpType": "evaluateBoth",
"priority": 0.25,
"resume": true,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "masterIdle4",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 30,
"interpTarget": 30,
"interpType": "evaluateBoth",
"priority": 0.25,
"resume": true,
"transitions": [
@ -1742,72 +1783,88 @@
"currentState": "idle_once_slownod",
"states": [
{
"easingType": "easeInOutQuad",
"id": "idle_once_slownod",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "idle_once_headtilt",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "idle_once_shiftheelpivot",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "idleWS_all",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "idle_once_lookaround",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "idle_once_neckstretch",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "idle_once_lookleftright",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "idle_once_fidget",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": 0.2,
"resume": false,
"transitions": [
@ -1827,7 +1884,8 @@
"endFrame": 80,
"loopFlag": false,
"startFrame": 1,
"timeScale": 1,
"startFrameVar": "",
"timeScale": 0.65,
"url": "qrc:///avatar/animations/idle_LFF_all.fbx"
},
"id": "transitionToAltIdle1",
@ -1840,7 +1898,7 @@
"endFrame": 80,
"loopFlag": false,
"startFrame": 1,
"timeScale": 1,
"timeScale": 0.65,
"url": "qrc:///avatar/animations/idle_RFF_all.fbx"
},
"id": "transitionToAltIdle2",
@ -1850,7 +1908,7 @@
"children": [
],
"data": {
"endFrame": 389,
"endFrame": 388,
"loopFlag": true,
"startFrame": 80,
"timeScale": 1,
@ -1863,7 +1921,7 @@
"children": [
],
"data": {
"endFrame": 390,
"endFrame": 388,
"loopFlag": true,
"startFrame": 80,
"timeScale": 1,
@ -1878,7 +1936,7 @@
"data": {
"endFrame": 472,
"loopFlag": false,
"startFrame": 389,
"startFrame": 388,
"timeScale": 1,
"url": "qrc:///avatar/animations/idle_LFF_all.fbx"
},
@ -1891,7 +1949,7 @@
"data": {
"endFrame": 453,
"loopFlag": false,
"startFrame": 390,
"startFrame": 388,
"timeScale": 1,
"url": "qrc:///avatar/animations/idle_RFF_all.fbx"
},
@ -1903,9 +1961,11 @@
"currentState": "transitionToAltIdle1",
"states": [
{
"easingType": "easeInOutQuad",
"id": "transitionToAltIdle1",
"interpDuration": 10,
"interpTarget": 11,
"interpDuration": 20,
"interpTarget": 20,
"interpType": "evaluateBoth",
"priority": 0.5,
"resume": false,
"transitions": [
@ -1916,9 +1976,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "transitionToAltIdle2",
"interpDuration": 10,
"interpTarget": 11,
"interpDuration": 20,
"interpTarget": 20,
"interpType": "evaluateBoth",
"priority": 0.5,
"resume": false,
"transitions": [
@ -1929,9 +1991,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "altIdle1",
"interpDuration": 10,
"interpTarget": 11,
"interpDuration": 1,
"interpTarget": 1,
"interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
@ -1942,9 +2006,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "altIdle2",
"interpDuration": 10,
"interpTarget": 11,
"interpDuration": 1,
"interpTarget": 1,
"interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
@ -1955,18 +2021,22 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "alt1ToMasterIdle",
"interpDuration": 10,
"interpTarget": 11,
"interpDuration": 24,
"interpTarget": 24,
"interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "alt2ToMasterIdle",
"interpDuration": 10,
"interpTarget": 11,
"interpDuration": 24,
"interpTarget": 24,
"interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
@ -1985,18 +2055,22 @@
"currentState": "movement",
"states": [
{
"easingType": "easeInOutQuad",
"id": "movement",
"interpDuration": 15,
"interpTarget": 17,
"interpDuration": 30,
"interpTarget": 30,
"interpType": "evaluateBoth",
"priority": 0.6,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "alternateIdle",
"interpDuration": 15,
"interpTarget": 17,
"interpDuration": 30,
"interpTarget": 30,
"interpType": "evaluateBoth",
"priority": 0.4,
"resume": false,
"transitions": [
@ -2012,9 +2086,11 @@
"currentState": "masterIdle",
"states": [
{
"easingType": "easeInOutQuad",
"id": "masterIdle",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 30,
"interpTarget": 30,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@ -2025,9 +2101,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "fidget",
"interpDuration": 20,
"interpTarget": 21,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"priority": -1,
"resume": false,
"transitions": [
@ -2164,45 +2242,55 @@
"randomSwitchTimeMin": 1,
"states": [
{
"easingType": "easeInOutQuad",
"id": "positiveAcknowledge",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "positiveHeadNod",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "positiveHeadNodYes",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "positiveLongHeadNod",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "positiveThoughtfulHeadNod",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 0.33,
"resume": false,
"transitions": [
@ -2262,27 +2350,33 @@
"randomSwitchTimeMin": 1,
"states": [
{
"easingType": "easeInOutQuad",
"id": "negativeAnnoyedHeadshake",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "negativeThoughtfulHeadshake",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "negativeDropHead",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@ -2584,27 +2678,33 @@
"randomSwitchTimeMin": 1,
"states": [
{
"easingType": "easeInOutQuad",
"id": "raiseHand01",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "raiseHand03",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "raiseHand04",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@ -2909,27 +3009,33 @@
"randomSwitchTimeMin": 1,
"states": [
{
"easingType": "easeInOutQuad",
"id": "applaudClap01",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "applaudClap02",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
]
},
{
"easingType": "easeInOutQuad",
"id": "applaudClap03",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 1,
"resume": false,
"transitions": [
@ -3016,9 +3122,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "reactionPointOutro",
"interpDuration": 1,
"interpTarget": 1,
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"priority": 0,
"resume": false,
"transitions": [
@ -3068,10 +3176,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "reactionPositive",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "idleTalkOverlay",
@ -3112,10 +3221,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "reactionNegative",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "reactionPositive",
@ -3148,10 +3258,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "reactionRaiseHand",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "reactionNegative",
@ -3176,10 +3287,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "reactionApplaud",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "reactionNegative",
@ -3204,10 +3316,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "reactionPoint",
"interpDuration": 6,
"interpTarget": 6,
"interpType": "snapshotPrev",
"interpDuration": 18,
"interpTarget": 18,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "reactionNegative",
@ -3945,10 +4058,11 @@
],
"states": [
{
"easingType": "easeInOutQuad",
"id": "seated",
"interpDuration": 8,
"interpDuration": 18,
"interpTarget": 20,
"interpType": "snapshotPrev",
"interpType": "evaluateBoth",
"transitions": [
{
"state": "idle",
@ -4009,10 +4123,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "idle",
"interpDuration": 8,
"interpTarget": 20,
"interpType": "snapshotPrev",
"interpDuration": 30,
"interpTarget": 30,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "WALKFWD",
@ -4140,10 +4255,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "idleSettle",
"interpDuration": 8,
"interpTarget": 15,
"interpType": "snapshotPrev",
"interpDuration": 12,
"interpTarget": 12,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "idle",
@ -4464,9 +4580,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "turnRight",
"interpDuration": 8,
"interpTarget": 8,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "idle",
@ -4527,9 +4645,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "turnLeft",
"interpDuration": 8,
"interpTarget": 8,
"interpDuration": 15,
"interpTarget": 15,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "idle",
@ -4718,9 +4838,11 @@
]
},
{
"easingType": "easeInOutQuad",
"id": "fly",
"interpDuration": 6,
"interpTarget": 6,
"interpDuration": 24,
"interpTarget": 24,
"interpType": "evaluateBoth",
"transitions": [
{
"state": "idleSettle",

View file

@ -0,0 +1,180 @@
//
// HelpApp.qml
//
// Created by Zach Fox on 2019-08-07
// Copyright 2019 High Fidelity, Inc.
//
// 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.10
import QtQuick.Controls 2.3
import "../simplifiedConstants" as SimplifiedConstants
import "../simplifiedControls" as SimplifiedControls
import stylesUit 1.0 as HifiStylesUit
import "./controls" as HelpControls
import "./faq" as HelpFAQ
import "./about" as HelpAbout
Rectangle {
property string activeTabView: "controlsTabView"
id: root
color: simplifiedUI.colors.darkBackground
anchors.fill: parent
SimplifiedConstants.SimplifiedConstants {
id: simplifiedUI
}
focus: true
Component.onCompleted: {
root.forceActiveFocus();
}
onActiveTabViewChanged: {
for (var i = 0; i < tabListModel.count; i++) {
if (tabListModel.get(i).tabViewName === activeTabView) {
tabListView.currentIndex = i;
return;
}
}
}
Rectangle {
id: tabContainer
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
height: 64
color: simplifiedUI.colors.highlightOnDark
ListModel {
id: tabListModel
ListElement {
tabTitle: "Controls"
tabViewName: "controlsTabView"
}
ListElement {
tabTitle: "FAQ"
tabViewName: "faqTabView"
}
ListElement {
tabTitle: "About"
tabViewName: "aboutTabView"
}
}
Component {
id: highlightBar
Rectangle {
width: tabListView.currentItem.width
height: tabListView.currentItem.height
color: simplifiedUI.colors.darkBackground
x: tabListView.currentItem.x
Behavior on x {
SmoothedAnimation {
duration: 250
}
}
Behavior on width {
SmoothedAnimation {
duration: 250
}
}
}
}
ListView {
id: tabListView
anchors.fill: parent
contentHeight: parent.height
contentWidth: childrenRect.width
orientation: ListView.Horizontal
model: tabListModel
highlight: highlightBar
highlightFollowsCurrentItem: false
interactive: contentItem.width > width
delegate: Item {
width: tabTitleText.paintedWidth + 32
height: parent.height
HifiStylesUit.GraphikRegular {
id: tabTitleText
color: simplifiedUI.colors.text.white
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: model.tabTitle
size: 24
}
MouseArea {
anchors.fill: parent
onClicked: {
root.activeTabView = model.tabViewName;
}
}
}
}
}
Item {
id: tabViewContainers
anchors.top: tabContainer.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
HelpControls.HelpControls {
id: controlsTabViewContainer
visible: activeTabView === "controlsTabView"
anchors.fill: parent
}
HelpFAQ.HelpFAQ {
id: faqTabViewContainer
visible: activeTabView === "faqTabView"
anchors.fill: parent
onSendToScript: {
root.sendToScript(message);
}
}
HelpAbout.HelpAbout {
id: aboutTabViewContainer
visible: activeTabView === "aboutTabView"
anchors.fill: parent
}
SimplifiedControls.VerticalScrollBar {
parent: {
if (activeTabView === "controlsTabView") {
controlsTabViewContainer
} else if (activeTabView === "faqTabView") {
faqTabViewContainer
} else if (activeTabView === "aboutTabView") {
aboutTabViewContainer
}
}
}
}
function fromScript(message) {
switch (message.method) {
default:
console.log('HelpApp.qml: Unrecognized message from JS');
break;
}
}
signal sendToScript(var message);
}

View file

@ -0,0 +1,355 @@
//
// HelpAbout.qml
//
// Created by Zach Fox on 2019-08-07
// Copyright 2019 High Fidelity, Inc.
//
// 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.10
import QtQuick.Controls 2.3
import "../../simplifiedConstants" as SimplifiedConstants
import "../../simplifiedControls" as SimplifiedControls
import stylesUit 1.0 as HifiStylesUit
import QtQuick.Layouts 1.3
Flickable {
id: root
contentWidth: parent.width
contentHeight: aboutColumnLayout.height
clip: true
onVisibleChanged: {
if (visible) {
root.contentX = 0;
root.contentY = 0;
// When the user clicks the About tab, refresh the audio I/O model so that
// the delegate Component.onCompleted handlers fire, which will update
// the text that appears in the About screen.
audioOutputDevices.model = undefined;
audioOutputDevices.model = AudioScriptingInterface.devices.output;
audioInputDevices.model = undefined;
audioInputDevices.model = AudioScriptingInterface.devices.input;
}
}
SimplifiedConstants.SimplifiedConstants {
id: simplifiedUI
}
Image {
id: accent
source: "../images/accent3.svg"
anchors.left: parent.left
anchors.top: parent.top
width: 83
height: 156
transform: Scale {
xScale: -1
origin.x: accent.width / 2
origin.y: accent.height / 2
}
}
ColumnLayout {
id: aboutColumnLayout
anchors.left: parent.left
anchors.leftMargin: 26
anchors.right: parent.right
anchors.rightMargin: 26
anchors.top: parent.top
spacing: 0
ColumnLayout {
id: platformInfoContainer
Layout.preferredWidth: parent.width
Layout.bottomMargin: 24
spacing: 0
HifiStylesUit.GraphikSemiBold {
text: "About Your Configuration"
Layout.preferredWidth: parent.width
Layout.topMargin: 16
Layout.bottomMargin: 8
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikRegular {
text: "Use the button below to get a copy to share with us."
Layout.preferredWidth: parent.width
Layout.bottomMargin: 8
height: paintedHeight
size: 18
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikRegular {
text: "Version " + Window.checkVersion()
Layout.preferredWidth: parent.width
Layout.topMargin: 8
Layout.bottomMargin: 8
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikSemiBold {
text: "Platform Info"
Layout.preferredWidth: parent.width
Layout.topMargin: 8
Layout.bottomMargin: 8
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikRegular {
text: "<b>Computer Vendor/Model:</b>"
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
Component.onCompleted: {
var computer = JSON.parse(PlatformInfo.getComputer());
var computerVendor = computer.vendor;
if (computerVendor.length === 0) {
computerVendor = "Unknown";
}
var computerModel = computer.model;
if (computerModel.length === 0) {
computerModel = "Unknown";
}
text = "<b>Computer Vendor/Model:</b> " + computerVendor + "/" + computerModel;
}
}
HifiStylesUit.GraphikRegular {
text: "<b>Profiled Platform Tier:</b> " + PlatformInfo.getTierProfiled()
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikRegular {
text: "<b>OS Type:</b> " + PlatformInfo.getOperatingSystemType()
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikRegular {
text: "<b>CPU:</b>"
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
Component.onCompleted: {
var cpu = JSON.parse(PlatformInfo.getCPU(0));
var cpuModel = cpu.model;
if (cpuModel.length === 0) {
cpuModel = "Unknown";
}
text = "<b>CPU:</b> " + cpuModel;
}
}
HifiStylesUit.GraphikRegular {
text: "<b># CPUs:</b> " + PlatformInfo.getNumCPUs()
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikRegular {
text: "<b># CPU Cores:</b> " + PlatformInfo.getNumLogicalCores()
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikRegular {
text: "<b>RAM:</b> " + PlatformInfo.getTotalSystemMemoryMB() + " MB"
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
HifiStylesUit.GraphikRegular {
text: "<b>GPU:</b> "
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
Component.onCompleted: {
var gpu = JSON.parse(PlatformInfo.getGPU(PlatformInfo.getMasterGPU()));
var gpuModel = gpu.model;
if (gpuModel.length === 0) {
gpuModel = "Unknown";
}
text = "<b>GPU:</b> " + gpuModel;
}
}
HifiStylesUit.GraphikRegular {
text: "<b>VR Hand Controllers:</b> " + (PlatformInfo.hasRiftControllers() ? "Rift" : (PlatformInfo.hasViveControllers() ? "Vive" : "None"))
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
// This is a bit of a hack to get the name of the currently-selected audio input device
// in the current mode (Desktop or VR). The reason this is necessary is because it seems to me like
// the only way one can get a human-readable list of the audio I/O devices is by using a ListView
// and grabbing the names from the AudioScriptingInterface; you can't do it using a ListModel.
// See `AudioDevices.h`, specifically the comment above the declaration of `QVariant data()`.
ListView {
id: audioInputDevices
visible: false
property string selectedInputDeviceName
Layout.preferredWidth: parent.width
Layout.preferredHeight: contentItem.height
interactive: false
delegate: Item {
Component.onCompleted: {
if ((HMD.active && selectedHMD) || (!HMD.active && selectedDesktop)) {
audioInputDevices.selectedInputDeviceName = model.devicename
}
}
}
}
HifiStylesUit.GraphikRegular {
text: "<b>Audio Input:</b> " + audioInputDevices.selectedInputDeviceName
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
// This is a bit of a hack to get the name of the currently-selected audio output device
// in the current mode (Desktop or VR). The reason this is necessary is because it seems to me like
// the only way one can get a human-readable list of the audio I/O devices is by using a ListView
// and grabbing the names from the AudioScriptingInterface; you can't do it using a ListModel.
// See `AudioDevices.h`, specifically the comment above the declaration of `QVariant data()`.
ListView {
id: audioOutputDevices
visible: false
property string selectedOutputDeviceName
Layout.preferredWidth: parent.width
Layout.preferredHeight: contentItem.height
interactive: false
delegate: Item {
Component.onCompleted: {
if ((HMD.active && selectedHMD) || (!HMD.active && selectedDesktop)) {
audioOutputDevices.selectedOutputDeviceName = model.devicename
}
}
}
}
HifiStylesUit.GraphikRegular {
text: "<b>Audio Output:</b> " + audioOutputDevices.selectedOutputDeviceName
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
wrapMode: Text.Wrap
}
SimplifiedControls.Button {
Layout.topMargin: 8
width: 200
height: 32
text: "Copy to Clipboard"
temporaryText: "Copied!"
onClicked: {
Window.copyToClipboard(root.buildPlatformInfoTextToCopy());
showTemporaryText();
}
}
}
}
function buildPlatformInfoTextToCopy() {
var textToCopy = "**About Interface**\n";
textToCopy += "Interface Version: " + Window.checkVersion() + "\n";
textToCopy += "\n**Platform Info**\n";
var computer = JSON.parse(PlatformInfo.getComputer());
var computerVendor = computer.vendor;
if (computerVendor.length === 0) {
computerVendor = "Unknown";
}
var computerModel = computer.model;
if (computerModel.length === 0) {
computerModel = "Unknown";
}
textToCopy += "Computer Vendor/Model: " + computerVendor + "/" + computerModel + "\n";
textToCopy += "Profiled Platform Tier: " + PlatformInfo.getTierProfiled() + "\n";
textToCopy += "OS Type: " + PlatformInfo.getOperatingSystemType() + "\n";
var cpu = JSON.parse(PlatformInfo.getCPU(0));
var cpuModel = cpu.model;
if (cpuModel.length === 0) {
cpuModel = "Unknown";
}
textToCopy += "CPU: " + cpuModel + "\n";
textToCopy += "# CPUs: " + PlatformInfo.getNumCPUs() + "\n";
textToCopy += "# CPU Cores: " + PlatformInfo.getNumLogicalCores() + "\n";
textToCopy += "RAM: " + PlatformInfo.getTotalSystemMemoryMB() + " MB\n";
var gpu = JSON.parse(PlatformInfo.getGPU(PlatformInfo.getMasterGPU()));
var gpuModel = gpu.model;
if (gpuModel.length === 0) {
gpuModel = "Unknown";
}
textToCopy += "GPU: " + gpuModel + "\n";
textToCopy += "VR Hand Controllers: " + (PlatformInfo.hasRiftControllers() ? "Rift" : (PlatformInfo.hasViveControllers() ? "Vive" : "None")) + "\n";
textToCopy += "Audio Input: " + audioInputDevices.selectedInputDeviceName + "\n";
textToCopy += "Audio Output: " + audioOutputDevices.selectedOutputDeviceName + "\n";
textToCopy += "\n**All Platform Info**\n";
textToCopy += JSON.stringify(JSON.parse(PlatformInfo.getPlatform()), null, 4);
return textToCopy;
}
}

View file

@ -0,0 +1,779 @@
//
// ControlsTable.qml
//
// Created by Zach Fox on 2019-08-16
// Copyright 2019 High Fidelity, Inc.
//
// 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.10
import QtQuick.Layouts 1.3
import stylesUit 1.0 as HifiStylesUit
Item {
id: controlsTableRoot
property int column1Width: 80
property int column2Width: width - column1Width
property int rowHeight: 31
property int rowPadding: 8
property int mainTextSize: 18
property int subTextSize: 14
property color separatorColor: "#CCCCCC"
Layout.preferredHeight: controlsTableColumnLayout.height
// Top separator
Rectangle {
anchors.top: controlsTableColumnLayout.top
anchors.left: controlsTableColumnLayout.left
width: parent.width
height: 1
color: controlsTableRoot.separatorColor
}
// Right separator
Rectangle {
anchors.top: controlsTableColumnLayout.top
anchors.right: controlsTableColumnLayout.right
width: 1
height: controlsTableColumnLayout.height
color: controlsTableRoot.separatorColor
}
// Bottom separator
Rectangle {
anchors.top: controlsTableColumnLayout.top
anchors.topMargin: controlsTableRoot.height
anchors.left: controlsTableColumnLayout.left
width: parent.width
height: 1
color: controlsTableRoot.separatorColor
}
// Left separator
Rectangle {
anchors.top: controlsTableColumnLayout.top
anchors.left: controlsTableColumnLayout.left
width: 1
height: controlsTableColumnLayout.height
color: controlsTableRoot.separatorColor
}
ColumnLayout {
id: controlsTableColumnLayout
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
spacing: 0
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
Image {
source: "images/rightClick.svg"
anchors.centerIn: parent
width: 24
height: 24
mipmap: true
fillMode: Image.PreserveAspectFit
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
Row {
width: controlsTableRoot.column2Width
height: parent.height
spacing: controlsTableRoot.rowPadding
HifiStylesUit.GraphikRegular {
id: cameraText
text: "Camera"
width: paintedWidth
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
HifiStylesUit.GraphikRegular {
text: "Right-click and drag to look around"
width: parent.width - cameraText.width - parent.spacing - controlsTableRoot.rowPadding
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
size: controlsTableRoot.subTextSize
color: Qt.rgba(255, 255, 255, 0.5)
}
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "W / ↑"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
HifiStylesUit.GraphikRegular {
text: "Walk Forward"
width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "S / ↓"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
HifiStylesUit.GraphikRegular {
text: "Walk Backward"
width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "A / ←"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
HifiStylesUit.GraphikRegular {
text: "Turn Left"
width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "D / →"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
HifiStylesUit.GraphikRegular {
text: "Turn Right"
width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "Q"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
HifiStylesUit.GraphikRegular {
text: "Sidestep Left"
width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "E"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
HifiStylesUit.GraphikRegular {
text: "Sidestep Right"
width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "Shift"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
Row {
width: controlsTableRoot.column2Width
height: parent.height
spacing: controlsTableRoot.rowPadding
HifiStylesUit.GraphikRegular {
id: runText
text: "Hold + Direction to Run"
width: paintedWidth
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
HifiStylesUit.GraphikRegular {
text: "Example: Shift + W"
width: parent.width - runText.width - parent.spacing - controlsTableRoot.rowPadding
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
size: controlsTableRoot.subTextSize
color: Qt.rgba(255, 255, 255, 0.5)
}
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "Space"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
Row {
width: controlsTableRoot.column2Width
height: parent.height
spacing: controlsTableRoot.rowPadding
HifiStylesUit.GraphikRegular {
id: jumpText
text: "Jump / Stand Up"
width: paintedWidth
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
HifiStylesUit.GraphikRegular {
text: "Stand Up only while seated"
width: parent.width - jumpText.width - parent.spacing - controlsTableRoot.rowPadding
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
size: controlsTableRoot.subTextSize
color: Qt.rgba(255, 255, 255, 0.5)
}
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "1"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
HifiStylesUit.GraphikRegular {
text: "1st Person View"
width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "2"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
Row {
width: controlsTableRoot.column2Width
height: parent.height
spacing: controlsTableRoot.rowPadding
HifiStylesUit.GraphikRegular {
id: mirrorText
text: "Mirror Mode"
width: paintedWidth
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
HifiStylesUit.GraphikRegular {
text: "See your own avatar"
width: parent.width - mirrorText.width - parent.spacing - controlsTableRoot.rowPadding
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
size: controlsTableRoot.subTextSize
color: Qt.rgba(255, 255, 255, 0.5)
}
}
}
// Bottom separator
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 1
color: controlsTableRoot.separatorColor
}
Row {
Layout.preferredWidth: parent.width
Layout.preferredHeight: controlsTableRoot.rowHeight
Item {
width: controlsTableRoot.column1Width
height: parent.height
HifiStylesUit.GraphikRegular {
text: "3"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
Rectangle {
width: 1
height: parent.height
color: controlsTableRoot.separatorColor
anchors.right: parent.right
anchors.top: parent.top
}
}
// Spacer
Item {
width: controlsTableRoot.rowPadding
height: parent.height
}
HifiStylesUit.GraphikRegular {
text: "3rd Person View"
width: controlsTableRoot.column2Width - controlsTableRoot.rowPadding * 2
height: parent.height
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
size: controlsTableRoot.mainTextSize
color: simplifiedUI.colors.text.white
}
}
}
}

View file

@ -0,0 +1,95 @@
//
// HelpControls.qml
//
// Created by Zach Fox on 2019-08-07
// Copyright 2019 High Fidelity, Inc.
//
// 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.10
import QtQuick.Controls 2.3
import "../../simplifiedConstants" as SimplifiedConstants
import "../../simplifiedControls" as SimplifiedControls
import stylesUit 1.0 as HifiStylesUit
import QtQuick.Layouts 1.3
Flickable {
id: root
contentWidth: parent.width
contentHeight: controlsColumnLayout.height
clip: true
onVisibleChanged: {
if (visible) {
root.contentX = 0;
root.contentY = 0;
}
}
SimplifiedConstants.SimplifiedConstants {
id: simplifiedUI
}
Image {
id: accent
source: "../images/accent1.svg"
anchors.left: parent.left
anchors.top: parent.top
width: 83
height: 156
transform: Scale {
xScale: -1
origin.x: accent.width / 2
origin.y: accent.height / 2
}
}
ColumnLayout {
id: controlsColumnLayout
anchors.left: parent.left
anchors.leftMargin: 26
anchors.right: parent.right
anchors.rightMargin: 26
anchors.top: parent.top
spacing: 0
HifiStylesUit.GraphikSemiBold {
text: "HQ Controls"
Layout.preferredWidth: parent.width
Layout.topMargin: 16
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
}
HifiStylesUit.GraphikRegular {
text: "You can use the following controls to move your avatar around your HQ:"
Layout.preferredWidth: parent.width
wrapMode: Text.Wrap
height: paintedHeight
size: 18
color: simplifiedUI.colors.text.white
}
ControlsTable {
Layout.topMargin: 8
Layout.preferredWidth: parent.width
}
SimplifiedControls.Button {
Layout.topMargin: 14
Layout.preferredWidth: 200
height: 32
text: "VIEW ALL CONTROLS"
temporaryText: "Viewing!"
onClicked: {
Qt.openUrlExternally("http://docs.highfidelity.com/explore/get-started/desktop.html");
}
}
}
}

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 24" style="enable-background:new 0 0 16 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{opacity:0.2;enable-background:new ;}
.st2{fill:#009EE0;}
</style>
<path class="st0" d="M16,1.7v20.6c0,0.9-0.8,1.7-1.8,1.7H1.8c-1,0-1.8-0.8-1.8-1.7V1.7C0,0.8,0.8,0,1.8,0h12.4C15.2,0,16,0.8,16,1.7
z"/>
<path d="M14.2,1.2H9v8.6h5.7V1.7C14.7,1.4,14.5,1.2,14.2,1.2z"/>
<path class="st1" d="M7,1.2H1.8c-0.3,0-0.5,0.2-0.5,0.5v8.1H7V1.2z"/>
<circle class="st2" cx="11.9" cy="5.3" r="2.5"/>
</svg>

After

Width:  |  Height:  |  Size: 805 B

View file

@ -0,0 +1,120 @@
//
// HelpFAQ.qml
//
// Created by Zach Fox on 2019-08-08
// Copyright 2019 High Fidelity, Inc.
//
// 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.10
import QtQuick.Controls 2.3
import "../../simplifiedConstants" as SimplifiedConstants
import "../../simplifiedControls" as SimplifiedControls
import stylesUit 1.0 as HifiStylesUit
import QtQuick.Layouts 1.3
import PerformanceEnums 1.0
Item {
id: root
width: parent.width
height: parent.height
SimplifiedConstants.SimplifiedConstants {
id: simplifiedUI
}
Image {
id: accent
source: "../images/accent3.svg"
anchors.left: parent.left
anchors.top: parent.top
width: 83
height: 156
transform: Scale {
xScale: -1
origin.x: accent.width / 2
origin.y: accent.height / 2
}
}
ColumnLayout {
id: faqColumnLayout
anchors.left: parent.left
anchors.leftMargin: 26
anchors.right: parent.right
anchors.rightMargin: 26
anchors.top: parent.top
spacing: 0
HifiStylesUit.GraphikSemiBold {
text: "FAQ"
Layout.preferredWidth: parent.width
Layout.preferredHeight: paintedHeight
Layout.topMargin: 16
size: 22
color: simplifiedUI.colors.text.white
}
HifiStylesUit.GraphikRegular {
text: "You can find answers to all of our frequently asked questions by clicking the button below."
Layout.preferredWidth: parent.width
Layout.preferredHeight: paintedHeight
Layout.topMargin: 8
size: 18
wrapMode: Text.Wrap
color: simplifiedUI.colors.text.white
}
SimplifiedControls.Button {
Layout.topMargin: 8
width: 200
height: 32
text: "VIEW FAQ"
temporaryText: "Viewing!"
onClicked: {
Qt.openUrlExternally("https://www.highfidelity.com/knowledge");
}
}
HifiStylesUit.GraphikSemiBold {
text: "Having problems with your audio?"
Layout.preferredWidth: parent.width
Layout.preferredHeight: paintedHeight
Layout.topMargin: 32
size: 16
color: simplifiedUI.colors.text.white
}
HifiStylesUit.GraphikRegular {
text: "Quickly check your audio configuration and make changes to resolve any audio input/output issues."
Layout.preferredWidth: parent.width
Layout.preferredHeight: paintedHeight
Layout.topMargin: 4
size: 18
wrapMode: Text.Wrap
color: simplifiedUI.colors.text.white
}
SimplifiedControls.Button {
Layout.topMargin: 8
width: 200
height: 32
text: "TEST YOUR AUDIO"
onClicked: {
root.sendToScript({
"source": "HelpApp.qml",
"method": "goToAudioSettings"
});
}
}
}
signal sendToScript(var message);
}

View file

@ -0,0 +1,4 @@
<svg width="106" height="200" viewBox="0 0 106 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0L106 -9.26681e-06L83.1739 10.0481L0 0Z" fill="#FFED00"/>
<path d="M83.1738 10.0481L106 -1.99552e-06L106 200L83.1738 10.0481Z" fill="#FF42A7"/>
</svg>

After

Width:  |  Height:  |  Size: 263 B

View file

@ -0,0 +1,4 @@
<svg width="106" height="200" viewBox="0 0 106 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0L106 -9.26681e-06L83.1739 10.0481L0 0Z" fill="#FF42A7"/>
<path d="M83.1738 10.0481L106 -1.99552e-06L106 200L83.1738 10.0481Z" fill="#009EE0"/>
</svg>

After

Width:  |  Height:  |  Size: 263 B

View file

@ -0,0 +1,4 @@
<svg width="106" height="200" viewBox="0 0 106 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0L106 -9.26681e-06L83.1739 10.0481L0 0Z" fill="#009EE0"/>
<path d="M83.1738 10.0481L106 -1.99552e-06L106 200L83.1738 10.0481Z" fill="#FFED00"/>
</svg>

After

Width:  |  Height:  |  Size: 263 B

View file

@ -176,6 +176,7 @@ Rectangle {
anchors.left: parent.left
width: parent.width
height: parent.parent.height
mipmap: true
}
ColorOverlay {

View file

@ -49,6 +49,15 @@ Rectangle {
}
}
onActiveTabViewChanged: {
for (var i = 0; i < tabListModel.count; i++) {
if (tabListModel.get(i).tabViewName === activeTabView) {
tabListView.currentIndex = i;
return;
}
}
}
Component.onCompleted: {
root.forceActiveFocus();
}
@ -138,7 +147,6 @@ Rectangle {
MouseArea {
anchors.fill: parent
onClicked: {
tabListView.currentIndex = index;
root.activeTabView = model.tabViewName;
}
}
@ -207,7 +215,24 @@ Rectangle {
function fromScript(message) {
if (message.source !== "simplifiedUI.js") {
return;
}
switch (message.method) {
case "goToSettingsTab":
var tabToGoTo = message.data.settingsTab;
switch (tabToGoTo) {
case "audio":
activeTabView = "audioTabView";
break;
default:
console.log("A message was sent to the Settings window to change tabs, but an invalid tab was specified.");
break;
}
break;
default:
console.log('SettingsApp.qml: Unrecognized message from JS');
break;

View file

@ -70,7 +70,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
text: "Version " + Window.checkVersion()
Layout.alignment: Qt.AlignHCenter
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -79,7 +79,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
text: "Platform Info"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
Layout.topMargin: 8
Layout.bottomMargin: 8
height: paintedHeight
@ -90,7 +90,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>Computer Vendor/Model:</b>"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -113,7 +113,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>Profiled Platform Tier:</b> " + PlatformInfo.getTierProfiled()
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -122,7 +122,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>OS Type:</b> " + PlatformInfo.getOperatingSystemType()
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -131,7 +131,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>CPU:</b>"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -150,7 +150,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b># CPUs:</b> " + PlatformInfo.getNumCPUs()
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -159,7 +159,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b># CPU Cores:</b> " + PlatformInfo.getNumLogicalCores()
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -168,7 +168,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>RAM:</b> " + PlatformInfo.getTotalSystemMemoryMB() + " MB"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -177,7 +177,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>GPU:</b> "
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -196,7 +196,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>VR Hand Controllers:</b> " + (PlatformInfo.hasRiftControllers() ? "Rift" : (PlatformInfo.hasViveControllers() ? "Vive" : "None"))
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -228,7 +228,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>Audio Input:</b> " + audioInputDevices.selectedInputDeviceName
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white
@ -261,7 +261,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
text: "<b>Audio Output:</b> " + audioOutputDevices.selectedOutputDeviceName
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white

View file

@ -174,7 +174,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: micControlsTitle
text: "Default Mute Controls"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@ -244,7 +244,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: inputDeviceTitle
text: "Which input device?"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@ -340,7 +340,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: outputDeviceTitle
text: "Which output device?"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white

View file

@ -68,7 +68,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: uiControlsTitle
text: "User Interface"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@ -77,7 +77,7 @@ Flickable {
HifiStylesUit.GraphikRegular {
id: uiControlsSubtitle
text: "You'll have to restart Interface after changing either of these settings. If you don't get any Toolbar apps back after restarting, run defaultScripts.js manually."
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 16
color: simplifiedUI.colors.text.white

View file

@ -72,7 +72,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: avatarNameTagsTitle
text: "Avatar Name Tags"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@ -120,7 +120,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: performanceTitle
text: "Graphics Settings"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@ -168,7 +168,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: cameraTitle
text: "Camera View"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white

View file

@ -77,7 +77,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: controlsTitle
text: "VR Movement Controls"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@ -163,7 +163,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: micControlsTitle
text: "Default Mute Controls"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@ -206,7 +206,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: inputDeviceTitle
text: "Which input device?"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white
@ -302,7 +302,7 @@ Flickable {
HifiStylesUit.GraphikSemiBold {
id: outputDeviceTitle
text: "Which output device?"
Layout.maximumWidth: parent.width
Layout.preferredWidth: parent.width
height: paintedHeight
size: 22
color: simplifiedUI.colors.text.white

View file

@ -153,6 +153,10 @@ QtObject {
readonly property color background: "#474747"
readonly property color contentItem: "#0198CB"
}
readonly property QtObject table: QtObject {
readonly property color cellBackground: "#000000"
readonly property color textColor: "#ffffff"
}
}
readonly property color darkSeparator: "#595959"

View file

@ -245,6 +245,7 @@ Rectangle {
width: outputDeviceButton.outputMuted ? 25 : 26
height: 22
visible: false
mipmap: true
}
ColorOverlay {
@ -319,6 +320,7 @@ Rectangle {
anchors.centerIn: parent
width: statusButton.currentStatus === "busy" ? 13 : 14
height: statusButton.currentStatus === "busy" ? 2 : 10
mipmap: true
}
ColorOverlay {
@ -352,19 +354,20 @@ Rectangle {
Item {
id: hmdButtonContainer
anchors.verticalCenter: parent.verticalCenter
anchors.right: settingsButtonContainer.left
anchors.rightMargin: 8
anchors.right: helpButtonContainer.left
anchors.rightMargin: 3
width: 48
height: width
visible: false
Image {
id: displayModeImage
source: HMD.active ? "./images/desktopMode.svg" : "./images/vrMode.svg"
source: HMD.active ? "images/desktopMode.svg" : "images/vrMode.svg"
anchors.centerIn: parent
width: HMD.active ? 25 : 26
height: HMD.active ? 22 : 14
visible: false
mipmap: true
}
ColorOverlay {
@ -417,6 +420,49 @@ Rectangle {
}
Item {
id: helpButtonContainer
anchors.verticalCenter: parent.verticalCenter
anchors.right: settingsButtonContainer.left
anchors.rightMargin: 4
width: 36
height: width
Image {
id: helpButtonImage
source: "images/questionMark.svg"
anchors.centerIn: parent
width: 13
height: 22
visible: false
mipmap: true
}
ColorOverlay {
opacity: helpButtonMouseArea.containsMouse ? 1.0 : 0.7
anchors.fill: helpButtonImage
source: helpButtonImage
color: simplifiedUI.colors.text.white
}
MouseArea {
id: helpButtonMouseArea
anchors.fill: parent
hoverEnabled: true
onEntered: {
Tablet.playSound(TabletEnums.ButtonHover);
}
onClicked: {
Tablet.playSound(TabletEnums.ButtonClick);
sendToScript({
"source": "SimplifiedTopBar.qml",
"method": "toggleHelpApp"
});
}
}
}
Item {
id: settingsButtonContainer
@ -428,11 +474,12 @@ Rectangle {
Image {
id: settingsButtonImage
source: "./images/settings.svg"
source: "images/settings.svg"
anchors.centerIn: parent
width: 22
height: 22
visible: false
mipmap: true
}
ColorOverlay {

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 57 99" style="enable-background:new 0 0 57 99;" xml:space="preserve">
<g>
<path d="M18.4,63.8c0-10.7,7.1-17.3,13.6-23.7c5-5,9.4-7.5,9.4-15.3c0-6.9-4.8-10.9-12-10.6c-7.3,0.3-12.6,4.1-14.5,11.3
c-0.5,1.9-2.1,3.3-4.1,3.3H4.3c-2.7,0-4.7-2.5-4.2-5.2C2.9,9,14,0,30.2,0C49.4,0,57,12,57,25.1c0,9.6-4.3,14.4-10.4,20.3
c-6.3,6.1-12.8,11.6-13.2,19.2l0,0c0,2.4-1.9,4.3-4.3,4.3h-6.5c-2.4,0-4.3-1.9-4.3-4.3V63.8z M14.7,88.6c0-6.3,5.6-11.1,12.2-10.5
c4.8,0.5,8.9,4.3,9.5,9.1C37.3,93.7,32.1,99,25.8,99C19.7,99,14.7,94.4,14.7,88.6z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 823 B

View file

@ -1866,6 +1866,9 @@ public:
// also clears internal reaction triggers
void updateRigControllerParameters(Rig::ControllerParameters& params);
// Don't substitute verify-fail:
virtual const QUrl& getSkeletonModelURL() const override { return _skeletonModelURL; }
public slots:
/**jsdoc

View file

@ -830,9 +830,14 @@ void Wallet::handleChallengeOwnershipPacket(QSharedPointer<ReceivedMessage> pack
}
void Wallet::sendChallengeOwnershipResponses() {
if (_pendingChallenges.size() == 0 || getSalt().length() == 0) {
if (_pendingChallenges.size() == 0) {
return;
}
if (getSalt().length() == 0) {
qCDebug(commerce) << "Not responding to ownership challenge due to missing Wallet salt";
return;
}
auto nodeList = DependencyManager::get<NodeList>();
EC_KEY* ec = readKeys(keyFilePath());

View file

@ -90,16 +90,21 @@ void Audio::setMuted(bool isMuted) {
void Audio::setMutedDesktop(bool isMuted) {
bool changed = false;
bool isHMD = qApp->isHMDMode();
withWriteLock([&] {
if (_mutedDesktop != isMuted) {
changed = true;
_mutedDesktop = isMuted;
auto client = DependencyManager::get<AudioClient>().data();
QMetaObject::invokeMethod(client, "setMuted", Q_ARG(bool, isMuted), Q_ARG(bool, false));
if (!isHMD) {
auto client = DependencyManager::get<AudioClient>().data();
QMetaObject::invokeMethod(client, "setMuted", Q_ARG(bool, isMuted), Q_ARG(bool, false));
}
}
});
if (changed) {
emit mutedChanged(isMuted);
if (!isHMD) {
emit mutedChanged(isMuted);
}
emit mutedDesktopChanged(isMuted);
}
}
@ -112,16 +117,21 @@ bool Audio::getMutedDesktop() const {
void Audio::setMutedHMD(bool isMuted) {
bool changed = false;
bool isHMD = qApp->isHMDMode();
withWriteLock([&] {
if (_mutedHMD != isMuted) {
changed = true;
_mutedHMD = isMuted;
auto client = DependencyManager::get<AudioClient>().data();
QMetaObject::invokeMethod(client, "setMuted", Q_ARG(bool, isMuted), Q_ARG(bool, false));
if (isHMD) {
auto client = DependencyManager::get<AudioClient>().data();
QMetaObject::invokeMethod(client, "setMuted", Q_ARG(bool, isMuted), Q_ARG(bool, false));
}
}
});
if (changed) {
emit mutedChanged(isMuted);
if (isHMD) {
emit mutedChanged(isMuted);
}
emit mutedHMDChanged(isMuted);
}
}
@ -386,6 +396,7 @@ void Audio::onContextChanged() {
changed = true;
}
});
if (_settingsLoaded) {
bool isMuted = isHMD ? getMutedHMD() : getMutedDesktop();
setMuted(isMuted);
@ -395,6 +406,12 @@ void Audio::onContextChanged() {
}
if (changed) {
emit contextChanged(isHMD ? Audio::HMD : Audio::DESKTOP);
bool mutedHMD = getMutedHMD();
bool mutedDesktop = getMutedDesktop();
if (mutedHMD != mutedDesktop) {
emit mutedChanged(isHMD ? mutedHMD : mutedDesktop);
}
}
}

View file

@ -33,10 +33,11 @@
return 0;
}
NSFileHandle * fh = [standardOut fileHandleForReading];
NSData * data = [fh readDataToEndOfFile];
NSString * output = [NSString stringWithUTF8String:[data bytes]];
if (output == nil) {
NSFileHandle* fh = [standardOut fileHandleForReading];
NSData* data = [fh readDataToEndOfFile];
NSString* output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (output == nil || [output length] == 0) {
NSDictionary * userInfo = @{
NSLocalizedDescriptionKey: NSLocalizedString(@"Couldn't start interface", nil)
};

View file

@ -1511,7 +1511,7 @@ void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) {
}
indicateLoadingStatus(LoadingStatus::LoadModel);
_skeletonModel->setURL(_skeletonModelURL);
_skeletonModel->setURL(getSkeletonModelURL());
}
void Avatar::setModelURLFinished(bool success) {

View file

@ -1988,7 +1988,11 @@ void AvatarData::processAvatarIdentity(QDataStream& packetStream, bool& identity
if (flagValue != _verificationFailed) {
_verificationFailed = flagValue;
identityChanged = true;
}
setSkeletonModelURL(_skeletonModelURL);
if (_verificationFailed) {
qCDebug(avatars) << "Avatar" << getSessionDisplayName() << "marked as VERIFY-FAILED";
}
};
if (identity.attachmentData != _attachmentData) {
setAttachmentData(identity.attachmentData);
@ -2016,6 +2020,18 @@ QUrl AvatarData::getWireSafeSkeletonModelURL() const {
return QUrl();
}
}
static const QString VERIFY_FAIL_MODEL { "/meshes/verifyFailed.fst" };
const QUrl& AvatarData::getSkeletonModelURL() const {
if (_verificationFailed) {
static QUrl VERIFY_FAIL_MODEL_URL = PathUtils::resourcesUrl(VERIFY_FAIL_MODEL);
return VERIFY_FAIL_MODEL_URL;
} else {
return _skeletonModelURL;
}
}
QByteArray AvatarData::packSkeletonData() const {
// Send an avatar trait packet with the skeleton data before the mesh is loaded
int avatarDataSize = 0;

View file

@ -1205,7 +1205,7 @@ public:
QByteArray identityByteArray(bool setIsReplicated = false) const;
QUrl getWireSafeSkeletonModelURL() const;
const QUrl& getSkeletonModelURL() const { return _skeletonModelURL; }
virtual const QUrl& getSkeletonModelURL() const;
const QString& getDisplayName() const { return _displayName; }
const QString& getSessionDisplayName() const { return _sessionDisplayName; }

View file

@ -330,10 +330,6 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer<ReceivedMessage>
bool displayNameChanged = false;
// In this case, the "sendingNode" is the Avatar Mixer.
avatar->processAvatarIdentity(avatarIdentityStream, identityChanged, displayNameChanged);
if (avatar->isCertifyFailed() && identityUUID != EMPTY) {
qCDebug(avatars) << "Avatar" << avatar->getSessionDisplayName() << "marked as VERIFY-FAILED";
avatar->setSkeletonModelURL(PathUtils::resourcesUrl(VERIFY_FAIL_MODEL));
}
_replicas.processAvatarIdentity(identityUUID, message->getMessage(), identityChanged, displayNameChanged);
}
}

View file

@ -187,6 +187,89 @@ function toggleSettingsApp() {
settingsAppWindow.closed.connect(onSettingsAppClosed);
}
function handleGoToAudioSettings() {
if (!settingsAppWindow) {
toggleSettingsApp();
}
settingsAppWindow.sendToQml({
"source": "simplifiedUI.js",
"method": "goToSettingsTab",
"data": {
"settingsTab": "audio"
}
});
}
var HELP_APP_MESSAGE_SOURCE = "HelpApp.qml";
function onMessageFromHelpApp(message) {
if (message.source !== HELP_APP_MESSAGE_SOURCE) {
return;
}
switch (message.method) {
case "goToAudioSettings":
handleGoToAudioSettings();
break;
default:
console.log("Unrecognized message from " + HELP_APP_MESSAGE_SOURCE + ": " + JSON.stringify(message));
break;
}
}
function onHelpAppClosed() {
if (helpAppWindow) {
helpAppWindow.fromQml.disconnect(onMessageFromHelpApp);
helpAppWindow.closed.disconnect(onHelpAppClosed);
}
helpAppWindow = false;
}
var HELP_APP_QML_PATH = Script.resourcesPath() + "qml/hifi/simplifiedUI/helpApp/HelpApp.qml";
var HELP_APP_WINDOW_TITLE = "Help";
var HELP_APP_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
var HELP_APP_WIDTH_PX = 480;
var HELP_APP_HEIGHT_PX = 615;
var HELP_APP_WINDOW_FLAGS = 0x00000001 | // Qt::Window
0x00001000 | // Qt::WindowTitleHint
0x00002000 | // Qt::WindowSystemMenuHint
0x08000000 | // Qt::WindowCloseButtonHint
0x00008000 | // Qt::WindowMaximizeButtonHint
0x00004000; // Qt::WindowMinimizeButtonHint
var helpAppWindow = false;
function toggleHelpApp() {
if (helpAppWindow) {
helpAppWindow.close();
// This really shouldn't be necessary.
// This signal really should automatically be called by the signal handler set up below.
// But fixing that requires an engine change, so this workaround will do.
onHelpAppClosed();
return;
}
helpAppWindow = Desktop.createWindow(HELP_APP_QML_PATH, {
title: HELP_APP_WINDOW_TITLE,
presentationMode: HELP_APP_PRESENTATION_MODE,
size: {
x: HELP_APP_WIDTH_PX,
y: HELP_APP_HEIGHT_PX
},
position: {
x: Math.max(Window.x + POPOUT_SAFE_MARGIN_X, Window.x + Window.innerWidth / 2 - HELP_APP_WIDTH_PX / 2),
y: Math.max(Window.y + POPOUT_SAFE_MARGIN_Y, Window.y + Window.innerHeight / 2 - HELP_APP_HEIGHT_PX / 2)
},
overrideFlags: HELP_APP_WINDOW_FLAGS
});
helpAppWindow.fromQml.connect(onMessageFromHelpApp);
helpAppWindow.closed.connect(onHelpAppClosed);
}
function updateEmoteAppBarPosition() {
if (!emoteAppBarWindow) {
return;
@ -374,6 +457,10 @@ function onMessageFromTopBar(message) {
toggleSettingsApp();
break;
case "toggleHelpApp":
toggleHelpApp();
break;
case "setOutputMuted":
setOutputMuted(message.data.outputMuted);
break;

View file

@ -239,7 +239,7 @@
<?js typedefs.forEach(function(e) {
if (e.signature) {
?>
<?js= self.partial('members.tmpl', e) ?>
<?js= self.partial('method.tmpl', e) ?>
<?js
}
else {

View file

@ -13,7 +13,10 @@ var self = this;
<?js returns.forEach(function(r) { ?>
<?js= self.partial('returns.tmpl', r) ?>
<?js });
} ?></span>
} ?></span>
<?js if (data.kind === 'typedef' && data.type && data.type.names) { ?>
<br />Type: <?js= self.partial('type.tmpl', data.type.names) ?>
<?js } ?>
</th>
</tr>
</thead>
@ -63,7 +66,7 @@ var self = this;
<?js= self.partial('augments.tmpl', data) ?>
<?js } ?>
<?js if (kind === 'event' && data.type && data.type.names) {?>
<?js if (data.kind === 'event' && data.type && data.type.names) {?>
<h5>Type:</h5>
<ul>
<li>