All pastes #2074157 Raw Edit

Anonymous

public text v1 · immutable
#2074157 ·published 2011-06-03 15:56 UTC
rendered paste body
import QtQuick 1.0
import MeeGo.App.socialdemo 0.1
import Qt 4.7


Flickable {
    id: flickable
    clip: true
    contentWidth: root.width; contentHeight:  root.height

    property variant model: null
    property Component delegateItem: null

    Connections {
        id: connectionManager
        target: model
        onRowsInserted: {
            root.clear()
            root.fill()
        }
    }

    function getItem(index) {
        return root.children[index];
    }

    Item {
        id: root
        width: 100
        height: 100

        property Item selectedItem: null

        function clear() {
            for (var i = 0; i < root.children.length; i++) {
                console.log("destroying object "+i+root.children[i]);
                root.children[i].destroy();
                root.children[i] = null;
            }
        }

        function fill () {
            console.log("fill called");
            var lx = 0
            var ly = 0
            var hx = 0
            var hy = 0

            var T = 0;
            var R = 0;

            var newlist = new Array();

            for (var i = 0; i < model.rowCount(); i++) {
                if (delegateItem.status == Component.Ready) {
                    var obj = delegateItem.createObject(root);
                    newlist.push(obj);

                    // XXX: Unfornutly, we should pass properties by hand
                    obj["displayName"] = (model.data(i, ContactModel.DisplayNameRole))
                    obj["presenceMessage"] = (model.data(i, ContactModel.PresenceMessageRole))
                    obj["avatarImage"] = (model.data(i, ContactModel.AvatarImageRole))
                    obj["uuid"] = (model.data(i, ContactModel.UuidRole))
                    obj["index"] = i

                    var divs = (1 + 3*Math.log(i))
                    T += Math.PI / divs
                    R = 20 + 20*T;

                    obj.x = - R*Math.cos(T)
                    obj.y = + R*Math.sin(T)

                    if (obj.x < lx)
                        lx = obj.x
                    if (obj.x > hx)
                        hx = obj.x

                    if (obj.y < ly)
                        ly = obj.y
                    if (obj.y > hy)
                        hy = obj.y
                }
            }


            width = hx - lx + 80;
            height = hy - ly + 120;
            // Repositioning elements
            // It should be done on the latest loop, however I couldn't find a way
            // to do that there.

            for (var i = 0; i< model.rowCount(); i++) {
                var object = newlist[i];
                object.x = object.x + width / 2;
                object.y = object.y + height / 2;
            }

            contentX = width / 2
            contentY = height / 2
            console.log("fill done"+root.children.length);
        }
    }
}