X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=qml%2FImagePage.qml;h=792d2c1dfb70a7ad205b3f6d77ea53bfafb61a7e;hb=03542be162bf35a9f72f6f3d513ddd9118ca0bc9;hp=b6cdba2b1393bd9abb118e7a7a5ecb3daa1d9b4a;hpb=f35981c42be67bd2f591fe61d0d2d7a427f7dbe6;p=harmattan%2Fcameraplus diff --git a/qml/ImagePage.qml b/qml/ImagePage.qml index b6cdba2..792d2c1 100644 --- a/qml/ImagePage.qml +++ b/qml/ImagePage.qml @@ -1,14 +1,72 @@ // -*- qml -*- + +/*! + * This file is part of CameraPlus. + * + * Copyright (C) 2012 Mohammed Sameer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + import QtQuick 1.1 import com.nokia.meego 1.1 import QtCamera 1.0 +import CameraPlus 1.0 +import "data.js" as Data CameraPage { id: page - controlsVisible: capture.visible && cam.running && !standbyWidget.visible + policyMode: CameraResources.Image + controlsVisible: capture.visible - Button { + orientationLock: PageOrientation.LockLandscape + + function captureImage() { + if (!checkBattery()) { + showError(qsTr("Not enough battery to capture images.")); + return; + } + + if (!checkDiskSpace()) { + showError(qsTr("Not enough space to capture images.")); + return; + } + + if (!fileSystem.available) { + showError(qsTr("Camera cannot capture images in mass storage mode.")); + return; + } + + if (!mountProtector.lock()) { + showError(qsTr("Failed to lock images directory.")); + return; + } + + metaData.setMetaData(); + + var fileName = fileNaming.imageFileName(); + if (!imageMode.capture(fileName)) { + showError(qsTr("Failed to capture image. Please restart the camera.")); + return; + } + + trackerStore.storeImage(fileName); + } + + CaptureButton { id: capture anchors.right: parent.right anchors.rightMargin: 20 @@ -17,15 +75,37 @@ CameraPage { width: 75 height: 75 opacity: 0.5 - // TODO: Show an error if file is empty or starting fails. - onClicked: imageMode.capture(fileNaming.imageFileName()); - visible: imageMode.canCapture && !cameraMode.animationRunning && !previewAnimationRunning + onClicked: captureImage(); + visible: imageMode.canCapture && !cameraMode.animationRunning && !previewAnimationRunning && cam.running + + onExited: { + if (mouseX <= 0 || mouseY <= 0 || mouseX > width || mouseY > height) { + // Release outside the button: + cam.autoFocus.stopAutoFocus(); + } + } + + Timer { + interval: 200 + running: capture.pressed + repeat: false + onTriggered: { + if (cam.autoFocus.cafStatus != AutoFocus.Success) { + cam.autoFocus.startAutoFocus(); + } + } + } } ImageMode { id: imageMode camera: cam - onPreviewAvailable: page.setPreview(preview); + onPreviewAvailable: { + page.setPreview(preview); + cam.autoFocus.stopAutoFocus(); + } + + onSaved: mountProtector.unlock(); } FlashButton { @@ -46,7 +126,7 @@ CameraPage { anchors.leftMargin: 20 } - EvCompButton { + ImageEvCompButton { id: evComp visible: controlsVisible anchors.top: scene.bottom @@ -55,19 +135,82 @@ CameraPage { anchors.leftMargin: 20 } - Indicators { - visible: controlsVisible + MouseArea { + id: indicators anchors.bottom: parent.bottom anchors.bottomMargin: 20 anchors.left: parent.left anchors.leftMargin: 20 - + width: 48 + height: col.height onClicked: openFile("ImageSettingsPage.qml"); -// Image { -/// -// } + visible: controlsVisible + + BorderImage { + id: image + anchors.fill: parent + smooth: true + source: indicators.pressed ? "image://theme/meegotouch-camera-settings-indicators-background-pressed" : "image://theme/meegotouch-camera-settings-indicators-background" + } + + Column { + id: col + width: parent.width + spacing: 5 + + Indicator { + id: resolutionIndicator + source: "image://theme/" + Data.imageIcon(settings.imageAspectRatio, settings.imageResolution); + } + + Indicator { + id: wbIndicator + source: visible ? "image://theme/" + Data.wbIcon(settings.imageWhiteBalance) + "-screen" : "" + visible: settings.imageWhiteBalance != WhiteBalance.Auto + } + + Indicator { + id: cfIndicator + source: "image://theme/" + Data.cfIcon(settings.imageColorFilter) + "-screen" + visible: settings.imageColorFilter != ColorTone.Normal + } + + Indicator { + id: isoIndicator + visible: settings.imageIso != 0 + source: "image://theme/" + Data.isoIcon(settings.imageIso); + } + + Indicator { + id: gpsIndicator + visible: settings.useGps + source: "image://theme/icon-m-camera-location" + + PropertyAnimation on opacity { + easing.type: Easing.OutSine + loops: Animation.Infinite + from: 0.2 + to: 1.0 + duration: 1000 + running: settings.useGps && !positionSource.position.longitudeValid + alwaysRunToEnd: true + } + } + } } - // TODO: filenaming. - // TODO: metadata + Button { + id: cameraRoll + anchors.top: parent.top + anchors.right: parent.right + anchors.topMargin: 20 + anchors.rightMargin: 20 + width: 56 + height: 56 + + opacity: 0.5 + iconSource: "image://theme/icon-m-camera-roll" + onClicked: openFile("PostCapturePage.qml"); + visible: controlsVisible + } }