on xenial help sign in
Work around QML not laying out invisible items.
2dc8325Michał Sawicz
qml/Dash/CardTool.qml+30−22
@@ -16,11 +16,18 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18
18
19−QtObject {
19+Item {
20 id: cardTool
20 id: cardTool
21 property var template
21 property var template
22 property var components
22 property var components
23
23
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+
24 property var cardWidth: {
31 property var cardWidth: {
25 switch (template !== undefined && template["category-layout"]) {
32 switch (template !== undefined && template["category-layout"]) {
26 case "grid":
33 case "grid":
@@ -45,7 +52,7 @@ QtObject {
45 if (template["card-size"] >= 12 && template["card-size"] <= 38) return units.gu(template["card-size"]);
52 if (template["card-size"] >= 12 && template["card-size"] <= 38) return units.gu(template["card-size"]);
46 return units.gu(18.5);
53 return units.gu(18.5);
47 case "grid":
54 case "grid":
48− return priv.card.implicitHeight
55+ return card.implicitHeight
49 case undefined:
56 case undefined:
50 case "organic-grid":
57 case "organic-grid":
51 case "vertical-journal":
58 case "vertical-journal":
@@ -54,7 +61,16 @@ QtObject {
54 }
61 }
55 }
62 }
56
63
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+
58 property var fields: ["art", "mascot", "title", "subtitle", "summary"]
74 property var fields: ["art", "mascot", "title", "subtitle", "summary"]
59 property var maxData: {
75 property var maxData: {
60 "art": Qt.resolvedUrl("graphics/checkers.png"),
76 "art": Qt.resolvedUrl("graphics/checkers.png"),
@@ -64,26 +80,18 @@ QtObject {
64 "summary": "—\n—\n—\n—\n—"
80 "summary": "—\n—\n—\n—\n—"
65 }
81 }
66
82
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: {
83+ onComponentsChanged: {
75− var data = {};
84+ var data = {};
76− for (var k in priv.fields) {
85+ for (var k in fields) {
77− var component = components[priv.fields[k]];
86+ var component = components[fields[k]];
78− var key = priv.fields[k];
87+ var key = fields[k];
79− if ((typeof component === "string" && component.length > 0) ||
88+ if ((typeof component === "string" && component.length > 0) ||
80− (typeof component === "object" && component !== null
89+ (typeof component === "object" && component !== null
81− && typeof component["field"] === "string" && component["field"].length > 0)) {
90+ && typeof component["field"] === "string" && component["field"].length > 0)) {
82− data[key] = priv.maxData[key];
91+ data[key] = maxData[key];
83− }
84 }
92 }
85− cardData = data;
86 }
93 }
94+ cardData = data;
87− }
95+ }
88 }
96 }
89}
97}
tests/qmltests/Dash/tst_Card.qml+9
@@ -117,10 +117,19 @@ Rectangle {
117 },
117 },
118 ]
118 ]
119
119
120+ CardTool {
121+ id: cardTool
122+ template: card.template
123+ components: card.components
124+ }
125+
120 Card {
126 Card {
121 id: card
127 id: card
122 anchors { top: parent.top; left: parent.left; margins: units.gu(1) }
128 anchors { top: parent.top; left: parent.left; margins: units.gu(1) }
123
129
130+ width: cardTool.cardWidth || implicitWidth
131+ height: cardTool.cardHeight || implicitHeight
132+
124 template: Helpers.update(JSON.parse(root.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['template'];
133 template: Helpers.update(JSON.parse(root.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['template'];
125 components: Helpers.update(JSON.parse(root.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['components'];
134 components: Helpers.update(JSON.parse(root.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['components'];
126 cardData: Helpers.mapData(dataArea.text, components, dataError)
135 cardData: Helpers.mapData(dataArea.text, components, dataError)
tests/qmltests/Dash/tst_CardTool.qml+2−2
@@ -134,7 +134,7 @@ Rectangle {
134 width: cardTool.cardWidth || implicitWidth
134 width: cardTool.cardWidth || implicitWidth
135 height: cardTool.cardHeight || implicitHeight
135 height: cardTool.cardHeight || implicitHeight
136
136
137−// clip: true
137+ clip: true
138
138
139 Rectangle {
139 Rectangle {
140 anchors.fill: parent
140 anchors.fill: parent
@@ -207,7 +207,7 @@ Rectangle {
207 id: dataArea
207 id: dataArea
208 anchors { left: parent.left; right: parent.right }
208 anchors { left: parent.left; right: parent.right }
209 height: units.gu(25)
209 height: units.gu(25)
210− text: JSON.stringify(cardTool.priv.card.cardData, undefined, 2)
210+ text: JSON.stringify(cardTool.priv.cardData, undefined, 2)
211 }
211 }
212
212
213 Label {
213 Label {