examples/declarative/toys/dynamicscene/qml/itemCreation.js
changeset 30 5dc02b23752f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/declarative/toys/dynamicscene/qml/itemCreation.js	Tue Jul 06 15:10:48 2010 +0300
@@ -0,0 +1,65 @@
+var itemComponent = null;
+var draggedItem = null;
+var startingMouse;
+var posnInWindow;
+
+function startDrag(mouse)
+{
+    posnInWindow = paletteItem.mapToItem(window, 0, 0);
+    startingMouse = { x: mouse.x, y: mouse.y }
+    loadComponent();
+}
+
+//Creation is split into two functions due to an asynchronous wait while
+//possible external files are loaded.
+
+function loadComponent() {
+    if (itemComponent != null) { // component has been previously loaded
+        createItem();
+        return;
+    }
+
+    itemComponent = Qt.createComponent(paletteItem.componentFile);
+    if (itemComponent.status == Component.Loading)  //Depending on the content, it can be ready or error immediately
+        component.statusChanged.connect(createItem);
+    else    
+        createItem();
+}
+
+function createItem() {
+    if (itemComponent.status == Component.Ready && draggedItem == null) {
+        draggedItem = itemComponent.createObject(window);
+        draggedItem.image = paletteItem.image;
+        draggedItem.x = posnInWindow.x;
+        draggedItem.y = posnInWindow.y;
+        draggedItem.z = 3;  // make sure created item is above the ground layer
+    } else if (itemComponent.status == Component.Error) {
+        draggedItem = null;
+        console.log("error creating component");
+        console.log(itemComponent.errorString());
+    }
+}
+
+function continueDrag(mouse)
+{
+    if (draggedItem == null)
+        return;
+
+    draggedItem.x = mouse.x + posnInWindow.x - startingMouse.x;
+    draggedItem.y = mouse.y + posnInWindow.y - 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.created = true;
+        draggedItem = null;
+    }
+}
+