You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
5.4 KiB
138 lines
5.4 KiB
import QtQuick 2.3 |
|
import QtQuick.Controls 1.2 |
|
import QtQuick.Controls.Styles 1.4 |
|
import QtQuick.Layouts 1.2 |
|
|
|
import QGroundControl.Palette 1.0 |
|
import QGroundControl.ScreenTools 1.0 |
|
|
|
TextField { |
|
id: root |
|
textColor: qgcPal.textFieldText |
|
implicitHeight: ScreenTools.implicitTextFieldHeight |
|
activeFocusOnPress: true |
|
antialiasing: true |
|
inputMethodHints: numericValuesOnly && !ScreenTools.isiOS ? |
|
Qt.ImhNone : // iOS numeric keyboard has no done button, we can't use it. |
|
Qt.ImhFormattedNumbersOnly // Forces use of virtual numeric keyboard instead of full keyboard |
|
|
|
property bool showUnits: false |
|
property bool showHelp: false |
|
property string unitsLabel: "" |
|
property string extraUnitsLabel: "" |
|
property bool numericValuesOnly: false // true: Used as hint for mobile devices to show numeric only keyboard |
|
|
|
signal helpClicked |
|
|
|
property real _helpLayoutWidth: 0 |
|
|
|
Component.onCompleted: selectAllIfActiveFocus() |
|
onActiveFocusChanged: selectAllIfActiveFocus() |
|
|
|
QGCPalette { id: qgcPal; colorGroupEnabled: enabled } |
|
|
|
onEditingFinished: { |
|
if (ScreenTools.isMobile) { |
|
// Toss focus on mobile after Done on virtual keyboard. Prevent strange interactions. |
|
focus = false |
|
} |
|
} |
|
|
|
function selectAllIfActiveFocus() { |
|
if (activeFocus) { |
|
selectAll() |
|
} |
|
} |
|
|
|
QGCLabel { |
|
id: unitsLabelWidthGenerator |
|
text: unitsLabel |
|
width: contentWidth + parent.__contentHeight * 0.666 |
|
visible: false |
|
antialiasing: true |
|
} |
|
|
|
style: TextFieldStyle { |
|
id: tfs |
|
font.pointSize: ScreenTools.defaultFontPointSize |
|
font.family: ScreenTools.normalFontFamily |
|
renderType: ScreenTools.isWindows ? Text.QtRendering : tfs.renderType // This works around font rendering problems on windows |
|
|
|
background: Item { |
|
id: backgroundItem |
|
|
|
property bool showHelp: control.showHelp && control.activeFocus |
|
|
|
Rectangle { |
|
anchors.fill: parent |
|
anchors.bottomMargin: -1 |
|
color: "#44ffffff" |
|
} |
|
|
|
Rectangle { |
|
anchors.fill: parent |
|
border.width: enabled ? 1 : 0 |
|
border.color: root.activeFocus ? "#47b" : "#999" |
|
color: qgcPal.textField |
|
} |
|
|
|
RowLayout { |
|
id: unitsHelpLayout |
|
anchors.top: parent.top |
|
anchors.bottom: parent.bottom |
|
anchors.rightMargin: backgroundItem.showHelp ? 0 : control.__contentHeight * 0.333 |
|
anchors.right: parent.right |
|
spacing: ScreenTools.defaultFontPixelWidth / 4 |
|
|
|
Component.onCompleted: control._helpLayoutWidth = unitsHelpLayout.width |
|
onWidthChanged: control._helpLayoutWidth = unitsHelpLayout.width |
|
|
|
Text { |
|
Layout.alignment: Qt.AlignVCenter |
|
text: control.unitsLabel |
|
font.pointSize: backgroundItem.showHelp ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize |
|
font.family: ScreenTools.normalFontFamily |
|
antialiasing: true |
|
color: control.textColor |
|
visible: control.showUnits && text !== "" |
|
} |
|
|
|
Text { |
|
Layout.alignment: Qt.AlignVCenter |
|
text: control.extraUnitsLabel |
|
font.pointSize: ScreenTools.smallFontPointSize |
|
font.family: ScreenTools.normalFontFamily |
|
antialiasing: true |
|
color: control.textColor |
|
visible: control.showUnits && text !== "" |
|
} |
|
|
|
Rectangle { |
|
Layout.margins: 2 |
|
Layout.leftMargin: 0 |
|
Layout.rightMargin: 1 |
|
Layout.fillHeight: true |
|
width: helpLabel.contentWidth * 3 |
|
color: control.textColor |
|
visible: backgroundItem.showHelp |
|
|
|
QGCLabel { |
|
id: helpLabel |
|
anchors.centerIn: parent |
|
color: qgcPal.textField |
|
text: qsTr("?") |
|
} |
|
} |
|
} |
|
|
|
MouseArea { |
|
anchors.margins: ScreenTools.isMobile ? -(ScreenTools.defaultFontPixelWidth * 0.66) : 0 // Larger touch area for mobile |
|
anchors.fill: unitsHelpLayout |
|
enabled: control.activeFocus |
|
onClicked: root.helpClicked() |
|
} |
|
} |
|
|
|
padding.right: control._helpLayoutWidth //control.showUnits ? unitsLabelWidthGenerator.width : control.__contentHeight * 0.333 |
|
} |
|
}
|
|
|