diff options
Diffstat (limited to 'examples/declarative/listview/dynamic.qml')
-rw-r--r-- | examples/declarative/listview/dynamic.qml | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/examples/declarative/listview/dynamic.qml b/examples/declarative/listview/dynamic.qml new file mode 100644 index 0000000..101b708 --- /dev/null +++ b/examples/declarative/listview/dynamic.qml @@ -0,0 +1,160 @@ +import Qt 4.6 +import "content" +import "../scrollbar" + +Rectangle { + width: 640; height: 480 + color: "#343434" + + ListModel { + id: fruitModel + ListElement { + name: "Apple"; cost: 2.45 + attributes: [ + ListElement { description: "Core" }, + ListElement { description: "Deciduous" } + ] + } + ListElement { + name: "Banana"; cost: 1.95 + attributes: [ + ListElement { description: "Tropical" }, + ListElement { description: "Seedless" } + ] + } + ListElement { + name: "Cumquat"; cost: 3.25 + types: [ "Small", "Smaller" ] + attributes: [ + ListElement { description: "Citrus" } + ] + } + ListElement { + name: "Durian"; cost: 9.95 + attributes: [ + ListElement { description: "Tropical" }, + ListElement { description: "Smelly" } + ] + } + ListElement { + name: "Elderberry"; cost: 0.05 + attributes: [ + ListElement { description: "Berry" } + ] + } + ListElement { + name: "Fig"; cost: 0.25 + attributes: [ + ListElement { description: "Flower" } + ] + } + } + + Component { + id: fruitDelegate + Item { + width: parent.width; height: 55 + + Column { + id: moveButtons; x: 5; width: childrenRect.width; anchors.verticalCenter: parent.verticalCenter + Image { source: "content/pics/go-up.png" + MouseRegion { anchors.fill: parent; onClicked: fruitModel.move(index,index-1,1) } + } + Image { source: "content/pics/go-down.png" + MouseRegion { anchors.fill: parent; onClicked: fruitModel.move(index,index+1,1) } + } + } + + Column { + anchors { right: itemButtons.left; verticalCenter: parent.verticalCenter; left: moveButtons.right; leftMargin: 10 } + Text { + id: label; font.bold: true; text: name; elide: Text.ElideRight; font.pixelSize: 15 + width: parent.width; color: "White" + } + Row { + spacing: 5 + Repeater { model: attributes; Component { Text { text: description; color: "White" } } } + } + } + + Row { + id: itemButtons + anchors.right: removeButton.left; anchors.rightMargin: 35; spacing: 10 + width: childrenRect.width; anchors.verticalCenter: parent.verticalCenter + Image { source: "content/pics/list-add.png" + ClickAutoRepeating { id: clickUp; anchors.fill: parent; onClicked: fruitModel.set(index,"cost",Number(cost)+0.25) } + scale: clickUp.isPressed ? 0.9 : 1; transformOrigin: Item.Center + } + Text { id: costText; text: '$'+Number(cost).toFixed(2); font.pixelSize: 15; color: "White"; font.bold: true; } + Image { source: "content/pics/list-remove.png" + ClickAutoRepeating { id: clickDown; anchors.fill: parent; onClicked: fruitModel.set(index,"cost",Math.max(0,Number(cost)-0.25)) } + scale: clickDown.isPressed ? 0.9 : 1; transformOrigin: Item.Center + } + } + Image { + id: removeButton; source: "content/pics/archive-remove.png" + anchors { verticalCenter: parent.verticalCenter; right: parent.right; rightMargin: 10 } + MouseRegion { anchors.fill:parent; onClicked: fruitModel.remove(index) } + } + } + } + + ListView { + id: view + model: fruitModel; delegate: fruitDelegate + anchors { top: parent.top; left: parent.left; right: parent.right; bottom: buttons.top } + } + + // Attach scrollbar to the right edge of the view. + ScrollBar { + id: verticalScrollBar + opacity: 0 + orientation: "Vertical" + position: view.visibleArea.yPosition + pageSize: view.visibleArea.heightRatio + width: 8 + height: view.height + anchors.right: view.right + // Only show the scrollbar when the view is moving. + states: [ + State { + name: "ShowBars"; when: view.moving + PropertyChanges { target: verticalScrollBar; opacity: 1 } + } + ] + transitions: [ Transition { NumberAnimation { matchProperties: "opacity"; duration: 400 } } ] + } + + Row { + x: 8; width: childrenRect.width + height: childrenRect.height + anchors { bottom: parent.bottom; bottomMargin: 8 } + spacing: 8 + id: buttons + Image { source: "content/pics/archive-insert.png" + MouseRegion { anchors.fill: parent; + onClicked: { + fruitModel.append({ + "name":"Pizza Margarita", + "cost":5.95, + "attributes":[{"description": "Cheese"},{"description": "Tomato"}] + }) + } + } + } + Image { source: "content/pics/archive-insert.png" + MouseRegion { anchors.fill: parent; + onClicked: { + fruitModel.insert(0,{ + "name":"Pizza Supreme", + "cost":9.95, + "attributes":[{"description": "Cheese"},{"description": "Tomato"},{"description": "The Works"}] + }) + } + } + } + Image { source: "content/pics/archive-remove.png" + MouseRegion { anchors.fill: parent; onClicked: fruitModel.clear() } + } + } +} |