Start the camera only when our window is active and stop it when not active
[harmattan/cameraplus] / qml / main.qml
1 // -*- qml -*-
2 import QtQuick 1.1
3 import com.nokia.meego 1.1
4 import QtCamera 1.0
5 import CameraPlus 1.0
6
7 PageStackWindow {
8         id: root
9
10         property alias dimmer: camDimmer
11
12         showStatusBar: false
13
14         Component.onCompleted: {
15                 theme.inverted = true;
16                 if (settings.mode == 0) {
17                         openFile("ImagePage.qml");
18                 }
19                 else {
20                         openFile("VideoPage.qml");
21                 }
22         }
23
24         Settings {
25                 id: settings
26         }
27
28         // Stolen from https://qt.gitorious.org/qt-components/qt-components/blobs/master/examples/meego/QmlComponentGallery/qml/ListPage.qml
29         function replacePage(file) {
30                 var component = Qt.createComponent(file)
31
32                 if (component.status == Component.Ready) {
33                         pageStack.replace(component, {cam: cam}, true);
34                 }
35                 else {
36                         console.log("Error loading component:", component.errorString());
37                 }
38         }
39
40         function openFile(file) {
41                 var component = Qt.createComponent(file)
42
43                 if (component.status == Component.Ready) {
44                         pageStack.push(component, {cam: cam});
45                 }
46                 else {
47                         console.log("Error loading component:", component.errorString());
48                 }
49         }
50
51         platformStyle: PageStackWindowStyle {
52                 // TODO: Hack
53                 background: " "
54         }
55
56         Connections {
57                 target: platformWindow
58                 onActiveChanged: {
59                         if (platformWindow.active) {
60                                 cam.start();
61                         }
62                         else {
63                                 // TODO: only stop if idle.
64                                 cam.stop();
65                         }
66                 }
67         }
68
69         Camera {
70                 onDeviceIdChanged: {
71                         if (platformWindow.active) {
72                                 cam.start();
73                         }
74                 }
75
76                 id: cam
77                 anchors.fill: parent
78
79                 // TODO: hardcoding device id
80                 Component.onCompleted: { cam.deviceId = 0; mode = settings.mode; }
81
82                 // TODO: Hack
83                 z: -1
84
85                 Rectangle {
86                         id: camDimmer
87                         z: 1
88                         anchors.fill: parent
89                         opacity: 0
90                         color: "black"
91                 }
92         }
93
94         Scene {
95                 id: sceneController
96                 camera: cam
97                 value: ready ? camera.mode == Camera.VideoMode ? settings.videoSceneMode : settings.imageSceneMode : 0
98         }
99
100         ColorTone {
101                 id: colorToneController
102                 camera: cam
103                 value: ready ? camera.mode == Camera.VideoMode ? settings.videoColorFilter : settings.imageColorFilter : 0
104         }
105
106         WhiteBalance {
107                 id: whiteBalanceController
108                 camera: cam
109                 value: ready ? camera.mode == Camera.VideoMode ? settings.videoWhiteBalance : settings.imageWhiteBalance : 0
110         }
111
112         ModeController {
113                 id: cameraMode
114                 cam: cam
115                 dimmer: root.dimmer
116         }
117
118         Connections {
119                 target: cam
120                 onModeChanged: {
121                         if (cam.mode == Camera.VideoMode) {
122                                 replacePage("VideoPage.qml");
123                         }
124                         else {
125                                 replacePage("ImagePage.qml");
126                         }
127                 }
128         }
129 }