StructureScanEditor.qml 6.99 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
import QtQuick          2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs  1.2
import QtQuick.Extras   1.4
import QtQuick.Layouts  1.2

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Vehicle       1.0
import QGroundControl.Controls      1.0
import QGroundControl.FactControls  1.0
import QGroundControl.Palette       1.0
import QGroundControl.FlightMap     1.0

// Editor for Survery mission items
Rectangle {
    id:         _root
    height:     visible ? (editorColumn.height + (_margin * 2)) : 0
    width:      availableWidth
    color:      qgcPal.windowShadeDark
    radius:     _radius

    // The following properties must be available up the hierarchy chain
    //property real   availableWidth    ///< Width for control
    //property var    missionItem       ///< Mission Item for editor

    property real   _margin:        ScreenTools.defaultFontPixelWidth / 2
    property real   _fieldWidth:    ScreenTools.defaultFontPixelWidth * 10.5
    property var    _vehicle:       QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle : QGroundControl.multiVehicleManager.offlineEditingVehicle

    function polygonCaptureStarted() {
        missionItem.clearPolygon()
    }

    function polygonCaptureFinished(coordinates) {
        for (var i=0; i<coordinates.length; i++) {
            missionItem.addPolygonCoordinate(coordinates[i])
        }
    }

    function polygonAdjustVertex(vertexIndex, vertexCoordinate) {
        missionItem.adjustPolygonCoordinate(vertexIndex, vertexCoordinate)
    }

    function polygonAdjustStarted() { }
    function polygonAdjustFinished() { }

    QGCPalette { id: qgcPal; colorGroupEnabled: true }

51 52 53 54 55
    ExclusiveGroup {
        id: yawRadiosGroup
        onCurrentChanged: missionItem.yawVehicleToStructure = yawVehicleRadio.checked
    }

56 57 58 59 60 61 62 63
    Column {
        id:                 editorColumn
        anchors.margins:    _margin
        anchors.top:        parent.top
        anchors.left:       parent.left
        anchors.right:      parent.right
        spacing:            _margin

64 65 66 67 68 69 70 71
        QGCLabel {
            anchors.left:   parent.left
            anchors.right:  parent.right
            text:           qsTr("Note: Polygon respresents structure surface not vehicle flight path.")
            wrapMode:       Text.WordWrap
            font.pointSize: ScreenTools.smallFontPointSize
        }

72 73 74 75 76 77 78 79 80
        QGCLabel {
            anchors.left:   parent.left
            anchors.right:  parent.right
            text:           qsTr("WARNING: Photo interval is below minimum interval (%1 secs) supported by camera.").arg(missionItem.cameraMinTriggerInterval.toFixed(1))
            wrapMode:       Text.WordWrap
            color:          qgcPal.warningText
            visible:        missionItem.cameraShots > 0 && missionItem.cameraMinTriggerInterval !== 0 && missionItem.cameraMinTriggerInterval > missionItem.timeBetweenShots
        }

81 82 83 84 85 86 87
        CameraCalc {
            cameraCalc:             missionItem.cameraCalc
            vehicleFlightIsFrontal: false
            distanceToSurfaceLabel: qsTr("Scan Distance")
            frontalDistanceLabel:   qsTr("Layer Height")
            sideDistanceLabel:      qsTr("Trigger Distance")
        }
88

89 90 91 92 93 94
        GridLayout {
            anchors.left:   parent.left
            anchors.right:  parent.right
            columnSpacing:  ScreenTools.defaultFontPixelWidth / 2
            rowSpacing:     0
            columns:        3
95
            enabled:        missionItem.cameraCalc.cameraName === missionItem.cameraCalc.manualCameraName
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115

            Item { width: 1; height: 1 }
            QGCLabel { text: qsTr("Pitch") }
            QGCLabel { text: qsTr("Yaw") }

            QGCLabel {
                text:               qsTr("Gimbal")
                Layout.fillWidth:   true
            }
            FactTextField {
                fact:           missionItem.gimbalPitch
                implicitWidth:  ScreenTools.defaultFontPixelWidth * 9
            }

            FactTextField {
                fact:           missionItem.gimbalYaw
                implicitWidth:  ScreenTools.defaultFontPixelWidth * 9
            }
        }

116 117 118 119
        SectionHeader {
            id:         scanHeader
            text:       qsTr("Scan")
        }
120

121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
        Column {
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin
            visible:        scanHeader.checked

            GridLayout {
                anchors.left:   parent.left
                anchors.right:  parent.right
                columnSpacing:  _margin
                rowSpacing:     _margin
                columns:        2

                QGCLabel { text: qsTr("Layers") }
                FactTextField {
                    fact:               missionItem.layers
                    Layout.fillWidth:   true
                }

                QGCLabel { text: qsTr("Altitude") }
                FactTextField {
                    fact:               missionItem.altitude
                    Layout.fillWidth:   true
                }

                QGCCheckBox {
                    text:               qsTr("Relative altitude")
                    checked:            missionItem.altitudeRelative
                    Layout.columnSpan:  2
                    onClicked:          missionItem.altitudeRelative = checked
                }
152 153
            }

154
            QGCLabel { text: qsTr("Point camera to structure using:") }
155 156 157 158 159 160 161 162 163

            RowLayout {
                spacing: _margin

                QGCRadioButton {
                    id:             yawVehicleRadio
                    text:           qsTr("Vehicle yaw")
                    exclusiveGroup: yawRadiosGroup
                    checked:        !!missionItem.yawVehicleToStructure
DonLakeFlyer's avatar
DonLakeFlyer committed
164
                    enabled:        false
165 166 167 168 169 170 171
                }

                QGCRadioButton
                {
                    text:           qsTr("Gimbal yaw")
                    exclusiveGroup: yawRadiosGroup
                    checked:        !missionItem.yawVehicleToStructure
DonLakeFlyer's avatar
DonLakeFlyer committed
172
                    enabled:        false
173 174
                }
            }
175

176 177 178 179 180
            Item {
                height: ScreenTools.defaultFontPixelHeight / 2
                width:  1
            }

181 182 183
            QGCButton {
                text:       qsTr("Rotate entry point")
                onClicked:  missionItem.rotateEntryPoint()
184
            }
185
        } // Column - Scan
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202

        SectionHeader {
            id:     statsHeader
            text:   qsTr("Statistics")
        }

        Grid {
            columns:        2
            columnSpacing:  ScreenTools.defaultFontPixelWidth
            visible:        statsHeader.checked

            QGCLabel { text: qsTr("Photo count") }
            QGCLabel { text: missionItem.cameraShots }

            QGCLabel { text: qsTr("Photo interval") }
            QGCLabel { text: missionItem.timeBetweenShots.toFixed(1) + " " + qsTr("secs") }
        }
203 204
    } // Column
} // Rectangle