diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index e9bdf62..8337a07 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -109,7 +109,9 @@
src/FlightMap/Widgets/QGCSlider.qml
src/FlightMap/QGCVideoBackground.qml
src/FlightMap/Widgets/ValuesWidget.qml
+ src/FlightMap/Widgets/VibrationWidget.qml
src/FlightMap/MapItems/VehicleMapItem.qml
+ src/FlightMap/Widgets/InstrumentSwipeView.qml
src/QmlControls/QGroundControl.ScreenTools.qmldir
src/QmlControls/ScreenTools.qml
@@ -158,5 +160,6 @@
src/Vehicle/BatteryFact.json
src/Vehicle/GPSFact.json
src/Vehicle/WindFact.json
+ src/Vehicle/VibrationFact.json
diff --git a/src/FlightMap/Widgets/InstrumentSwipeView.qml b/src/FlightMap/Widgets/InstrumentSwipeView.qml
new file mode 100644
index 0000000..5a2fd17
--- /dev/null
+++ b/src/FlightMap/Widgets/InstrumentSwipeView.qml
@@ -0,0 +1,105 @@
+import QtQuick 2.5
+import QtQuick.Controls 1.4
+
+import QGroundControl.Palette 1.0
+import QGroundControl.ScreenTools 1.0
+import QGroundControl.FlightMap 1.0
+
+Item {
+ id: _root
+ clip: true
+ height: valuesPage.height + pageIndicatorRow.anchors.topMargin + pageIndicatorRow.height
+
+ property var qgcView ///< QGCView to use for showing dialogs
+ property color textColor
+ property color backgroundColor
+ property var maxHeight ///< Maximum height that should be taken, smaller than this is ok
+
+ property real _margins: ScreenTools.defaultFontPixelWidth / 2
+
+ ValuesWidget {
+ id: valuesPage
+ width: _root.width
+ qgcView: _root.qgcView
+ textColor: _root.textColor
+ maxHeight: _root.maxHeight
+ }
+
+ VibrationWidget {
+ id: vibrationPage
+ anchors.left: valuesPage.right
+ width: _root.width
+ textColor: _root.textColor
+ backgroundColor: _root.backgroundColor
+ maxHeight: _root.maxHeight
+ }
+
+ Row {
+ id: pageIndicatorRow
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ spacing: _margins
+ visible: multiVehicleManager.activeVehicle
+
+ Rectangle {
+ id: valuesPageIndicator
+ height: radius * 2
+ width: radius * 2
+ radius: 2.5
+ border.color: textColor
+ border.width: 1
+ color: textColor
+ }
+
+ Rectangle {
+ id: vibrationPageIndicator
+ height: radius * 2
+ width: radius * 2
+ radius: 2.5
+ border.color: textColor
+ border.width: 1
+ color: "transparent"
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+
+ property real xDragStart
+ property real xValuesPageSave
+
+ onPressed: {
+ if (mouse.button == Qt.LeftButton) {
+ mouse.accepted = true
+ xDragStart = mouse.x
+ xValuesPageSave = valuesPage.x
+ }
+ }
+
+ onPositionChanged: {
+ valuesPage.x = xValuesPageSave + mouse.x - xDragStart
+ }
+
+ onReleased: {
+ if (mouse.x < xDragStart) {
+ if (xValuesPageSave == 0) {
+ valuesPage.x = -valuesPage.width
+ _root.height = vibrationPage.height + pageIndicatorRow.anchors.topMargin + pageIndicatorRow.height
+ valuesPageIndicator.color = "transparent"
+ vibrationPageIndicator.color = textColor
+ } else {
+ valuesPage.x = xValuesPageSave
+ }
+ } else {
+ if (xValuesPageSave != 0) {
+ valuesPage.x = 0
+ _root.height = valuesPage.height + pageIndicatorRow.anchors.topMargin + pageIndicatorRow.height
+ valuesPageIndicator.color = textColor
+ vibrationPageIndicator.color = "transparent"
+ } else {
+ valuesPage.x = xValuesPageSave
+ }
+ }
+ }
+ }
+}
diff --git a/src/FlightMap/Widgets/QGCInstrumentWidget.qml b/src/FlightMap/Widgets/QGCInstrumentWidget.qml
index c087604..a4131f3 100644
--- a/src/FlightMap/Widgets/QGCInstrumentWidget.qml
+++ b/src/FlightMap/Widgets/QGCInstrumentWidget.qml
@@ -39,7 +39,7 @@ Rectangle {
height: compass.y + compass.height + _topBottomMargin
width: size
radius: size / 2
- color: isSatellite ? Qt.rgba(1,1,1,0.75) : Qt.rgba(0,0,0,0.75)
+ color: _backgroundColor
property alias heading: compass.heading
property alias rollAngle: attitude.rollAngle
@@ -56,12 +56,13 @@ Rectangle {
property real _defaultSize: ScreenTools.defaultFontPixelSize * (9)
- property real _sizeRatio: ScreenTools.isTinyScreen ? (size / _defaultSize) * 0.5 : size / _defaultSize
- property real _bigFontSize: ScreenTools.defaultFontPixelSize * 2.5 * _sizeRatio
- property real _normalFontSize:ScreenTools.defaultFontPixelSize * 1.5 * _sizeRatio
- property real _labelFontSize: ScreenTools.defaultFontPixelSize * 0.75 * _sizeRatio
- property real _spacing: ScreenTools.defaultFontPixelSize * 0.33
- property real _topBottomMargin: (size * 0.05) / 2
+ property color _backgroundColor: isSatellite ? Qt.rgba(1,1,1,0.75) : Qt.rgba(0,0,0,0.75)
+ property real _sizeRatio: ScreenTools.isTinyScreen ? (size / _defaultSize) * 0.5 : size / _defaultSize
+ property real _bigFontSize: ScreenTools.defaultFontPixelSize * 2.5 * _sizeRatio
+ property real _normalFontSize: ScreenTools.defaultFontPixelSize * 1.5 * _sizeRatio
+ property real _labelFontSize: ScreenTools.defaultFontPixelSize * 0.75 * _sizeRatio
+ property real _spacing: ScreenTools.defaultFontPixelSize * 0.33
+ property real _topBottomMargin: (size * 0.05) / 2
property real _availableValueHeight: maxHeight - (attitude.height + _spacer1.height + _spacer2.height + compass.height + (_spacing * 4))
MouseArea {
@@ -87,16 +88,27 @@ Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
}
- ValuesWidget {
+ InstrumentSwipeView {
id: _valuesWidget
anchors.topMargin: _spacing
anchors.top: _spacer1.bottom
width: parent.width
qgcView: instrumentPanel.qgcView
textColor: isSatellite ? "black" : "white"
+ backgroundColor: _backgroundColor
maxHeight: _availableValueHeight
}
+ Component {
+ id: valuesPage
+
+ Rectangle {
+ width: 100
+ height: 100
+ color: index == 0 ? "red" : "blue"
+ }
+ }
+
Rectangle {
id: _spacer2
anchors.topMargin: _spacing
diff --git a/src/FlightMap/Widgets/VibrationWidget.qml b/src/FlightMap/Widgets/VibrationWidget.qml
new file mode 100644
index 0000000..8c16c8a
--- /dev/null
+++ b/src/FlightMap/Widgets/VibrationWidget.qml
@@ -0,0 +1,188 @@
+/*=====================================================================
+
+QGroundControl Open Source Ground Control Station
+
+(c) 2009, 2015 QGROUNDCONTROL PROJECT
+
+This file is part of the QGROUNDCONTROL project
+
+ QGROUNDCONTROL is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ QGROUNDCONTROL is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QGROUNDCONTROL. If not, see .
+
+======================================================================*/
+
+import QtQuick 2.4
+import QtQuick.Controls 1.4
+
+import QGroundControl.Controls 1.0
+import QGroundControl.ScreenTools 1.0
+import QGroundControl.FactSystem 1.0
+import QGroundControl.Controllers 1.0
+import QGroundControl.Palette 1.0
+import QGroundControl 1.0
+
+QGCFlickable {
+ id: _root
+ visible: _activeVehicle
+ height: Math.min(maxHeight, innerItem.height)
+ contentHeight: innerItem.height
+ flickableDirection: Flickable.VerticalFlick
+ clip: true
+
+ property color textColor
+ property color backgroundColor
+ property var maxHeight
+
+ property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
+ property real _margins: ScreenTools.defaultFontPixelWidth / 2
+ property real _barWidth: Math.round(ScreenTools.defaultFontPixelWidth * 3)
+
+ readonly property real _barMinimum: 0.0
+ readonly property real _barMaximum: 90.0
+ readonly property real _barBadValue: 60.0
+
+ QGCPalette { id:qgcPal; colorGroupEnabled: true }
+
+ Item {
+ id: innerItem
+ width: parent.width
+ height: barRow.y + barRow.height
+
+ QGCLabel {
+ id: title
+ color: textColor
+ text: "Vibe"
+ anchors.horizontalCenter: barRow.horizontalCenter
+ }
+
+ Row {
+ id: barRow
+ anchors.margins: _margins
+ anchors.top: title.bottom
+ anchors.left: parent.left
+ spacing: _margins
+
+ Column {
+ ProgressBar {
+ id: xBar
+ height: 50
+ orientation: Qt.Vertical
+ minimumValue: _barMinimum
+ maximumValue: _barMaximum
+ value: _activeVehicle ? _activeVehicle.vibration.xAxis.value : 0
+ }
+
+ QGCLabel {
+ id: xBarLabel
+ color: textColor
+ text: "X"
+ anchors.horizontalCenter: xBar.horizontalCenter
+ }
+ }
+
+ Column {
+ ProgressBar {
+ id: yBar
+ height: 50
+ orientation: Qt.Vertical
+ minimumValue: _barMinimum
+ maximumValue: _barMaximum
+ value: _activeVehicle ? _activeVehicle.vibration.yAxis.value : 0
+ }
+
+ QGCLabel {
+ anchors.horizontalCenter: yBar.horizontalCenter
+ color: textColor
+ text: "Y"
+ }
+ }
+
+ Column {
+ ProgressBar {
+ id: zBar
+ height: 50
+ orientation: Qt.Vertical
+ minimumValue: _barMinimum
+ maximumValue: _barMaximum
+ value: _activeVehicle ? _activeVehicle.vibration.zAxis.value : 0
+ }
+
+ QGCLabel {
+ anchors.horizontalCenter: zBar.horizontalCenter
+ color: textColor
+ text: "Z"
+ }
+ }
+ } // Row
+
+ // Max vibe indication line at 60
+ Rectangle {
+ anchors.topMargin: xBar.height * (1.0 - ((_barBadValue - _barMinimum) / (_barMaximum - _barMinimum)))
+ anchors.top: barRow.top
+ anchors.left: barRow.left
+ anchors.right: barRow.right
+ width: barRow.width
+ height: 1
+ color: "red"
+
+ Component.onCompleted: console.log(anchors.topMargin, xBar.height, _barBadValue, _barMaximum, _barMinimum)
+ }
+
+ QGCLabel {
+ id: clipLabel
+ anchors.margins: _margins
+ anchors.left: barRow.right
+ anchors.right: parent.right
+ color: textColor
+ text: "Clip count"
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ Column {
+ id: clipColumn
+ anchors.top: barRow.top
+ anchors.horizontalCenter: clipLabel.horizontalCenter
+
+ QGCLabel {
+ text: "Accel 1: " + (_activeVehicle ? _activeVehicle.vibration.clipCount1.valueString : "")
+ color: textColor
+ }
+
+ QGCLabel {
+ text: "Accel 2: " + (_activeVehicle ? _activeVehicle.vibration.clipCount2.valueString : "")
+ color: textColor
+ }
+
+ QGCLabel {
+ text: "Accel 2: " + (_activeVehicle ? _activeVehicle.vibration.clipCount3.valueString : "")
+ color: textColor
+ }
+ }
+
+ // Not available overlay
+ Rectangle {
+ anchors.fill: parent
+ color: backgroundColor
+ opacity: 0.95
+ visible: _activeVehicle ? isNaN(_activeVehicle.vibration.xAxis.value) : false
+
+ QGCLabel {
+ anchors.fill: parent
+ text: "Not Available"
+ color: textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+ } // Item
+} // QGCFLickable
diff --git a/src/FlightMap/qmldir b/src/FlightMap/qmldir
index f7dfa06..d708499 100644
--- a/src/FlightMap/qmldir
+++ b/src/FlightMap/qmldir
@@ -5,6 +5,7 @@ FlightMap 1.0 FlightMap.qml
QGCVideoBackground 1.0 QGCVideoBackground.qml
# Widgets
+InstrumentSwipeView 1.0 InstrumentSwipeView.qml
QGCArtificialHorizon 1.0 QGCArtificialHorizon.qml
QGCAttitudeHUD 1.0 QGCAttitudeHUD.qml
QGCAttitudeWidget 1.0 QGCAttitudeWidget.qml
@@ -14,6 +15,7 @@ QGCInstrumentWidgetAlternate 1.0 QGCInstrumentWidgetAlternate.qml
QGCPitchIndicator 1.0 QGCPitchIndicator.qml
QGCSlider 1.0 QGCSlider.qml
ValuesWidget 1.0 ValuesWidget.qml
+VibrationWidget 1.0 VibrationWidget.qml
# Map items
MissionItemIndicator 1.0 MissionItemIndicator.qml