MissionItemIndexLabel.qml 2.94 KB
Newer Older
1 2
import QtQuick                  2.7
import QtQuick.Controls         2.1
3 4 5
import QtQuick.Controls.Styles  1.2

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

8 9 10 11
Canvas {
    id:     root
    width:  _width + (_singleChar ? 0 : _label.width)
    height: specifiesCoordinate ? (_width * 1.5) : _width
12

13 14
    signal clicked

15 16 17 18 19 20 21 22 23 24
    property alias  label:                  _label.text
    property bool   checked:                false
    property bool   small:                  false
    property var    color:                  checked ? "green" : qgcPal.mapButtonHighlight
    property real   anchorPointX:           _width / 2
    property real   anchorPointY:           _width * 1.5
    property bool   specifiesCoordinate:    true

    property real _width:       small ? ScreenTools.defaultFontPixelHeight * ScreenTools.smallFontPointRatio * 1.25 : ScreenTools.defaultFontPixelHeight * 1.25
    property bool _singleChar:  _label.text.length <= 1
25

26

27
    onColorChanged: requestPaint()
28 29 30

    QGCPalette { id: qgcPal }

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
    function paintSingleCoordinate(context) {
        context.arc(_width / 2, _width / 2, _width / 2, (Math.PI / 8) * 7, Math.PI / 8);
        context.lineTo(_width / 2, _width * 1.5)
    }

    function paintSingleNoCoordinate(context) {
        context.arc(_width / 2, _width / 2, _width / 2, Math.PI * 2, 0);
    }

    function paintMultipleCoordinate(context) {
        context.arc(_width / 2, _width / 2, _width / 2, (Math.PI / 8) * 7, (Math.PI / 2) * 3);
        context.lineTo(_label.width, 0)
        context.arc(_label.width, _width / 2, _width / 2, (Math.PI / 2) * 3, Math.PI / 2);
        context.lineTo((_width / 4) * 3, _width)
        context.lineTo(_width / 2, _width * 1.5)
    }

    onPaint: {
        var context = getContext("2d")
        context.reset()
        context.beginPath()
        if (_singleChar) {
            if (specifiesCoordinate) {
                paintSingleCoordinate(context)
            } else {
                paintSingleNoCoordinate(context)
            }
        } else {
            paintMultipleCoordinate(context)
        }
        context.closePath()
        context.fillStyle = color
        context.fill()
    }

66
    QGCLabel {
67 68 69 70 71 72 73
        id:             _label
        x:              Math.round((_width / 2) - (_singleChar ? (width / 2) : (ScreenTools.defaultFontPixelWidth / 2)))
        y:              Math.round((_width / 2) - (height / 2))
        color:          "white"
        font.pointSize: small ? ScreenTools.smallFontPointSize : ScreenTools.defaultFontPointSize

        onWidthChanged: requestPaint()
74
    }
75 76

    MouseArea {
77 78 79 80 81 82 83 84
        anchors.leftMargin:     -_expandMargin
        anchors.rightMargin:    _expandMargin
        anchors.topMargin:      -_expandMargin
        anchors.bottomMargin:   _expandMargin
        anchors.fill:           parent
        onClicked:              parent.clicked()

        property real _expandMargin: ScreenTools.isMobile ? ScreenTools.defaultFontPixelWidth : 0
85
    }
86
}