3 changed files with 159 additions and 0 deletions
@ -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