MissionItemIndexLabel.qml 2.64 KB
Newer Older
1
import QtQuick                  2.5
2 3 4 5
import QtQuick.Controls         1.2
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
    onColorChanged: requestPaint()
27 28 29

    QGCPalette { id: qgcPal }

30 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
    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()
    }

65
    QGCLabel {
66 67 68 69 70 71 72
        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()
73
    }
74 75 76 77 78

    MouseArea {
        anchors.fill: parent
        onClicked: parent.clicked()
    }
79
}