+ for (var i = 0; i < snowCount; i++) {
+ snow[i].showMaximized();
+ }
+ snowFalling.running = true;
+ }
+
+ /* End snow flake and start a 'random' new one */
+ function endSnowFlake(i) {
+
+ snow[i].close();
+ snow[i].destroy();
+
+ var component = Qt.createComponent("snowWindow.qml");
+ snow[i] = component.createObject(root);
+
+ snow[i].x = Math.random() * screenWidth;
+ snow[i].y = -10;
+ snow[i].width = (Math.random() * 100) % snow[i].radius;
+ snow[i].height = snow[i].width;
+
+ snow[i].showMaximized();
+
+ }
+
+ function destroySnow() {
+
+ if (!snowFalling.running)
+ return;
+
+ snowFalling.running = false;
+
+ for (var i = 0; i < snowCount; i++) {
+ snow[i].close();
+ snow[i].destroy();
+ }
+ }
+
+ function updateSnow() {
+
+ if (userSpeed.currentText == '') { // hack
+ console.log('not initialized yet');
+ return;
+ }
+
+ /* set config for new snow flakes */
+ plasmoid.configuration.userStyle = userStyle.textAt(userStyle.currentIndex);
+ plasmoid.configuration.userSize = userSize.textAt(userSize.currentIndex);
+ plasmoid.configuration.userSpeed = userSpeed.textAt(userSpeed.currentIndex);
+
+ if (!snowFalling.running || plasmoid.configuration.userSpeed == userSpeed.currentText) // don't update random speed if same
+ return;
+
+ /* update current snow flakes*/
+ for (var i = 0; i < snowCount; i++) {
+ snow[i].fallingSpeed = Utils.getFallingSpeed(userSpeed.currentText);
+ }
+ }
+
+ /* Update snow count works a bit differently;
+ * can either kill all (implemented now) and start over;
+ * or slowly add/delete new snow flakes */
+ function updateCount() {
+
+ var alreadyRunning = snowFalling.running;
+
+ destroySnow();
+ plasmoid.configuration.userCount = userCount.textAt(userCount.currentIndex);
+ initializeSnow();
+
+ if (alreadyRunning)
+ startSnow();
+
+ }
+
+ GridLayout {
+ id: gridLayout
+ rows: 5
+ flow: GridLayout.TopToBottom
+ anchors.fill: parent
+
+ Label { text: "Speed"; color: theme.textColor; }
+ Label { text: "Size"; color: theme.textColor; }
+ Label { text: "Style"; color: theme.textColor; }
+ Label { text: "Count"; color: theme.textColor; }
+ Button { id: letitsnow; text: "Let it snow!"; onClicked: { initializeSnow(); startSnow(); } }
+
+ ComboBox { id: userSpeed; width: 100; model: ["Slow", "Normal", "Fast"]; currentIndex: 1; onCurrentIndexChanged: updateSnow(); }
+ ComboBox { id: userSize; width: 100; model: ["Tiny", "Small", "Big"]; currentIndex: 2; onCurrentIndexChanged: updateSnow(); }
+ ComboBox { id: userStyle; width: 100; model: ["Classic", "Plain", "Romantic"]; currentIndex: 0; onCurrentIndexChanged: updateSnow(); }
+ ComboBox { id: userCount; width: 100; model: ["Few", "Medium", "Many"]; currentIndex: 1; onCurrentIndexChanged: updateCount(); }