summaryrefslogtreecommitdiffstats
path: root/examples/declarative/dynamic/qml/itemCreation.js
blob: 4fa0d9f12537a320eb0f5fa01f42de444a691eee (plain)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
var itemComponent = null;
var draggedItem = null;
var startingMouse;
var startingZ;
//Until QT-2385 is resolved we need to convert to scene coordinates manually
var xOffset;
var yOffset;
function setSceneOffset()
{
    xOffset = 0;
    yOffset = 0;
    var p = itemButton;
    while(p != window){
        xOffset += p.x;
        yOffset += p.y;
        p = p.parent;
    }
}

function startDrag(mouse)
{
    setSceneOffset();
    startingMouse = { x: mouse.x, y: mouse.y }
    loadComponent();
}

//Creation is split into two functions due to an asyncronous wait while
//possible external files are loaded.

function loadComponent() {
    if (itemComponent != null) //Already loaded the component
        createItem();

    itemComponent = Qt.createComponent(itemButton.file);
    //print(itemButton.file)
    if(itemComponent.isLoading){
        component.statusChanged.connect(finishCreation);
    }else{//Depending on the content, it can be ready or error immediately
        createItem();
    }
}

function createItem() {
    if (itemComponent.isReady && draggedItem == null) {
        draggedItem = itemComponent.createObject();
        draggedItem.parent = window;
        draggedItem.image = itemButton.image;
        draggedItem.x = xOffset;
        draggedItem.y = yOffset;
        startingZ = draggedItem.z;
        draggedItem.z = 4;//On top
    } else if (itemComponent.isError) {
        draggedItem = null;
        print("error creating component");
        print(component.errorsString());
    }
}

function moveDrag(mouse)
{
    if(draggedItem == null)
        return;

    draggedItem.x = mouse.x + xOffset - startingMouse.x;
    draggedItem.y = mouse.y + yOffset - startingMouse.y;
}

function endDrag(mouse)
{
    if(draggedItem == null)
        return;

    if(draggedItem.x + draggedItem.width > toolbox.x){ //Don't drop it in the toolbox
        draggedItem.destroy();
        draggedItem = null;
    }else{
        draggedItem.z = startingZ;
        draggedItem.created = true;
        draggedItem = null;
    }
}