X-Git-Url: http://cgit.sxemacs.org/?p=harmattan%2Fcameraplus;a=blobdiff_plain;f=qml%2FMainPage.qml;h=95cba6b0ab1acdd818a6cdee3d0ed8ffd2150bcc;hp=5598c0b1366487983b5f804a2223be9252e633dc;hb=40b50adeb5783a7d3085fae2909aeb937c179d38;hpb=669262fa107a2c43534a2e51a058fad2121143b2 diff --git a/qml/MainPage.qml b/qml/MainPage.qml index 5598c0b..95cba6b 100644 --- a/qml/MainPage.qml +++ b/qml/MainPage.qml @@ -25,12 +25,16 @@ import QtCamera 1.0 import CameraPlus 1.0 // TODO: flash not ready (battery low or flash not ready message) -// TODO: rotate post capture image -// TODO: front camera +// TODO: Sounds +// TODO: N950 conf CameraPage { id: root + property bool deviceChangeInProgress: false + property bool inCaptureMode: mainView.currentIndex == 1 + property Item dimmer: camDimmer + CameraTheme { id: cameraTheme } @@ -38,10 +42,19 @@ CameraPage { VisualItemModel { id: mainModel - SettingsView { - camera: viewfinder.camera + Loader { + id: settingsLoader width: mainView.width height: mainView.height + + property bool pressed: false + property bool inhibitDim: false + property int policyMode: settings.mode == Camera.VideoMode ? CameraResources.Video : CameraResources.Image + opacity: item ? 1.0 : 0 + + Behavior on opacity { + NumberAnimation {duration: 200} + } } CameraView { @@ -50,10 +63,19 @@ CameraPage { height: mainView.height } - PostCaptureView { - camera: viewfinder.camera + Loader { + id: postCaptureLoader + property bool pressed: item ? item.pressed : false + property bool inhibitDim: item ? item.inhibitDim : false + property int policyMode: item ? item.policyMode : settings.mode == Camera.VideoMode ? CameraResources.Video : CameraResources.Image + width: mainView.width height: mainView.height + opacity: item ? 1.0 : 0 + + Behavior on opacity { + NumberAnimation {duration: 200} + } } } @@ -68,12 +90,21 @@ CameraPage { boundsBehavior: Flickable.StopAtBounds currentIndex: 1 interactive: !currentItem.pressed + onContentXChanged: { + if (contentX == 0) { + settingsLoader.source = Qt.resolvedUrl("SettingsView.qml") + } else if (contentX == width) { + settingsLoader.source = "" + postCaptureLoader.source = "" + } else if (contentX == width * 2) { + postCaptureLoader.source = Qt.resolvedUrl("PostCaptureView.qml") + } + } } Component.onCompleted: { platformSettings.init() - // TODO: hardcoding device id - root.resetCamera(0, settings.mode) + root.resetCamera(settings.device, settings.mode) } PlatformSettings { @@ -82,6 +113,45 @@ CameraPage { Settings { id: settings + onDeviceAboutToChange: { + root.deviceChangeInProgress = true + } + + onDeviceChanged: { + viewfinder.cameraDeviceChanged() + + // Reset pipeline manager error + pipelineManager.error = false + + if (root.resetCamera(settings.device, settings.mode)) { + root.deviceChangeInProgress = false + pipelineManager.startCamera() + } + } + + onImageAspectRatioChanged: { + if (!root.deviceChangeInProgress) { + imageSettings.setImageResolution() + } + } + + onImageResolutionChanged: { + if (!root.deviceChangeInProgress) { + imageSettings.setImageResolution() + } + } + + onVideoResolutionChanged: { + if (!root.deviceChangeInProgress) { + videoSettings.setVideoResolution() + } + } + + onVideoAspectRatioChanged: { + if (!root.deviceChangeInProgress) { + videoSettings.setVideoResolution() + } + } } PipelineManager { @@ -93,7 +163,17 @@ CameraPage { function resetCamera(deviceId, mode) { if (!viewfinder.camera.reset(deviceId, mode)) { showError(qsTr("Failed to set camera device and mode. Please restart the application.")) + return false + } + + if (mode == Camera.ImageMode) { + imageSettings.setImageResolution() + } + else if (mode == Camera.VideoMode) { + videoSettings.setVideoResolution() } + + return true } function showError(msg) { @@ -101,13 +181,18 @@ CameraPage { error.show() } - property alias dimmer: camDimmer + PlatformQuirks { + id: platformQuirks + } + + DisplayState { + id: displayState + inhibitDim: mainView.currentItem != null ? mainView.currentItem.inhibitDim : false + } + CameraPositionSource { id: positionSource - active: settings.useGps - // TODO: we cannot bind to cam.running because camera will stop - // when the connection dialog pops up and we end up with an infinite loop - // active: cam.running && settings.useGps + active: (viewfinder.camera.running || platformQuirks.forceOn) && settings.useGps && displayState.isOn onPositionChanged: geocode.search(position.coordinate.longitude, position.coordinate.latitude) } @@ -146,7 +231,7 @@ CameraPage { ReverseGeocode { id: geocode - active: viewfinder.camera.running && settings.useGps && settings.useGeotags + active: (viewfinder.camera.running || platformQuirks.forceOn) && settings.useGps && settings.useGeotags && displayState.isOn } DeviceInfo { @@ -165,11 +250,14 @@ CameraPage { id: fileNaming imageSuffix: viewfinder.camera.imageSuffix videoSuffix: viewfinder.camera.videoSuffix + imagePath: platformSettings.imagePath + videoPath: platformSettings.videoPath + temporaryVideoPath: platformSettings.temporaryVideoPath + settings: settings } MountProtector { id: mountProtector - path: fileNaming.path } TrackerStore { @@ -179,10 +267,6 @@ CameraPage { model: deviceInfo.model } - function checkDiskSpace() { - return fileSystem.hasFreeSpace(fileNaming.path) - } - ImageSettings { id: imageSettings camera: viewfinder.camera @@ -192,12 +276,6 @@ CameraPage { showError(qsTr("Failed to set required resolution")) } } - - onReadyChanged: { - if (ready) { - imageSettings.setImageResolution() - } - } } VideoSettings { @@ -209,28 +287,6 @@ CameraPage { showError(qsTr("Failed to set required resolution")) } } - - onReadyChanged: { - if (ready) { - videoSettings.setVideoResolution() - } - } - } - - Connections { - target: settings - - onImageAspectRatioChanged: { - imageSettings.setImageResolution() - } - - onImageResolutionChanged: { - imageSettings.setImageResolution() - } - - onVideoResolutionChanged: { - videoSettings.setVideoResolution() - } } ModeController { @@ -253,13 +309,37 @@ CameraPage { DeviceKeys { id: keys - active: Qt.application.active && pipelineManager.scaleAcquired + active: Qt.application.active && pipelineManager.scaleAcquired && root.inCaptureMode && !mainView.moving repeat: !settings.zoomAsShutter } + Timer { + id: proximityTimer + running: proximitySensor.close + repeat: false + interval: 500 + onTriggered: { + if (proximitySensor.close) { + proximitySensor.sensorClosed = true + } + } + } + + CameraProximitySensor { + id: proximitySensor + property bool sensorClosed: false + + active: Qt.application.active && viewfinder.camera.running && settings.proximityAsShutter && root.inCaptureMode && !mainView.moving + onCloseChanged: { + if (!close) { + sensorClosed = false + } + } + } + Standby { policyLost: pipelineManager.state == "policyLost" show: !Qt.application.active || pipelineManager.showStandBy || - (mainView.currentIndex == 1 && !viewfinder.camera.running) + (inCaptureMode && !viewfinder.camera.running) } }