on xenial help sign in
Use PreviewSingleton for PreviewRatingInput and PreviewCommentInput (LP: #1595235)
478e4d1Andrea Cimitan
qml/Dash/Previews/PreviewCommentInput.qml+15
@@ -17,6 +17,7 @@
17import QtQuick 2.4
17import QtQuick 2.4
18import Ubuntu.Components 1.3
18import Ubuntu.Components 1.3
19import "../../Components"
19import "../../Components"
20+import "PreviewSingleton"
20
21
21/*! \brief Preview widget for commenting.
22/*! \brief Preview widget for commenting.
22
23
@@ -35,6 +36,20 @@ PreviewWidget {
35 triggered(root.widgetId, "commented", data);
36 triggered(root.widgetId, "commented", data);
36 }
37 }
37
38
39+ property alias commentText: commentTextArea.text
40+
41+ onCommentTextChanged: storeCommentState()
42+ onWidgetIdChanged: restoreCommentState()
43+
44+ function storeCommentState() {
45+ PreviewSingleton.widgetExtraData[widgetId] = commentText;
46+ }
47+
48+ function restoreCommentState() {
49+ if (!PreviewSingleton.widgetExtraData[widgetId]) return;
50+ if (PreviewSingleton.widgetExtraData[widgetId] != "") commentText = PreviewSingleton.widgetExtraData[widgetId];
51+ }
52+
38 TextArea {
53 TextArea {
39 id: commentTextArea
54 id: commentTextArea
40 objectName: "commentTextArea"
55 objectName: "commentTextArea"
qml/Dash/Previews/PreviewRatingInput.qml+27−1
@@ -17,6 +17,7 @@
17import QtQuick 2.4
17import QtQuick 2.4
18import Ubuntu.Components 1.3
18import Ubuntu.Components 1.3
19import "../../Components"
19import "../../Components"
20+import "PreviewSingleton"
20
21
21/*! \brief Preview widget for rating.
22/*! \brief Preview widget for rating.
22
23
@@ -53,6 +54,31 @@ PreviewWidget {
53 property alias ratingValue: rating.value
54 property alias ratingValue: rating.value
54 property alias reviewText: reviewTextArea.text
55 property alias reviewText: reviewTextArea.text
55
56
57+ onRatingValueChanged: storeRatingState()
58+ onReviewTextChanged: storeTextState()
59+ onWidgetIdChanged: restoreReviewState()
60+
61+ function initializeWidgetExtraData() {
62+ if (typeof(PreviewSingleton.widgetExtraData[widgetId]) == "undefined") PreviewSingleton.widgetExtraData[widgetId] = [];
63+ }
64+
65+ function storeRatingState() {
66+ initializeWidgetExtraData();
67+ PreviewSingleton.widgetExtraData[widgetId][0] = ratingValue;
68+ }
69+
70+ function storeTextState() {
71+ initializeWidgetExtraData();
72+ PreviewSingleton.widgetExtraData[widgetId][1] = reviewText;
73+ }
74+
75+ function restoreReviewState() {
76+ if (!PreviewSingleton.widgetExtraData[widgetId]) return;
77+ if (PreviewSingleton.widgetExtraData[widgetId][0] > 0) ratingValue = PreviewSingleton.widgetExtraData[widgetId][0];
78+ if (typeof(PreviewSingleton.widgetExtraData[widgetId][1]) != "undefined" &&
79+ PreviewSingleton.widgetExtraData[widgetId][1] != "") reviewText = PreviewSingleton.widgetExtraData[widgetId][1];
80+ }
81+
56 function submit() {
82 function submit() {
57 // checks rating-input requirements
83 // checks rating-input requirements
58 if (((widgetData["required"] === "both" ||
84 if (((widgetData["required"] === "both" ||
@@ -89,7 +115,7 @@ PreviewWidget {
89 size: 5
115 size: 5
90 height: units.gu(4)
116 height: units.gu(4)
91 onValueChanged: {
117 onValueChanged: {
92− if (widgetData["visible"] === "rating") root.submit();
118+ if (widgetData && widgetData["visible"] === "rating") root.submit();
93 }
119 }
94
120
95 property var urlIconEmpty: widgetData["rating-icon-empty"] || "image://theme/non-starred"
121 property var urlIconEmpty: widgetData["rating-icon-empty"] || "image://theme/non-starred"
tests/qmltests/Dash/Previews/tst_PreviewCommentInput.qml+28
@@ -39,6 +39,21 @@ Rectangle {
39 widgetId: "previewCommentInput"
39 widgetId: "previewCommentInput"
40 }
40 }
41
41
42+ Loader {
43+ id: previewCommentInputLoader
44+ anchors {
45+ left: parent.left
46+ right: parent.right
47+ top: previewCommentInput.bottom
48+ topMargin: units.gu(2)
49+ }
50+
51+ sourceComponent: PreviewCommentInput {
52+ widgetData: widgetDataNewLabels
53+ widgetId: "previewCommentInputLoader"
54+ }
55+ }
56+
42 SignalSpy {
57 SignalSpy {
43 id: spy
58 id: spy
44 signalName: "triggered"
59 signalName: "triggered"
@@ -81,5 +96,18 @@ Rectangle {
81 compare(args[2]["comment"], data.inputText);
96 compare(args[2]["comment"], data.inputText);
82 }
97 }
83 }
98 }
99+
100+ function test_singleton() {
101+ var commentTextAreaLoader = findChild(previewCommentInputLoader, "commentTextArea")
102+
103+ commentTextAreaLoader.text = "singleton test text";
104+
105+ // Simulate widget being destroyed and recreated
106+ previewCommentInputLoader.active = false;
107+ previewCommentInputLoader.active = true;
108+
109+ commentTextAreaLoader = findChild(previewCommentInputLoader, "commentTextArea")
110+ tryCompare(commentTextAreaLoader, "text", "singleton test text");
111+ }
84 }
112 }
85}
113}
tests/qmltests/Dash/Previews/tst_PreviewInlineVideo.qml−2
@@ -87,14 +87,12 @@ Rectangle {
87 }
87 }
88
88
89 sourceComponent: PreviewInlineVideo {
89 sourceComponent: PreviewInlineVideo {
90− width: parent.width
91 widgetData: widgetData0
90 widgetData: widgetData0
92
91
93 rootItem: inner
92 rootItem: inner
94 }
93 }
95 }
94 }
96 }
95 }
97−
98 }
96 }
99
97
100 Rectangle {
98 Rectangle {
tests/qmltests/Dash/Previews/tst_PreviewRatingInput.qml+32
@@ -53,6 +53,21 @@ Rectangle {
53 widgetId: "previewRatingInput"
53 widgetId: "previewRatingInput"
54 }
54 }
55
55
56+ Loader {
57+ id: previewRatingInputLoader
58+ anchors {
59+ left: parent.left
60+ right: parent.right
61+ top: previewRatingInput.bottom
62+ topMargin: units.gu(2)
63+ }
64+
65+ sourceComponent: PreviewRatingInput {
66+ widgetData: widgetDataBoth
67+ widgetId: "previewRatingInputLoader"
68+ }
69+ }
70+
56 SignalSpy {
71 SignalSpy {
57 id: spy
72 id: spy
58 signalName: "triggered"
73 signalName: "triggered"
@@ -210,5 +225,22 @@ Rectangle {
210 compare(args[2]["review"], data.triggeredData["review"]);
225 compare(args[2]["review"], data.triggeredData["review"]);
211 verify(args[2]["author"] !== undefined); // Just verifying it exists now
226 verify(args[2]["author"] !== undefined); // Just verifying it exists now
212 }
227 }
228+
229+ function test_singleton() {
230+ var ratingLoader = findChild(previewRatingInputLoader, "rating");
231+ var reviewTextAreaLoader = findChild(previewRatingInputLoader, "reviewTextArea");
232+
233+ ratingLoader.value = 3;
234+ reviewTextAreaLoader.text = "singleton test text";
235+
236+ // Simulate widget being destroyed and recreated
237+ previewRatingInputLoader.active = false;
238+ previewRatingInputLoader.active = true;
239+
240+ ratingLoader = findChild(previewRatingInputLoader, "rating");
241+ reviewTextAreaLoader = findChild(previewRatingInputLoader, "reviewTextArea");
242+ tryCompare(ratingLoader, "value", 3);
243+ tryCompare(reviewTextAreaLoader, "text", "singleton test text");
244+ }
213 }
245 }
214}
246}