blob: d69a4f093a0bdc99b0bb0d1eb07e8795ef3db6cd (
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.0
import QtQml.XmlListModel
Item {
id: xmllistmodelelementtest
anchors.fill: parent
property string testtext: ""
XmlListModel { id: xmllistmodelelement
source: "cookbook.xml"
query: "/cookbook/recipe"
XmlListModelRole { name: "title"; elementName: "title" }
XmlListModelRole { name: "method"; elementName: "method" }
XmlListModelRole { name: "time"; elementName: "time"; attributeName: "quantity" }
XmlListModelRole { name: "ingredients"; elementName: "ingredients" }
}
ListView {
id: recipeview
model: xmllistmodelelement; height: 300; width: 300; clip: true
anchors.centerIn: parent
delegate: Component {
Rectangle { id: delbox; height: 50; width: 296; color: "orange"; border.color: "black"; state: "closed"; clip: true; radius: 5
anchors.horizontalCenter: parent.horizontalCenter
Text {
id: recipetitle
text: model.title; font.pointSize: 12; font.bold: true
anchors.horizontalCenter: parent.horizontalCenter; y: 20;
}
Text {
id: recipetime
width: parent.width; height: 20; text: "<b>Time: </b>" +model.time + " minutes"; visible: opacity != 0
anchors.horizontalCenter: parent.horizontalCenter; anchors.top: recipetitle.bottom
Behavior on opacity { NumberAnimation { duration: 250 } }
}
Item {
id: ingredientlist
visible: opacity != 0
width: parent.width
height: header.implicitHeight + content.implicitHeight
Behavior on opacity { NumberAnimation { duration: 250 } }
anchors {
horizontalCenter: parent.horizontalCenter
top: recipetime.bottom
topMargin: 10
}
Text {
id: header
text: "<b>Ingredients:</b>"
}
Text {
anchors.top: header.bottom;
id: content
wrapMode: Text.WordWrap
textFormat: Text.MarkdownText
width: ingredientlist.width
// a bit of regexp to remove unneeded whitespaces
text: model.ingredients.replace(/\ +/g,' ')
}
}
Item {
id: recipemethod
width: parent.width;
height: methodHeader.implicitHeight + methodContent.implicitHeight
visible: opacity != 0;
anchors {
horizontalCenter: parent.horizontalCenter
top: ingredientlist.bottom
}
Text {
id: methodHeader
text: "<b>Cooking method:</b>"
}
Text {
id: methodContent
anchors.top: methodHeader.bottom;
wrapMode: Text.WordWrap
textFormat: Text.MarkdownText
width: recipemethod.width
// a bit of regexp to remove unneeded whitespaces
text: model.method.replace(/\ +/g,' ')
}
}
MouseArea { anchors.fill: parent; onClicked: delbox.state = delbox.state == "open" ? "closed" : "open" }
Behavior on height { NumberAnimation { duration: 250 } }
states: [
State { name: "closed"
PropertyChanges { target: delbox; height: 50 }
PropertyChanges { target: recipemethod; opacity: 0 }
PropertyChanges { target: recipetime; opacity: 0 }
PropertyChanges { target: ingredientlist; opacity: 0 }
},
State { name: "open"
PropertyChanges { target: delbox; height: recipemethod.height+recipetime.height+ingredientlist.height+50 }
PropertyChanges { target: recipemethod; opacity: 1 }
PropertyChanges { target: recipetime; opacity: 1 }
PropertyChanges { target: ingredientlist; opacity: 1 }
StateChangeScript { script: { recipeview.positionViewAtIndex(model.index, ListView.Beginning); } }
}
]
}
}
}
SystemTestHelp { id: helpbubble; visible: statenum != 0
anchors { top: parent.top; horizontalCenter: parent.horizontalCenter; topMargin: 50 }
showadvance: false
}
BugPanel { id: bugpanel }
states: [
State { name: "start"; when: statenum == 1
PropertyChanges { target: xmllistmodelelementtest
testtext: "This is a ListView populated by an XmlListModel. Clicking on an item will show the recipe details."
}
}
]
}
|