@@ -40,14 +40,16 @@ PreviewWidget {
40 switch(widgetData["visible"]) {
40 switch(widgetData["visible"]) {
42 case "both":
42 case "both":
43− return ratingLabelAndWidgetContainer.implicitHeight + reviewContainer.implicitHeight;
43+ return ratingLabelAndWidgetContainer.implicitHeight + (reviewContainer.visible ? reviewContainer.implicitHeight : 0);
44 case "rating":
44 case "rating":
45 return ratingLabelAndWidgetContainer.implicitHeight;
45 return ratingLabelAndWidgetContainer.implicitHeight;
46 case "review":
46 case "review":
47 return reviewContainer.implicitHeight;
47 return reviewContainer.implicitHeight;
51+ clip: reviewContainer.visible
51 property alias ratingValue: rating.value
53 property alias ratingValue: rating.value
52 property alias reviewText: reviewTextArea.text
54 property alias reviewText: reviewTextArea.text
@@ -64,21 +66,17 @@ PreviewWidget {
64 triggered(root.widgetId, "rated", data);
66 triggered(root.widgetId, "rated", data);
68 id: ratingLabelAndWidgetContainer
70 id: ratingLabelAndWidgetContainer
71− right: parent.right
71+ anchors { left: parent.left; right: parent.right; }
72− }
72+ spacing: units.gu(0.5)
73− implicitHeight: rating.height
74 visible: widgetData["visible"] !== "review"
73 visible: widgetData["visible"] !== "review"
77 objectName: "ratingLabel"
77 objectName: "ratingLabel"
78− anchors {
78+ anchors { left: parent.left; right: parent.right; }
79− verticalCenter: parent.verticalCenter
79+ fontSize: "large"
82 color: root.scopeStyle ? root.scopeStyle.foreground : theme.palette.normal.baseText
80 color: root.scopeStyle ? root.scopeStyle.foreground : theme.palette.normal.baseText
83 opacity: .8
81 opacity: .8
84 text: widgetData["rating-label"] || i18n.tr("Rate this")
82 text: widgetData["rating-label"] || i18n.tr("Rate this")
@@ -87,23 +85,22 @@ PreviewWidget {
88 id: rating
86 id: rating
89 objectName: "rating"
87 objectName: "rating"
90− anchors {
88+ anchors.left: parent.left
91− verticalCenter: parent.verticalCenter
95 onValueChanged: {
91 onValueChanged: {
96 if (widgetData["visible"] === "rating") root.submit();
92 if (widgetData["visible"] === "rating") root.submit();
99− property var urlIconEmpty: widgetData["rating-icon-empty"]
95+ property var urlIconEmpty: widgetData["rating-icon-empty"] || "image://theme/non-starred"
100− property var urlIconFull: widgetData["rating-icon-full"]
96+ property var urlIconFull: widgetData["rating-icon-full"] || "image://theme/starred"
105 id: reviewContainer
101 id: reviewContainer
102+ objectName: "reviewContainer"
106− implicitHeight: reviewLabel.implicitHeight + reviewSubmitContainer.implicitHeight + anchors.topMargin
103+ implicitHeight: visible ? reviewSubmitContainer.implicitHeight + anchors.topMargin : 0
108 readonly property real innerMargin: units.gu(1)
105 readonly property real innerMargin: units.gu(1)
@@ -112,32 +109,31 @@ PreviewWidget {
112 right: parent.right
109 right: parent.right
113 top: ratingLabelAndWidgetContainer.visible ? ratingLabelAndWidgetContainer.bottom : parent.top
110 top: ratingLabelAndWidgetContainer.visible ? ratingLabelAndWidgetContainer.bottom : parent.top
114 bottom: parent.bottom
111 bottom: parent.bottom
115− topMargin: ratingLabelAndWidgetContainer.visible ? reviewContainer.innerMargin : 0
112+ topMargin: ratingLabelAndWidgetContainer.visible ? innerMargin : 0
115+ switch(widgetData["visible"]) {
118+ return widgetData["required"] === "review" || rating.value > 0;
117− visible: widgetData["visible"] !== "rating"
119− Label {
126+ Behavior on implicitHeight {
120− objectName: "reviewLabel"
127+ UbuntuNumberAnimation {
121− id: reviewLabel
128+ duration: UbuntuAnimation.FastDuration
122− anchors {
129+ easing.type: Easing.OutCubic
127− color: root.scopeStyle ? root.scopeStyle.foreground : theme.palette.normal.baseText
129− text: widgetData["review-label"] || i18n.tr("Add a review")
133 id: reviewSubmitContainer
134 id: reviewSubmitContainer
135+ objectName: "reviewSubmitContainer"
134− anchors {
136+ anchors.fill: parent
135− top: reviewLabel.bottom
138− bottom: parent.bottom
139− topMargin: reviewContainer.innerMargin
141 implicitHeight: reviewTextArea.implicitHeight + anchors.topMargin
137 implicitHeight: reviewTextArea.implicitHeight + anchors.topMargin
143 TextArea {
139 TextArea {
@@ -148,12 +144,17 @@ PreviewWidget {
148 if(inputMethodVisible && activeFocus)
144 if(inputMethodVisible && activeFocus)
149 root.makeSureVisible(reviewTextArea);
145 root.makeSureVisible(reviewTextArea);
148+ if (visible && widgetData["visible"] !== "review")
151 anchors {
151 anchors {
152 top: parent.top
152 top: parent.top
153 left: parent.left
153 left: parent.left
154 right: submitButton.left
154 right: submitButton.left
155 rightMargin: reviewContainer.innerMargin
155 rightMargin: reviewContainer.innerMargin
157+ placeholderText: widgetData["review-label"] || i18n.tr("Add a review")
@@ -170,11 +171,9 @@ PreviewWidget {
170 top: parent.top
171 top: parent.top
171 right: parent.right
172 right: parent.right
173− color: readyToSubmit ? theme.palette.selected.base : theme.palette.normal.base
174+ enabled: readyToSubmit
174 text: widgetData["submit-label"] || i18n.tr("Send")
175 text: widgetData["submit-label"] || i18n.tr("Send")
175− onClicked: {
176+ onClicked: root.submit()
176− if (readyToSubmit) root.submit()