Merge lp:~neokore/ubuntu-weather-app/currentWeatherAnimations into lp:ubuntu-weather-app/obsolete.trunk

Proposed by Raúl Yeguas on 2013-04-22
Status: Merged
Approved by: Martin Borho on 2013-04-22
Approved revision: 9
Merged at revision: 10
Proposed branch: lp:~neokore/ubuntu-weather-app/currentWeatherAnimations
Merge into: lp:ubuntu-weather-app/obsolete.trunk
Diff against target: 1038 lines (+867/-21)
6 files modified
components/AddLocationDialog.qml (+2/-2)
components/CurrentWeather.qml (+18/-8)
components/DayWeatherComponent.qml (+6/-7)
components/LocationTab.qml (+5/-3)
components/WeatherApi.js (+1/-1)
components/WeatherConditionIconComponent.qml (+835/-0)
To merge this branch: bzr merge lp:~neokore/ubuntu-weather-app/currentWeatherAnimations
Reviewer Review Type Date Requested Status
Martin Borho 2013-04-22 Approve on 2013-04-22
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve on 2013-04-22
Review via email: mp+160107@code.launchpad.net

Commit message

Added a WeatherConditionIcon component with animations and transitions.

Description of the change

Added a WeatherConditionIcon component with animations and transitions.

To post a comment you must log in.
Martin Borho (martin-borho) wrote :

Looks great, well done!

Is only the sun animated? Somehow the clouds don't move like in http://www.youtube.com/watch?v=OzoxmPgz24E

Raúl Yeguas (neokore) wrote :

Other conditions like some clouds, thunderstorm or snow are animated too.
El 22/04/2013 16:06, "Martin Borho" <email address hidden> escribió:

> Looks great, well done!
>
> Is only the sun animated? Somehow the clouds don't move like in
> http://www.youtube.com/watch?v=OzoxmPgz24E
> --
>
> https://code.launchpad.net/~neokore/ubuntu-weather-app/currentWeatherAnimations/+merge/160107
> You are the owner of
> lp:~neokore/ubuntu-weather-app/currentWeatherAnimations.
>

Martin Borho (martin-borho) wrote :

Looks great!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'components/AddLocationDialog.qml'
2--- components/AddLocationDialog.qml 2013-04-20 18:31:16 +0000
3+++ components/AddLocationDialog.qml 2013-04-22 13:29:40 +0000
4@@ -11,7 +11,7 @@
5 id: addLocationDialogue
6 height: units.gu(10)
7 title: i18n.tr("Add location")
8- text: i18n.tr("Write a city name o pick it by GPS location")
9+ text: i18n.tr("Write a city name o pick it by your location")
10
11 function locationSelected(index) {
12 var location = citiesModel.get(index);
13@@ -54,7 +54,7 @@
14
15 Button {
16 id: locationGPSButton
17- text: i18n.tr("Get by GPS location")
18+ text: i18n.tr("Use my own location")
19 onClicked: {
20 citiesModel.clear();
21 Api.WeatherApi.searchLocationByPoint({coords: {"lon":10,"lat":53.549999}, units:"metric"}, onSearchSuccess,onApiError);
22
23=== modified file 'components/CurrentWeather.qml'
24--- components/CurrentWeather.qml 2013-03-12 17:36:19 +0000
25+++ components/CurrentWeather.qml 2013-04-22 13:29:40 +0000
26@@ -1,12 +1,13 @@
27 import QtQuick 2.0
28 import Ubuntu.Components 0.1
29-import "OpenWeatherMap.js" as Weather
30+import "./" as Components
31
32 Rectangle {
33 id: currentWeather
34
35 // For Status I take the same condition codes from OpenWeatherMap (http://openweathermap.org/wiki/API/Weather_Condition_Codes)
36 property int condition
37+ property string icon
38 property int currentTemp
39 property int minTemp
40 property int maxTemp
41@@ -17,15 +18,24 @@
42 height: childrenRect.height+units.gu(10)
43 anchors.horizontalCenter: parent.horizontalCenter
44
45- Image {
46- id: image1
47+ Components.WeatherConditionIconComponent {
48+ id: currentCondition
49 width: units.gu(30)
50 height: units.gu(30)
51- sourceSize.height: units.gu(30)
52- sourceSize.width: units.gu(30)
53 anchors.horizontalCenter: parent.horizontalCenter
54- source: "../resources/images/"+Weather.getConditionIcon(condition)+".jpg"
55- fillMode: Image.PreserveAspectFit
56+ condition: currentWeather.icon
57+
58+ NumberAnimation on opacity {
59+ id: createAnimation
60+ easing.type: Easing.Linear
61+ from: 0
62+ to: 1
63+ duration: 1000
64+ }
65+
66+ Component.onCompleted: {
67+ createAnimation.start()
68+ }
69 }
70
71 Rectangle {
72@@ -33,7 +43,7 @@
73 width: units.gu(50)
74 height: units.gu(10)
75 anchors.horizontalCenter: parent.horizontalCenter
76- anchors.top: image1.bottom
77+ anchors.top: currentCondition.bottom
78 anchors.topMargin: 0
79 color: "#00000000"
80
81
82=== modified file 'components/DayWeatherComponent.qml'
83--- components/DayWeatherComponent.qml 2013-03-09 15:30:09 +0000
84+++ components/DayWeatherComponent.qml 2013-04-22 13:29:40 +0000
85@@ -1,5 +1,6 @@
86 import QtQuick 2.0
87 import Ubuntu.Components 0.1
88+import "./" as Components
89 import "OpenWeatherMap.js" as Weather
90
91 Rectangle {
92@@ -9,29 +10,27 @@
93 height:contentShape.height+units.gu(2)
94
95 property int condition
96+ property string icon
97 property int temperature
98 property int temperatureMin
99 property bool metric: true
100 property string scale: (metric) ? "C" : "F"
101 property string shapeColor: "#D6D6D6"
102
103- onConditionChanged: {
104- currentIcon.source = "../resources/images/"+Weather.getConditionIcon(condition)+"-day.png"
105- }
106-
107 UbuntuShape{
108 id: contentShape
109 radius: "small"
110 width: parent.width
111 color: shapeColor
112 anchors.centerIn: parent
113- height:childrenRect.height
114+ height: childrenRect.height
115 Row {
116 width:parent.width
117- Image {
118+ Components.WeatherConditionIconComponent {
119 id: currentIcon
120 height: units.gu(10)
121- fillMode: Image.PreserveAspectFit
122+ width:units.gu(10)
123+ condition: dayWeatherComponent.icon
124 }
125 Label {
126 id: currentTemp
127
128=== modified file 'components/LocationTab.qml'
129--- components/LocationTab.qml 2013-04-20 16:17:57 +0000
130+++ components/LocationTab.qml 2013-04-22 13:29:40 +0000
131@@ -30,7 +30,8 @@
132 todayDateComponent.renderText()
133
134 // set current Condition
135- currentCondition.condition = 801; //currentData.condition.id;
136+ currentCondition.condition = currentData.condition.id;
137+ currentCondition.icon = currentData.condition.icon;
138 currentCondition.currentTemp = currentData.temp;
139 currentCondition.minTemp = currentData.temp_min;
140 currentCondition.maxTemp = currentData.temp_max;
141@@ -44,7 +45,8 @@
142 date: formatTimestamp(dailyForecasts[x].timestamp, 'dddd, dd MMMM yyyy'),
143 temp: dailyForecasts[x].temp,
144 tempMin: dailyForecasts[x].night,
145- cond: 801 // dailyForecasts[x].condition.id;
146+ cond: dailyForecasts[x].condition.id,
147+ condIcon: dailyForecasts[x].condition.icon
148 });
149 }
150 }
151@@ -111,7 +113,6 @@
152 CurrentWeather {
153 id: currentCondition
154 anchors.top: todayDateComponent.bottom
155- condition: 801
156 }
157 /*ChartComponent{
158 id: chartComponent
159@@ -138,6 +139,7 @@
160 temperature: temp
161 temperatureMin: tempMin
162 condition: cond
163+ icon: condIcon
164 }
165 }
166 }
167
168=== modified file 'components/WeatherApi.js'
169--- components/WeatherApi.js 2013-04-20 16:17:57 +0000
170+++ components/WeatherApi.js 2013-04-22 13:29:40 +0000
171@@ -79,7 +79,7 @@
172 morn: f.morn,
173 pressure: f.pressure,
174 humidity: f.humidity,
175- condition: f.weather,
176+ condition: f.weather[0],
177 wind_speed: f.speed,
178 wind_deg: f.deg
179 });
180
181=== added file 'components/WeatherConditionIconComponent.qml'
182--- components/WeatherConditionIconComponent.qml 1970-01-01 00:00:00 +0000
183+++ components/WeatherConditionIconComponent.qml 2013-04-22 13:29:40 +0000
184@@ -0,0 +1,835 @@
185+import QtQuick 2.0
186+import QtGraphicalEffects 1.0
187+import Ubuntu.Components 0.1
188+
189+Rectangle {
190+ id: weatherCondition
191+ color: "transparent"
192+ state: ""
193+
194+ property string condition: ""
195+ property bool __sun: false
196+ property bool __moon: false
197+ property bool __fewClouds: true
198+ property bool __scattered: false
199+ property bool __broken: false
200+ property bool __rain: false
201+ property bool __storm: false
202+ property bool __snow: false
203+ property bool __fog: false
204+
205+ onConditionChanged: weatherCondition.state = condition
206+
207+ Image {
208+ id: sun
209+ width: weatherCondition.width
210+ height: weatherCondition.height
211+ anchors.horizontalCenter: weatherCondition.horizontalCenter
212+ anchors.top: weatherCondition.top
213+ opacity: 0
214+ source: "../resources/images/sun.png"
215+ fillMode: Image.PreserveAspectFit
216+ }
217+ Image {
218+ id: moon
219+ width: weatherCondition.width
220+ height: weatherCondition.height
221+ anchors.horizontalCenter: weatherCondition.horizontalCenter
222+ anchors.top: weatherCondition.top
223+ opacity: 0
224+ source: "../resources/images/moon.png"
225+ fillMode: Image.PreserveAspectFit
226+ }
227+ Image {
228+ id: snowflake1
229+ width: weatherCondition.width/6
230+ height: weatherCondition.height/6
231+ anchors {
232+ left: weatherCondition.left
233+ leftMargin: units.gu(0)
234+ top: weatherCondition.top
235+ topMargin:weatherCondition.height/1.5
236+ }
237+ source: "../resources/images/snow.png"
238+ fillMode: Image.PreserveAspectFit
239+ opacity: 0
240+ RotationAnimation { id: snowflake1_anim; running: false; targets: snowflake1; properties: "rotation"; from: 0; to: 360; duration: 30000; loops: Animation.Infinite}
241+ }
242+ Image {
243+ id: snowflake2
244+ width: weatherCondition.width/6
245+ height: weatherCondition.height/6
246+ anchors {
247+ left: weatherCondition.left
248+ leftMargin: weatherCondition.width/2.5
249+ top: weatherCondition.top
250+ topMargin:weatherCondition.height/1.5
251+ }
252+ source: "../resources/images/snow.png"
253+ fillMode: Image.PreserveAspectFit
254+ opacity: 0
255+ RotationAnimation { id: snowflake2_anim; running: false; targets: snowflake2; properties: "rotation"; from: 0; to: 360; duration: 30000; loops: Animation.Infinite}
256+ }
257+ Image {
258+ id: snowflake3
259+ width: weatherCondition.width/6
260+ height: weatherCondition.height/6
261+ anchors {
262+ left: weatherCondition.left
263+ leftMargin: weatherCondition.width/1.2
264+ top: weatherCondition.top
265+ topMargin:weatherCondition.height/1.5
266+ }
267+ source: "../resources/images/snow.png"
268+ fillMode: Image.PreserveAspectFit
269+ opacity: 0
270+ RotationAnimation { id: snowflake3_anim; running: false; targets: snowflake3; properties: "rotation"; from: 0; to: 360; duration: 30000; loops: Animation.Infinite}
271+ }
272+ Image {
273+ id: cloud1
274+ width: weatherCondition.width
275+ height: weatherCondition.height
276+ opacity: 0
277+ anchors {
278+ left: weatherCondition.left
279+ leftMargin: weatherCondition.width/3.6
280+ top: weatherCondition.top
281+ topMargin: weatherCondition.height/7.5
282+ }
283+
284+ source: "../resources/images/cloud.png"
285+ fillMode: Image.PreserveAspectFit
286+ }
287+ InnerShadow {
288+ id: cloud1Glow
289+ anchors.fill: cloud1
290+ radius: weatherCondition.height/10
291+ samples: 24
292+ horizontalOffset: 0
293+ verticalOffset: weatherCondition.height/-10
294+ color: "#FFFFFFFF"
295+ source: cloud1
296+ opacity: 0
297+ }
298+ Image {
299+ id: rain1
300+ width: weatherCondition.width
301+ height: weatherCondition.height
302+ opacity: 0
303+ anchors {
304+ left: cloud1.left
305+ top: cloud1.top
306+ topMargin: weatherCondition.height/10
307+ }
308+
309+ source: "../resources/images/rain.png"
310+ fillMode: Image.PreserveAspectFit
311+ }
312+ Image {
313+ id: lightning
314+ width: weatherCondition.width
315+ height: weatherCondition.height
316+ opacity: 0
317+ anchors {
318+ left: weatherCondition.left
319+ top: weatherCondition.top
320+ topMargin: weatherCondition.height/7.5
321+ }
322+
323+ source: "../resources/images/lightning.png"
324+ fillMode: Image.PreserveAspectFit
325+ }
326+ ColorOverlay {
327+ id: lightningfx
328+ anchors.fill: lightning
329+ source: lightning
330+ color: "#FFFFFFFF"
331+ opacity: 0
332+ }
333+ Glow {
334+ id: lightningGlow
335+ anchors.fill: lightning
336+ radius: weatherCondition.width/3.6
337+ samples: 24
338+ color: "yellow"
339+ source: lightning
340+ opacity: 0
341+ }
342+ Image {
343+ id: cloud2
344+ width: weatherCondition.width/1.2
345+ height: weatherCondition.height/1.2
346+ opacity: 0
347+ anchors {
348+ left: weatherCondition.left
349+ leftMargin: weatherCondition.width/3.6
350+ top: weatherCondition.top
351+ topMargin: weatherCondition.height/10
352+ }
353+ source: "../resources/images/cloud_darker.png"
354+ fillMode: Image.PreserveAspectFit
355+ }
356+ Image {
357+ id: cloud_dark1
358+ width: weatherCondition.width/1.2
359+ height: weatherCondition.height/1.2
360+ opacity: 0
361+ anchors {
362+ left: weatherCondition.left
363+ leftMargin: weatherCondition.width/3.6
364+ top: weatherCondition.top
365+ topMargin: weatherCondition.height/10
366+ }
367+ source: "../resources/images/cloud_dark.png"
368+ fillMode: Image.PreserveAspectFit
369+ }
370+ InnerShadow {
371+ id: cloud_dark1Glow
372+ anchors.fill: cloud_dark1
373+ radius: weatherCondition.height/10
374+ samples: 24
375+ horizontalOffset: 0
376+ verticalOffset: weatherCondition.height/-10
377+ color: "#FFFFFFFF"
378+ source: cloud_dark1
379+ opacity: 0
380+ }
381+ Image {
382+ id: rain2
383+ width: weatherCondition.width/1.2
384+ height: weatherCondition.height/1.2
385+ opacity: 0
386+ anchors {
387+ left: weatherCondition.left
388+ leftMargin: weatherCondition.height/-15
389+ top: weatherCondition.top
390+ topMargin: weatherCondition.height/4.5
391+ }
392+
393+ source: "../resources/images/rain.png"
394+ fillMode: Image.PreserveAspectFit
395+ }
396+ Image {
397+ id: fog
398+ width: weatherCondition.width
399+ height: weatherCondition.width
400+ anchors {
401+ left:weatherCondition.left
402+ top: weatherCondition.top
403+ }
404+ source: "../resources/images/fog.png"
405+ fillMode: Image.PreserveAspectFit
406+ opacity: 0
407+ }
408+ FastBlur {
409+ id: fogBlur1
410+ anchors.fill: fog
411+ source: fog
412+ radius: 24
413+ opacity: 0
414+ }
415+ Image {
416+ id: fog2
417+ width: weatherCondition.width/1.5
418+ height: weatherCondition.height/1.5
419+ anchors {
420+ left:weatherCondition.left
421+ leftMargin: weatherCondition.width/2
422+ top: weatherCondition.top
423+ topMargin: weatherCondition.height/7.5
424+ }
425+ source: "../resources/images/fog.png"
426+ fillMode: Image.PreserveAspectFit
427+ opacity: 0
428+ }
429+ FastBlur {
430+ id: fogBlur2
431+ anchors.fill: fog2
432+ source: fog2
433+ radius: 18
434+ opacity: 0
435+ }
436+
437+ // CONDITION ANIMATIONS
438+ RotationAnimation {
439+ id: anim_01
440+ running: false
441+ targets: sun
442+ properties: "rotation"
443+ from: 0
444+ to: 360
445+ loops: Animation.Infinite
446+ duration: 60000
447+ }
448+ ParallelAnimation{
449+ id: anim_02
450+ running: false
451+ SequentialAnimation {
452+ loops: Animation.Infinite
453+ ParallelAnimation{
454+ SequentialAnimation {
455+ NumberAnimation { targets: cloud1; properties: "opacity"; from: 0; to: 1; duration: 1000 }
456+ PauseAnimation {duration: 13000}
457+ NumberAnimation { targets: cloud1; properties: "opacity"; from: 1; to: 0; duration: 1000 }
458+ }
459+ NumberAnimation {target: cloud1; property: "anchors.leftMargin"; from: weatherCondition.width/3.6; to: weatherCondition.width/-3.6; duration: 15000 }
460+ ScriptAction {script: cloud1.anchors.topMargin = weatherCondition.height/7.5;}
461+ }
462+ PauseAnimation {duration: 15000}
463+ }
464+ SequentialAnimation {
465+ loops: Animation.Infinite
466+ PauseAnimation {duration: 17000}
467+ ParallelAnimation{
468+ SequentialAnimation {
469+ NumberAnimation { targets: cloud2; properties: "opacity"; from: 0; to: 1; duration: 1000 }
470+ PauseAnimation {duration: 8000}
471+ NumberAnimation { targets: cloud2; properties: "opacity"; from: 1; to: 0; duration: 1000 }
472+ }
473+ NumberAnimation { target: cloud2; property: "anchors.leftMargin"; from: weatherCondition.width/3.6; to: weatherCondition.height/-7.5; duration: 10000}
474+ ScriptAction {script: cloud2.anchors.topMargin = weatherCondition.height/10;}
475+ }
476+ }
477+ }
478+ ParallelAnimation {
479+ id: anim_11
480+ running: false
481+ loops: Animation.Infinite
482+
483+ SequentialAnimation{
484+ PauseAnimation { duration: 2000 }
485+ NumberAnimation {targets: cloud1Glow; properties: "opacity"; from: 0; to: 1; duration: 10}
486+ NumberAnimation {targets: cloud1Glow; properties: "opacity"; from: 1; to: 0; duration: 1000}
487+ }
488+ SequentialAnimation{
489+ PauseAnimation { duration: 3000 }
490+ NumberAnimation {targets: cloud_dark1Glow; properties: "opacity"; from: 0; to: 1; duration: 10}
491+ NumberAnimation {targets: cloud_dark1Glow; properties: "opacity"; from: 1; to: 0; duration: 1000}
492+ }
493+ SequentialAnimation{
494+ PauseAnimation { duration: 2000 }
495+ ParallelAnimation{
496+ NumberAnimation {targets: lightning; properties: "opacity"; from: 0; to: 1; duration: 10}
497+ NumberAnimation {targets: lightningfx; properties: "opacity"; from: 0; to: 1; duration: 10}
498+ NumberAnimation {targets: lightningGlow; properties: "opacity"; from: 0; to: 1; duration: 10}
499+ }
500+ ParallelAnimation {
501+ NumberAnimation {targets: lightningGlow; properties: "opacity"; from: 1; to: 0; duration: 1000}
502+ NumberAnimation {targets: lightningfx; properties: "opacity"; from: 1; to: 0; duration: 1000}
503+ NumberAnimation {targets: lightning; properties: "opacity"; to: 0; duration: 2000}
504+ }
505+ }
506+ }
507+ ParallelAnimation {
508+ id: anim_13
509+ running: false
510+ SequentialAnimation {
511+ loops: Animation.Infinite
512+
513+ PauseAnimation { duration: 1000 }
514+ ParallelAnimation{
515+ NumberAnimation {target: snowflake1; properties: "anchors.topMargin"; from:weatherCondition.height/1.5; to:weatherCondition.height; duration: 4000}
516+ NumberAnimation {target: snowflake1; properties: "anchors.leftMargin"; from:weatherCondition.width/6; to:weatherCondition.height/15; duration: 4000}
517+ NumberAnimation {target: snowflake1; easing.type: Easing.InQuint; properties: "opacity"; from: 1; to: 0; duration: 4000}
518+ }
519+ }
520+ SequentialAnimation {
521+ loops: Animation.Infinite
522+
523+ PauseAnimation { duration: 3000 }
524+ ParallelAnimation {
525+ NumberAnimation {target: snowflake2; properties: "anchors.topMargin"; from:weatherCondition.height/1.5; to:weatherCondition.height; duration: 4000}
526+ NumberAnimation {target: snowflake2; properties: "anchors.leftMargin"; from:weatherCondition.width/2; to:weatherCondition.width/2.5; duration: 4000}
527+ NumberAnimation {target: snowflake2; easing.type: Easing.InQuint; properties: "opacity"; from: 1; to: 0; duration: 4000}
528+ }
529+ }
530+ SequentialAnimation {
531+ loops: Animation.Infinite
532+
533+ PauseAnimation { duration: 2000 }
534+ ParallelAnimation {
535+ NumberAnimation {target: snowflake3; properties: "anchors.topMargin"; from:weatherCondition.height/1.5; to:weatherCondition.height; duration: 4000}
536+ NumberAnimation {target: snowflake3; properties: "anchors.leftMargin"; from:weatherCondition.width/1.2; to:weatherCondition.width/1.4; duration: 4000}
537+ NumberAnimation {target: snowflake3; easing.type: Easing.InQuint; properties: "opacity"; from: 1; to: 0; duration: 4000}
538+ }
539+ }
540+ }
541+ ParallelAnimation{
542+ id: anim_50
543+ running: false
544+ SequentialAnimation {
545+ loops: Animation.Infinite
546+ ParallelAnimation{
547+ SequentialAnimation {
548+ NumberAnimation { targets: fogBlur1; properties: "opacity"; from: 0; to: 1; duration: 1000 }
549+ PauseAnimation {duration: 13000}
550+ NumberAnimation { targets: fogBlur1; properties: "opacity"; from: 1; to: 0; duration: 1000 }
551+ }
552+ NumberAnimation {target: fogBlur1; property: "anchors.leftMargin"; from: weatherCondition.width/-3.6; to: weatherCondition.width/3.6; duration: 15000 }
553+ }
554+ PauseAnimation {duration: 2000}
555+ }
556+ SequentialAnimation {
557+ loops: Animation.Infinite
558+ PauseAnimation {duration: 3000}
559+ ParallelAnimation{
560+ SequentialAnimation {
561+ NumberAnimation { targets: fogBlur2; properties: "opacity"; from: 0; to: 0.8; duration: 1000 }
562+ PauseAnimation {duration: 8000}
563+ NumberAnimation { targets: fogBlur2; properties: "opacity"; from: 0.8; to: 0; duration: 1000 }
564+ }
565+ NumberAnimation { target: fogBlur2; property: "anchors.leftMargin"; from: weatherCondition.width/3.6; to: weatherCondition.height/-7.5; duration: 10000}
566+ }
567+ }
568+ }
569+
570+ // CONDITION TRANSITION ANIMATIONS
571+ ParallelAnimation {
572+ id: anim_sunIn
573+ NumberAnimation { targets: sun; properties: "opacity"; to: 1; duration: 1000 }
574+ ScriptAction {script:{sun.anchors.horizontalCenterOffset=0;sun.anchors.topMargin=0;__sun = true;anim_01.start();}}
575+ }
576+ ParallelAnimation {
577+ id: anim_moonIn
578+ NumberAnimation { targets: moon; properties: "opacity"; to: 1; duration: 1000 }
579+ ScriptAction {script:{moon.anchors.horizontalCenterOffset=0;moon.anchors.topMargin=0;__moon = true;}}
580+ }
581+ ParallelAnimation {
582+ id: anim_sunOut
583+ NumberAnimation { targets: sun; properties: "opacity"; to: 0; duration: 1000 }
584+ ScriptAction {script:{__sun = false;anim_01.stop();}}
585+ }
586+ ParallelAnimation {
587+ id: anim_moonOut
588+ NumberAnimation { targets: moon; properties: "opacity"; to: 0; duration: 1000 }
589+ ScriptAction {script:__moon = false;}
590+ }
591+ SequentialAnimation {
592+ id: anim_moon2sun
593+ ParallelAnimation {
594+ NumberAnimation { targets: moon; properties: "anchors.horizontalCenterOffset"; from: units.gu(0); to: weatherCondition.width/1.5; duration: 1000 }
595+ NumberAnimation { easing.type: Easing.InQuad; targets: moon; properties: "anchors.topMargin"; from: units.gu(0); to: weatherCondition.height/2.5; duration: 1000 }
596+ NumberAnimation { targets: moon; properties: "opacity"; from: 1; to: 0; duration: 1000 }
597+ }
598+ ParallelAnimation {
599+ NumberAnimation { targets: sun; properties: "anchors.horizontalCenterOffset"; from: weatherCondition.width/-1.5; to: units.gu(0); duration: 1000}
600+ NumberAnimation { easing.type: Easing.OutQuad; targets: sun; properties: "anchors.topMargin"; from: weatherCondition.height/2.5; to: units.gu(0); duration: 1000 }
601+ NumberAnimation { targets: sun; properties: "opacity"; from: 0; to: 1; duration: 1000 }
602+ }
603+ ScriptAction {script:{__sun=true; __moon=false;anim_01.start();}}
604+ }
605+ SequentialAnimation {
606+ id: anim_sun2moon
607+ ParallelAnimation {
608+ NumberAnimation { targets: sun; properties: "anchors.horizontalCenterOffset"; from: units.gu(0); to: weatherCondition.width/1.5; duration: 1000 }
609+ NumberAnimation { easing.type: Easing.InQuad; targets: sun; properties: "anchors.topMargin"; from: units.gu(0); to: weatherCondition.height/2.5; duration: 1000 }
610+ NumberAnimation { targets: sun; properties: "opacity"; from: 1; to: 0; duration: 1000 }
611+ }
612+ ParallelAnimation {
613+ NumberAnimation { targets: moon; properties: "anchors.horizontalCenterOffset"; from: weatherCondition.width/-1.5; to: units.gu(0); duration: 1000}
614+ NumberAnimation { easing.type: Easing.OutQuad; targets: moon; properties: "anchors.topMargin"; from: weatherCondition.height/2.5; to: units.gu(0); duration: 1000 }
615+ NumberAnimation { targets: moon; properties: "opacity"; from: 0; to: 1; duration: 1000 }
616+ }
617+ ScriptAction {script:{__sun=false; __moon=true;anim_01.stop();}}
618+ }
619+ ParallelAnimation {
620+ id: anim_fewCloudsIn
621+ SequentialAnimation{
622+ PauseAnimation {duration: 1000}
623+ ScriptAction {script:{
624+ anim_02.restart();
625+ }}
626+ }
627+ ScriptAction {script:__fewClouds = true;}
628+ }
629+ ParallelAnimation {
630+ id: anim_fewCloudsOut
631+ NumberAnimation { targets: cloud1; properties: "opacity"; to: 0; duration: 1000}
632+ NumberAnimation { targets: cloud2; properties: "opacity"; to: 0; duration: 1000}
633+ SequentialAnimation{
634+ PauseAnimation {duration: 1000}
635+ ScriptAction {script:{
636+ anim_02.stop();
637+ }}
638+ }
639+ ScriptAction {script:__fewClouds = false;}
640+ }
641+ ParallelAnimation {
642+ id: anim_scatCloudsIn
643+ NumberAnimation { targets: cloud1; properties: "anchors.leftMargin"; to: weatherCondition.width/6; duration: 1000 }
644+ NumberAnimation { target: cloud1; property: "anchors.topMargin"; to: weatherCondition.height/-15; duration: 1000 }
645+ NumberAnimation { targets: cloud1; properties: "opacity"; to: 1; duration: 1000 }
646+ NumberAnimation { targets: cloud2; properties: "anchors.leftMargin"; to: weatherCondition.width/-15; duration: 1000 }
647+ NumberAnimation { target: cloud2; property: "anchors.topMargin"; to: weatherCondition.height/7.5; duration: 1000 }
648+ NumberAnimation { targets: cloud2; properties: "opacity"; to: 1; duration: 1000 }
649+ ScriptAction {script:__scattered = true;}
650+ }
651+ ParallelAnimation {
652+ id: anim_scatCloudsOut
653+ NumberAnimation { targets: cloud1; properties: "anchors.leftMargin"; from: weatherCondition.width/6; to: weatherCondition.width/1.5; duration: 1000 }
654+ NumberAnimation { targets: cloud1; properties: "opacity"; to: 0; duration: 1000 }
655+ NumberAnimation { targets: cloud2; properties: "anchors.leftMargin"; from: weatherCondition.width/-15; to: weatherCondition.width/-1.5; duration: 1000 }
656+ NumberAnimation { targets: cloud2; properties: "opacity"; to: 0; duration: 1000 }
657+ ScriptAction {script:__scattered = false;}
658+ }
659+ ParallelAnimation {
660+ id: anim_brokenCloudsIn
661+ NumberAnimation { targets: cloud1; properties: "anchors.leftMargin"; to: weatherCondition.width/6; duration: 1000 }
662+ NumberAnimation { target: cloud1; property: "anchors.topMargin"; to: weatherCondition.height/-15; duration: 1000 }
663+ NumberAnimation { targets: cloud1; properties: "opacity"; to: 1; duration: 1000 }
664+ NumberAnimation { targets: cloud_dark1; properties: "anchors.leftMargin"; to: weatherCondition.height/-15; duration: 1000 }
665+ NumberAnimation { target: cloud_dark1; property: "anchors.topMargin"; to: weatherCondition.height/7.5; duration: 1000 }
666+ NumberAnimation { targets: cloud_dark1; properties: "opacity"; to: 1; duration: 1000 }
667+ ScriptAction {script:__broken = true;}
668+ }
669+ ParallelAnimation {
670+ id: anim_brokenCloudsOut
671+ NumberAnimation { targets: cloud1; properties: "anchors.leftMargin"; from: weatherCondition.width/6; to: weatherCondition.width/1.5; duration: 1000 }
672+ NumberAnimation { targets: cloud1; properties: "opacity"; to: 0; duration: 1000 }
673+ NumberAnimation { targets: cloud_dark1; properties: "anchors.leftMargin"; from: weatherCondition.height/-15; to: weatherCondition.width/-1.5; duration: 1000 }
674+ NumberAnimation { targets: cloud_dark1; properties: "opacity"; to: 0; duration: 1000 }
675+ ScriptAction {script:__broken = false;}
676+ }
677+ ParallelAnimation {
678+ id: anim_rainIn
679+ NumberAnimation { targets: rain1; properties: "opacity"; to: 1; duration: 1000 }
680+ NumberAnimation { targets: rain2; properties: "opacity"; to: 1; duration: 1000 }
681+ ScriptAction {script:__rain = true;}
682+ }
683+ ParallelAnimation {
684+ id: anim_rainOut
685+ NumberAnimation { targets: rain1; properties: "opacity"; to: 0; duration: 1000 }
686+ NumberAnimation { targets: rain2; properties: "opacity"; to: 0; duration: 1000 }
687+ ScriptAction {script:__rain = false;}
688+ }
689+ ParallelAnimation {
690+ id: anim_stormIn
691+ ScriptAction {script:{__storm = true; anim_11.restart();}}
692+ }
693+ ParallelAnimation {
694+ id: anim_stormOut
695+ NumberAnimation { targets: lightning; properties: "opacity"; to: 0; duration: 1 }
696+ NumberAnimation { targets: lightningfx; properties: "opacity"; to: 0; duration: 1 }
697+ NumberAnimation { targets: lightningGlow; properties: "opacity"; to: 0; duration: 1 }
698+ NumberAnimation { targets: cloud1Glow; properties: "opacity"; to: 0; duration: 1 }
699+ NumberAnimation { targets: cloud_dark1Glow; properties: "opacity"; to: 0; duration: 1 }
700+ ScriptAction {script:{__storm = false; anim_11.stop();}}
701+ }
702+ ParallelAnimation {
703+ id: anim_snowIn
704+ ScriptAction {script:{__snow = true; snowflake1_anim.start(); snowflake2_anim.start(); snowflake3_anim.start(); anim_13.restart();}}
705+ }
706+ ParallelAnimation {
707+ id: anim_snowOut
708+ NumberAnimation {targets: snowflake1; properties: "opacity"; to:0; duration: 1000}
709+ NumberAnimation {targets: snowflake2; properties: "opacity"; to:0; duration: 1000}
710+ NumberAnimation {targets: snowflake3; properties: "opacity"; to:0; duration: 1000}
711+ ScriptAction {script:{__snow = false; snowflake1_anim.stop(); snowflake2_anim.stop(); snowflake3_anim.stop(); anim_13.stop();}}
712+ }
713+ SequentialAnimation {
714+ id: anim_fogIn
715+
716+ PauseAnimation {duration: 1000}
717+ ScriptAction {script:{anim_50.restart(); script:__fog = true;}}
718+ }
719+ ParallelAnimation {
720+ id: anim_fogOut
721+ NumberAnimation { targets: fogBlur1; properties: "opacity"; to: 0; duration: 1000}
722+ NumberAnimation { targets: fogBlur2; properties: "opacity"; to: 0; duration: 1000}
723+ SequentialAnimation{
724+ PauseAnimation {duration: 1000}
725+ ScriptAction {script:{
726+ anim_50.stop();
727+ }}
728+ }
729+ ScriptAction {script:__fog = false;}
730+ }
731+
732+ states: [
733+ State {
734+ name: "01d"
735+ StateChangeScript {
736+ script: {
737+ if(__moon) anim_moon2sun.start(); else if(!__sun) anim_sunIn.start();
738+ if(__fewClouds) anim_fewCloudsOut.start();
739+ if(__rain) anim_rainOut.start();
740+ if(__storm) anim_stormOut.start();
741+ if(__snow) anim_snowOut.start();
742+ if(__broken) anim_brokenCloudsOut.start();
743+ if(__scattered) anim_scatCloudsOut.start();
744+ if(__fog) anim_fogOut.start();
745+ }
746+ }
747+ },
748+ State {
749+ name: "01n"
750+ StateChangeScript {
751+ script: {
752+ if(__sun) anim_sun2moon.start(); else if(!__moon) anim_moonIn.start();
753+ if(__fewClouds) anim_fewCloudsOut.start();
754+ if(__rain) anim_rainOut.start();
755+ if(__storm) anim_stormOut.start();
756+ if(__snow) anim_snowOut.start();
757+ if(__broken) anim_brokenCloudsOut.start();
758+ if(__scattered) anim_scatCloudsOut.start();
759+ if(__fog) anim_fogOut.start();
760+ }
761+ }
762+ },
763+ State {
764+ name: "02d"
765+ StateChangeScript {
766+ script: {
767+ if(__moon) anim_moon2sun.start(); else if(!__sun) anim_sunIn.start();
768+ if(__scattered) anim_scatCloudsOut.start();
769+ if(__rain) anim_rainOut.start();
770+ if(__storm) anim_stormOut.start();
771+ if(__snow) anim_snowOut.start();
772+ if(__broken) anim_brokenCloudsOut.start();
773+ if(__fog) anim_fogOut.start();
774+ if(!__fewClouds) anim_fewCloudsIn.start();
775+ }
776+ }
777+ },
778+ State {
779+ name: "02n"
780+ StateChangeScript {
781+ script: {
782+ if(__sun) anim_sun2moon.start(); else if(!__moon) anim_moonIn.start();
783+ if(__scattered) anim_scatCloudsOut.start();
784+ if(__rain) anim_rainOut.start();
785+ if(__storm) anim_stormOut.start();
786+ if(__snow) anim_snowOut.start();
787+ if(__broken) anim_brokenCloudsOut.start();
788+ if(__fog) anim_fogOut.start();
789+ if(!__fewClouds) anim_fewCloudsIn.start();
790+ }
791+ }
792+
793+ PropertyChanges {
794+ target: lightning
795+ opacity: 0
796+ }
797+ },
798+ State {
799+ name: "03d"
800+ StateChangeScript {
801+ script: {
802+ if(__moon) anim_moon2sun.start(); else if(!__sun) anim_sunIn.start();
803+ if(__fewClouds) anim_fewCloudsOut.start();
804+ if(__rain) anim_rainOut.start();
805+ if(__storm) anim_stormOut.start();
806+ if(__snow) anim_snowOut.start();
807+ if(__broken) anim_brokenCloudsOut.start();
808+ if(__fog) anim_fogOut.start();
809+ if(!__scattered) anim_scatCloudsIn.start();
810+ }
811+ }
812+ },
813+ State {
814+ name: "03n"
815+ StateChangeScript {
816+ script: {
817+ if(__sun) anim_sun2moon.start(); else if(!__moon) anim_moonIn.start();
818+ if(__fewClouds) anim_fewCloudsOut.start();
819+ if(__rain) anim_rainOut.start();
820+ if(__storm) anim_stormOut.start();
821+ if(__snow) anim_snowOut.start();
822+ if(__broken) anim_brokenCloudsOut.start();
823+ if(__fog) anim_fogOut.start();
824+ if(!__scattered) anim_scatCloudsIn.start();
825+ }
826+ }
827+ },
828+ State {
829+ name: "04d"
830+ StateChangeScript {
831+ script: {
832+ if(__moon) anim_moonOut.start();
833+ if(__sun) anim_sunOut.start();
834+ if(__fewClouds) anim_fewCloudsOut.start();
835+ if(__scattered) anim_scatCloudsOut.start();
836+ if(__rain) anim_rainOut.start();
837+ if(__storm) anim_stormOut.start();
838+ if(__snow) anim_snowOut.start();
839+ if(__fog) anim_fogOut.start();
840+ if(!__broken) anim_brokenCloudsIn.start();
841+ }
842+ }
843+ },
844+ State {
845+ name: "04n"
846+ StateChangeScript {
847+ script: {
848+ if(__moon) anim_moonOut.start();
849+ if(__sun) anim_sunOut.start();
850+ if(__fewClouds) anim_fewCloudsOut.start();
851+ if(__scattered) anim_scatCloudsOut.start();
852+ if(__rain) anim_rainOut.start();
853+ if(__storm) anim_stormOut.start();
854+ if(__snow) anim_snowOut.start();
855+ if(__fog) anim_fogOut.start();
856+ if(!__broken) anim_brokenCloudsIn.start();
857+ }
858+ }
859+ },
860+ State {
861+ name: "09d"
862+ StateChangeScript {
863+ script: {
864+ if(__moon) anim_moonOut.start();
865+ if(__sun) anim_sunOut.start();
866+ if(__fewClouds) anim_fewCloudsOut.start();
867+ if(__scattered) anim_scatCloudsOut.start();
868+ if(__storm) anim_stormOut.start();
869+ if(__snow) anim_snowOut.start();
870+ if(__fog) anim_fogOut.start();
871+ if(!__broken) anim_brokenCloudsIn.start();
872+ if(!__rain) anim_rainIn.start();
873+ }
874+ }
875+ },
876+ State {
877+ name: "09n"
878+ StateChangeScript {
879+ script: {
880+ if(__moon) anim_moonOut.start();
881+ if(__sun) anim_sunOut.start();
882+ if(__fewClouds) anim_fewCloudsOut.start();
883+ if(__scattered) anim_scatCloudsOut.start();
884+ if(__storm) anim_stormOut.start();
885+ if(__snow) anim_snowOut.start();
886+ if(__fog) anim_fogOut.start();
887+ if(!__broken) anim_brokenCloudsIn.start();
888+ if(!__rain) anim_rainIn.start();
889+ }
890+ }
891+ },
892+ State {
893+ name: "10d"
894+ StateChangeScript {
895+ script: {
896+ if(__moon) anim_moon2sun.start(); else if(!__sun) anim_sunIn.start();
897+ if(__fewClouds) anim_fewCloudsOut.start();
898+ if(__broken) anim_brokenCloudsOut.start();
899+ if(__storm) anim_stormOut.start();
900+ if(__snow) anim_snowOut.start();
901+ if(__fog) anim_fogOut.start();
902+ if(!__scattered) anim_scatCloudsIn.start();
903+ if(!__rain) anim_rainIn.start();
904+ }
905+ }
906+ },
907+ State {
908+ name: "10n"
909+ StateChangeScript {
910+ script: {
911+ if(__sun) anim_sun2moon.start(); else if(!__moon) anim_moonIn.start();
912+ if(__fewClouds) anim_fewCloudsOut.start();
913+ if(__broken) anim_brokenCloudsOut.start();
914+ if(__storm) anim_stormOut.start();
915+ if(__snow) anim_snowOut.start();
916+ if(__fog) anim_fogOut.start();
917+ if(!__scattered) anim_scatCloudsIn.start();
918+ if(!__rain) anim_rainIn.start();
919+ }
920+ }
921+ },
922+ State {
923+ name: "11d"
924+ StateChangeScript {
925+ script: {
926+ if(__moon) anim_moonOut.start();
927+ if(__sun) anim_sunOut.start();
928+ if(__fewClouds) anim_fewCloudsOut.start();
929+ if(__scattered) anim_scatCloudsOut.start();
930+ if(__rain) anim_rainOut.start();
931+ if(__snow) anim_snowOut.start();
932+ if(__fog) anim_fogOut.start();
933+ if(!__broken) anim_brokenCloudsIn.start();
934+ if(!__storm) anim_stormIn.start();
935+ }
936+ }
937+ },
938+ State {
939+ name: "11n"
940+ StateChangeScript {
941+ script: {
942+ if(__moon) anim_moonOut.start();
943+ if(__sun) anim_sunOut.start();
944+ if(__fewClouds) anim_fewCloudsOut.start();
945+ if(__scattered) anim_scatCloudsOut.start();
946+ if(__rain) anim_rainOut.start();
947+ if(__snow) anim_snowOut.start();
948+ if(__fog) anim_fogOut.start();
949+ if(!__broken) anim_brokenCloudsIn.start();
950+ if(!__storm) anim_stormIn.start();
951+ }
952+ }
953+ },
954+ State {
955+ name: "13d"
956+ StateChangeScript {
957+ script: {
958+ if(__moon) anim_moonOut.start();
959+ if(__sun) anim_sunOut.start();
960+ if(__fewClouds) anim_fewCloudsOut.start();
961+ if(__scattered) anim_scatCloudsOut.start();
962+ if(__rain) anim_rainOut.start();
963+ if(__storm) anim_stormOut.start();
964+ if(__fog) anim_fogOut.start();
965+ if(!__broken) anim_brokenCloudsIn.start();
966+ if(!__snow) anim_snowIn.start();
967+ }
968+ }
969+ },
970+ State {
971+ name: "13n"
972+ StateChangeScript {
973+ script: {
974+ if(__moon) anim_moonOut.start();
975+ if(__sun) anim_sunOut.start();
976+ if(__fewClouds) anim_fewCloudsOut.start();
977+ if(__scattered) anim_scatCloudsOut.start();
978+ if(__rain) anim_rainOut.start();
979+ if(__storm) anim_stormOut.start();
980+ if(__fog) anim_fogOut.start();
981+ if(!__broken) anim_brokenCloudsIn.start();
982+ if(!__snow) anim_snowIn.start();
983+ }
984+ }
985+ },
986+ State {
987+ name: "50d"
988+ StateChangeScript {
989+ script: {
990+ if(__moon) anim_moonOut.start();
991+ if(__sun) anim_sunOut.start();
992+ if(__fewClouds) anim_fewCloudsOut.start();
993+ if(__scattered) anim_scatCloudsOut.start();
994+ if(__rain) anim_rainOut.start();
995+ if(__storm) anim_stormOut.start();
996+ if(__broken) anim_brokenCloudsOut.start();
997+ if(__snow) anim_snowOut.start();
998+ if(!__fog) anim_fogIn.start();
999+ }
1000+ }
1001+ },
1002+ State {
1003+ name: "50n"
1004+ StateChangeScript {
1005+ script: {
1006+ if(__moon) anim_moonOut.start();
1007+ if(__sun) anim_sunOut.start();
1008+ if(__fewClouds) anim_fewCloudsOut.start();
1009+ if(__scattered) anim_scatCloudsOut.start();
1010+ if(__rain) anim_rainOut.start();
1011+ if(__storm) anim_stormOut.start();
1012+ if(__broken) anim_brokenCloudsOut.start();
1013+ if(__snow) anim_snowOut.start();
1014+ if(!__fog) anim_fogIn.start();
1015+ }
1016+ }
1017+ }
1018+ ]
1019+}
1020
1021=== added file 'resources/images/cloud.png'
1022Binary files resources/images/cloud.png 1970-01-01 00:00:00 +0000 and resources/images/cloud.png 2013-04-22 13:29:40 +0000 differ
1023=== added file 'resources/images/cloud_dark.png'
1024Binary files resources/images/cloud_dark.png 1970-01-01 00:00:00 +0000 and resources/images/cloud_dark.png 2013-04-22 13:29:40 +0000 differ
1025=== added file 'resources/images/cloud_darker.png'
1026Binary files resources/images/cloud_darker.png 1970-01-01 00:00:00 +0000 and resources/images/cloud_darker.png 2013-04-22 13:29:40 +0000 differ
1027=== added file 'resources/images/fog.png'
1028Binary files resources/images/fog.png 1970-01-01 00:00:00 +0000 and resources/images/fog.png 2013-04-22 13:29:40 +0000 differ
1029=== added file 'resources/images/lightning.png'
1030Binary files resources/images/lightning.png 1970-01-01 00:00:00 +0000 and resources/images/lightning.png 2013-04-22 13:29:40 +0000 differ
1031=== added file 'resources/images/moon.png'
1032Binary files resources/images/moon.png 1970-01-01 00:00:00 +0000 and resources/images/moon.png 2013-04-22 13:29:40 +0000 differ
1033=== added file 'resources/images/rain.png'
1034Binary files resources/images/rain.png 1970-01-01 00:00:00 +0000 and resources/images/rain.png 2013-04-22 13:29:40 +0000 differ
1035=== added file 'resources/images/snow.png'
1036Binary files resources/images/snow.png 1970-01-01 00:00:00 +0000 and resources/images/snow.png 2013-04-22 13:29:40 +0000 differ
1037=== added file 'resources/images/sun.png'
1038Binary files resources/images/sun.png 1970-01-01 00:00:00 +0000 and resources/images/sun.png 2013-04-22 13:29:40 +0000 differ

Subscribers

People subscribed via source and target branches