on xenial help sign in
Work around QML not laying out invisible items.
commit2dc832569b938a08d85a308e393bb10126bd9ce2 authorMichał Sawicz <michal.sawicz@canonical.com> dateThu 30 Jan 2014, 21:31 (13 years ago) parent1bd3afd
3 files changed+41−24
qml/Dash/CardTool.qml+30−22 tests/qmltests/Dash/tst_Card.qml+9 tests/qmltests/Dash/tst_CardTool.qml+2−2
qml/Dash/CardTool.qml+30−22
@@ -16,11 +16,18 @@
1616
1717import QtQuick 2.0
1818
19−QtObject {
19+Item {
2020 id: cardTool
2121 property var template
2222 property var components
2323
24+ // FIXME: Saviq
25+ // Only way for the card below to actually be laid out completely.
26+ // If invisible or in "data" array, some components are not taken into account.
27+ width: 0
28+ height: 0
29+ clip: true
30+
2431 property var cardWidth: {
2532 switch (template !== undefined && template["category-layout"]) {
2633 case "grid":
@@ -45,7 +52,7 @@ QtObject {
4552 if (template["card-size"] >= 12 && template["card-size"] <= 38) return units.gu(template["card-size"]);
4653 return units.gu(18.5);
4754 case "grid":
48− return priv.card.implicitHeight
55+ return card.implicitHeight
4956 case undefined:
5057 case "organic-grid":
5158 case "vertical-journal":
@@ -54,7 +61,16 @@ QtObject {
5461 }
5562 }
5663
57− property QtObject priv: QtObject {
64+ property QtObject priv: card
65+
66+ Card {
67+ id: card
68+ template: cardTool.template
69+ components: cardTool.components
70+
71+ width: cardTool.cardWidth || implicitWidth
72+ height: cardTool.cardHeight || implicitHeight
73+
5874 property var fields: ["art", "mascot", "title", "subtitle", "summary"]
5975 property var maxData: {
6076 "art": Qt.resolvedUrl("graphics/checkers.png"),
@@ -64,26 +80,18 @@ QtObject {
6480 "summary": "—\n—\n—\n—\n—"
6581 }
6682
67− property Item card: Card {
68− template: cardTool.template
69− components: cardTool.components
70−
71− width: cardTool.cardWidth || implicitWidth
72− height: cardTool.cardHeight || implicitHeight
73−
74− onComponentsChanged: {
75− var data = {};
76− for (var k in priv.fields) {
77− var component = components[priv.fields[k]];
78− var key = priv.fields[k];
79− if ((typeof component === "string" && component.length > 0) ||
80− (typeof component === "object" && component !== null
81− && typeof component["field"] === "string" && component["field"].length > 0)) {
82− data[key] = priv.maxData[key];
83− }
83+ onComponentsChanged: {
84+ var data = {};
85+ for (var k in fields) {
86+ var component = components[fields[k]];
87+ var key = fields[k];
88+ if ((typeof component === "string" && component.length > 0) ||
89+ (typeof component === "object" && component !== null
90+ && typeof component["field"] === "string" && component["field"].length > 0)) {
91+ data[key] = maxData[key];
8492 }
85− cardData = data;
8693 }
87− }
94+ cardData = data;
95+ }
8896 }
8997}
tests/qmltests/Dash/tst_Card.qml+9
@@ -117,10 +117,19 @@ Rectangle {
117117 },
118118 ]
119119
120+ CardTool {
121+ id: cardTool
122+ template: card.template
123+ components: card.components
124+ }
125+
120126 Card {
121127 id: card
122128 anchors { top: parent.top; left: parent.left; margins: units.gu(1) }
123129
130+ width: cardTool.cardWidth || implicitWidth
131+ height: cardTool.cardHeight || implicitHeight
132+
124133 template: Helpers.update(JSON.parse(root.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['template'];
125134 components: Helpers.update(JSON.parse(root.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['components'];
126135 cardData: Helpers.mapData(dataArea.text, components, dataError)
tests/qmltests/Dash/tst_CardTool.qml+2−2
@@ -134,7 +134,7 @@ Rectangle {
134134 width: cardTool.cardWidth || implicitWidth
135135 height: cardTool.cardHeight || implicitHeight
136136
137−// clip: true
137+ clip: true
138138
139139 Rectangle {
140140 anchors.fill: parent
@@ -207,7 +207,7 @@ Rectangle {
207207 id: dataArea
208208 anchors { left: parent.left; right: parent.right }
209209 height: units.gu(25)
210− text: JSON.stringify(cardTool.priv.card.cardData, undefined, 2)
210+ text: JSON.stringify(cardTool.priv.cardData, undefined, 2)
211211 }
212212
213213 Label {