Reworked main.qml so we have a page
authorMohammed Sameer <msameer@foolab.org>
Sun, 28 Jul 2013 22:12:56 +0000 (01:12 +0300)
committerMohammed Sameer <msameer@foolab.org>
Wed, 31 Jul 2013 17:11:17 +0000 (20:11 +0300)
qml/MainPage.qml [new file with mode: 0644]
qml/harmattan/CameraPage.qml [new file with mode: 0644]
qml/harmattan/CameraWindow.qml
qml/harmattan/harmattan.qrc
qml/main.qml
qml/qml.qrc

diff --git a/qml/MainPage.qml b/qml/MainPage.qml
new file mode 100644 (file)
index 0000000..ee91177
--- /dev/null
@@ -0,0 +1,259 @@
+// -*- qml -*-
+
+/*!
+ * This file is part of CameraPlus.
+ *
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
+ *
+ * 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 (file)
index 0000000..9a4d638
--- /dev/null
@@ -0,0 +1,29 @@
+// -*- qml -*-
+
+/*!
+ * This file is part of CameraPlus.
+ *
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
+ *
+ * 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
+}
index b1e513d..b6ca0ac 100644 (file)
 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)
+        }
     }
 }
index 1113a3b..acfe87f 100644 (file)
@@ -16,5 +16,6 @@
        <file>CameraMenuAction.qml</file>
        <file>FullScreenThumbnail.qml</file>
        <file>CameraPositionSource.qml</file>
+       <file>CameraPage.qml</file>
     </qresource>
 </RCC>
index 9e89af6..d7c69e6 100644 (file)
  */
 
 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 {}
     }
 }
index 0c4f336..9645bef 100644 (file)
@@ -20,6 +20,7 @@
        <file>ImageWhiteBalanceButton.qml</file>
        <file>Indicator.qml</file>
         <file>main.qml</file>
+       <file>MainPage.qml</file>
        <file>ModeButton.qml</file>
        <file>ModeController.qml</file>
        <file>PipelineManager.qml</file>