From 8f62b689e69d2668de91ae0b45610a7e10f1355f Mon Sep 17 00:00:00 2001 From: Mohammed Sameer Date: Mon, 29 Jul 2013 01:12:56 +0300 Subject: [PATCH] Reworked main.qml so we have a page --- qml/MainPage.qml | 259 +++++++++++++++++++++++++++++++++ qml/harmattan/CameraPage.qml | 29 ++++ qml/harmattan/CameraWindow.qml | 14 +- qml/harmattan/harmattan.qrc | 1 + qml/main.qml | 234 +---------------------------- qml/qml.qrc | 1 + 6 files changed, 306 insertions(+), 232 deletions(-) create mode 100644 qml/MainPage.qml create mode 100644 qml/harmattan/CameraPage.qml diff --git a/qml/MainPage.qml b/qml/MainPage.qml new file mode 100644 index 0000000..ee91177 --- /dev/null +++ b/qml/MainPage.qml @@ -0,0 +1,259 @@ +// -*- qml -*- + +/*! + * This file is part of CameraPlus. + * + * Copyright (C) 2012-2013 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 2.0 +import QtCamera 1.0 +import CameraPlus 1.0 + +// TODO: flash not ready (battery low or flash not ready message) + +CameraPage { + id: root + + VisualItemModel { + id: mainModel + + SettingsView { + camera: viewfinder.camera + width: mainView.width + height: mainView.height + } + + CameraView { + id: viewfinder + width: mainView.width + height: mainView.height + } + + PostCaptureView { + camera: viewfinder.camera + width: mainView.width + height: mainView.height + } + } + + ListView { + id: mainView + LayoutMirroring.enabled: false + anchors.fill: parent + orientation: ListView.Horizontal + model: mainModel + snapMode: ListView.SnapOneItem + highlightRangeMode: ListView.StrictlyEnforceRange + boundsBehavior: Flickable.StopAtBounds + currentIndex: 1 + interactive: !currentItem.pressed + } + + Component.onCompleted: { + platformSettings.init() + // TODO: hardcoding device id + root.resetCamera(0, settings.mode) + } + + PlatformSettings { + id: platformSettings + } + + Settings { + id: settings + } + + PipelineManager { + id: pipelineManager + camera: viewfinder.camera + currentItem: mainView.currentItem + } + + function resetCamera(deviceId, mode) { + if (!viewfinder.camera.reset(deviceId, mode)) { + showError(qsTr("Failed to set camera device and mode. Please restart the application.")) + } + } + + function showError(msg) { + error.text = msg + error.show() + } + + property alias dimmer: camDimmer + 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 + onPositionChanged: geocode.search(position.coordinate.longitude, position.coordinate.latitude) + } + + MetaData { + id: metaData + camera: viewfinder.camera + manufacturer: deviceInfo.manufacturer + model: deviceInfo.model + country: geocode.country + city: geocode.city + suburb: geocode.suburb + longitude: positionSource.longitude + longitudeValid: positionSource.longitudeValid && settings.useGps + latitude: positionSource.latitude + latitudeValid: positionSource.latitudeValid && settings.useGps + elevation: positionSource.altitude + elevationValid: positionSource.altitudeValid && settings.useGps + orientation: orientation.orientation + artist: settings.creatorName + captureDirection: compass.direction + captureDirectionValid: compass.directionValid + horizontalError: positionSource.horizontalAccuracy + horizontalErrorValid: positionSource.horizontalAccuracyValid && settings.useGps + dateTimeEnabled: true + } + + Orientation { + id: orientation + active: viewfinder.camera.running || (mainView.currentIndex == 2 && Qt.application.active) + } + + Compass { + id: compass + active: viewfinder.camera.running + } + + ReverseGeocode { + id: geocode + active: viewfinder.camera.running && settings.useGps && settings.useGeotags + } + + DeviceInfo { + id: deviceInfo + } + + FSMonitor { + id: fileSystem + } + + CameraInfoBanner { + id: error + } + + FileNaming { + id: fileNaming + imageSuffix: viewfinder.camera.imageSuffix + videoSuffix: viewfinder.camera.videoSuffix + } + + MountProtector { + id: mountProtector + path: fileNaming.path + } + + TrackerStore { + id: trackerStore + active: viewfinder.camera.running + manufacturer: deviceInfo.manufacturer + model: deviceInfo.model + } + + function checkDiskSpace() { + return fileSystem.hasFreeSpace(fileNaming.path) + } + + ImageSettings { + id: imageSettings + camera: viewfinder.camera + + 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: viewfinder.camera + + 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() + } + } + + ModeController { + id: cameraMode + cam: viewfinder.camera + dimmer: root.dimmer + } + + Rectangle { + property bool dimmed: false + id: camDimmer + z: 1 + anchors.fill: parent + opacity: dimmed ? 1.0 : 0.0 + color: "black" + Behavior on opacity { + PropertyAnimation { duration: 150 } + } + } + + DeviceKeys { + id: keys + active: Qt.application.active && pipelineManager.scaleAcquired + repeat: !settings.zoomAsShutter + } + + Standby { + policyLost: pipelineManager.state == "policyLost" + show: !Qt.application.active || pipelineManager.showStandBy || + (mainView.currentIndex == 1 && !viewfinder.camera.running) + } +} diff --git a/qml/harmattan/CameraPage.qml b/qml/harmattan/CameraPage.qml new file mode 100644 index 0000000..9a4d638 --- /dev/null +++ b/qml/harmattan/CameraPage.qml @@ -0,0 +1,29 @@ +// -*- qml -*- + +/*! + * This file is part of CameraPlus. + * + * Copyright (C) 2012-2013 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 + +Page { + anchors.fill: parent + orientationLock: PageOrientation.LockLandscape +} diff --git a/qml/harmattan/CameraWindow.qml b/qml/harmattan/CameraWindow.qml index b1e513d..b6ca0ac 100644 --- a/qml/harmattan/CameraWindow.qml +++ b/qml/harmattan/CameraWindow.qml @@ -23,9 +23,21 @@ import QtQuick 1.1 import com.nokia.meego 1.1 +// PageStackWindow has the ugly toolbar which is always visible +// upon startup no matter what I do. + Window { + property variant initialPage + + PageStack { + id: stack + } + Component.onCompleted: { - screen.setAllowedOrientations(Screen.Landscape) theme.inverted = true + + if (initialPage) { + stack.push(initialPage) + } } } diff --git a/qml/harmattan/harmattan.qrc b/qml/harmattan/harmattan.qrc index 1113a3b..acfe87f 100644 --- a/qml/harmattan/harmattan.qrc +++ b/qml/harmattan/harmattan.qrc @@ -16,5 +16,6 @@ CameraMenuAction.qml FullScreenThumbnail.qml CameraPositionSource.qml + CameraPage.qml diff --git a/qml/main.qml b/qml/main.qml index 9e89af6..d7c69e6 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -21,239 +21,11 @@ */ import QtQuick 2.0 -import QtCamera 1.0 -import CameraPlus 1.0 - -// TODO: flash not ready (battery low or flash not ready message) CameraWindow { - id: root - - VisualItemModel { - id: mainModel - - SettingsView { - camera: viewfinder.camera - width: mainView.width - height: mainView.height - } - - CameraView { - id: viewfinder - width: mainView.width - height: mainView.height - } - - PostCaptureView { - camera: viewfinder.camera - width: mainView.width - height: mainView.height - } - } - - ListView { - id: mainView - LayoutMirroring.enabled: false - anchors.fill: parent - orientation: ListView.Horizontal - model: mainModel - snapMode: ListView.SnapOneItem - highlightRangeMode: ListView.StrictlyEnforceRange - boundsBehavior: Flickable.StopAtBounds - currentIndex: 1 - interactive: !currentItem.pressed - } - - Component.onCompleted: { - platformSettings.init() - // TODO: hardcoding device id - root.resetCamera(0, settings.mode) - } - - PlatformSettings { - id: platformSettings - } - - Settings { - id: settings - } - - PipelineManager { - id: pipelineManager - camera: viewfinder.camera - currentItem: mainView.currentItem - } - - function resetCamera(deviceId, mode) { - if (!viewfinder.camera.reset(deviceId, mode)) { - showError(qsTr("Failed to set camera device and mode. Please restart the application.")) - } - } - - function showError(msg) { - error.text = msg - error.show() - } - - property alias dimmer: camDimmer - 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 - onPositionChanged: geocode.search(position.coordinate.longitude, position.coordinate.latitude) - } - - MetaData { - id: metaData - camera: viewfinder.camera - manufacturer: deviceInfo.manufacturer - model: deviceInfo.model - country: geocode.country - city: geocode.city - suburb: geocode.suburb - longitude: positionSource.longitude - longitudeValid: positionSource.longitudeValid && settings.useGps - latitude: positionSource.latitude - latitudeValid: positionSource.latitudeValid && settings.useGps - elevation: positionSource.altitude - elevationValid: positionSource.altitudeValid && settings.useGps - orientation: orientation.orientation - artist: settings.creatorName - captureDirection: compass.direction - captureDirectionValid: compass.directionValid - horizontalError: positionSource.horizontalAccuracy - horizontalErrorValid: positionSource.horizontalAccuracyValid && settings.useGps - dateTimeEnabled: true - } - - Orientation { - id: orientation - active: viewfinder.camera.running || (mainView.currentIndex == 2 && Qt.application.active) - } - - Compass { - id: compass - active: viewfinder.camera.running - } - - ReverseGeocode { - id: geocode - active: viewfinder.camera.running && settings.useGps && settings.useGeotags - } - - DeviceInfo { - id: deviceInfo - } - - FSMonitor { - id: fileSystem - } - - CameraInfoBanner { - id: error - } - - FileNaming { - id: fileNaming - imageSuffix: viewfinder.camera.imageSuffix - videoSuffix: viewfinder.camera.videoSuffix - } - - MountProtector { - id: mountProtector - path: fileNaming.path - } - - TrackerStore { - id: trackerStore - active: viewfinder.camera.running - manufacturer: deviceInfo.manufacturer - model: deviceInfo.model - } - - function checkDiskSpace() { - return fileSystem.hasFreeSpace(fileNaming.path) - } - - ImageSettings { - id: imageSettings - camera: viewfinder.camera - - 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: viewfinder.camera - - 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() - } - } - - ModeController { - id: cameraMode - cam: viewfinder.camera - dimmer: root.dimmer - } - - Rectangle { - property bool dimmed: false - id: camDimmer - z: 1 - anchors.fill: parent - opacity: dimmed ? 1.0 : 0.0 - color: "black" - Behavior on opacity { - PropertyAnimation { duration: 150 } - } - } - - DeviceKeys { - id: keys - active: Qt.application.active && pipelineManager.scaleAcquired - repeat: !settings.zoomAsShutter - } + id: rootWindow - Standby { - policyLost: pipelineManager.state == "policyLost" - show: !Qt.application.active || pipelineManager.showStandBy || - (mainView.currentIndex == 1 && !viewfinder.camera.running) + initialPage: Component { + MainPage {} } } diff --git a/qml/qml.qrc b/qml/qml.qrc index 0c4f336..9645bef 100644 --- a/qml/qml.qrc +++ b/qml/qml.qrc @@ -20,6 +20,7 @@ ImageWhiteBalanceButton.qml Indicator.qml main.qml + MainPage.qml ModeButton.qml ModeController.qml PipelineManager.qml -- 2.25.1