QGCDynamicObjectManager.qml 1.62 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.4

import QGroundControl.Palette 1.0
import QGroundControl.ScreenTools 1.0

/// Provides a standard set of tools for dynamically create/adding/removing Qml objects
Item {
    visible: false

Don Gagne's avatar
Don Gagne committed
12 13
    property var    rgDynamicObjects:   [ ]
    property bool   empty:              rgDynamicObjects.length === 0
14

Don Gagne's avatar
Don Gagne committed
15 16 17
    Component.onDestruction: destroyObjects()

    function createObject(sourceComponent, parentObject, addMapItem) {
18
        var obj = sourceComponent.createObject(parentObject)
19 20 21
        if (obj.status === Component.Error) {
            console.log(obj.errorString())
        }
22 23
        rgDynamicObjects.push(obj)
        if (arguments.length < 3) {
Don Gagne's avatar
Don Gagne committed
24
            addMapItem = false
25
        }
Don Gagne's avatar
Don Gagne committed
26 27
        if (addMapItem) {
            parentObject.addMapItem(obj)
28 29 30 31
        }
        return obj
    }

Don Gagne's avatar
Don Gagne committed
32
    function createObjects(rgSourceComponents, parentObject, addMapItem) {
33
        if (arguments.length < 3) {
Don Gagne's avatar
Don Gagne committed
34
            addMapItem = false
35 36
        }
        for (var i=0; i<rgSourceComponents.length; i++) {
Don Gagne's avatar
Don Gagne committed
37 38 39 40 41 42 43 44 45
            createObject(rgSourceComponents[i], parentObject, addMapItem)
        }
    }

    /// Adds the object to the list. If mapControl is specified it will aso be added to the map.
    function addObject(object, mapControl) {
        rgDynamicObjects.push(object)
        if (arguments.length == 2) {
            mapControl.addMapItem(object)
46
        }
Don Gagne's avatar
Don Gagne committed
47
        return object
48 49 50 51 52 53 54 55 56
    }

    function destroyObjects() {
        for (var i=0; i<rgDynamicObjects.length; i++) {
            rgDynamicObjects[i].destroy()
        }
        rgDynamicObjects = [ ]
    }
}