Skip to content
SurveyItemEditor.qml 23.5 KiB
Newer Older
import QtQuick          2.3
import QtQuick.Controls 1.2
Don Gagne's avatar
Don Gagne committed
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.FactSystem    1.0
import QGroundControl.FactControls  1.0
import QGroundControl.Palette       1.0
import QGroundControl.FlightMap     1.0

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

Ricardo de Almeida Gonzaga's avatar
Ricardo de Almeida Gonzaga committed
    // 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
    property real   _cameraMinTriggerInterval:  missionItem.cameraCalc.minTriggerInterval.rawValue
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
    property bool   _polygonDone:               false
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
    property string _doneAdjusting:             qsTr("Done")
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
    property bool   _presetsAvailable:          missionItem.presetNames.length !== 0
    function polygonCaptureStarted() {
Don Gagne's avatar
Don Gagne committed
        missionItem.clearPolygon()
Don Gagne's avatar
Don Gagne committed

    function polygonCaptureFinished(coordinates) {
        for (var i=0; i<coordinates.length; i++) {
            missionItem.addPolygonCoordinate(coordinates[i])
Don Gagne's avatar
Don Gagne committed
        }
Don Gagne's avatar
Don Gagne committed

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

    QGCPalette { id: qgcPal; colorGroupEnabled: true }

    Column {
        id:                 editorColumn
        anchors.margins:    _margin
        anchors.top:        parent.top
        anchors.left:       parent.left
        anchors.right:      parent.right
Don Gagne's avatar
 
Don Gagne committed
        ColumnLayout {
DonLakeFlyer's avatar
 
DonLakeFlyer committed
            id:             wizardColumn
            anchors.left:   parent.left
            anchors.right:  parent.right
Don Gagne's avatar
 
Don Gagne committed
            spacing:        _margin
DonLakeFlyer's avatar
 
DonLakeFlyer committed
            visible:        !missionItem.surveyAreaPolygon.isValid || missionItem.wizardMode
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            ColumnLayout {
Don Gagne's avatar
 
Don Gagne committed
                Layout.fillWidth:   true
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                spacing:             _margin
                visible:            !_polygonDone

                QGCLabel {
                    Layout.fillWidth:       true
                    wrapMode:               Text.WordWrap
                    horizontalAlignment:    Text.AlignHCenter
                    text:                   qsTr("Use the Polygon Tools to create the polygon which outlines your survey area.")
                }

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                /*
                  Trial of new "done" model so leaving for now in case it comes back
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                QGCButton {
                    text:               qsTr("Done With Polygon")
                    Layout.fillWidth:   true
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                    enabled:            missionItem.surveyAreaPolygon.isValid && !missionItem.surveyAreaPolygon.traceMode
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                    onClicked: {
                        if (!_presetsAvailable) {
                            missionItem.wizardMode = false
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                            // Trial of no auto select next item
                            //editorRoot.selectNextNotReadyItem()
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                        }
                        _polygonDone = true
                    }
                }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                */
Don Gagne's avatar
 
Don Gagne committed
            }
DonLakeFlyer's avatar
 
DonLakeFlyer committed

DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            /*
            Trial of new "done" model so leaving for now in case it comes back
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            ColumnLayout {
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                Layout.fillWidth:   true
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                spacing:            _margin
                visible:            _polygonDone

                QGCLabel {
                    Layout.fillWidth:       true
                    wrapMode:               Text.WordWrap
                    horizontalAlignment:    Text.AlignHCenter
                    text:                   qsTr("Apply a Preset or click %1 for manual setup.").arg(_doneAdjusting)
                }

                QGCComboBox {
                    id:                 wizardPresetCombo
                    Layout.fillWidth:   true
                    model:              missionItem.presetNames
                }

                QGCButton {
                    Layout.fillWidth:   true
                    text:               qsTr("Apply Preset")
                    enabled:            missionItem.presetNames.length != 0
                    onClicked:          missionItem.loadPreset(wizardPresetCombo.textAt(wizardPresetCombo.currentIndex))
                }

                SectionHeader {
                    id:                 wizardPresectsTransectsHeader
                    Layout.fillWidth:   true
                    text:               qsTr("Transects")
                }

                GridLayout {
                    Layout.fillWidth:   true
                    columnSpacing:      _margin
                    rowSpacing:         _margin
                    columns:            2
                    visible:            wizardPresectsTransectsHeader.checked

                    QGCLabel { text: qsTr("Angle") }
                    FactTextField {
                        fact:                   missionItem.gridAngle
                        Layout.fillWidth:       true
                        onUpdated:              wizardPresetsAngleSlider.value = missionItem.gridAngle.value
                    }

                    QGCSlider {
                        id:                     wizardPresetsAngleSlider
                        minimumValue:           0
                        maximumValue:           359
                        stepSize:               1
                        tickmarksEnabled:       false
                        Layout.fillWidth:       true
                        Layout.columnSpan:      2
                        Layout.preferredHeight: ScreenTools.defaultFontPixelHeight * 1.5
                        onValueChanged:         missionItem.gridAngle.value = value
                        Component.onCompleted:  value = missionItem.gridAngle.value
                        updateValueWhileDragging: true
                    }

                    QGCButton {
                        Layout.columnSpan:  2
                        Layout.fillWidth:   true
                        text:               qsTr("Rotate Entry Point")
                        onClicked:          missionItem.rotateEntryPoint();
                    }
                }

                Item { height: ScreenTools.defaultFontPixelHeight; width: 1 }

                QGCButton {
                    text:               _doneAdjusting
                    Layout.fillWidth:   true
                    enabled:            missionItem.surveyAreaPolygon.isValid
                    onClicked: {
                        missionItem.wizardMode = false
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                        // Trial of no auto select next item
                        //editorRoot.selectNextNotReadyItem()
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                    }
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                }
            }
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
            */
Don Gagne's avatar
 
Don Gagne committed
        }

Don Gagne's avatar
 
Don Gagne committed
        Column {
Don Gagne's avatar
 
Don Gagne committed
            anchors.left:   parent.left
            anchors.right:  parent.right
            spacing:        _margin
DonLakeFlyer's avatar
 
DonLakeFlyer committed
            visible:        !wizardColumn.visible
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
            QGCTabBar {
                id:             tabBar
Don Gagne's avatar
 
Don Gagne committed
                anchors.left:   parent.left
                anchors.right:  parent.right
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                Component.onCompleted: currentIndex = QGroundControl.settingsManager.planViewSettings.displayPresetsTabFirst.rawValue ? 2 : 0
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                QGCTabButton { text: qsTr("Grid") }
                QGCTabButton { text: qsTr("Camera") }
                QGCTabButton { text: qsTr("Presets") }
Don Gagne's avatar
 
Don Gagne committed
            }

Don Gagne's avatar
 
Don Gagne committed
            Column {
                anchors.left:       parent.left
                anchors.right:      parent.right
                spacing:            _margin
                visible:            tabBar.currentIndex == 0

                QGCLabel {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    text:           qsTr("WARNING: Photo interval is below minimum interval (%1 secs) supported by camera.").arg(_cameraMinTriggerInterval.toFixed(1))
                    wrapMode:       Text.WordWrap
                    color:          qgcPal.warningText
                    visible:        missionItem.cameraShots > 0 && _cameraMinTriggerInterval !== 0 && _cameraMinTriggerInterval > missionItem.timeBetweenShots
Don Gagne's avatar
 
Don Gagne committed
                }

Don Gagne's avatar
 
Don Gagne committed
                CameraCalcGrid {
                    cameraCalc:                     missionItem.cameraCalc
                    vehicleFlightIsFrontal:         true
                    distanceToSurfaceLabel:         qsTr("Altitude")
                    distanceToSurfaceAltitudeMode:  missionItem.followTerrain ?
                                                        QGroundControl.AltitudeModeAboveTerrain :
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                                                        (missionItem.cameraCalc.distanceToSurfaceRelative ? QGroundControl.AltitudeModeRelative : QGroundControl.AltitudeModeAbsolute)
Don Gagne's avatar
 
Don Gagne committed
                    frontalDistanceLabel:           qsTr("Trigger Dist")
                    sideDistanceLabel:              qsTr("Spacing")
Don Gagne's avatar
 
Don Gagne committed
                }

Don Gagne's avatar
 
Don Gagne committed
                SectionHeader {
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                    id:             transectsHeader
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    text:           qsTr("Transects")
Don Gagne's avatar
 
Don Gagne committed
                }
Don Gagne's avatar
 
Don Gagne committed

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

                    QGCLabel { text: qsTr("Angle") }
                    FactTextField {
                        fact:                   missionItem.gridAngle
                        Layout.fillWidth:       true
                        onUpdated:              angleSlider.value = missionItem.gridAngle.value
                    }

                    QGCSlider {
                        id:                     angleSlider
                        minimumValue:           0
                        maximumValue:           359
                        stepSize:               1
                        tickmarksEnabled:       false
                        Layout.fillWidth:       true
                        Layout.columnSpan:      2
                        Layout.preferredHeight: ScreenTools.defaultFontPixelHeight * 1.5
                        onValueChanged:         missionItem.gridAngle.value = value
                        Component.onCompleted:  value = missionItem.gridAngle.value
                        updateValueWhileDragging: true
                    }

                    QGCLabel {
                        text:       qsTr("Turnaround dist")
                    }
                    FactTextField {
                        fact:               missionItem.turnAroundDistance
                        Layout.fillWidth:   true
                    }
Don Gagne's avatar
 
Don Gagne committed
                }
DonLakeFlyer's avatar
DonLakeFlyer committed

Don Gagne's avatar
 
Don Gagne committed
                QGCButton {
                    text:               qsTr("Rotate Entry Point")
                    onClicked:          missionItem.rotateEntryPoint();
                }
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                ColumnLayout {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    spacing:        _margin
                    visible:        transectsHeader.checked
Don Gagne's avatar
 
Don Gagne committed
                    QGCOptionsComboBox {
                        Layout.fillWidth: true

                        model: [
                            {
                                text:       qsTr("Hover and capture image"),
                                fact:       missionItem.hoverAndCapture,
                                enabled:    !missionItem.followTerrain,
                                visible:    missionItem.hoverAndCaptureAllowed
                            },
                            {
                                text:       qsTr("Refly at 90 deg offset"),
                                fact:       missionItem.refly90Degrees,
                                enabled:    !missionItem.followTerrain,
                                visible:    true
                            },
                            {
                                text:       qsTr("Images in turnarounds"),
                                fact:       missionItem.cameraTriggerInTurnAround,
                                enabled:    missionItem.hoverAndCaptureAllowed ? !missionItem.hoverAndCapture.rawValue : true,
                                visible:    true
                            },
                            {
                                text:       qsTr("Fly alternate transects"),
                                fact:       missionItem.flyAlternateTransects,
                                enabled:    true,
                                visible:    _vehicle ? (_vehicle.fixedWing || _vehicle.vtol) : false
                            },
                            {
                                text:       qsTr("Relative altitude"),
                                enabled:    missionItem.cameraCalc.isManualCamera && !missionItem.followTerrain,
                                visible:    QGroundControl.corePlugin.options.showMissionAbsoluteAltitude || (!missionItem.cameraCalc.distanceToSurfaceRelative && !missionItem.followTerrain),
                                checked:    missionItem.cameraCalc.distanceToSurfaceRelative
                            }
                        ]

                        onItemClicked: {
                            if (index == 4) {
                                missionItem.cameraCalc.distanceToSurfaceRelative = !missionItem.cameraCalc.distanceToSurfaceRelative
                                console.log(missionItem.cameraCalc.distanceToSurfaceRelative)
                            }
Don Gagne's avatar
 
Don Gagne committed
                        }
Don Gagne's avatar
 
Don Gagne committed
                    }
                }
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                SectionHeader {
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                    id:             terrainHeader
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    text:           qsTr("Terrain")
                    checked:        missionItem.followTerrain
Don Gagne's avatar
 
Don Gagne committed
                }

                ColumnLayout {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    spacing:        _margin
                    visible:        terrainHeader.checked


                    QGCCheckBox {
                        id:         followsTerrainCheckBox
                        text:       qsTr("Vehicle follows terrain")
                        checked:    missionItem.followTerrain
                        onClicked:  missionItem.followTerrain = checked
                    }

                    GridLayout {
                        Layout.fillWidth:   true
                        columnSpacing:      _margin
                        rowSpacing:         _margin
                        columns:            2
                        visible:            followsTerrainCheckBox.checked

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

                        QGCLabel { text: qsTr("Max Climb Rate") }
                        FactTextField {
                            fact:               missionItem.terrainAdjustMaxClimbRate
                            Layout.fillWidth:   true
                        }

                        QGCLabel { text: qsTr("Max Descent Rate") }
                        FactTextField {
                            fact:               missionItem.terrainAdjustMaxDescentRate
                            Layout.fillWidth:   true
Don Gagne's avatar
 
Don Gagne committed
                        }
Don Gagne's avatar
 
Don Gagne committed
                    }
Don Gagne's avatar
 
Don Gagne committed
                SectionHeader {
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                    id:             statsHeader
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    text:           qsTr("Statistics")
Don Gagne's avatar
 
Don Gagne committed
                }

                TransectStyleComplexItemStats {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    visible:        statsHeader.checked
                }
            } // Grid Column

            Column {
                anchors.left:       parent.left
                anchors.right:      parent.right
                spacing:            _margin
                visible:            tabBar.currentIndex == 1

                CameraCalcCamera {
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                    cameraCalc: missionItem.cameraCalc
Don Gagne's avatar
 
Don Gagne committed
                }
            } // Camera Column
Don Gagne's avatar
 
Don Gagne committed
            ColumnLayout {
Don Gagne's avatar
 
Don Gagne committed
                anchors.left:       parent.left
                anchors.right:      parent.right
                spacing:            _margin
                visible:            tabBar.currentIndex == 2
Don Gagne's avatar
 
Don Gagne committed
                QGCLabel {
                    Layout.fillWidth:   true
                    text:               qsTr("Presets")
                    wrapMode:           Text.WordWrap
                }
Don Gagne's avatar
 
Don Gagne committed
                QGCComboBox {
                    id:                 presetCombo
                    Layout.fillWidth:   true
                    model:              missionItem.presetNames
Don Gagne's avatar
 
Don Gagne committed
                RowLayout {
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                    QGCButton {
Don Gagne's avatar
 
Don Gagne committed
                        Layout.fillWidth:   true
Don Gagne's avatar
 
Don Gagne committed
                        text:               qsTr("Apply Preset")
                        enabled:            missionItem.presetNames.length != 0
                        onClicked:          missionItem.loadPreset(presetCombo.textAt(presetCombo.currentIndex))
Don Gagne's avatar
 
Don Gagne committed
                    }

Don Gagne's avatar
 
Don Gagne committed
                    QGCButton {
Don Gagne's avatar
 
Don Gagne committed
                        Layout.fillWidth:   true
Don Gagne's avatar
 
Don Gagne committed
                        text:               qsTr("Delete Preset")
                        enabled:            missionItem.presetNames.length != 0
DoinLakeFlyer's avatar
 
DoinLakeFlyer committed
                        onClicked:          mainWindow.showComponentDialog(deletePresetMessage, qsTr("Delete Preset"), mainWindow.showDialogDefaultWidth, StandardButton.Yes | StandardButton.No)

                        Component {
                            id: deletePresetMessage
                            QGCViewMessage {
                                message: qsTr("Are you sure you want to delete '%1' preset?").arg(presetName)
                                property string presetName: presetCombo.textAt(presetCombo.currentIndex)
                                function accept() {
                                    missionItem.deletePreset(presetName)
                                    hideDialog()
                                }
                            }
                        }
Don Gagne's avatar
 
Don Gagne committed
                    }

Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                Item { height: ScreenTools.defaultFontPixelHeight; width: 1 }
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                QGCButton {
Don Gagne's avatar
 
Don Gagne committed
                    Layout.alignment:   Qt.AlignCenter
Don Gagne's avatar
 
Don Gagne committed
                    Layout.fillWidth:   true
Don Gagne's avatar
 
Don Gagne committed
                    text:               qsTr("Save Settings As New Preset")
                    onClicked:          mainWindow.showComponentDialog(savePresetDialog, qsTr("Save Preset"), mainWindow.showDialogDefaultWidth, StandardButton.Save | StandardButton.Cancel)
Don Gagne's avatar
 
Don Gagne committed
                }

Don Gagne's avatar
 
Don Gagne committed
                SectionHeader {
                    id:                 presectsTransectsHeader
Don Gagne's avatar
 
Don Gagne committed
                    Layout.fillWidth:   true
Don Gagne's avatar
 
Don Gagne committed
                    text:               qsTr("Transects")
Don Gagne's avatar
 
Don Gagne committed
                }

Don Gagne's avatar
 
Don Gagne committed
                GridLayout {
                    Layout.fillWidth:   true
                    columnSpacing:      _margin
                    rowSpacing:         _margin
                    columns:            2
                    visible:            presectsTransectsHeader.checked
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                    QGCLabel { text: qsTr("Angle") }
                    FactTextField {
                        fact:                   missionItem.gridAngle
                        Layout.fillWidth:       true
                        onUpdated:              presetsAngleSlider.value = missionItem.gridAngle.value
                    }
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                    QGCSlider {
                        id:                     presetsAngleSlider
                        minimumValue:           0
                        maximumValue:           359
                        stepSize:               1
                        tickmarksEnabled:       false
                        Layout.fillWidth:       true
                        Layout.columnSpan:      2
                        Layout.preferredHeight: ScreenTools.defaultFontPixelHeight * 1.5
                        onValueChanged:         missionItem.gridAngle.value = value
                        Component.onCompleted:  value = missionItem.gridAngle.value
                        updateValueWhileDragging: true
                    }
Don Gagne's avatar
 
Don Gagne committed

Don Gagne's avatar
 
Don Gagne committed
                    QGCButton {
                        Layout.columnSpan:  2
                        Layout.fillWidth:   true
                        text:               qsTr("Rotate Entry Point")
                        onClicked:          missionItem.rotateEntryPoint();
                    }
Don Gagne's avatar
 
Don Gagne committed
                }

Don Gagne's avatar
 
Don Gagne committed
                SectionHeader {
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                    id:                 presetsStatsHeader
Don Gagne's avatar
 
Don Gagne committed
                    Layout.fillWidth:   true
DonLakeFlyer's avatar
 
DonLakeFlyer committed
                    text:               qsTr("Statistics")
Don Gagne's avatar
 
Don Gagne committed
                }

Don Gagne's avatar
 
Don Gagne committed
                TransectStyleComplexItemStats {
Don Gagne's avatar
 
Don Gagne committed
                    Layout.fillWidth:   true
Don Gagne's avatar
 
Don Gagne committed
                    visible:            presetsStatsHeader.checked
Don Gagne's avatar
 
Don Gagne committed
                }
Don Gagne's avatar
 
Don Gagne committed
            } // Main editing column
        } // Top level  Column
Don Gagne's avatar
 
Don Gagne committed

        Component {
            id: savePresetDialog

            QGCViewDialog {
                function accept() {
                    if (presetNameField.text != "") {
                        missionItem.savePreset(presetNameField.text)
                        hideDialog()
                    }
                }

                ColumnLayout {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    spacing:        ScreenTools.defaultFontPixelHeight

                    QGCLabel {
                        Layout.fillWidth:   true
                        text:               qsTr("Save the current settings as a named preset.")
                        wrapMode:           Text.WordWrap
                    }

                    QGCLabel {
                        text: qsTr("Preset Name")
                    }

                    QGCTextField {
                        id:                 presetNameField
                        Layout.fillWidth:   true
                    }
Don Gagne's avatar
 
Don Gagne committed
                }
            }
        }
    }
Don Gagne's avatar
 
Don Gagne committed

    KMLOrSHPFileDialog {
        id:             kmlOrSHPLoadDialog
        title:          qsTr("Select Polygon File")
        selectExisting: true

        onAcceptedForLoad: {
            missionItem.surveyAreaPolygon.loadKMLOrSHPFile(file)
            missionItem.resetState = false
            //editorMap.mapFitFunctions.fitMapViewportToMissionItems()
            close()
        }
    }