packages feed

hsqml-demo-samples-0.3.4.0: qml/model1.qml

import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0
import HsQML.Model 1.0

ColumnLayout {
    spacing: 1;

    Text {
        Layout.fillWidth: true;
        text: 'Step 1) Enter a valid JSON array of values.';
    }
    TextField {
        id: input;
        Layout.fillWidth: true;
        text: '[]';

        property var json : null;
        onTextChanged: {
            try {
                json = JSON.parse(text);
                if (!(json instanceof Array)) {
                    json = null;
                }
            }
            catch (e) {
                json = null;
            }
        }
    }

    Text {
        Layout.fillWidth: true;
        text: 'Step 2) Select the mode for calculating model changes.'
    }
    ComboBox {
        id: modeSelector;
        Layout.fillWidth: true;
        model: ListModel {
            ListElement { text: 'By Reset'; mode: AutoListModel.ByReset;}
            ListElement { text: 'By Index'; mode: AutoListModel.ByIndex;}
            ListElement { text: 'By Key'; mode: AutoListModel.ByKey;}
            ListElement {
                text: 'By Key (No Reorder)';
                mode: AutoListModel.ByKeyNoReorder;
            }
        }
    }

    Text {
        Layout.fillWidth: true;
        text: 'Step 3) Click the button to change the model.'
    }
    Button {
        Layout.fillWidth: true;
        text: 'Update Model';
        enabled: input.json != null;
        onClicked: autoModel.source = input.json;
    }

    Rectangle {
        Layout.fillWidth: true;
        Layout.fillHeight: true;
        Layout.preferredWidth: 300;
        Layout.minimumHeight: 30;
        color: 'lightblue';

        ListView {
            id: view;
            anchors.fill: parent;
            orientation: ListView.Horizontal;
            model: AutoListModel {
                id: autoModel;
                mode: modeSelector.model.get(modeSelector.currentIndex).mode;
            }
            delegate: Item {
                width: 30; height: 30;
                clip: true;

                Rectangle {
                    anchors.fill: parent;
                    border.width: 1;
                    border.color: 'white';
                    color: 'blue';
                    opacity: 0.5;
                }

                Text {
                    anchors.centerIn: parent;
                    font.pixelSize: 25;
                    text: String(modelData);
                }
            }
            displaced: Transition {
                NumberAnimation { properties: "x,y"; duration: 1000; }
                NumberAnimation { properties: "scale"; duration: 1000; to: 1; }
            }
            move: Transition {
                NumberAnimation { properties: "x,y"; duration: 1000; }
                NumberAnimation { properties: "scale"; duration: 1000; to: 1; }
            }
            add: Transition {
                NumberAnimation {
                    properties: "scale"; duration: 1000; from: 0; to: 1;
                }
            }
            remove: Transition {
                NumberAnimation {
                    properties: "scale"; duration: 1000; to: 0;
                }
            }
        }
    }
}