X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=qml%2Fmain.qml;h=127c36d7c90896ad512bf7da28bacb5a12c28956;hb=dd022796401b6eab6fc3d216ba0d45b4d812c5d8;hp=4c4df1f64a906737ebfe1049976cca162f763421;hpb=630af723f5fd69a35614d48769502081ed801b43;p=harmattan%2Fcameraplus diff --git a/qml/main.qml b/qml/main.qml index 4c4df1f..127c36d 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -28,24 +28,17 @@ import CameraPlus 1.0 import QtMobility.systeminfo 1.2 import QtMobility.location 1.2 -// TODO: resolutions and aspect ratios // TODO: postcapture -// TODO: battery low state -// TODO: disk space // TODO: flash not ready -// TODO: focus, caf, ... +// TODO: touch focus // TODO: portrait/landscape -// TODO: record video in a hidden directory and then copy the video to avoid tracker indexing it. // TODO: stop viewfinder in settings pages ? -// TODO: prevent going to mass storage while recording and capturing -// TODO: sounds // TODO: grid lines, face tracking, ambr -// TODO: complete settings pages -// TODO: stop camera properly when we get closed. // TODO: select primary/secondary camera. // TODO: disable debug builds. // TODO: a way to get buffers to the application // TODO: fcam like functionality (precise control over capture parameters). +// TODO: mute video sound PageStackWindow { id: root @@ -56,12 +49,8 @@ PageStackWindow { Component.onCompleted: { theme.inverted = true; - if (settings.mode == 0) { - openFile("ImagePage.qml"); - } - else { - openFile("VideoPage.qml"); - } + // TODO: hardcoding device id + root.resetCamera(0, settings.mode); } function showError(msg) { @@ -69,7 +58,16 @@ PageStackWindow { error.show(); } + function resetCamera(deviceId, mode) { + if (!cam.reset(deviceId, mode)) { + showError(qsTr("Failed to set camera device and mode. Please restart the application.")); + } + } + PositionSource { + // NOTE: The source will not reset the position when we lose the signal. + // This shouldn't be a big problem as we are course enough. + // If we ever need street level updates then this will be an issue. id: positionSource active: settings.useGps // TODO: we cannot bind to cam.running because camera will stop @@ -116,16 +114,9 @@ PageStackWindow { active: cam.running && settings.useGps && settings.useGeotags } - CameraResources { - id: resourcePolicy - onAcquiredChanged: { - if (resourcePolicy.acquired) { - // TODO: - } - else { - // TODO: We need a way to force a stop. - } - } + PipelineManager { + id: pipelineManager + camera: cam } DeviceInfo { @@ -150,6 +141,11 @@ PageStackWindow { videoSuffix: cam.videoSuffix } + MountProtector { + id: mountProtector + path: fileNaming.path + } + function replacePage(file) { pageStack.replace(Qt.resolvedUrl(file), {cam: cam}, true); } @@ -158,7 +154,12 @@ PageStackWindow { pageStack.push(Qt.resolvedUrl(file), {cam: cam}); } + function openFileNow(file) { + pageStack.push(Qt.resolvedUrl(file), {cam: cam}, true); + } + platformStyle: PageStackWindowStyle { + cornersVisible: false // TODO: Hack background: " " } @@ -166,6 +167,50 @@ PageStackWindow { ImageSettings { id: imageSettings camera: cam + function setImageResolution() { + if (!imageSettings.setResolution(settings.imageAspectRatio, settings.imageResolution)) { + showError(qsTr("Failed to set required resolution")); + } + } + + onReadyChanged: { + if (ready) { + imageSettings.setImageResolution(); + } + } + } + + VideoSettings { + id: videoSettings + camera: cam + + function setVideoResolution() { + if (!videoSettings.setResolution(settings.videoAspectRatio, settings.videoResolution)) { + showError(qsTr("Failed to set required resolution")); + } + } + + onReadyChanged: { + if (ready) { + videoSettings.setVideoResolution(); + } + } + } + + Connections { + target: settings + + onImageAspectRatioChanged: { + imageSettings.setImageResolution(); + } + + onImageResolutionChanged: { + imageSettings.setImageResolution(); + } + + onVideoResolutionChanged: { + videoSettings.setVideoResolution(); + } } Camera { @@ -184,10 +229,16 @@ PageStackWindow { console.log("Camera error (" + code + "): " + message + " " + debug); showError(qsTr("Camera error. Please restart the application.")); cam.stop(); + mountProtector.unlock(); } - // TODO: hardcoding device id - Component.onCompleted: { cam.deviceId = 0; mode = settings.mode; } + onRunningChanged: { + if (!cam.running) { + mountProtector.unlock(); + } + } + + Component.onDestruction: cam.stop(); // TODO: Hack z: -1 @@ -199,24 +250,117 @@ PageStackWindow { opacity: 0 color: "black" } + + notifications: Sounds { + id: sounds + mute: !settings.soundEnabled + } + } - Scene { - id: sceneController - camera: cam - value: ready ? camera.mode == Camera.VideoMode ? settings.videoSceneMode : settings.imageSceneMode : 0 + Binding { + target: cam.flash + property: "value" + when: cam.mode == Camera.ImageMode + value: settings.imageFlashMode } - ColorTone { - id: colorToneController - camera: cam - value: ready ? camera.mode == Camera.VideoMode ? settings.videoColorFilter : settings.imageColorFilter : 0 + Binding { + target: settings + property: "imageFlashMode" + when: cam.mode == Camera.ImageMode + value: cam.flash.value } - WhiteBalance { - id: whiteBalanceController - camera: cam - value: ready ? camera.mode == Camera.VideoMode ? settings.videoWhiteBalance : settings.imageWhiteBalance : 0 + Binding { + target: cam.scene + property: "value" + when: cam.mode == Camera.VideoMode + value: settings.videoSceneMode + } + + Binding { + target: cam.scene + property: "value" + when: cam.mode == Camera.ImageMode + value: settings.imageSceneMode + } + + Binding { + target: cam.evComp + property: "value" + when: cam.mode == Camera.ImageMode + value: settings.imageEvComp + } + + Binding { + target: cam.evComp + property: "value" + when: cam.mode == Camera.VideoMode + value: settings.videoEvComp + } + + Binding { + target: settings + property: "imageEvComp" + when: cam.mode == Camera.ImageMode + value: cam.evComp.value + } + + Binding { + target: settings + property: "videoEvComp" + when: cam.mode == Camera.VideoMode + value: cam.evComp.value + } + + Binding { + target: cam.whiteBalance + property: "value" + when: cam.mode == Camera.ImageMode + value: settings.imageWhiteBalance + } + + Binding { + target: cam.whiteBalance + property: "value" + when: cam.mode == Camera.VideoMode + value: settings.videoWhiteBalance + } + + Binding { + target: cam.colorTone + property: "value" + when: cam.mode == Camera.ImageMode + value: settings.imageColorFilter + } + + Binding { + target: cam.colorTone + property: "value" + when: cam.mode == Camera.VideoMode + value: settings.videoColorFilter + } + + Binding { + target: cam.iso + property: "value" + when: cam.mode == Camera.ImageMode + value: settings.imageIso + } + + Binding { + target: settings + property: "imageIso" + when: cam.mode == Camera.ImageMode + value: cam.iso.value + } + + TrackerStore { + id: trackerStore + active: cam.running + manufacturer: deviceInfo.manufacturer + model: deviceInfo.model } ModeController { @@ -225,12 +369,6 @@ PageStackWindow { dimmer: root.dimmer } - Iso { - id: iso - camera: cam - value: ready ? settings.imageIso : 0 - } - Connections { target: cam onModeChanged: {