QGCTextField.qml 4.29 KB
Newer Older
1 2
import QtQuick                  2.3
import QtQuick.Controls         1.2
3
import QtQuick.Controls.Styles  1.4
4
import QtQuick.Layouts          1.2
5

6 7
import QGroundControl.Palette       1.0
import QGroundControl.ScreenTools   1.0
8 9

TextField {
10 11
    id: root

12 13
    property bool   showUnits:  false
    property bool   showHelp:   false
14
    property string unitsLabel: ""
15

16 17 18 19
    signal helpClicked

    property real _helpLayoutWidth: 0

20 21 22 23 24 25
    Component.onCompleted: {
        if (typeof qgcTextFieldforwardKeysTo !== 'undefined') {
            root.Keys.forwardTo = [qgcTextFieldforwardKeysTo]
        }
    }

26
    QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
27

28
    textColor:          qgcPal.textFieldText
29

30
    implicitHeight: ScreenTools.implicitTextFieldHeight
31

32 33 34 35 36 37 38
    onEditingFinished: {
        if (ScreenTools.isMobile) {
            // Toss focus on mobile after Done on virtual keyboard. Prevent strange interactions.
            focus = false
        }
    }

Don Gagne's avatar
Don Gagne committed
39
    QGCLabel {
40 41
        id:             unitsLabelWidthGenerator
        text:           unitsLabel
dogmaphobic's avatar
dogmaphobic committed
42
        width:          contentWidth + parent.__contentHeight * 0.666
43 44
        visible:        false
        antialiasing:   true
Don Gagne's avatar
Don Gagne committed
45
    }
46

Don Gagne's avatar
Don Gagne committed
47
    style: TextFieldStyle {
48
        font.pointSize: ScreenTools.defaultFontPointSize
Don Gagne's avatar
Don Gagne committed
49 50 51
        background: Item {
            id: backgroundItem

52 53
            property bool showHelp: control.showHelp && control.activeFocus

Don Gagne's avatar
Don Gagne committed
54
            Rectangle {
dogmaphobic's avatar
dogmaphobic committed
55 56 57
                anchors.fill:           parent
                anchors.bottomMargin:   -1
                color:                  "#44ffffff"
Don Gagne's avatar
Don Gagne committed
58 59 60
            }

            Rectangle {
dogmaphobic's avatar
dogmaphobic committed
61 62
                anchors.fill:           parent
                border.color:           control.activeFocus ? "#47b" : "#999"
63
                color:                  qgcPal.textField
Don Gagne's avatar
Don Gagne committed
64 65
            }

66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
            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:                4

                Component.onCompleted:  control._helpLayoutWidth = unitsHelpLayout.width
                onWidthChanged:         control._helpLayoutWidth = unitsHelpLayout.width

                Text {
                    anchors.verticalCenter: parent.verticalCenter
                    text:                   control.unitsLabel
                    font.pointSize:         backgroundItem.showHelp ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize
                    font.family:            ScreenTools.normalFontFamily
                    antialiasing:           true
                    color:                  control.textColor
                    visible:                control.showUnits
                }

                Rectangle {
                    anchors.margins:    2
                    anchors.top:        parent.top
                    anchors.bottom:     parent.bottom
                    anchors.right:      parent.right
                    width:              height * 0.75
                    color:              control.textColor
                    radius:             2
                    visible:            backgroundItem.showHelp

                    QGCLabel {
                        anchors.fill:           parent
                        verticalAlignment:      Text.AlignVCenter
                        horizontalAlignment:    Text.AlignHCenter
                        color:                  qgcPal.textField
                        text:                   "?"
                    }
                }
            }
106

107
            MouseArea {
Don Gagne's avatar
Don Gagne committed
108 109 110 111
                anchors.margins:    ScreenTools.isMobile ? -(ScreenTools.defaultFontPixelWidth * 0.66) : 0 // Larger touch area for mobile
                anchors.fill:       unitsHelpLayout
                enabled:            control.activeFocus
                onClicked:          root.helpClicked()
Don Gagne's avatar
Don Gagne committed
112 113 114
            }
        }

115
        padding.right: control._helpLayoutWidth //control.showUnits ? unitsLabelWidthGenerator.width : control.__contentHeight * 0.333
Don Gagne's avatar
Don Gagne committed
116
    }
Don Gagne's avatar
Don Gagne committed
117 118

    onActiveFocusChanged: {
Don Gagne's avatar
Don Gagne committed
119
        if (!ScreenTools.isMobile && activeFocus) {
Don Gagne's avatar
Don Gagne committed
120 121 122
            selectAll()
        }
    }
123
}