6 changed files with 325 additions and 0 deletions
@ -0,0 +1,162 @@
@@ -0,0 +1,162 @@
|
||||
/**************************************************************************** |
||||
* |
||||
* (c) 2009-2018 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
|
||||
import QtQuick 2.3 |
||||
import QtQuick.Controls 1.2 |
||||
|
||||
import QGroundControl.FactSystem 1.0 |
||||
import QGroundControl.FactControls 1.0 |
||||
import QGroundControl.Palette 1.0 |
||||
import QGroundControl.Controls 1.0 |
||||
import QGroundControl.ScreenTools 1.0 |
||||
|
||||
SetupPage { |
||||
id: tuningPage |
||||
pageComponent: tuningPageComponent |
||||
|
||||
Component { |
||||
id: tuningPageComponent |
||||
|
||||
Column { |
||||
width: availableWidth |
||||
spacing: _margins |
||||
|
||||
FactPanelController { id: controller; factPanel: tuningPage.viewPanel } |
||||
|
||||
QGCPalette { id: palette; colorGroupEnabled: true } |
||||
|
||||
property real _margins: ScreenTools.defaultFontPixelHeight |
||||
|
||||
ExclusiveGroup { id: buttonGroup } |
||||
|
||||
Row { |
||||
spacing: _margins |
||||
QGCButton { |
||||
id: atcButton |
||||
text: qsTr("Attitude Controller Parameters") |
||||
exclusiveGroup: buttonGroup |
||||
checked: true |
||||
onClicked: checked = true |
||||
} |
||||
|
||||
QGCButton { |
||||
id: posButton |
||||
text: qsTr("Position Controller Parameters") |
||||
exclusiveGroup: buttonGroup |
||||
onClicked: checked = true |
||||
} |
||||
|
||||
QGCButton { |
||||
id: navButton |
||||
text: qsTr("Waypoint navigation parameters") |
||||
exclusiveGroup: buttonGroup |
||||
onClicked: checked = true |
||||
} |
||||
} |
||||
|
||||
Rectangle { |
||||
id: atcParams |
||||
visible: atcButton.checked |
||||
anchors.left: parent.left |
||||
anchors.right: parent.right |
||||
height: posColumn.height + _margins*2 |
||||
color: palette.windowShade |
||||
|
||||
Column { |
||||
id: posColumn |
||||
width: parent.width/2 |
||||
anchors.margins: _margins |
||||
anchors.left: parent.left |
||||
anchors.right: parent.right |
||||
anchors.top: parent.top |
||||
spacing: _margins*1.5 |
||||
|
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_ANG_PIT_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_ANG_RLL_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_ANG_YAW_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_PIT_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_PIT_I") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_PIT_IMAX") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_PIT_D") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_RLL_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_RLL_I") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_RLL_IMAX") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_RLL_D") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_YAW_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_YAW_I") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_YAW_IMAX") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ATC_RAT_YAW_D") } |
||||
|
||||
} // Column - Position Controller Parameters |
||||
} // Rectangle - Position Controller Parameters |
||||
|
||||
Rectangle { |
||||
id: posParams |
||||
visible: posButton.checked |
||||
anchors.left: parent.left |
||||
anchors.right: parent.right |
||||
height: velColumn.height + _margins*2 |
||||
color: palette.windowShade |
||||
|
||||
Column { |
||||
id: velColumn |
||||
anchors.margins: _margins |
||||
anchors.left: parent.left |
||||
anchors.right: parent.right |
||||
anchors.top: parent.top |
||||
spacing: _margins*1.5 |
||||
|
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "POS_XY_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "POS_Z_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "VEL_XY_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "VEL_XY_I") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "VEL_XY_IMAX") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "VEL_Z_P") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ACCEL_Z_D") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ACCEL_Z_FILT") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ACCEL_Z_I") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ACCEL_Z_IMAX") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "ACCEL_Z_P") } |
||||
|
||||
} // Column - VEL parameters |
||||
} // Rectangle - VEL parameters |
||||
|
||||
Rectangle { |
||||
id: navParams |
||||
visible: navButton.checked |
||||
anchors.left: parent.left |
||||
anchors.right: parent.right |
||||
height: wpnavColumn.height + _margins*2 |
||||
color: palette.windowShade |
||||
|
||||
Column { |
||||
id: wpnavColumn |
||||
anchors.margins: _margins |
||||
anchors.left: parent.left |
||||
anchors.right: parent.right |
||||
anchors.top: parent.top |
||||
spacing: _margins*1.5 |
||||
|
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_ACCEL") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_ACCEL_Z") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_LOIT_JERK") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_LOIT_MAXA") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_LOIT_MINA") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_LOIT_SPEED") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_RADIUS") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_SPEED") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_SPEED_DN") } |
||||
FactTextFieldSlider { fact: controller.getParameterFact(-1, "WPNAV_SPEED_UP") } |
||||
|
||||
} // Column - WPNAV parameters |
||||
} // Rectangle - WPNAV parameters |
||||
} // Column |
||||
} // Component |
||||
} // SetupView |
@ -0,0 +1,157 @@
@@ -0,0 +1,157 @@
|
||||
import QtQuick 2.7 |
||||
import QtQuick.Controls 1.2 |
||||
import QtQuick.Controls.Styles 1.4 |
||||
import QtQuick.Layouts 1.2 |
||||
|
||||
import QGroundControl.FactSystem 1.0 |
||||
import QGroundControl.Controls 1.0 |
||||
import QGroundControl.ScreenTools 1.0 |
||||
import QGroundControl.FactControls 1.0 |
||||
|
||||
|
||||
Row { |
||||
id: sliderRoot |
||||
width: parent.width |
||||
|
||||
property Fact fact: null |
||||
property var _factValue: fact ? fact.value : null |
||||
property bool _loadComplete: false |
||||
|
||||
property real _range: Math.abs(fact.max - fact.min) |
||||
property real _minIncrement: _range/50 |
||||
property int precision: 2 |
||||
|
||||
on_FactValueChanged: { |
||||
slide.value = fact.value |
||||
} |
||||
|
||||
Component.onCompleted: { |
||||
slide.minimumValue = fact.min |
||||
slide.maximumValue = fact.max |
||||
slide.value = fact.value |
||||
_loadComplete = true |
||||
} |
||||
|
||||
// Used to find width of value string |
||||
QGCLabel { |
||||
id: textMeasure |
||||
visible: false |
||||
text: fact.value.toFixed(precision) |
||||
} |
||||
|
||||
// Param name, value, description and slider adjustment |
||||
Column { |
||||
id: sliderColumn |
||||
width: parent.width |
||||
spacing: _margins/2 |
||||
|
||||
// Param name and value |
||||
Row { |
||||
spacing: _margins |
||||
|
||||
QGCLabel { |
||||
text: fact.name |
||||
font.family: ScreenTools.demiboldFontFamily |
||||
font.pointSize: ScreenTools.defaultFontPointSize * 1.1 |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
} |
||||
|
||||
// Row container for Value: xx.xx +/- (different spacing than parent) |
||||
Row { |
||||
spacing: ScreenTools.defaultFontPixelWidth |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
|
||||
QGCLabel { |
||||
text: "Value: " |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
} |
||||
|
||||
FactTextField { |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
fact: sliderRoot.fact |
||||
showUnits: false |
||||
showHelp: false |
||||
text: fact.value.toFixed(precision) |
||||
width: textMeasure.width + ScreenTools.defaultFontPixelWidth*2 // Fudged, nothing else seems to work |
||||
} |
||||
|
||||
QGCLabel { |
||||
text: fact.units |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
} |
||||
|
||||
QGCButton { |
||||
height: parent.height |
||||
width: height |
||||
text: "-" |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
|
||||
onClicked: fact.value = Math.max(Math.min(fact.value - _minIncrement, fact.max), fact.min) |
||||
} |
||||
|
||||
QGCButton { |
||||
height: parent.height |
||||
width: height |
||||
text: "+" |
||||
anchors.verticalCenter: parent.verticalCenter |
||||
|
||||
onClicked: fact.value = Math.max(Math.min(fact.value + _minIncrement, fact.max), fact.min) |
||||
} |
||||
} // Row - container for Value: xx.xx +/- (different spacing than parent) |
||||
} // Row - Param name and value |
||||
|
||||
QGCLabel { |
||||
text: fact.shortDescription |
||||
} |
||||
|
||||
// Slider, with minimum and maximum values labeled |
||||
Row { |
||||
width: parent.width |
||||
spacing: _margins |
||||
|
||||
QGCLabel { |
||||
id: minLabel |
||||
width: ScreenTools.defaultFontPixelWidth * 10 |
||||
text: fact.min.toFixed(precision) |
||||
horizontalAlignment: Text.AlignRight |
||||
} |
||||
|
||||
QGCSlider { |
||||
id: slide |
||||
width: parent.width - minLabel.width - maxLabel.width - _margins * 2 |
||||
stepSize: fact.increment ? Math.max(fact.increment, _minIncrement) : _minIncrement |
||||
tickmarksEnabled: true |
||||
|
||||
onValueChanged: { |
||||
if (_loadComplete) { |
||||
if (Math.abs(fact.value - value) >= _minIncrement) { // prevent binding loop |
||||
fact.value = value |
||||
} |
||||
} |
||||
} |
||||
|
||||
MouseArea { |
||||
anchors.fill: parent |
||||
onWheel: { |
||||
// do nothing |
||||
wheel.accepted = true; |
||||
} |
||||
onPressed: { |
||||
// propogate/accept |
||||
mouse.accepted = false; |
||||
} |
||||
onReleased: { |
||||
// propogate/accept |
||||
mouse.accepted = false; |
||||
} |
||||
} |
||||
} // Slider |
||||
|
||||
QGCLabel { |
||||
id: maxLabel |
||||
width: ScreenTools.defaultFontPixelWidth * 10 |
||||
text: fact.max.toFixed(precision) |
||||
} |
||||
} // Row - Slider with minimum and maximum values labeled |
||||
} // Column - Param name, value, description and slider adjustment |
||||
} // Row |
Loading…
Reference in new issue